diff --git a/.gitignore b/.gitignore
index e4f6e92..eeacdc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,12 +40,14 @@
 .classpath
 .code-coverage
 .cproject
+.dir-locals.el
 .emulator_sdk
 .gdb_history
 .gdbinit
 .landmines
 .metadata
 .project
+.projectile
 .pydevproject
 .checkstyle
 *.class
@@ -57,6 +59,7 @@
 GTAGS
 Session.vim
 tags
+TAGS
 Thumbs.db
 rust-project.json
 v8.log
diff --git a/DEPS b/DEPS
index e175d55e7..33dd5be 100644
--- a/DEPS
+++ b/DEPS
@@ -257,7 +257,7 @@
   # 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': '36ad4da7f1d34eb00996f19f474991c5fabc33a5',
+  'v8_revision': 'd57838b3298a4da7131359e3517611106616d046',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
@@ -320,7 +320,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '8ae2137a477fd1666f2715369dc681da422f9779',
+  'catapult_revision': '3fd6a13ce322d7fb4c110cae77809504edda45d1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -328,7 +328,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': '32461347cb02a752bdbb34608467e5cd42f91694',
+  'devtools_frontend_revision': '10b95e4ebfba0c589b3b0eac12f869ee99cbe5bd',
   # 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.
@@ -364,7 +364,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '6444b9e541c3364eddcfa018cc6abbd44a9bfc85',
+  'dawn_revision': '9d76aa7424b66599f7c9b4fdea74b8732217c0bf',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -408,7 +408,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'libcxxabi_revision':    '159209abf2dd7e5be3d3dbd449f23a3f2ce24d45',
+  'libcxxabi_revision':    '019fb1b3892ed070ad13948e65b8bca771348014',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -720,7 +720,7 @@
     Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248',
 
   'src/docs/website': {
-    'url': Var('chromium_git') + '/website.git' + '@' + '842df861899d1a5df1bbb9a13d58a8d22144894f',
+    'url': Var('chromium_git') + '/website.git' + '@' + '811ce357d3deb1a24478675890891cabfc2094f2',
   },
 
   'src/ios/third_party/earl_grey2/src': {
@@ -1027,17 +1027,6 @@
       'condition': 'checkout_src_internal and checkout_chromeos',
   },
 
-  'src/third_party/cast_core/prebuilts': {
-      'packages': [
-          {
-              'package': 'cast3p/cast_core/package_qa_vizio_castos_armv7a.tar',
-              'version': 'ZOzcgmEj32ltQEYvSSBfLbwcEo4MA_qtruinWrbbpGAC',
-          },
-      ],
-      'condition': 'checkout_cast3p',
-      'dep_type': 'cipd',
-  },
-
   'src/third_party/google_benchmark/src': {
     'url': Var('chromium_git') + '/external/github.com/google/benchmark.git' + '@' + 'f730846b0a3c0dc0699978846fb14ffb2fad0bdc',
     'condition': 'checkout_google_benchmark',
@@ -1112,7 +1101,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8930841ac0a2f6f030f00ad6a69d53a620d5e0f9',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '37b7ca43eec97bba89a001b6333e4ed9b028af18',
       'condition': 'checkout_chromeos',
   },
 
@@ -1272,7 +1261,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '493fb324ba81643b49bed81b31b73e4150b019e5',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '5fb433856026252b163ddb12c95553a5059ad16b',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -1343,7 +1332,7 @@
     Var('chromium_git') + '/external/libaddressinput.git' + '@' + '3b8ee157a8f3536bbf5ad2448e9e3370463c1e40',
 
   'src/third_party/libaom/source/libaom':
-    Var('aomedia_git') + '/aom.git' + '@' +  '46e8b1da9e10663ef1bb9868ee20fd24cb175448',
+    Var('aomedia_git') + '/aom.git' + '@' +  'cc31d8c4b722cf7ecd68ac351bf3d288de07bc68',
 
   'src/third_party/libavif/src':
     Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'),
@@ -1593,7 +1582,7 @@
       'packages': [
           {
               'package': 'fuchsia/third_party/android/aemu/release/linux-amd64',
-              'version': 'Ll1K_vgpqMalp4Cpe2QyiKtTn_QVfKMNpuLLAitRCyQC'
+              'version': 'P9lyw6xTz2mOkVuDPr-S8-zDzkYxMqUi5O9mSeG7mGYC'
           },
       ],
       'condition': 'host_os == "linux" and checkout_fuchsia',
@@ -1697,7 +1686,7 @@
   'src/third_party/usrsctp/usrsctplib':
     Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '62d7d0c928c9a040dce96aa2f16c00e7e67d59cb',
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@e37ba68c0fde1c26f6ea1fa5463b0919614f6c61',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@75a3ce4ed0bd1f361227bae7f34fbd4fb03367b5',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907',
@@ -1710,7 +1699,7 @@
 
   # Wayland protocols that add functionality not available in the core protocol.
   'src/third_party/wayland-protocols/src': {
-      'url': Var('chromium_git') + '/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git' + '@' + '177ff9119da526462e5d35fbfde6c84794913787',
+      'url': Var('chromium_git') + '/external/anongit.freedesktop.org/git/wayland/wayland-protocols.git' + '@' + '5dfc8b9c89d75990267b6b2be0cf408e90114542',
       'condition': 'checkout_linux',
   },
 
@@ -1736,7 +1725,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '7afd2efc27572eda0e9b3a8c0831b47f5e6c3353',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '34554815540ebb8d1f296124ceb42aed6e11bc74',
+    Var('webrtc_git') + '/src.git' + '@' + '4163d35ecb0b6b237f6235bf42025ef4162b10b1',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1847,7 +1836,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'sww7HyJK70C5VInUrmSu6Mjau60oQwbQE0vFG_nm6pEC',
+        'version': 'Mu_NVIdKabRHqlb8kSri4PHICAnF4EKTzmWKNHVvQQgC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -4603,13 +4592,13 @@
     ],
   },
 
-  # Download Cast Web Runtime
+  # Download Cast3p Binaries
   {
-    'name': 'cast_web_runtime',
+    'name': 'cast3p_binaries',
     'pattern': '.',
     'action': [
       'python3',
-      'src/tools/cast3p/update_runtime.py',
+      'src/tools/cast3p/update_binaries.py',
     ],
     'condition': 'checkout_cast3p',
   },
diff --git a/android_webview/browser/BUILD.gn b/android_webview/browser/BUILD.gn
index 02478c4a..443afea 100644
--- a/android_webview/browser/BUILD.gn
+++ b/android_webview/browser/BUILD.gn
@@ -9,6 +9,7 @@
 java_cpp_enum("browser_enums") {
   sources = [
     "aw_apk_type.h",
+    "aw_contents_io_thread_client.cc",
     "aw_renderer_priority.h",
     "aw_settings.h",
     "permission/aw_permission_request.h",
diff --git a/android_webview/browser/aw_contents_io_thread_client.cc b/android_webview/browser/aw_contents_io_thread_client.cc
index c4f9f6c..b458f9c 100644
--- a/android_webview/browser/aw_contents_io_thread_client.cc
+++ b/android_webview/browser/aw_contents_io_thread_client.cc
@@ -316,6 +316,7 @@
 // using shouldIntercepterRequest callback.
 // Note: these values are persisted in UMA logs, so they should never be
 // renumbered or reused.
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.android_webview
 enum class InterceptionType {
   kNoIntercept,
   kOther,
@@ -345,7 +346,7 @@
     }
   }
   UMA_HISTOGRAM_ENUMERATION(
-      "Android.WebView.ShouldInterceptRequest.InterceptionType", type);
+      "Android.WebView.ShouldInterceptRequest.InterceptionType2", type);
 }
 
 std::unique_ptr<AwWebResourceInterceptResponse> NoInterceptRequest() {
@@ -369,19 +370,21 @@
 
   devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback(
       "shouldInterceptRequest");
-  ScopedJavaLocalRef<jobject> ret =
+  ScopedJavaLocalRef<jobject> java_ref =
       Java_AwContentsBackgroundThreadClient_shouldInterceptRequestFromNative(
           env, obj, java_web_resource_request.jurl, request.is_main_frame,
           request.has_user_gesture, java_web_resource_request.jmethod,
           java_web_resource_request.jheader_names,
           java_web_resource_request.jheader_values);
 
-  RecordInterceptedScheme(!ret, request.url);
+  DCHECK(java_ref)
+      << "shouldInterceptRequestFromNative() should return non-null value";
+  auto web_resource_intercept_response =
+      std::make_unique<AwWebResourceInterceptResponse>(java_ref);
 
-  if (!ret)
-    return NoInterceptRequest();
-
-  return std::make_unique<AwWebResourceInterceptResponse>(ret);
+  bool has_response = web_resource_intercept_response->HasResponse(env);
+  RecordInterceptedScheme(!has_response, request.url);
+  return web_resource_intercept_response;
 }
 
 }  // namespace
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java
index 8698603e0..46e9caf 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java
@@ -4,6 +4,8 @@
 
 package org.chromium.android_webview;
 
+import androidx.annotation.NonNull;
+
 import org.chromium.base.Log;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
@@ -22,6 +24,7 @@
 
     // Protected methods ---------------------------------------------------------------------------
 
+    @NonNull
     @CalledByNative
     private AwWebResourceInterceptResponse shouldInterceptRequestFromNative(String url,
             boolean isMainFrame, boolean hasUserGesture, String method, String[] requestHeaderNames,
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldInterceptRequestTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldInterceptRequestTest.java
index 03e5842..3bf308bcc 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldInterceptRequestTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldInterceptRequestTest.java
@@ -22,10 +22,12 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.android_webview.AwContents;
+import org.chromium.android_webview.InterceptionType;
 import org.chromium.android_webview.test.TestAwContentsClient.OnReceivedErrorHelper;
 import org.chromium.android_webview.test.util.AwTestTouchUtils;
 import org.chromium.android_webview.test.util.CommonResources;
 import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.TestFileUtil;
@@ -120,6 +122,10 @@
         mContentsClient.getOnPageFinishedHelper().waitForCallback(onPageFinishedCallCount);
         Assert.assertEquals(
                 CommonResources.ABOUT_TITLE, mActivityTestRule.getTitleOnUiThread(mAwContents));
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.NO_INTERCEPT));
     }
 
     @Test
@@ -270,6 +276,10 @@
         int callCount = mShouldInterceptRequestHelper.getCallCount();
         mActivityTestRule.loadUrlAsync(mAwContents, aboutPageUrl);
         mShouldInterceptRequestHelper.waitForCallback(callCount);
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.HTTP));
     }
 
     @Test
@@ -748,6 +758,9 @@
         // renderer should be delivered in order waiting for onPageFinished is sufficient to
         // 'flush' any pending interception messages.
         Assert.assertEquals(callCount, mShouldInterceptRequestHelper.getCallCount());
+        Assert.assertEquals(0,
+                RecordHistogram.getHistogramTotalCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2"));
     }
 
     @Test
@@ -760,8 +773,25 @@
     @Test
     @SmallTest
     @Feature({"AndroidWebView"})
-    public void testCalledForNonexistentFiles() throws Throwable {
+    public void testFileUrls_notIntercepted() throws Throwable {
         calledForUrlTemplate("file:///somewhere/something");
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.NO_INTERCEPT));
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"AndroidWebView"})
+    public void testFileUrls_intercepted() throws Throwable {
+        mShouldInterceptRequestHelper.setReturnValue(
+                stringToWebResourceResponseInfo("<html>Hello world</html>"));
+        calledForUrlTemplate("file:///somewhere/something");
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.FILE));
     }
 
     @Test
@@ -986,13 +1016,35 @@
     @Test
     @SmallTest
     @Feature({"AndroidWebView"})
-    public void testLoadDataUrlShouldTriggerShouldInterceptRequest() throws Throwable {
+    public void testLoadDataUrl_notIntercepted() throws Throwable {
         String url = "data:text/plain,foo";
 
         int callCount = mShouldInterceptRequestHelper.getCallCount();
         mActivityTestRule.loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
         Assert.assertEquals(callCount + 1, mShouldInterceptRequestHelper.getCallCount());
         Assert.assertEquals(url, mShouldInterceptRequestHelper.getUrls().get(0));
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.NO_INTERCEPT));
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"AndroidWebView"})
+    public void testLoadDataUrl_intercepted() throws Throwable {
+        String url = "data:text/plain,foo";
+
+        mShouldInterceptRequestHelper.setReturnValue(
+                stringToWebResourceResponseInfo("<html>Hello world</html>"));
+        int callCount = mShouldInterceptRequestHelper.getCallCount();
+        mActivityTestRule.loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
+        Assert.assertEquals(callCount + 1, mShouldInterceptRequestHelper.getCallCount());
+        Assert.assertEquals(url, mShouldInterceptRequestHelper.getUrls().get(0));
+        Assert.assertEquals(1,
+                RecordHistogram.getHistogramValueCountForTesting(
+                        "Android.WebView.ShouldInterceptRequest.InterceptionType2",
+                        InterceptionType.DATA));
     }
 
     @Test
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index caf4181..4ba74a7a 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1081,6 +1081,8 @@
     "system/cast/unified_cast_detailed_view_controller.h",
     "system/dark_mode/dark_mode_feature_pod_controller.cc",
     "system/dark_mode/dark_mode_feature_pod_controller.h",
+    "system/diagnostics/diagnostics_log_controller.cc",
+    "system/diagnostics/diagnostics_log_controller.h",
     "system/eche/eche_icon_loading_indicator_view.cc",
     "system/eche/eche_icon_loading_indicator_view.h",
     "system/eche/eche_tray.cc",
@@ -2618,6 +2620,7 @@
     "system/bluetooth/tray_bluetooth_helper_legacy_unittest.cc",
     "system/bluetooth/unified_bluetooth_detailed_view_controller_unittest.cc",
     "system/caps_lock_notification_controller_unittest.cc",
+    "system/diagnostics/diagnostics_log_controller_unittest.cc",
     "system/eche/eche_icon_loading_indicator_view_unittest.cc",
     "system/eche/eche_tray_unittest.cc",
     "system/firmware_update/firmware_update_notification_controller_unittest.cc",
diff --git a/ash/accessibility/magnifier/docked_magnifier_controller_unittest.cc b/ash/accessibility/magnifier/docked_magnifier_controller_unittest.cc
index 6e506c3..c12f357 100644
--- a/ash/accessibility/magnifier/docked_magnifier_controller_unittest.cc
+++ b/ash/accessibility/magnifier/docked_magnifier_controller_unittest.cc
@@ -419,9 +419,12 @@
   EXPECT_EQ(disp_1_workspace_with_magnifier, display_1.work_area());
   // The first display should confine the mouse movement outside of the
   // viewport.
-  const gfx::Rect disp_1_confine_bounds(
+  gfx::Rect disp_1_confine_bounds(
       0, disp_1_magnifier_height, disp_1_bounds.width(),
       disp_1_bounds.height() - disp_1_magnifier_height);
+  if (::features::IsDockedMagnifierResizingEnabled())
+    disp_1_confine_bounds.Inset(0, -DockedMagnifierController::kSeparatorHeight,
+                                0, 0);
   EXPECT_EQ(host1->GetLastCursorConfineBoundsInPixels(), disp_1_confine_bounds);
 
   // The second display should remain unaffected.
@@ -452,9 +455,12 @@
   disp_2_workspace_with_magnifier.Inset(0, disp_2_magnifier_height, 0, 0);
   EXPECT_EQ(disp_2_workspace_with_magnifier, display_2.work_area());
   // Display 2's mouse is confined outside the viewport.
-  const gfx::Rect disp_2_confine_bounds(
+  gfx::Rect disp_2_confine_bounds(
       0, disp_2_magnifier_height, disp_2_bounds.width(),
       disp_2_bounds.height() - disp_2_magnifier_height);
+  if (::features::IsDockedMagnifierResizingEnabled())
+    disp_2_confine_bounds.Inset(0, -DockedMagnifierController::kSeparatorHeight,
+                                0, 0);
   EXPECT_EQ(host2->GetLastCursorConfineBoundsInPixels(), disp_2_confine_bounds);
 
   // Now, disable the magnifier, and expect both displays to return back to
diff --git a/ash/ambient/ambient_photo_controller.cc b/ash/ambient/ambient_photo_controller.cc
index 8dfd364a..a30b1e47 100644
--- a/ash/ambient/ambient_photo_controller.cc
+++ b/ash/ambient/ambient_photo_controller.cc
@@ -338,7 +338,6 @@
   fetch_topic_retry_backoff_.InformOfRequest(/*succeeded=*/true);
   latest_fetch_topic_request_type_ = request_type;
   ambient_backend_model_.AppendTopics(screen_update.next_topics);
-  StartDownloadingWeatherConditionIcon(screen_update.weather_info);
 }
 
 void AmbientPhotoController::ResetImageData() {
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index ad89e94..4d22fbb6 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -706,7 +706,7 @@
       </message>
 
       <message name="IDS_GESTURE_NOTIFICATION_TITLE" desc="The title of the notification to show off new gestures.">
-        Try new ways to navigate Chrome OS
+        Try gestures to navigate
       </message>
       <message name="IDS_GESTURE_NOTIFICATION_MESSAGE_LEARN_MORE" desc="The body of the notification to show off new gestures. This notification body links to the help page for the gestures.">
         Use gestures to quickly switch between apps and interact with your Chromebook in tablet mode.
@@ -3091,13 +3091,13 @@
         Couldn't connect <ph name="NAME">$1<ex>Pixel Buds</ex></ph>
       </message>
       <message name="IDS_FAST_PAIR_CONNECTION_ERROR_MESSAGE" desc="Notification message shown when a there is a Fast Pair connection error.">
-        Open Bluetooth settings to pair the device manually
+        Open Bluetooth settings to pair your device
       </message>
       <message name="IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_TITLE" desc="Notification title shown to ask users if they want to save a Fast Pair device that was paired via classic bluetooth to their Google account.">
-        Save <ph name="NAME">$1<ex>Pixel Buds</ex></ph>
+        Save your <ph name="NAME">$1<ex>Pixel Buds</ex></ph>
       </message>
       <message name="IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_MESSAGE" desc="Notification message shown to ask users if they want to save a Fast Pair device that was paired via classic bluetooth to their Google account.">
-        Save <ph name="NAME">$1<ex>Pixel Buds</ex></ph> to <ph name="EMAIL">$2<ex>alisha123@gmail.com</ex></ph> for faster pairing to your other devices
+        Save your <ph name="NAME">$1<ex>Pixel Buds</ex></ph> to <ph name="EMAIL">$2<ex>alisha123@gmail.com</ex></ph> for faster pairing to your other devices
       </message>
       <message name="IDS_FAST_PAIR_SETTINGS_BUTTON" desc="Button title shown to direct users to settings when there is an error connecting with Fast Pair">
         Settings
@@ -3124,7 +3124,7 @@
         Learn More
       </message>
       <message name="IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_TITLE" desc="Notification title shown when a there is a device discovered with Fast Pair.">
-        Connect <ph name="NAME">$1<ex>Pixel Buds</ex></ph>
+        Connect your <ph name="NAME">$1<ex>Pixel Buds</ex></ph>
       </message>
       <message name="IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_MESSAGE" desc="Notification message shown when there is a device discovered with Fast Pair.">
         Connect <ph name="NAME">$1<ex>Pixel Buds</ex></ph> to this Chromebook
diff --git a/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_MESSAGE.png.sha1 b/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_MESSAGE.png.sha1
index 33034282..9a4f23d 100644
--- a/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_MESSAGE.png.sha1
+++ b/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_MESSAGE.png.sha1
@@ -1 +1 @@
-9537a100b53dbff1ace2f44eeb19cba9b60e135e
\ No newline at end of file
+fda5232cf78951fa9d2a359bb2f4fe10c07671fb
\ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_TITLE.png.sha1 b/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_TITLE.png.sha1
index 33034282..9a4f23d 100644
--- a/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_TITLE.png.sha1
+++ b/ash/ash_strings_grd/IDS_FAST_PAIR_ASSOCIATE_ACCOUNT_NOTIFICATION_TITLE.png.sha1
@@ -1 +1 @@
-9537a100b53dbff1ace2f44eeb19cba9b60e135e
\ No newline at end of file
+fda5232cf78951fa9d2a359bb2f4fe10c07671fb
\ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_FAST_PAIR_CONNECTION_ERROR_MESSAGE.png.sha1 b/ash/ash_strings_grd/IDS_FAST_PAIR_CONNECTION_ERROR_MESSAGE.png.sha1
index 7509a08..e3f617d7 100644
--- a/ash/ash_strings_grd/IDS_FAST_PAIR_CONNECTION_ERROR_MESSAGE.png.sha1
+++ b/ash/ash_strings_grd/IDS_FAST_PAIR_CONNECTION_ERROR_MESSAGE.png.sha1
@@ -1 +1 @@
-545a6ef3e7cd3949db25ccbc8e1cb9046329a5ca
\ No newline at end of file
+29553a25affbfed1bf5a8007ff450b4bf54bcf0a
\ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_TITLE.png.sha1 b/ash/ash_strings_grd/IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_TITLE.png.sha1
index a522f89..92af47b 100644
--- a/ash/ash_strings_grd/IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_TITLE.png.sha1
+++ b/ash/ash_strings_grd/IDS_FAST_PAIR_DISCOVERY_NOTIFICATION_TITLE.png.sha1
@@ -1 +1 @@
-d96e52e01bcfc4ae83cdeb19a9a55981f9a49e52
\ No newline at end of file
+bf7778d4cf51ba7abb47c71d5fd21710e4cc5b0f
\ No newline at end of file
diff --git a/ash/ash_strings_grd/IDS_GESTURE_NOTIFICATION_TITLE.png.sha1 b/ash/ash_strings_grd/IDS_GESTURE_NOTIFICATION_TITLE.png.sha1
index 57df1a72..37888e35 100644
--- a/ash/ash_strings_grd/IDS_GESTURE_NOTIFICATION_TITLE.png.sha1
+++ b/ash/ash_strings_grd/IDS_GESTURE_NOTIFICATION_TITLE.png.sha1
@@ -1 +1 @@
-b830625ecaa29020d83b4a73caa073804e740894
\ No newline at end of file
+f8d8f36c58d080af7b899c15b4b31e3fc8b0e2e7
\ No newline at end of file
diff --git a/ash/capture_mode/capture_mode_camera_preview_view.cc b/ash/capture_mode/capture_mode_camera_preview_view.cc
index 1cf4ffc6..0cb5550 100644
--- a/ash/capture_mode/capture_mode_camera_preview_view.cc
+++ b/ash/capture_mode/capture_mode_camera_preview_view.cc
@@ -136,7 +136,17 @@
 
   camera_video_host_view_->SetBoundsRect(GetContentsBounds());
 
-  GetWidget()->GetLayer()->SetRoundedCornerRadius(
+  // The size must have changed, and we need to update the rounded corners. Note
+  // that the assumption is that this view must have a square size, so when
+  // rounded corners are applied, it looks like a perfect circle.
+  // The rounded corners is applied on the window hosting the camera frames.
+  // That window's layer is a solid-color layer, so applying rounded corners on
+  // it won't make it produce a render surface. This is better than applying it
+  // on the preview widget's layer (which is a texture layer) and would cause a
+  // a render surface. This also avoids the rendering artifacts seen in
+  // https://crbug.com/1312059.
+  DCHECK_EQ(width(), height());
+  camera_video_renderer_.host_window()->layer()->SetRoundedCornerRadius(
       gfx::RoundedCornersF(height() / 2.f));
 }
 
diff --git a/ash/constants/ash_pref_names.cc b/ash/constants/ash_pref_names.cc
index 0dc8f81..4536689 100644
--- a/ash/constants/ash_pref_names.cc
+++ b/ash/constants/ash_pref_names.cc
@@ -545,6 +545,10 @@
 // Boolean pref of whether adaptive charging (i.e. holding battery at a sub-100%
 // charge until necessary to extend battery life) is enabled.
 const char kPowerAdaptiveChargingEnabled[] = "power.adaptive_charging_enabled";
+// Boolean pref of whether adaptive charging educational nudge is shown to the
+// user.
+const char kPowerAdaptiveChargingNudgeShown[] =
+    "power.adaptive_charging_nudge_shown";
 
 // Screen brightness percent values to be used when running on battery power.
 // Specified by the policy.
diff --git a/ash/constants/ash_pref_names.h b/ash/constants/ash_pref_names.h
index 5bf767a..244f387c 100644
--- a/ash/constants/ash_pref_names.h
+++ b/ash/constants/ash_pref_names.h
@@ -262,6 +262,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kPowerAdaptiveChargingEnabled[];
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const char kPowerAdaptiveChargingNudgeShown[];
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kPowerBatteryScreenBrightnessPercent[];
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kPowerBatteryScreenDimDelayMs[];
diff --git a/ash/quick_pair/repository/fast_pair_repository_impl.cc b/ash/quick_pair/repository/fast_pair_repository_impl.cc
index bbf64ec..8be9370 100644
--- a/ash/quick_pair/repository/fast_pair_repository_impl.cc
+++ b/ash/quick_pair/repository/fast_pair_repository_impl.cc
@@ -427,10 +427,6 @@
   absl::optional<const std::string> hex_model_id =
       device_id_map_->GetModelIdForDeviceId(device_id);
   if (!hex_model_id) {
-    QP_LOG(WARNING) << __func__
-                    << ": Could not find a matching model ID for "
-                       "device ID: "
-                    << device_id;
     return absl::nullopt;
   }
 
diff --git a/ash/system/diagnostics/DIR_METADATA b/ash/system/diagnostics/DIR_METADATA
new file mode 100644
index 0000000..24ee7b9
--- /dev/null
+++ b/ash/system/diagnostics/DIR_METADATA
@@ -0,0 +1,4 @@
+buganizer {
+  component_id: 1131925
+}
+team_email: "cros-system-services@google.com"
diff --git a/ash/system/diagnostics/OWNERS b/ash/system/diagnostics/OWNERS
new file mode 100644
index 0000000..ac8343e
--- /dev/null
+++ b/ash/system/diagnostics/OWNERS
@@ -0,0 +1,7 @@
+# Primary OWNERS
+jimmyxgong@chromium.org
+michaelcheco@google.com
+gavinwill@chromium.org
+
+# Backup OWNERS
+zentaro@chromium.org
diff --git a/ash/system/diagnostics/diagnostics_log_controller.cc b/ash/system/diagnostics/diagnostics_log_controller.cc
new file mode 100644
index 0000000..5ee99cd
--- /dev/null
+++ b/ash/system/diagnostics/diagnostics_log_controller.cc
@@ -0,0 +1,34 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/diagnostics/diagnostics_log_controller.h"
+
+#include "base/check_op.h"
+
+namespace ash {
+namespace diagnostics {
+
+namespace {
+
+DiagnosticsLogController* g_instance = nullptr;
+
+}  // namespace
+
+DiagnosticsLogController::DiagnosticsLogController() {
+  DCHECK_EQ(nullptr, g_instance);
+  g_instance = this;
+}
+
+DiagnosticsLogController::~DiagnosticsLogController() {
+  DCHECK_EQ(this, g_instance);
+  g_instance = nullptr;
+}
+
+// static
+DiagnosticsLogController* DiagnosticsLogController::Get() {
+  return g_instance;
+}
+
+}  // namespace diagnostics
+}  // namespace ash
diff --git a/ash/system/diagnostics/diagnostics_log_controller.h b/ash/system/diagnostics/diagnostics_log_controller.h
new file mode 100644
index 0000000..2be11fd
--- /dev/null
+++ b/ash/system/diagnostics/diagnostics_log_controller.h
@@ -0,0 +1,27 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_DIAGNOSTICS_DIAGNOSTICS_LOG_CONTROLLER_H_
+#define ASH_SYSTEM_DIAGNOSTICS_DIAGNOSTICS_LOG_CONTROLLER_H_
+
+namespace ash {
+namespace diagnostics {
+
+// DiagnosticsLogController manages the lifetime of Diagnostics log writers such
+// as the RoutineLog and ensures logs are written to the correct directory path
+// for the current user. See go/cros-shared-diagnostics-session-log-dd.
+class DiagnosticsLogController {
+ public:
+  DiagnosticsLogController();
+  DiagnosticsLogController(const DiagnosticsLogController&) = delete;
+  DiagnosticsLogController& operator=(const DiagnosticsLogController&) = delete;
+  ~DiagnosticsLogController();
+
+  static DiagnosticsLogController* Get();
+};
+
+}  // namespace diagnostics
+}  // namespace ash
+
+#endif  // ASH_SYSTEM_DIAGNOSTICS_DIAGNOSTICS_LOG_CONTROLLER_H_
diff --git a/ash/system/diagnostics/diagnostics_log_controller_unittest.cc b/ash/system/diagnostics/diagnostics_log_controller_unittest.cc
new file mode 100644
index 0000000..edd337e
--- /dev/null
+++ b/ash/system/diagnostics/diagnostics_log_controller_unittest.cc
@@ -0,0 +1,25 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/diagnostics/diagnostics_log_controller.h"
+
+#include <memory>
+
+#include "ash/test/ash_test_base.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ash {
+namespace diagnostics {
+
+class DiagnosticsLogControllerTest : public NoSessionAshTestBase {
+ public:
+  DiagnosticsLogControllerTest() = default;
+  DiagnosticsLogControllerTest(DiagnosticsLogControllerTest&) = delete;
+  DiagnosticsLogControllerTest& operator=(DiagnosticsLogControllerTest&) =
+      delete;
+  ~DiagnosticsLogControllerTest() override = default;
+};
+
+}  // namespace diagnostics
+}  // namespace ash
diff --git a/ash/system/power/adaptive_charging_nudge_controller.cc b/ash/system/power/adaptive_charging_nudge_controller.cc
index 2846def..ae84379 100644
--- a/ash/system/power/adaptive_charging_nudge_controller.cc
+++ b/ash/system/power/adaptive_charging_nudge_controller.cc
@@ -4,13 +4,54 @@
 
 #include "ash/system/power/adaptive_charging_nudge_controller.h"
 
+#include <memory>
+
+#include "ash/constants/ash_pref_names.h"
+#include "ash/session/session_controller_impl.h"
+#include "ash/shell.h"
 #include "ash/system/power/adaptive_charging_nudge.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "components/prefs/pref_service.h"
 
 namespace ash {
 
+namespace {
+
+// Delay time before the nudge should appear.
+constexpr base::TimeDelta kNudgeDelayTime = base::Seconds(3);
+
+}  // namespace
+
 AdaptiveChargingNudgeController::AdaptiveChargingNudgeController() {}
 AdaptiveChargingNudgeController::~AdaptiveChargingNudgeController() {}
 
+void AdaptiveChargingNudgeController::ShowNudge() {
+  PrefService* pref_service =
+      Shell::Get()->session_controller()->GetActivePrefService();
+
+  // Nudge should be shown only once for an user forever.
+  if (!pref_service ||
+      !pref_service->GetBoolean(ash::prefs::kPowerAdaptiveChargingEnabled) ||
+      pref_service->GetBoolean(ash::prefs::kPowerAdaptiveChargingNudgeShown)) {
+    return;
+  }
+
+  // Show nudge if the delay timer is complete.
+  if (nudge_delay_timer_ && !nudge_delay_timer_->IsRunning()) {
+    pref_service->SetBoolean(ash::prefs::kPowerAdaptiveChargingNudgeShown,
+                             true);
+    SystemNudgeController::ShowNudge();
+    return;
+  }
+
+  nudge_delay_timer_ = std::make_unique<base::OneShotTimer>();
+  nudge_delay_timer_->Start(
+      FROM_HERE, kNudgeDelayTime,
+      base::BindOnce(&AdaptiveChargingNudgeController::ShowNudge,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
 std::unique_ptr<SystemNudge>
 AdaptiveChargingNudgeController::CreateSystemNudge() {
   return std::make_unique<AdaptiveChargingNudge>();
diff --git a/ash/system/power/adaptive_charging_nudge_controller.h b/ash/system/power/adaptive_charging_nudge_controller.h
index 324d6825..01a306d 100644
--- a/ash/system/power/adaptive_charging_nudge_controller.h
+++ b/ash/system/power/adaptive_charging_nudge_controller.h
@@ -7,6 +7,8 @@
 
 #include "ash/ash_export.h"
 #include "ash/system/tray/system_nudge_controller.h"
+#include "base/memory/weak_ptr.h"
+#include "base/timer/timer.h"
 
 namespace ash {
 
@@ -24,9 +26,22 @@
       const AdaptiveChargingNudgeController&) = delete;
   ~AdaptiveChargingNudgeController() override;
 
+  // Show the Adaptive Charging educational nudge.
+  void ShowNudge();
+
+  // Test method to get the nudge delay timer for testing.
+  base::OneShotTimer* GetNudgeDelayTimerForTesting() {
+    return nudge_delay_timer_.get();
+  }
+
  private:
   // SystemNudgeController:
   std::unique_ptr<SystemNudge> CreateSystemNudge() override;
+
+  // Timer to delay showing the nudge.
+  std::unique_ptr<base::OneShotTimer> nudge_delay_timer_;
+
+  base::WeakPtrFactory<AdaptiveChargingNudgeController> weak_ptr_factory_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/power/adaptive_charging_nudge_controller_unittest.cc b/ash/system/power/adaptive_charging_nudge_controller_unittest.cc
index 8f042e1..0976073 100644
--- a/ash/system/power/adaptive_charging_nudge_controller_unittest.cc
+++ b/ash/system/power/adaptive_charging_nudge_controller_unittest.cc
@@ -4,6 +4,8 @@
 
 #include <string>
 
+#include "ash/constants/ash_pref_names.h"
+#include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/system/power/adaptive_charging_nudge_controller.h"
 #include "ash/system/tray/system_nudge.h"
@@ -46,6 +48,14 @@
       widget_observation_{this};
   std::unique_ptr<base::RunLoop> run_loop_;
 };
+
+// Enables or disables the user pref for the entire feature.
+void SetAdaptiveChargingPref(bool enabled) {
+  Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
+      prefs::kPowerAdaptiveChargingEnabled, enabled);
+  base::RunLoop().RunUntilIdle();
+}
+
 }  // namespace
 
 class AdaptiveChargingNudgeControllerTest : public AshTestBase {
@@ -92,12 +102,46 @@
   AdaptiveChargingNudgeController* controller = GetController();
   ASSERT_TRUE(controller);
 
+  SetAdaptiveChargingPref(true);
   controller->ShowNudge();
-
+  ASSERT_TRUE(controller->GetNudgeDelayTimerForTesting()->IsRunning());
+  controller->GetNudgeDelayTimerForTesting()->FireNow();
   SystemNudge* nudge = controller->GetSystemNudgeForTesting();
   ASSERT_TRUE(nudge);
 
   WaitForWidgetClose(controller, nudge);
 }
 
+TEST_F(AdaptiveChargingNudgeControllerTest, NoNudgeShowForDisabledFeature) {
+  AdaptiveChargingNudgeController* controller = GetController();
+  ASSERT_TRUE(controller);
+
+  SetAdaptiveChargingPref(false);
+  controller->ShowNudge();
+  ASSERT_FALSE(controller->GetNudgeDelayTimerForTesting());
+  SystemNudge* nudge = controller->GetSystemNudgeForTesting();
+  ASSERT_FALSE(nudge);
+}
+
+TEST_F(AdaptiveChargingNudgeControllerTest, NudgeShowExactlyOnce) {
+  AdaptiveChargingNudgeController* controller = GetController();
+  ASSERT_TRUE(controller);
+
+  SetAdaptiveChargingPref(true);
+
+  // First time, nudge is shown.
+  controller->ShowNudge();
+  ASSERT_TRUE(controller->GetNudgeDelayTimerForTesting()->IsRunning());
+  controller->GetNudgeDelayTimerForTesting()->FireNow();
+  SystemNudge* nudge1 = controller->GetSystemNudgeForTesting();
+  ASSERT_TRUE(nudge1);
+  WaitForWidgetClose(controller, nudge1);
+
+  // No nudge for the second time.
+  controller->ShowNudge();
+  ASSERT_FALSE(controller->GetNudgeDelayTimerForTesting()->IsRunning());
+  SystemNudge* nudge2 = controller->GetSystemNudgeForTesting();
+  ASSERT_FALSE(nudge2);
+}
+
 }  // namespace ash
diff --git a/ash/system/power/power_prefs.cc b/ash/system/power/power_prefs.cc
index 817894b..c50d252 100644
--- a/ash/system/power/power_prefs.cc
+++ b/ash/system/power/power_prefs.cc
@@ -83,6 +83,9 @@
   registry->RegisterBooleanPref(
       prefs::kPowerAdaptiveChargingEnabled, false,
       user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
+  registry->RegisterBooleanPref(
+      prefs::kPowerAdaptiveChargingNudgeShown, false,
+      user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF);
   registry->RegisterIntegerPref(prefs::kPowerBatteryScreenBrightnessPercent,
                                 -1);
   registry->RegisterIntegerPref(prefs::kPowerBatteryScreenDimDelayMs, 300000);
diff --git a/ash/webui/diagnostics_ui/backend/session_log_handler.cc b/ash/webui/diagnostics_ui/backend/session_log_handler.cc
index 8e437e9..d0f537fd 100644
--- a/ash/webui/diagnostics_ui/backend/session_log_handler.cc
+++ b/ash/webui/diagnostics_ui/backend/session_log_handler.cc
@@ -192,6 +192,9 @@
       web_contents ? web_contents->GetTopLevelNativeWindow()
                    : gfx::kNullNativeWindow;
 
+  // Early return if the select file dialog is already active.
+  if (select_file_dialog_)
+    return;
   select_file_dialog_ = ui::SelectFileDialog::Create(
       this, select_file_policy_creator_.Run(web_contents));
   select_file_dialog_->SelectFile(
diff --git a/ash/webui/personalization_app/personalization_app_ambient_provider.h b/ash/webui/personalization_app/personalization_app_ambient_provider.h
index 5fdf532..0412bb4 100644
--- a/ash/webui/personalization_app/personalization_app_ambient_provider.h
+++ b/ash/webui/personalization_app/personalization_app_ambient_provider.h
@@ -9,15 +9,15 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace ash {
+namespace personalization_app {
 
-class PersonalizationAppAmbientProvider
-    : public personalization_app::mojom::AmbientProvider {
+class PersonalizationAppAmbientProvider : public mojom::AmbientProvider {
  public:
   virtual void BindInterface(
-      mojo::PendingReceiver<personalization_app::mojom::AmbientProvider>
-          receiver) = 0;
+      mojo::PendingReceiver<mojom::AmbientProvider> receiver) = 0;
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_AMBIENT_PROVIDER_H_
diff --git a/ash/webui/personalization_app/personalization_app_theme_provider.h b/ash/webui/personalization_app/personalization_app_theme_provider.h
index 6f7e51d45..92509ffe 100644
--- a/ash/webui/personalization_app/personalization_app_theme_provider.h
+++ b/ash/webui/personalization_app/personalization_app_theme_provider.h
@@ -9,15 +9,15 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace ash {
+namespace personalization_app {
 
-class PersonalizationAppThemeProvider
-    : public personalization_app::mojom::ThemeProvider {
+class PersonalizationAppThemeProvider : public mojom::ThemeProvider {
  public:
   virtual void BindInterface(
-      mojo::PendingReceiver<personalization_app::mojom::ThemeProvider>
-          receiver) = 0;
+      mojo::PendingReceiver<mojom::ThemeProvider> receiver) = 0;
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_THEME_PROVIDER_H_
diff --git a/ash/webui/personalization_app/personalization_app_ui.cc b/ash/webui/personalization_app/personalization_app_ui.cc
index 934e52f..9223ba4 100644
--- a/ash/webui/personalization_app/personalization_app_ui.cc
+++ b/ash/webui/personalization_app/personalization_app_ui.cc
@@ -25,6 +25,7 @@
 #include "ui/webui/mojo_web_ui_controller.h"
 
 namespace ash {
+namespace personalization_app {
 
 namespace {
 
@@ -260,4 +261,5 @@
 
 WEB_UI_CONTROLLER_TYPE_IMPL(PersonalizationAppUI)
 
+}  // namespace personalization_app
 }  // namespace ash
diff --git a/ash/webui/personalization_app/personalization_app_ui.h b/ash/webui/personalization_app/personalization_app_ui.h
index e45a5b8..6264c21 100644
--- a/ash/webui/personalization_app/personalization_app_ui.h
+++ b/ash/webui/personalization_app/personalization_app_ui.h
@@ -12,6 +12,7 @@
 #include "ui/webui/mojo_web_ui_controller.h"
 
 namespace ash {
+namespace personalization_app {
 
 class PersonalizationAppAmbientProvider;
 class PersonalizationAppThemeProvider;
@@ -56,6 +57,7 @@
   WEB_UI_CONTROLLER_TYPE_DECL();
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_UI_H_
diff --git a/ash/webui/personalization_app/personalization_app_url_constants.cc b/ash/webui/personalization_app/personalization_app_url_constants.cc
index 5663567..79cc5f6 100644
--- a/ash/webui/personalization_app/personalization_app_url_constants.cc
+++ b/ash/webui/personalization_app/personalization_app_url_constants.cc
@@ -5,6 +5,7 @@
 #include "ash/webui/personalization_app/personalization_app_url_constants.h"
 
 namespace ash {
+namespace personalization_app {
 
 const char kChromeUIPersonalizationAppHost[] = "personalization";
 const char kChromeUIPersonalizationAppURL[] = "chrome://personalization/";
@@ -15,4 +16,5 @@
 const char kChromeUIPersonalizationAppWallpaperSubpageURL[] =
     "chrome://personalization/wallpaper";
 
+}  // namespace personalization_app
 }  // namespace ash
diff --git a/ash/webui/personalization_app/personalization_app_url_constants.h b/ash/webui/personalization_app/personalization_app_url_constants.h
index f209803..81d2e4f 100644
--- a/ash/webui/personalization_app/personalization_app_url_constants.h
+++ b/ash/webui/personalization_app/personalization_app_url_constants.h
@@ -6,6 +6,7 @@
 #define ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_URL_CONSTANTS_H_
 
 namespace ash {
+namespace personalization_app {
 
 extern const char kChromeUIPersonalizationAppHost[];
 extern const char kChromeUIPersonalizationAppURL[];
@@ -13,6 +14,7 @@
 extern const char kChromeUIPersonalizationAppUserSubpageURL[];
 extern const char kChromeUIPersonalizationAppWallpaperSubpageURL[];
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_URL_CONSTANTS_H_
diff --git a/ash/webui/personalization_app/personalization_app_user_provider.h b/ash/webui/personalization_app/personalization_app_user_provider.h
index 105fbcf..26f2e166 100644
--- a/ash/webui/personalization_app/personalization_app_user_provider.h
+++ b/ash/webui/personalization_app/personalization_app_user_provider.h
@@ -9,15 +9,15 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace ash {
+namespace personalization_app {
 
-class PersonalizationAppUserProvider
-    : public personalization_app::mojom::UserProvider {
+class PersonalizationAppUserProvider : public mojom::UserProvider {
  public:
   virtual void BindInterface(
-      mojo::PendingReceiver<personalization_app::mojom::UserProvider>
-          receiver) = 0;
+      mojo::PendingReceiver<mojom::UserProvider> receiver) = 0;
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_USER_PROVIDER_H_
diff --git a/ash/webui/personalization_app/personalization_app_wallpaper_provider.h b/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
index 2ff179ef..bdd2a73 100644
--- a/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
+++ b/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
@@ -9,17 +9,17 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace ash {
+namespace personalization_app {
 
 // Handles calling |backdrop_wallpaper_handler| code in //chrome to pass to the
 // Personalization App SWA.
-class PersonalizationAppWallpaperProvider
-    : public personalization_app::mojom::WallpaperProvider {
+class PersonalizationAppWallpaperProvider : public mojom::WallpaperProvider {
  public:
   virtual void BindInterface(
-      mojo::PendingReceiver<personalization_app::mojom::WallpaperProvider>
-          receiver) = 0;
+      mojo::PendingReceiver<mojom::WallpaperProvider> receiver) = 0;
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_PERSONALIZATION_APP_WALLPAPER_PROVIDER_H_
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.cc b/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.cc
index 33cd764..2734165 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.cc
+++ b/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.cc
@@ -8,6 +8,7 @@
 #include "content/public/browser/web_ui.h"
 
 namespace ash {
+namespace personalization_app {
 
 FakePersonalizationAppAmbientProvider::FakePersonalizationAppAmbientProvider(
     content::WebUI* web_ui) {}
@@ -27,4 +28,5 @@
   std::move(callback).Run(std::move(true));
 }
 
+}  // namespace personalization_app
 }  // namespace ash
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.h b/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.h
index 2c1fa96e..3037b73 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.h
+++ b/ash/webui/personalization_app/test/fake_personalization_app_ambient_provider.h
@@ -20,6 +20,7 @@
 }  // namespace content
 
 namespace ash {
+namespace personalization_app {
 
 class FakePersonalizationAppAmbientProvider
     : public PersonalizationAppAmbientProvider {
@@ -57,6 +58,7 @@
       ambient_receiver_{this};
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_TEST_FAKE_PERSONALIZATION_APP_AMBIENT_PROVIDER_H_
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.cc b/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.cc
index 4f1677f3..41d8282 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.cc
+++ b/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.cc
@@ -4,6 +4,9 @@
 
 #include "ash/webui/personalization_app/test/fake_personalization_app_theme_provider.h"
 
+namespace ash {
+namespace personalization_app {
+
 FakePersonalizationAppThemeProvider::FakePersonalizationAppThemeProvider(
     content::WebUI* web_ui) {}
 
@@ -25,3 +28,6 @@
     bool dark_mode_enabled) {
   return;
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.h b/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.h
index a918967..31841b4e 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.h
+++ b/ash/webui/personalization_app/test/fake_personalization_app_theme_provider.h
@@ -19,8 +19,11 @@
 class WebUI;
 }  // namespace content
 
+namespace ash {
+namespace personalization_app {
+
 class FakePersonalizationAppThemeProvider
-    : public ash::PersonalizationAppThemeProvider {
+    : public PersonalizationAppThemeProvider {
  public:
   explicit FakePersonalizationAppThemeProvider(content::WebUI* web_ui);
 
@@ -46,4 +49,7 @@
       theme_receiver_{this};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_TEST_FAKE_PERSONALIZATION_APP_THEME_PROVIDER_H_
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_user_provider.cc b/ash/webui/personalization_app/test/fake_personalization_app_user_provider.cc
index c99ba29..6c6798b 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_user_provider.cc
+++ b/ash/webui/personalization_app/test/fake_personalization_app_user_provider.cc
@@ -10,6 +10,7 @@
 #include "mojo/public/cpp/base/big_buffer.h"
 
 namespace ash {
+namespace personalization_app {
 
 FakePersonalizationAppUserProvider::FakePersonalizationAppUserProvider(
     content::WebUI* web_ui) {}
@@ -49,4 +50,5 @@
 
 void FakePersonalizationAppUserProvider::SelectImageFromDisk() {}
 
+}  // namespace personalization_app
 }  // namespace ash
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_user_provider.h b/ash/webui/personalization_app/test/fake_personalization_app_user_provider.h
index df0725b0..e5cd5e0d 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_user_provider.h
+++ b/ash/webui/personalization_app/test/fake_personalization_app_user_provider.h
@@ -21,6 +21,7 @@
 }  // namespace content
 
 namespace ash {
+namespace personalization_app {
 
 class FakePersonalizationAppUserProvider
     : public PersonalizationAppUserProvider {
@@ -56,6 +57,7 @@
       this};
 };
 
+}  // namespace personalization_app
 }  // namespace ash
 
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_TEST_FAKE_PERSONALIZATION_APP_USER_PROVIDER_H_
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
index c87f50b..1063cbe6 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
+++ b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
@@ -16,6 +16,9 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 const char kFakeCollectionId[] = "fake_collection_id";
 }  // namespace
@@ -157,3 +160,6 @@
 void FakePersonalizationAppWallpaperProvider::CancelPreviewWallpaper() {
   return;
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
index 93c7b86c..544f6be 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
+++ b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
@@ -19,8 +19,11 @@
 class WebUI;
 }  // namespace content
 
+namespace ash {
+namespace personalization_app {
+
 class FakePersonalizationAppWallpaperProvider
-    : public ash::PersonalizationAppWallpaperProvider {
+    : public PersonalizationAppWallpaperProvider {
  public:
   explicit FakePersonalizationAppWallpaperProvider(content::WebUI* web_ui);
 
@@ -103,4 +106,7 @@
       wallpaper_receiver_{this};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_TEST_FAKE_PERSONALIZATION_APP_WALLPAPER_PROVIDER_H_
diff --git a/ash/webui/personalization_app/test/personalization_app_browsertest.js b/ash/webui/personalization_app/test/personalization_app_browsertest.js
index 83221918..f0629b11 100644
--- a/ash/webui/personalization_app/test/personalization_app_browsertest.js
+++ b/ash/webui/personalization_app/test/personalization_app_browsertest.js
@@ -40,7 +40,7 @@
 
   /** @override */
   get typedefCppFixture() {
-    return 'PersonalizationAppBrowserTestFixture';
+    return 'ash::personalization_app::PersonalizationAppBrowserTestFixture';
   }
 }
 
diff --git a/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.cc b/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.cc
index 8925bcf..f663fd5 100644
--- a/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.cc
+++ b/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.cc
@@ -14,24 +14,30 @@
 #include "ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h"
 #include "chrome/test/base/mojo_web_ui_browser_test.h"
 
+namespace ash {
+namespace personalization_app {
+
 std::unique_ptr<content::WebUIController>
 TestPersonalizationAppWebUIProvider::NewWebUI(content::WebUI* web_ui,
                                               const GURL& url) {
   auto ambient_provider =
-      std::make_unique<ash::FakePersonalizationAppAmbientProvider>(web_ui);
+      std::make_unique<FakePersonalizationAppAmbientProvider>(web_ui);
   auto theme_provider =
       std::make_unique<FakePersonalizationAppThemeProvider>(web_ui);
   auto wallpaper_provider =
       std::make_unique<FakePersonalizationAppWallpaperProvider>(web_ui);
   auto user_provider =
-      std::make_unique<ash::FakePersonalizationAppUserProvider>(web_ui);
-  return std::make_unique<ash::PersonalizationAppUI>(
+      std::make_unique<FakePersonalizationAppUserProvider>(web_ui);
+  return std::make_unique<PersonalizationAppUI>(
       web_ui, std::move(ambient_provider), std::move(theme_provider),
       std::move(user_provider), std::move(wallpaper_provider));
 }
 
 void PersonalizationAppBrowserTestFixture::SetUpOnMainThread() {
   MojoWebUIBrowserTest::SetUpOnMainThread();
-  test_factory_.AddFactoryOverride(ash::kChromeUIPersonalizationAppHost,
+  test_factory_.AddFactoryOverride(kChromeUIPersonalizationAppHost,
                                    &test_web_ui_provider_);
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.h b/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.h
index 70fc3a6..da1bacc 100644
--- a/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.h
+++ b/ash/webui/personalization_app/test/personalization_app_browsertest_fixture.h
@@ -11,6 +11,9 @@
 #include "chrome/test/base/test_chrome_web_ui_controller_factory.h"
 #include "content/public/test/scoped_web_ui_controller_factory_registration.h"
 
+namespace ash {
+namespace personalization_app {
+
 class TestPersonalizationAppWebUIProvider
     : public TestChromeWebUIControllerFactory::WebUIProvider {
  public:
@@ -38,4 +41,7 @@
       scoped_controller_factory_registration_{&test_factory_};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // ASH_WEBUI_PERSONALIZATION_APP_TEST_PERSONALIZATION_APP_BROWSERTEST_FIXTURE_H_
diff --git a/ash/wm/desks/templates/desks_templates_item_view.cc b/ash/wm/desks/templates/desks_templates_item_view.cc
index 83ab1da..1f4408e 100644
--- a/ash/wm/desks/templates/desks_templates_item_view.cc
+++ b/ash/wm/desks/templates/desks_templates_item_view.cc
@@ -608,7 +608,10 @@
   auto iter = std::find_if(
       templates_grid_view_items.begin(), templates_grid_view_items.end(),
       [this, name](const DesksTemplatesItemView* d) {
-        return (d != this && d->desk_template()->template_name() == name);
+        // Name duplication is allowed if one of the templates is an admin
+        // template.
+        return (d != this && d->desk_template()->template_name() == name &&
+                d->desk_template()->source() != DeskTemplateSource::kPolicy);
       });
   return iter == templates_grid_view_items.end() ? nullptr : *iter;
 }
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 084da698..31c2885 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -479,6 +479,8 @@
     "metrics/persistent_memory_allocator.h",
     "metrics/persistent_sample_map.cc",
     "metrics/persistent_sample_map.h",
+    "metrics/ranges_manager.cc",
+    "metrics/ranges_manager.h",
     "metrics/record_histogram_checker.h",
     "metrics/sample_map.cc",
     "metrics/sample_map.h",
@@ -3093,6 +3095,7 @@
     "metrics/persistent_histogram_storage_unittest.cc",
     "metrics/persistent_memory_allocator_unittest.cc",
     "metrics/persistent_sample_map_unittest.cc",
+    "metrics/ranges_manager_unittest.cc",
     "metrics/sample_map_unittest.cc",
     "metrics/sample_vector_unittest.cc",
     "metrics/single_sample_metrics_unittest.cc",
diff --git a/base/metrics/ranges_manager.cc b/base/metrics/ranges_manager.cc
new file mode 100644
index 0000000..68c8d36
--- /dev/null
+++ b/base/metrics/ranges_manager.cc
@@ -0,0 +1,62 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/metrics/ranges_manager.h"
+
+namespace base {
+
+RangesManager::RangesManager() = default;
+
+RangesManager::~RangesManager() {
+  if (!do_not_release_ranges_on_destroy_for_testing_)
+    ReleaseBucketRanges();
+}
+
+size_t RangesManager::BucketRangesHash::operator()(
+    const BucketRanges* const a) const {
+  return a->checksum();
+}
+
+bool RangesManager::BucketRangesEqual::operator()(
+    const BucketRanges* const a,
+    const BucketRanges* const b) const {
+  return a->Equals(b);
+}
+
+const BucketRanges* RangesManager::RegisterOrDeleteDuplicateRanges(
+    const BucketRanges* ranges) {
+  DCHECK(ranges->HasValidChecksum());
+
+  // Attempt to insert |ranges| into the set of registered BucketRanges. If an
+  // equivalent one already exists (one with the exact same ranges), this
+  // fetches the pre-existing one and does not insert the passed |ranges|.
+  const BucketRanges* const registered = *ranges_.insert(ranges).first;
+
+  // If there is already a registered equivalent BucketRanges, delete the passed
+  // |ranges|.
+  if (registered != ranges)
+    delete ranges;
+
+  return registered;
+}
+
+std::vector<const BucketRanges*> RangesManager::GetBucketRanges() {
+  std::vector<const BucketRanges*> out;
+  out.reserve(ranges_.size());
+  out.assign(ranges_.begin(), ranges_.end());
+  return out;
+}
+
+void RangesManager::ReleaseBucketRanges() {
+  for (auto* range : ranges_) {
+    delete range;
+  }
+  ranges_.clear();
+}
+
+void RangesManager::DoNotReleaseRangesOnDestroyForTesting() {
+  do_not_release_ranges_on_destroy_for_testing_ = true;
+}
+
+}  // namespace base
diff --git a/base/metrics/ranges_manager.h b/base/metrics/ranges_manager.h
new file mode 100644
index 0000000..7c65d93
--- /dev/null
+++ b/base/metrics/ranges_manager.h
@@ -0,0 +1,79 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_METRICS_RANGES_MANAGER_H_
+#define BASE_METRICS_RANGES_MANAGER_H_
+
+#include <unordered_set>
+#include "base/base_export.h"
+#include "base/metrics/bucket_ranges.h"
+
+namespace base {
+
+// Manages BucketRanges and their lifetime. When registering a BucketRanges
+// to a RangesManager instance, if an equivalent one already exists (one with
+// the exact same ranges), the passed BucketRanges is deleted. This is useful to
+// prevent duplicate instances of equivalent BucketRanges. Upon the destruction
+// of a RangesManager instance, all BucketRanges managed by it are destroyed. A
+// BucketRanges instance should not be registered to multiple RangesManagers.
+class BASE_EXPORT RangesManager {
+ public:
+  RangesManager();
+
+  RangesManager(const RangesManager&) = delete;
+  RangesManager& operator=(const RangesManager&) = delete;
+
+  ~RangesManager();
+
+  // Registers a BucketRanges. If an equivalent BucketRanges is already
+  // registered, then the argument |ranges| will be deleted. The returned value
+  // is always the registered BucketRanges (either the argument, or the
+  // pre-existing one). Registering a BucketRanges passes the ownership, and
+  // will be released when the RangesManager is released.
+  const BucketRanges* RegisterOrDeleteDuplicateRanges(
+      const BucketRanges* ranges);
+
+  // Gets all registered BucketRanges. The order of returned BucketRanges is not
+  // guaranteed.
+  std::vector<const BucketRanges*> GetBucketRanges();
+
+  // Some tests may instantiate temporary StatisticsRecorders, each having their
+  // own RangesManager. During the tests, ranges may get registered with a
+  // recorder that later gets released, which would release the ranges as well.
+  // Calling this method prevents this, as the tests may not expect them to be
+  // deleted.
+  void DoNotReleaseRangesOnDestroyForTesting();
+
+ private:
+  // Removes all registered BucketRanges and destroys them. This is called in
+  // the destructor.
+  void ReleaseBucketRanges();
+
+  // Used to get the hash of a BucketRanges, which is simply its checksum.
+  struct BucketRangesHash {
+    size_t operator()(const BucketRanges* a) const;
+  };
+
+  // Comparator for BucketRanges. See `BucketRanges::Equals()`.
+  struct BucketRangesEqual {
+    bool operator()(const BucketRanges* a, const BucketRanges* b) const;
+  };
+
+  // Type for a set of unique RangesBucket, with their hash and equivalence
+  // defined by `BucketRangesHash` and `BucketRangesEqual`.
+  typedef std::
+      unordered_set<const BucketRanges*, BucketRangesHash, BucketRangesEqual>
+          RangesMap;
+
+  // The set of unique BucketRanges registered to the RangesManager.
+  RangesMap ranges_;
+
+  // Whether or not to release the registered BucketRanges when this
+  // RangesManager is destroyed. See `DoNotReleaseRangesOnDestroyForTesting()`.
+  bool do_not_release_ranges_on_destroy_for_testing_ = false;
+};
+
+}  // namespace base
+
+#endif  // BASE_METRICS_RANGES_MANAGER_H_
diff --git a/base/metrics/ranges_manager_unittest.cc b/base/metrics/ranges_manager_unittest.cc
new file mode 100644
index 0000000..2252b86
--- /dev/null
+++ b/base/metrics/ranges_manager_unittest.cc
@@ -0,0 +1,81 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/metrics/ranges_manager.h"
+
+#include <vector>
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+
+using testing::UnorderedElementsAre;
+
+TEST(RangesManagerTest, RegisterBucketRanges) {
+  RangesManager ranges_manager;
+
+  // Create some BucketRanges. We call |ResetChecksum| to calculate and set
+  // their checksums. Checksums are used to validate integrity (and test for
+  // non-equivalence) and should be computed after a BucketRanges is fully
+  // initialized. Note that BucketRanges are initialized with 0 for all ranges,
+  // i.e., all buckets will be [0, 0).
+  BucketRanges* ranges1 = new BucketRanges(3);
+  ranges1->ResetChecksum();
+  BucketRanges* ranges2 = new BucketRanges(4);
+  ranges2->ResetChecksum();
+
+  // Register new ranges.
+  EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges1));
+  EXPECT_EQ(ranges2, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges2));
+  EXPECT_THAT(ranges_manager.GetBucketRanges(),
+              UnorderedElementsAre(ranges1, ranges2));
+
+  // Register |ranges1| again. The registered BucketRanges set should not change
+  // as |ranges1| is already registered.
+  EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges1));
+  EXPECT_THAT(ranges_manager.GetBucketRanges(),
+              UnorderedElementsAre(ranges1, ranges2));
+
+  // Make sure |ranges1| still exists, and is the same as what we expect (all
+  // ranges are 0).
+  ASSERT_EQ(3u, ranges1->size());
+  EXPECT_EQ(0, ranges1->range(0));
+  EXPECT_EQ(0, ranges1->range(1));
+  EXPECT_EQ(0, ranges1->range(2));
+
+  // Register a new |ranges3| that is equivalent to |ranges1| (same ranges). We
+  // expect that |ranges3| is deleted (verified by LeakSanitizer bots) and that
+  // |ranges1| is returned by |RegisterOrDeleteDuplicateRanges|.
+  BucketRanges* ranges3 = new BucketRanges(3);
+  ranges3->ResetChecksum();
+  EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges3));
+  EXPECT_THAT(ranges_manager.GetBucketRanges(),
+              UnorderedElementsAre(ranges1, ranges2));
+}
+
+TEST(RangesManagerTest, ReleaseBucketRangesOnDestroy) {
+  std::unique_ptr<RangesManager> ranges_manager =
+      std::make_unique<RangesManager>();
+
+  // Create a BucketRanges. We call |ResetChecksum| to calculate and set its
+  // checksum. Checksums are used to validate integrity (and test for
+  // non-equivalence) and should be computed after a BucketRanges is fully
+  // initialized. Note that BucketRanges are initialized with 0 for all ranges,
+  // i.e., all buckets will be [0, 0).
+  BucketRanges* ranges = new BucketRanges(1);
+  ranges->ResetChecksum();
+
+  // Register new range.
+  EXPECT_EQ(ranges, ranges_manager->RegisterOrDeleteDuplicateRanges(ranges));
+  EXPECT_THAT(ranges_manager->GetBucketRanges(), UnorderedElementsAre(ranges));
+
+  // Explicitly destroy |ranges_manager|.
+  ranges_manager.reset();
+
+  // LeakSanitizer (lsan) bots will verify that |ranges| will be properly
+  // released after destroying |ranges_manager|.
+}
+
+}  // namespace base
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc
index 90a296e..1f808ca 100644
--- a/base/metrics/statistics_recorder.cc
+++ b/base/metrics/statistics_recorder.cc
@@ -47,17 +47,6 @@
 std::atomic<StatisticsRecorder::GlobalSampleCallback>
     StatisticsRecorder::global_sample_callback_{nullptr};
 
-size_t StatisticsRecorder::BucketRangesHash::operator()(
-    const BucketRanges* const a) const {
-  return a->checksum();
-}
-
-bool StatisticsRecorder::BucketRangesEqual::operator()(
-    const BucketRanges* const a,
-    const BucketRanges* const b) const {
-  return a->Equals(b);
-}
-
 StatisticsRecorder::ScopedHistogramSampleObserver::
     ScopedHistogramSampleObserver(const std::string& name,
                                   OnSampleCallback callback)
@@ -140,19 +129,14 @@
 // static
 const BucketRanges* StatisticsRecorder::RegisterOrDeleteDuplicateRanges(
     const BucketRanges* ranges) {
-  DCHECK(ranges->HasValidChecksum());
-
-  // Declared before |auto_lock| to ensure correct destruction order.
-  std::unique_ptr<const BucketRanges> ranges_deleter;
   const AutoLock auto_lock(lock_.Get());
   EnsureGlobalRecorderWhileLocked();
 
-  const BucketRanges* const registered = *top_->ranges_.insert(ranges).first;
-  if (registered == ranges) {
+  const BucketRanges* const registered =
+      top_->ranges_manager_.RegisterOrDeleteDuplicateRanges(ranges);
+
+  if (registered == ranges)
     ANNOTATE_LEAKING_OBJECT_PTR(ranges);
-  } else {
-    ranges_deleter.reset(ranges);
-  }
 
   return registered;
 }
@@ -189,12 +173,10 @@
 
 // static
 std::vector<const BucketRanges*> StatisticsRecorder::GetBucketRanges() {
-  std::vector<const BucketRanges*> out;
   const AutoLock auto_lock(lock_.Get());
   EnsureGlobalRecorderWhileLocked();
-  out.reserve(top_->ranges_.size());
-  out.assign(top_->ranges_.begin(), top_->ranges_.end());
-  return out;
+
+  return top_->ranges_manager_.GetBucketRanges();
 }
 
 // static
@@ -366,7 +348,11 @@
 std::unique_ptr<StatisticsRecorder>
 StatisticsRecorder::CreateTemporaryForTesting() {
   const AutoLock auto_lock(lock_.Get());
-  return WrapUnique(new StatisticsRecorder());
+  std::unique_ptr<StatisticsRecorder> temporary_recorder =
+      WrapUnique(new StatisticsRecorder());
+  temporary_recorder->ranges_manager_
+      .DoNotReleaseRangesOnDestroyForTesting();  // IN-TEST
+  return temporary_recorder;
 }
 
 // static
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h
index e8c7d98..9a436a4 100644
--- a/base/metrics/statistics_recorder.h
+++ b/base/metrics/statistics_recorder.h
@@ -26,6 +26,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_base.h"
+#include "base/metrics/ranges_manager.h"
 #include "base/metrics/record_histogram_checker.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/strings/string_piece.h"
@@ -306,18 +307,6 @@
                              scoped_refptr<HistogramSampleObserverList>>
       ObserverMap;
 
-  struct BucketRangesHash {
-    size_t operator()(const BucketRanges* a) const;
-  };
-
-  struct BucketRangesEqual {
-    bool operator()(const BucketRanges* a, const BucketRanges* b) const;
-  };
-
-  typedef std::
-      unordered_set<const BucketRanges*, BucketRangesHash, BucketRangesEqual>
-          RangesMap;
-
   friend class StatisticsRecorderTest;
   FRIEND_TEST_ALL_PREFIXES(StatisticsRecorderTest, IterationTest);
 
@@ -355,8 +344,8 @@
 
   HistogramMap histograms_;
   ObserverMap observers_;
-  RangesMap ranges_;
   HistogramProviders providers_;
+  RangesManager ranges_manager_;
   std::unique_ptr<RecordHistogramChecker> record_checker_;
 
   // Previous global recorder that existed when this one was created.
diff --git a/base/metrics/statistics_recorder_unittest.cc b/base/metrics/statistics_recorder_unittest.cc
index 0d23e20..f9304d8d 100644
--- a/base/metrics/statistics_recorder_unittest.cc
+++ b/base/metrics/statistics_recorder_unittest.cc
@@ -156,43 +156,6 @@
               UnorderedElementsAre(ranges));
 }
 
-TEST_P(StatisticsRecorderTest, RegisterBucketRanges) {
-  std::vector<const BucketRanges*> registered_ranges;
-
-  BucketRanges* ranges1 = new BucketRanges(3);
-  ranges1->ResetChecksum();
-  BucketRanges* ranges2 = new BucketRanges(4);
-  ranges2->ResetChecksum();
-
-  // Register new ranges.
-  EXPECT_EQ(ranges1,
-            StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
-  EXPECT_EQ(ranges2,
-            StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges2));
-  EXPECT_THAT(StatisticsRecorder::GetBucketRanges(),
-              UnorderedElementsAre(ranges1, ranges2));
-
-  // Register some ranges again.
-  EXPECT_EQ(ranges1,
-            StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
-  EXPECT_THAT(StatisticsRecorder::GetBucketRanges(),
-              UnorderedElementsAre(ranges1, ranges2));
-
-  // Make sure the ranges is still the one we know.
-  ASSERT_EQ(3u, ranges1->size());
-  EXPECT_EQ(0, ranges1->range(0));
-  EXPECT_EQ(0, ranges1->range(1));
-  EXPECT_EQ(0, ranges1->range(2));
-
-  // Register ranges with same values.
-  BucketRanges* ranges3 = new BucketRanges(3);
-  ranges3->ResetChecksum();
-  EXPECT_EQ(ranges1,  // returning ranges1
-            StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges3));
-  EXPECT_THAT(StatisticsRecorder::GetBucketRanges(),
-              UnorderedElementsAre(ranges1, ranges2));
-}
-
 TEST_P(StatisticsRecorderTest, RegisterHistogram) {
   // Create a Histogram that was not registered.
   Histogram* const histogram1 = CreateHistogram("TestHistogram1", 1, 1000, 10);
diff --git a/build/config/ios/ios_sdk.gni b/build/config/ios/ios_sdk.gni
index 5d5399a..974fea7d 100644
--- a/build/config/ios/ios_sdk.gni
+++ b/build/config/ios/ios_sdk.gni
@@ -87,11 +87,6 @@
   primary_fat_toolchain_name = ""
 }
 
-# Official builds may not use goma.
-assert(!((use_goma || use_remoteexec) && is_chrome_branded &&
-             is_official_build && target_cpu == "arm64"),
-       "goma/re-client use is forbidden for official iOS builds.")
-
 assert(custom_toolchain == "" || additional_target_cpus == [],
        "cannot define both custom_toolchain and additional_target_cpus")
 
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 82e1600..55b0379c8 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-7.20220331.1.1
+7.20220331.2.1
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 82e1600..3f94251a 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-7.20220331.1.1
+7.20220331.3.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 6dc5632c..55b0379c8 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-7.20220331.0.1
+7.20220331.2.1
diff --git a/cc/base/math_util.cc b/cc/base/math_util.cc
index c5393bc7..a35318d 100644
--- a/cc/base/math_util.cc
+++ b/cc/base/math_util.cc
@@ -15,6 +15,7 @@
 #include "base/trace_event/traced_value.h"
 #include "base/values.h"
 #include "ui/gfx/geometry/angle_conversions.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/quad_f.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rect_conversions.h"
@@ -1005,6 +1006,18 @@
   res->AppendDouble(rect.GetCornerRadii(gfx::RRectF::Corner::kLowerRight).y());
   res->AppendDouble(rect.GetCornerRadii(gfx::RRectF::Corner::kLowerLeft).x());
   res->AppendDouble(rect.GetCornerRadii(gfx::RRectF::Corner::kLowerLeft).y());
+}
+
+void MathUtil::AddToTracedValue(const char* name,
+                                const gfx::LinearGradient& gradient,
+                                base::trace_event::TracedValue* res) {
+  res->BeginArray(name);
+  res->AppendInteger(gradient.angle());
+  res->AppendInteger(gradient.step_count());
+  for (size_t i = 0; i < gradient.step_count(); i++) {
+    res->AppendDouble(gradient.steps()[i].percent);
+    res->AppendInteger(gradient.steps()[i].alpha);
+  }
   res->EndArray();
 }
 
diff --git a/cc/base/math_util.h b/cc/base/math_util.h
index 558ba608..a29fc49 100644
--- a/cc/base/math_util.h
+++ b/cc/base/math_util.h
@@ -39,6 +39,7 @@
 class Vector2dF;
 class Vector2d;
 class Vector3dF;
+class LinearGradient;
 }  // namespace gfx
 
 namespace cc {
@@ -311,6 +312,9 @@
   static void AddCornerRadiiToTracedValue(const char* name,
                                           const gfx::RRectF& rect,
                                           base::trace_event::TracedValue* res);
+  static void AddToTracedValue(const char* name,
+                               const gfx::LinearGradient& gradient,
+                               base::trace_event::TracedValue* res);
 
   // Returns a base::Value representation of the floating point value.
   // If the value is inf, returns max double/float representation.
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index 9b363d6..198c0d9 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -408,7 +408,7 @@
   // size of this layer.
   if (!IsUsingLayerLists()) {
     if (subtree_capture_id().is_valid() || masks_to_bounds() || mask_layer() ||
-        HasRoundedCorner()) {
+        HasMaskFilter()) {
       SetSubtreePropertyChanged();
       SetPropertyTreesNeedRebuild();
     }
@@ -612,11 +612,11 @@
       node->clip += offset_to_transform_parent();
       property_trees->clip_tree_mutable().set_needs_update(true);
     }
-    if (HasRoundedCorner() && effect_tree_index() != kInvalidPropertyNodeId) {
+    if (HasMaskFilter() && effect_tree_index() != kInvalidPropertyNodeId) {
       if (EffectNode* node =
               property_trees->effect_tree_mutable().Node(effect_tree_index())) {
-        node->mask_filter_info =
-            gfx::MaskFilterInfo(effective_clip_rect, corner_radii());
+        node->mask_filter_info = gfx::MaskFilterInfo(
+            effective_clip_rect, corner_radii(), gradient_mask());
         node->effect_changed = true;
         property_trees->effect_tree_mutable().set_needs_update(true);
       }
@@ -708,13 +708,17 @@
   EnsureLayerTreeInputs().backdrop_filter_quality = quality;
 }
 
-void Layer::SetRoundedCorner(const gfx::RoundedCornersF& corner_radii) {
+void Layer::UpdateMaskFilterInfo(const gfx::RoundedCornersF* corner_radii,
+                                 const gfx::LinearGradient* gradient_mask) {
   DCHECK(IsPropertyChangeAllowed());
   auto& inputs = EnsureLayerTreeInputs();
-  if (inputs.corner_radii == corner_radii)
-    return;
 
-  inputs.corner_radii = corner_radii;
+  if (corner_radii)
+    inputs.corner_radii = *corner_radii;
+
+  if (gradient_mask)
+    inputs.gradient_mask = *gradient_mask;
+
   SetSubtreePropertyChanged();
   SetNeedsCommit();
   PropertyTrees* property_trees =
@@ -723,8 +727,8 @@
   if (property_trees && effect_tree_index() != kInvalidPropertyNodeId &&
       (node =
            property_trees->effect_tree_mutable().Node(effect_tree_index()))) {
-    node->mask_filter_info =
-        gfx::MaskFilterInfo(EffectiveClipRect(), corner_radii);
+    node->mask_filter_info = gfx::MaskFilterInfo(
+        EffectiveClipRect(), inputs.corner_radii, inputs.gradient_mask);
     node->effect_changed = true;
     property_trees->effect_tree_mutable().set_needs_update(true);
   } else {
@@ -732,6 +736,20 @@
   }
 }
 
+void Layer::SetRoundedCorner(const gfx::RoundedCornersF& corner_radii) {
+  if (EnsureLayerTreeInputs().corner_radii == corner_radii)
+    return;
+
+  UpdateMaskFilterInfo(&corner_radii, nullptr);
+}
+
+void Layer::SetGradientMask(const gfx::LinearGradient& gradient_mask) {
+  if (EnsureLayerTreeInputs().gradient_mask == gradient_mask)
+    return;
+
+  UpdateMaskFilterInfo(nullptr, &gradient_mask);
+}
+
 void Layer::SetIsFastRoundedCorner(bool enable) {
   DCHECK(IsPropertyChangeAllowed());
   auto& inputs = EnsureLayerTreeInputs();
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index b171e168..c99407a 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -34,13 +34,11 @@
 #include "components/viz/common/surfaces/region_capture_bounds.h"
 #include "components/viz/common/surfaces/subtree_capture_id.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/point3_f.h"
 #include "ui/gfx/geometry/point_f.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
-#include "ui/gfx/geometry/rrect_f.h"
-#include "ui/gfx/geometry/transform.h"
-#include "ui/gfx/geometry/vector2d_f.h"
 
 namespace viz {
 class CopyOutputRequest;
@@ -281,7 +279,9 @@
   // subtree (as if they are together as a single composited entity) when
   // blitting into their target. Setting this makes the layer masked to bounds.
   // If the layer has a clip of its own, the rounded corner will be applied
-  // along the layer's clip rect corners.
+  // along the layer's clip rect corners. TODO(sashamcintosh): Apply rounded
+  // corner when the layer has a transform that is not 2d axis aligned.
+  // Currently the rounded corner is ignored in this case.
   void SetRoundedCorner(const gfx::RoundedCornersF& corner_radii);
   const gfx::RoundedCornersF& corner_radii() const {
     return layer_tree_inputs() ? layer_tree_inputs()->corner_radii
@@ -301,6 +301,23 @@
   }
 
   // For layer tree mode only.
+  // Set or get the gradient mask which is applied to the layer and its
+  // subtree (as if they are together as a single composited entity) when
+  // blitting into their target. Setting applies a linear gradient to the layer
+  // bounds and optionally the rounded corner defined by SetRoundedCorner.
+  // TODO(sashamcintosh): Apply gradient mask when the layer has a transform
+  // that is not 2d axis aligned. Currently the gradient mask is ignored in this
+  // case.
+  void SetGradientMask(const gfx::LinearGradient& gradient_mask);
+  const gfx::LinearGradient& gradient_mask() const {
+    return layer_tree_inputs() ? layer_tree_inputs()->gradient_mask
+                               : gfx::LinearGradient::GetEmpty();
+  }
+  bool HasGradientMask() const { return !gradient_mask().IsEmpty(); }
+
+  bool HasMaskFilter() const { return HasRoundedCorner() || HasGradientMask(); }
+
+  // For layer tree mode only.
   // Set or get the opacity which should be applied to the contents of the layer
   // and its subtree (together as a single composited entity) when blending them
   // into their target. Note that this does not speak to the contents of this
@@ -1053,11 +1070,22 @@
     //     top left, top right, bottom right, bottom left
     gfx::RoundedCornersF corner_radii;
 
+    // Linear gradient mask applied to the layer's clip bounds and optionally
+    // the rounded corner given by |corner_radii|.
+    gfx::LinearGradient gradient_mask;
+
     base::RepeatingCallback<void(const gfx::PointF&, const ElementId&)>
         did_scroll_callback;
     std::vector<std::unique_ptr<viz::CopyOutputRequest>> copy_requests;
   };
 
+  // Set either one or both components of the mask filter info which is then
+  // applied to the layer and its
+  // subtree (as if they are together as a single composited entity) when
+  // blitting into their target.
+  void UpdateMaskFilterInfo(const gfx::RoundedCornersF* corner_radii,
+                            const gfx::LinearGradient* gradient_mask);
+
   ProtectedSequenceReadable<raw_ptr<Layer>> parent_;
 
   // Layer instances have a weak pointer to their LayerTreeHost.
diff --git a/cc/trees/draw_properties_unittest.cc b/cc/trees/draw_properties_unittest.cc
index 184fad97..f18d813c 100644
--- a/cc/trees/draw_properties_unittest.cc
+++ b/cc/trees/draw_properties_unittest.cc
@@ -36,6 +36,7 @@
 #include "components/viz/common/frame_sinks/copy_output_result.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/animation/keyframe/keyframed_animation_curve.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/quad_f.h"
 #include "ui/gfx/geometry/rect_conversions.h"
 #include "ui/gfx/geometry/size_conversions.h"
@@ -8119,16 +8120,32 @@
   EXPECT_EQ(child_impl->clip_rect(), expected_child_impl->clip_rect());
 }
 
+struct MaskFilterTestCase {
+  std::string test_name;
+  gfx::RoundedCornersF rounded_corners;
+  gfx::LinearGradient gradient_mask;
+};
+
+class DrawPropertiesWithLayerTreeTest :
+    public DrawPropertiesTestWithLayerTree,
+    public testing::WithParamInterface<MaskFilterTestCase> {
+};
+
 // In layer tree mode, not using impl-side PropertyTreeBuilder.
-TEST_F(DrawPropertiesTestWithLayerTree, RoundedCornerOnRenderSurface) {
+TEST_P(DrawPropertiesWithLayerTreeTest, MaskFilterOnRenderSurface) {
   // -Root
   //   - Parent 1
-  //     - [Render Surface] Child 1 with rounded corner
-  //   - [Render Surface] Parent 2 with rounded corner
+  //     - [Render Surface] Child 1 with rounded corner and/or gradient mask
+  //   - [Render Surface] Parent 2 with rounded corner and/or gradient mask
   //     - [Render Surface] Child 2
-  //   - Parent 3 with rounded corner
+  //   - Parent 3 with rounded corner and/or gradient mask
   //     - [Render Surface] Child 3
 
+  const MaskFilterTestCase test_case = GetParam();
+  gfx::LinearGradient gradient_mask = test_case.gradient_mask;
+  if (!gradient_mask.IsEmpty())
+    gradient_mask.AddStep(50, 0x50);
+
   scoped_refptr<Layer> root = Layer::Create();
   host()->SetRootLayer(root);
   root->SetBounds(gfx::Size(250, 250));
@@ -8146,7 +8163,8 @@
   parent_1->SetPosition(gfx::PointF(80, 80));
   parent_2->SetIsDrawable(true);
   parent_2->SetForceRenderSurfaceForTesting(true);
-  parent_2->SetRoundedCorner(gfx::RoundedCornersF(10.f));
+  parent_2->SetRoundedCorner(test_case.rounded_corners);
+  parent_2->SetGradientMask(gradient_mask);
   parent_2->SetIsFastRoundedCorner(true);
 
   scoped_refptr<Layer> parent_3 = Layer::Create();
@@ -8154,7 +8172,8 @@
   parent_3->SetBounds(gfx::Size(80, 80));
   parent_1->SetPosition(gfx::PointF(160, 160));
   parent_3->SetIsDrawable(true);
-  parent_3->SetRoundedCorner(gfx::RoundedCornersF(10.f));
+  parent_3->SetRoundedCorner(test_case.rounded_corners);
+  parent_3->SetGradientMask(gradient_mask);
   parent_3->SetIsFastRoundedCorner(true);
 
   scoped_refptr<Layer> child_1 = Layer::Create();
@@ -8162,7 +8181,8 @@
   child_1->SetBounds(gfx::Size(80, 80));
   child_1->SetIsDrawable(true);
   child_1->SetForceRenderSurfaceForTesting(true);
-  child_1->SetRoundedCorner(gfx::RoundedCornersF(10.f));
+  child_1->SetRoundedCorner(test_case.rounded_corners);
+  child_1->SetGradientMask(gradient_mask);
   child_1->SetIsFastRoundedCorner(true);
 
   scoped_refptr<Layer> child_2 = Layer::Create();
@@ -8180,13 +8200,33 @@
   UpdateMainDrawProperties();
   CommitAndActivate();
 
-  EXPECT_TRUE(
+  EXPECT_NE(test_case.rounded_corners.IsEmpty(),
       GetRenderSurfaceImpl(child_1)->mask_filter_info().HasRoundedCorners());
-  EXPECT_TRUE(
+  EXPECT_NE(test_case.rounded_corners.IsEmpty(),
       GetRenderSurfaceImpl(child_2)->mask_filter_info().HasRoundedCorners());
-  EXPECT_TRUE(
+  EXPECT_NE(test_case.rounded_corners.IsEmpty(),
       GetRenderSurfaceImpl(child_3)->mask_filter_info().HasRoundedCorners());
-}
 
+  EXPECT_NE(test_case.gradient_mask.IsEmpty(),
+      GetRenderSurfaceImpl(child_1)->mask_filter_info().HasGradientMask());
+  EXPECT_NE(test_case.gradient_mask.IsEmpty(),
+      GetRenderSurfaceImpl(child_2)->mask_filter_info().HasGradientMask());
+  EXPECT_NE(test_case.gradient_mask.IsEmpty(),
+      GetRenderSurfaceImpl(child_3)->mask_filter_info().HasGradientMask());
+  }
+
+
+INSTANTIATE_TEST_SUITE_P(
+    DrawPropertiesWithLayerTreeTests,
+    DrawPropertiesWithLayerTreeTest,
+    testing::ValuesIn<MaskFilterTestCase>({
+        {"WithRoundedCorners", gfx::RoundedCornersF(10.f),
+         gfx::LinearGradient::GetEmpty()},
+        {"WithGradientMask", gfx::RoundedCornersF(0.f), gfx::LinearGradient(45)},
+        {"WithRoundedCornersAndGradientMask", gfx::RoundedCornersF(10.f),
+         gfx::LinearGradient(45)},
+    }),
+    [](const testing::TestParamInfo<DrawPropertiesWithLayerTreeTest::ParamType>&
+           info) { return info.param.test_name; });
 }  // namespace
 }  // namespace cc
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
index fa9ed877..6dd910d1 100644
--- a/cc/trees/draw_property_utils.cc
+++ b/cc/trees/draw_property_utils.cc
@@ -739,14 +739,14 @@
     return kEmptyMaskFilterInfoPair;
 
   // Traverse the parent chain up to the render target to find a node which has
-  // a rounded corner bounds set.
+  // mask filter info set.
   const EffectNode* node = effect_node;
-  bool found_rounded_corner = false;
+  bool found_mask_filter_info = false;
+
   while (node) {
-    if (node->mask_filter_info.HasRoundedCorners()) {
-      found_rounded_corner = true;
+    found_mask_filter_info = !node->mask_filter_info.IsEmpty();
+    if (found_mask_filter_info)
       break;
-    }
 
     // If the iteration has reached a node in the parent chain that has a render
     // surface, then break. If this iteration is for a render surface to begin
@@ -763,9 +763,9 @@
     node = effect_tree->parent(node);
   }
 
-  // While traversing up the parent chain we did not find any node with a
-  // rounded corner.
-  if (!node || !found_rounded_corner)
+  // While traversing up the parent chain we did not find any node with mask
+  // filter info.
+  if (!node || !found_mask_filter_info)
     return kEmptyMaskFilterInfoPair;
 
   gfx::Transform to_target;
diff --git a/cc/trees/effect_node.cc b/cc/trees/effect_node.cc
index 40425ca..cf21813 100644
--- a/cc/trees/effect_node.cc
+++ b/cc/trees/effect_node.cc
@@ -134,6 +134,8 @@
       return "backdrop filter animation";
     case RenderSurfaceReason::kRoundedCorner:
       return "rounded corner";
+    case RenderSurfaceReason::kGradientMask:
+      return "gradient mask";
     case RenderSurfaceReason::kClipPath:
       return "clip path";
     case RenderSurfaceReason::kClipAxisAlignment:
@@ -184,6 +186,10 @@
       value->SetBoolean("mask_filter_is_fast_rounded_corner",
                         is_fast_rounded_corner);
     }
+    if (mask_filter_info.HasGradientMask()) {
+      MathUtil::AddToTracedValue("mask_filter_gradient_mask",
+                                 mask_filter_info.gradient_mask(), value);
+    }
   }
   value->SetString("blend_mode", SkBlendMode_Name(blend_mode));
   value->SetString("subtree_capture_id", subtree_capture_id.ToString());
diff --git a/cc/trees/effect_node.h b/cc/trees/effect_node.h
index 733eeaa..41039a58 100644
--- a/cc/trees/effect_node.h
+++ b/cc/trees/effect_node.h
@@ -51,6 +51,7 @@
   kMirrored,
   kSubtreeIsBeingCaptured,
   kDocumentTransitionParticipant,
+  kGradientMask,
   // This must be the last value because it's used in tracing code to know the
   // number of reasons.
   kTest,
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index 7b6e1a79..20c374b 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -48,6 +48,7 @@
   bool not_axis_aligned_since_last_clip;
   gfx::Transform compound_transform_since_render_target;
   bool* subtree_has_rounded_corner;
+  bool* subtree_has_gradient_mask;
 };
 
 class PropertyTreeBuilderContext {
@@ -90,6 +91,7 @@
   bool UpdateRenderSurfaceIfNeeded(int parent_effect_tree_id,
                                    DataForRecursion* data_for_children,
                                    bool subtree_has_rounded_corner,
+                                   bool subtree_has_gradient_mask,
                                    bool created_transform_node) const;
 
   raw_ptr<LayerTreeHost> layer_tree_host_;
@@ -169,7 +171,7 @@
 }
 
 bool LayerClipsSubtree(Layer* layer) {
-  return LayerClipsSubtreeToItsBounds(layer) || layer->HasRoundedCorner() ||
+  return LayerClipsSubtreeToItsBounds(layer) || layer->HasMaskFilter() ||
          !layer->clip_rect().IsEmpty();
 }
 
@@ -240,7 +242,7 @@
   DCHECK(!is_scrollable || is_snapped);
   bool requires_node = is_root || is_snapped || has_significant_transform ||
                        has_any_transform_animation || has_surface ||
-                       layer->HasRoundedCorner();
+                       layer->HasMaskFilter();
 
   int parent_index = kRootPropertyNodeId;
   gfx::Vector2dF parent_offset;
@@ -377,6 +379,10 @@
     return RenderSurfaceReason::kOpacity;
   }
 
+  // A layer with gradient mask is translucent too.
+  if (layer->HasGradientMask() && at_least_two_layers_in_subtree_draw_content)
+    return RenderSurfaceReason::kGradientMask;
+
   // If we force it.
   if (layer->force_render_surface_for_testing())
     return RenderSurfaceReason::kTest;
@@ -446,7 +452,7 @@
   bool requires_node =
       is_root || has_transparency || has_potential_opacity_animation ||
       has_potential_filter_animation || has_non_axis_aligned_clip ||
-      should_create_render_surface || layer->HasRoundedCorner();
+      should_create_render_surface || layer->HasMaskFilter();
 
   int parent_id = data_from_ancestor.effect_tree_parent;
 
@@ -514,19 +520,20 @@
           ? node_id
           : data_from_ancestor.closest_ancestor_being_captured;
 
-  if (layer->HasRoundedCorner()) {
+  if (layer->HasMaskFilter()) {
     // This is currently in the local space of the layer and hence in an invalid
     // space. Once we have the associated transform node for this effect node,
     // we will update this to the transform node's coordinate space.
     node->mask_filter_info =
-        gfx::MaskFilterInfo(layer->EffectiveClipRect(), layer->corner_radii());
+        gfx::MaskFilterInfo(layer->EffectiveClipRect(), layer->corner_radii(),
+                            layer->gradient_mask());
     node->is_fast_rounded_corner = layer->is_fast_rounded_corner();
   }
 
   if (!is_root) {
-    // Having a rounded corner or a render surface, both trigger the creation
-    // of a transform node.
-    if (should_create_render_surface || layer->HasRoundedCorner()) {
+    // Rounded corner, gradient mask or render surface should trigger the
+    // creation of a transform node.
+    if (should_create_render_surface || layer->HasMaskFilter()) {
       // In this case, we will create a transform node, so it's safe to use the
       // next available id from the transform tree as this effect node's
       // transform id.
@@ -577,10 +584,12 @@
     int parent_effect_tree_id,
     DataForRecursion* data_for_children,
     bool subtree_has_rounded_corner,
+    bool subtree_has_gradient_mask,
     bool created_transform_node) const {
   // No effect node was generated for this layer.
   if (parent_effect_tree_id == data_for_children->effect_tree_parent) {
     *data_for_children->subtree_has_rounded_corner = subtree_has_rounded_corner;
+    *data_for_children->subtree_has_gradient_mask = subtree_has_gradient_mask;
     return false;
   }
 
@@ -588,30 +597,38 @@
       effect_tree_.Node(data_for_children->effect_tree_parent);
   const bool has_rounded_corner =
       effect_node->mask_filter_info.HasRoundedCorners();
+  const bool has_gradient_mask =
+      effect_node->mask_filter_info.HasGradientMask();
 
-  // Having a rounded corner should trigger a transform node.
-  if (has_rounded_corner)
+  // Having a mask (either rounded corner or gradient) should trigger a
+  // transform node.
+  if (has_rounded_corner || has_gradient_mask)
     DCHECK(created_transform_node);
 
-  // If the subtree has a rounded corner and this node also has a rounded
-  // corner, then this node needs to have a render surface to prevent any
-  // intersections between the rrects. Since GL renderer can only handle a
-  // single rrect per quad at draw time, it would be unable to handle
-  // intersections thus resulting in artifacts.
+  // If the subtree has a mask (either rounded corner or gradient), and this
+  // node also has a mask too, then this node needs to have a render surface to
+  // prevent any intersections between the masks. Since GL renderer can only
+  // handle a single rrect/gradient mask per quad at draw time, it would be
+  // unable to handle intersections thus resulting in artifacts.
   if (subtree_has_rounded_corner && has_rounded_corner)
     effect_node->render_surface_reason = RenderSurfaceReason::kRoundedCorner;
+  else if (subtree_has_gradient_mask && has_gradient_mask)
+    effect_node->render_surface_reason = RenderSurfaceReason::kGradientMask;
 
-  // Inform the parent that its subtree has rounded corners if one of the two
-  // scenario is true:
-  //   - The subtree rooted at this node has a rounded corner and this node
-  //     does not have a render surface.
-  //   - This node has a rounded corner.
+  // Inform the parent that its subtree has a mask (either rounded corner or
+  // gradient) if one of the two scenario is true:
+  //   - The subtree rooted at this node has a mask (either rounded corner or
+  //     gradient) and this node does not have a render surface.
+  //   - This node has a mask (either rounded corner or mask)
   // The parent may have a rounded corner and would want to create a render
   // surface of its own to prevent blending artifacts due to intersecting
   // rounded corners.
   *data_for_children->subtree_has_rounded_corner =
       (subtree_has_rounded_corner && !effect_node->HasRenderSurface()) ||
       has_rounded_corner;
+  *data_for_children->subtree_has_gradient_mask =
+      (subtree_has_gradient_mask && !effect_node->HasRenderSurface()) ||
+      has_gradient_mask;
   return effect_node->HasRenderSurface();
 }
 
@@ -682,6 +699,7 @@
 
   DataForRecursion data_for_children(data_from_parent);
   *data_for_children.subtree_has_rounded_corner = false;
+  *data_for_children.subtree_has_gradient_mask = false;
 
   bool created_render_surface =
       AddEffectNodeIfNeeded(data_from_parent, layer, &data_for_children);
@@ -707,16 +725,19 @@
       !has_non_axis_aligned_clip;
 
   bool subtree_has_rounded_corner = false;
+  bool subtree_has_gradient_mask = false;
   for (const scoped_refptr<Layer>& child : layer->children()) {
     if (layer->subtree_property_changed())
       child->SetSubtreePropertyChanged();
     BuildPropertyTreesInternal(child.get(), data_for_children);
     subtree_has_rounded_corner |= *data_for_children.subtree_has_rounded_corner;
+    subtree_has_gradient_mask |= *data_for_children.subtree_has_gradient_mask;
   }
 
   created_render_surface = UpdateRenderSurfaceIfNeeded(
       data_from_parent.effect_tree_parent, &data_for_children,
-      subtree_has_rounded_corner, created_transform_node);
+      subtree_has_rounded_corner, subtree_has_gradient_mask,
+      created_transform_node);
 }
 
 void PropertyTreeBuilderContext::BuildPropertyTrees() {
@@ -767,6 +788,8 @@
 
   bool subtree_has_rounded_corner;
   data_for_recursion.subtree_has_rounded_corner = &subtree_has_rounded_corner;
+  bool subtree_has_gradient_mask;
+  data_for_recursion.subtree_has_gradient_mask = &subtree_has_gradient_mask;
 
   BuildPropertyTreesInternal(root_layer_, data_for_recursion);
   property_trees_.set_needs_rebuild(false);
diff --git a/cc/trees/property_tree_builder_unittest.cc b/cc/trees/property_tree_builder_unittest.cc
index ee8c82f9..b5639ee 100644
--- a/cc/trees/property_tree_builder_unittest.cc
+++ b/cc/trees/property_tree_builder_unittest.cc
@@ -42,6 +42,9 @@
   RenderSurfaceImpl* GetRenderSurfaceImpl(const scoped_refptr<Layer>& layer) {
     return GetRenderSurface(ImplOf(layer));
   }
+  LayerImpl* GetLayerImpl(const scoped_refptr<Layer>& layer) {
+    return host()->host_impl()->active_tree()->LayerById(layer->id());
+  }
 
   // Updates main thread draw properties, commits main thread tree to
   // impl-side pending tree, and updates pending tree draw properties.
@@ -747,6 +750,252 @@
             GetRenderSurfaceImpl(parent)->DrawableContentRect());
 }
 
+TEST_F(PropertyTreeBuilderTest, GradientMask) {
+  auto root = Layer::Create();
+  host()->SetRootLayer(root);
+  root->SetBounds(gfx::Size(200, 200));
+  root->SetIsDrawable(true);
+
+  auto child1 = Layer::Create();
+  root->AddChild(child1);
+  child1->SetBounds(gfx::Size(100, 100));
+  child1->SetIsDrawable(true);
+
+  gfx::LinearGradient gradient_mask(45);
+  gradient_mask.AddStep(50, 0x50);
+  child1->SetGradientMask(gradient_mask);
+
+  // Without render surface.
+  CommitAndActivate();
+  {
+    auto* effect_node1 = GetEffectNode(child1.get());
+    EXPECT_FALSE(effect_node1->mask_filter_info.HasRoundedCorners());
+    EXPECT_EQ(gfx::RectF(100, 100), effect_node1->mask_filter_info.bounds());
+    EXPECT_TRUE(effect_node1->mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gradient_mask, effect_node1->mask_filter_info.gradient_mask());
+    EXPECT_FALSE(effect_node1->HasRenderSurface());
+    auto* layer_impl1 = GetLayerImpl(child1);
+    EXPECT_TRUE(
+        layer_impl1->draw_properties().mask_filter_info.HasGradientMask());
+  }
+
+  // Scale and translate should work.
+  gfx::Transform scale_and_translate_transform;
+  scale_and_translate_transform.Translate({10.f, 10.f});
+  scale_and_translate_transform.Scale(3.f, 2.f);
+  child1->SetTransform(scale_and_translate_transform);
+  CommitAndActivate();
+  {
+    // |mask_info| is in the coordinate space of the transform node associated
+    // with this effect node.
+    auto* effect_node1 = GetEffectNode(child1.get());
+    EXPECT_FALSE(effect_node1->mask_filter_info.HasRoundedCorners());
+    EXPECT_TRUE(effect_node1->mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gfx::RectF(100, 100), effect_node1->mask_filter_info.bounds());
+    EXPECT_EQ(gradient_mask, effect_node1->mask_filter_info.gradient_mask());
+    EXPECT_FALSE(effect_node1->HasRenderSurface());
+
+    // |mask_info| coordinates are in the target space of the layer.
+    auto* layer_impl1 = GetLayerImpl(child1);
+    EXPECT_FALSE(layer_impl1->draw_properties().mask_filter_info.IsEmpty());
+    EXPECT_FALSE(
+        layer_impl1->draw_properties().mask_filter_info.HasRoundedCorners());
+    EXPECT_TRUE(
+        layer_impl1->draw_properties().mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gfx::RectF(10, 10, 300, 200),
+              layer_impl1->draw_properties().mask_filter_info.bounds());
+    // |angle| is updated by the scale transform.
+    EXPECT_EQ(33, layer_impl1->draw_properties()
+                      .mask_filter_info.gradient_mask()
+                      .angle());
+    EXPECT_EQ(gradient_mask.steps(), layer_impl1->draw_properties()
+                                         .mask_filter_info.gradient_mask()
+                                         .steps());
+  }
+
+  // Rotate transform eliminates gradient mask.
+  gfx::Transform rotate_transform;
+  rotate_transform.Rotate(45);
+  child1->SetTransform(rotate_transform);
+  CommitAndActivate();
+  {
+    auto* layer_impl1 = GetLayerImpl(child1);
+    EXPECT_EQ(gfx::RRectF::Type::kEmpty,
+              layer_impl1->draw_properties()
+                  .mask_filter_info.rounded_corner_bounds()
+                  .GetType());
+    EXPECT_FALSE(
+        layer_impl1->draw_properties().mask_filter_info.HasGradientMask());
+  }
+
+  // Reset transform
+  child1->SetTransform(gfx::Transform());
+
+  // A child layer will create a render surface.
+  auto grand_child1 = Layer::Create();
+  child1->AddChild(grand_child1);
+  grand_child1->SetBounds(gfx::Size(100, 100));
+  grand_child1->SetIsDrawable(true);
+  CommitAndActivate();
+  EXPECT_TRUE(GetEffectNode(child1.get())->HasRenderSurface());
+  {
+    auto* effect_node1 = GetEffectNode(child1.get());
+    EXPECT_TRUE(effect_node1->mask_filter_info.HasGradientMask());
+    EXPECT_FALSE(effect_node1->mask_filter_info.HasRoundedCorners());
+    EXPECT_EQ(gfx::RectF(100, 100), effect_node1->mask_filter_info.bounds());
+    EXPECT_EQ(gradient_mask, effect_node1->mask_filter_info.gradient_mask());
+    EXPECT_TRUE(effect_node1->HasRenderSurface());
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().IsEmpty());
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().HasRoundedCorners());
+    EXPECT_TRUE(render_surface_impl1->mask_filter_info().HasGradientMask());
+    EXPECT_EQ(gfx::RectF(100, 100),
+              render_surface_impl1->mask_filter_info().bounds());
+    EXPECT_EQ(gradient_mask,
+              render_surface_impl1->mask_filter_info().gradient_mask());
+  }
+
+  child1->SetTransform(scale_and_translate_transform);
+  CommitAndActivate();
+  {
+    // |mask_info| is in the coordinate space of the transform node associated
+    // with this effect node.
+    auto* effect_node1 = GetEffectNode(child1.get());
+    EXPECT_TRUE(effect_node1->mask_filter_info.HasGradientMask());
+    EXPECT_FALSE(effect_node1->mask_filter_info.HasRoundedCorners());
+    EXPECT_EQ(gfx::RectF(100, 100), effect_node1->mask_filter_info.bounds());
+    EXPECT_EQ(gradient_mask, effect_node1->mask_filter_info.gradient_mask());
+    EXPECT_TRUE(effect_node1->HasRenderSurface());
+
+    // |mask_info| coordinates are in the target space of the render surface's
+    // layer.
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().IsEmpty());
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().HasRoundedCorners());
+    EXPECT_TRUE(render_surface_impl1->mask_filter_info().HasGradientMask());
+    EXPECT_EQ(gfx::RectF(10, 10, 300, 200),
+              render_surface_impl1->mask_filter_info().bounds());
+    // |angle| is updated by the scale transform.
+    EXPECT_EQ(33,
+              render_surface_impl1->mask_filter_info().gradient_mask().angle());
+    EXPECT_EQ(gradient_mask.steps(),
+              render_surface_impl1->mask_filter_info().gradient_mask().steps());
+  }
+
+  // Rotate transform eliminates gradient mask.
+  child1->SetTransform(rotate_transform);
+  CommitAndActivate();
+  {
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_EQ(gfx::RRectF::Type::kEmpty,
+              render_surface_impl1->mask_filter_info()
+                  .rounded_corner_bounds()
+                  .GetType());
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().HasGradientMask());
+  }
+}
+
+TEST_F(PropertyTreeBuilderTest, NestedGradientMask) {
+  auto root = Layer::Create();
+  host()->SetRootLayer(root);
+  root->SetBounds(gfx::Size(200, 200));
+  root->SetIsDrawable(true);
+
+  auto child1 = Layer::Create();
+  root->AddChild(child1);
+  child1->SetBounds(gfx::Size(100, 100));
+  child1->SetIsDrawable(true);
+
+  auto grand_child1 = Layer::Create();
+  child1->AddChild(grand_child1);
+  grand_child1->SetBounds(gfx::Size(50, 50));
+  grand_child1->SetIsDrawable(true);
+
+  gfx::LinearGradient gradient_mask1(30);
+  gradient_mask1.AddStep(50, 0x50);
+  child1->SetGradientMask(gradient_mask1);
+
+  gfx::LinearGradient gradient_mask2(45);
+  gradient_mask2.AddStep(0, 0xFF);
+  gradient_mask2.AddStep(100, 0x0);
+  grand_child1->SetGradientMask(gradient_mask2);
+
+  CommitAndActivate();
+  EXPECT_TRUE(GetEffectNode(child1.get())->HasRenderSurface());
+  {
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_EQ(gradient_mask1,
+              render_surface_impl1->mask_filter_info().gradient_mask());
+
+    auto* effect_node2 = GetEffectNode(grand_child1.get());
+    EXPECT_FALSE(effect_node2->mask_filter_info.IsEmpty());
+    EXPECT_FALSE(effect_node2->mask_filter_info.HasRoundedCorners());
+    EXPECT_TRUE(effect_node2->mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gfx::RectF(50, 50), effect_node2->mask_filter_info.bounds());
+    EXPECT_EQ(gradient_mask2, effect_node2->mask_filter_info.gradient_mask());
+    EXPECT_FALSE(effect_node2->HasRenderSurface());
+    auto& draw_properties2 = GetLayerImpl(grand_child1)->draw_properties();
+    EXPECT_FALSE(draw_properties2.mask_filter_info.IsEmpty());
+    EXPECT_FALSE(draw_properties2.mask_filter_info.HasRoundedCorners());
+    EXPECT_TRUE(draw_properties2.mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gfx::RectF(50, 50), draw_properties2.mask_filter_info.bounds());
+    EXPECT_EQ(gradient_mask2,
+              draw_properties2.mask_filter_info.gradient_mask());
+  }
+
+  gfx::Transform scale_and_translate_transform1;
+  scale_and_translate_transform1.Translate({10.f, 10.f});
+  scale_and_translate_transform1.Scale(3.f, 2.f);
+  child1->SetTransform(scale_and_translate_transform1);
+  gfx::Transform scale_and_translate_transform2;
+  scale_and_translate_transform2.Translate({10.f, 5.f});
+  scale_and_translate_transform2.Scale(2.f, 1.5f);
+  grand_child1->SetTransform(scale_and_translate_transform2);
+
+  CommitAndActivate();
+  EXPECT_TRUE(GetEffectNode(child1.get())->HasRenderSurface());
+  {
+    // |mask_info| coordinates are in the target space of the render surface's
+    // layer.
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_EQ(gradient_mask1.steps(),
+              render_surface_impl1->mask_filter_info().gradient_mask().steps());
+    // |angle| is updated by the scale transform.
+    EXPECT_EQ(21,
+              render_surface_impl1->mask_filter_info().gradient_mask().angle());
+
+    // |mask_info| is in the coordinate space of the transform node associated
+    // with this effect node.
+    auto* effect_node2 = GetEffectNode(grand_child1.get());
+    EXPECT_FALSE(effect_node2->HasRenderSurface());
+
+    // |mask_info| coordinates are in the target space of the layer.
+    auto& draw_properties2 = GetLayerImpl(grand_child1)->draw_properties();
+    EXPECT_FALSE(draw_properties2.mask_filter_info.IsEmpty());
+    EXPECT_FALSE(draw_properties2.mask_filter_info.HasRoundedCorners());
+    EXPECT_TRUE(draw_properties2.mask_filter_info.HasGradientMask());
+    EXPECT_EQ(gfx::RectF(30, 10, 300, 150),
+              draw_properties2.mask_filter_info.bounds());
+    // |angle| is updated by the scale transform.
+    EXPECT_EQ(26, draw_properties2.mask_filter_info.gradient_mask().angle());
+    EXPECT_EQ(gradient_mask2.steps(),
+              draw_properties2.mask_filter_info.gradient_mask().steps());
+  }
+
+  gfx::Transform rotate_transform;
+  rotate_transform.Rotate(45);
+  child1->SetTransform(rotate_transform);
+  CommitAndActivate();
+  {
+    auto* render_surface_impl1 = GetRenderSurfaceImpl(child1);
+    EXPECT_EQ(gfx::RRectF::Type::kEmpty,
+              render_surface_impl1->mask_filter_info()
+                  .rounded_corner_bounds()
+                  .GetType());
+    EXPECT_FALSE(render_surface_impl1->mask_filter_info().HasGradientMask());
+  }
+}
+
 TEST_F(PropertyTreeBuilderTest, RoundedCornerBounds) {
   // Layer Tree:
   // +root
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index eb28659..ee6c0a4 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -47,6 +47,7 @@
   "java/src/org/chromium/chrome/browser/SnackbarActivity.java",
   "java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java",
   "java/src/org/chromium/chrome/browser/SynchronousInitializationActivity.java",
+  "java/src/org/chromium/chrome/browser/TabUsageTracker.java",
   "java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java",
   "java/src/org/chromium/chrome/browser/WarmupManager.java",
   "java/src/org/chromium/chrome/browser/WebContentsFactory.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 3912d8e..ceefa92 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -66,6 +66,7 @@
   "junit/src/org/chromium/chrome/browser/compositor/layouts/SceneOverlayTest.java",
   "junit/src/org/chromium/chrome/browser/compositor/layouts/StaticLayoutUnitTest.java",
   "junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java",
+  "junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabUsageTrackerTest.java",
   "junit/src/org/chromium/chrome/browser/content_capture/ContentCaptureHistoryDeletionObserverTest.java",
   "junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuCoordinatorTest.java",
   "junit/src/org/chromium/chrome/browser/contextmenu/ContextMenuHeaderMediatorTest.java",
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
index 5251860..5bb1826 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingMediator.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.keyboard_accessory;
 
+import static org.chromium.chrome.browser.flags.ChromeFeatureList.AUTOFILL_ENABLE_MANUAL_FALLBACK_FOR_VIRTUAL_CARDS;
 import static org.chromium.chrome.browser.flags.ChromeFeatureList.AUTOFILL_KEYBOARD_ACCESSORY;
 import static org.chromium.chrome.browser.flags.ChromeFeatureList.AUTOFILL_MANUAL_FALLBACK_ANDROID;
 import static org.chromium.chrome.browser.keyboard_accessory.ManualFillingProperties.KEYBOARD_EXTENSION_STATE;
@@ -661,7 +662,10 @@
     private boolean canCreateSheet(@AccessoryTabType int tabType) {
         if (!isInitialized()) return false;
         switch (tabType) {
-            case AccessoryTabType.CREDIT_CARDS: // Intentional fallthrough.
+            case AccessoryTabType.CREDIT_CARDS:
+                return ChromeFeatureList.isEnabled(AUTOFILL_MANUAL_FALLBACK_ANDROID)
+                        || ChromeFeatureList.isEnabled(
+                                AUTOFILL_ENABLE_MANUAL_FALLBACK_FOR_VIRTUAL_CARDS);
             case AccessoryTabType.ADDRESSES:
                 return ChromeFeatureList.isEnabled(AUTOFILL_MANUAL_FALLBACK_ANDROID);
             case AccessoryTabType.PASSWORDS:
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryIntegrationTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryIntegrationTest.java
index 05728fe5..0813c03 100644
--- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryIntegrationTest.java
+++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryIntegrationTest.java
@@ -90,7 +90,7 @@
     @Test
     @SmallTest
     @EnableFeatures({ChromeFeatureList.AUTOFILL_MANUAL_FALLBACK_ANDROID})
-    public void testCreditCardSheetAvailable() {
+    public void testCreditCardSheetAvailable_whenManualFallbackEnabled() {
         mHelper.loadTestPage(false);
 
         CriteriaHelper.pollUiThread(() -> {
@@ -100,8 +100,24 @@
 
     @Test
     @SmallTest
-    @DisableFeatures({ChromeFeatureList.AUTOFILL_MANUAL_FALLBACK_ANDROID})
-    public void testCreditCardSheetUnavailableWithoutFeature() {
+    @EnableFeatures({ChromeFeatureList.AUTOFILL_ENABLE_MANUAL_FALLBACK_FOR_VIRTUAL_CARDS})
+    @DisableFeatures({ChromeFeatureList.AUTOFILL_KEYBOARD_ACCESSORY,
+            ChromeFeatureList.AUTOFILL_MANUAL_FALLBACK_ANDROID})
+    public void
+    testCreditCardSheetAvailable_whenManualFallbackForVirtualCardsEnabled() {
+        mHelper.loadTestPage(false);
+
+        CriteriaHelper.pollUiThread(() -> {
+            return mHelper.getOrCreateCreditCardAccessorySheet() != null;
+        }, "Credit Card sheet should be bound to accessory sheet.");
+    }
+
+    @Test
+    @SmallTest
+    @DisableFeatures({ChromeFeatureList.AUTOFILL_MANUAL_FALLBACK_ANDROID,
+            ChromeFeatureList.AUTOFILL_ENABLE_MANUAL_FALLBACK_FOR_VIRTUAL_CARDS})
+    public void
+    testCreditCardSheetUnavailableWithoutFeature() {
         mHelper.loadTestPage(false);
 
         Assert.assertNull("Credit Card sheet should not have been created.",
diff --git a/chrome/android/java/res_chromium/drawable-hdpi/product_logo_name.png b/chrome/android/java/res_chromium/drawable-hdpi/product_logo_name.png
index 6bc0d292..401b161 100644
--- a/chrome/android/java/res_chromium/drawable-hdpi/product_logo_name.png
+++ b/chrome/android/java/res_chromium/drawable-hdpi/product_logo_name.png
Binary files differ
diff --git a/chrome/android/java/res_chromium/drawable-mdpi/product_logo_name.png b/chrome/android/java/res_chromium/drawable-mdpi/product_logo_name.png
index d6ace5d9..763f553 100644
--- a/chrome/android/java/res_chromium/drawable-mdpi/product_logo_name.png
+++ b/chrome/android/java/res_chromium/drawable-mdpi/product_logo_name.png
Binary files differ
diff --git a/chrome/android/java/res_chromium/drawable-xhdpi/product_logo_name.png b/chrome/android/java/res_chromium/drawable-xhdpi/product_logo_name.png
index d8187c0..d907fc7 100644
--- a/chrome/android/java/res_chromium/drawable-xhdpi/product_logo_name.png
+++ b/chrome/android/java/res_chromium/drawable-xhdpi/product_logo_name.png
Binary files differ
diff --git a/chrome/android/java/res_chromium/drawable-xxhdpi/product_logo_name.png b/chrome/android/java/res_chromium/drawable-xxhdpi/product_logo_name.png
index 0a887a30..e0e3848 100644
--- a/chrome/android/java/res_chromium/drawable-xxhdpi/product_logo_name.png
+++ b/chrome/android/java/res_chromium/drawable-xxhdpi/product_logo_name.png
Binary files differ
diff --git a/chrome/android/java/res_chromium/drawable-xxxhdpi/product_logo_name.png b/chrome/android/java/res_chromium/drawable-xxxhdpi/product_logo_name.png
index 0118d3f..b925c85 100644
--- a/chrome/android/java/res_chromium/drawable-xxxhdpi/product_logo_name.png
+++ b/chrome/android/java/res_chromium/drawable-xxxhdpi/product_logo_name.png
Binary files differ
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index f7d11479..af2d978 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1751,6 +1751,7 @@
 
         mInactivityTracker = new ChromeInactivityTracker(
                 ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF);
+        TabUsageTracker.initialize(this.getLifecycleDispatcher(), tabModelSelector);
 
         assert getActivityTabStartupMetricsTracker() != null;
         boolean shouldShowOverviewPageOnStart = shouldShowOverviewPageOnStart();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabUsageTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/TabUsageTracker.java
new file mode 100644
index 0000000..1774d70
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TabUsageTracker.java
@@ -0,0 +1,127 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser;
+
+import androidx.annotation.VisibleForTesting;
+
+import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
+import org.chromium.chrome.browser.lifecycle.DestroyObserver;
+import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
+import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Captures the percentage of tabs used, for metrics. This is done by finding the ratio of the
+ * number of tabs used, to the total number of tabs available between ChromeTabbedActivity onResume
+ * and onStop.
+ */
+public class TabUsageTracker
+        implements StartStopWithNativeObserver, DestroyObserver, PauseResumeWithNativeObserver {
+    private static final String PERCENTAGE_OF_TABS_USED_HISTOGRAM =
+            "Android.ActivityStop.PercentageOfTabsUsed";
+    private static final String NUMBER_OF_TABS_USED_HISTOGRAM =
+            "Android.ActivityStop.NumberOfTabsUsed";
+
+    private final Set<Integer> mTabsUsed = new HashSet<>();
+
+    private int mInitialTabCount;
+    private int mNewlyAddedTabCount;
+    private final ActivityLifecycleDispatcher mLifecycleDispatcher;
+    private final TabModelSelector mModelSelector;
+    private TabModelSelectorTabModelObserver mTabModelSelectorTabModelObserver;
+    private boolean mApplicationResumed;
+
+    /**
+     * This method is used to initialize the TabUsageTracker.
+     * @param lifecycleDispatcher LifecycleDispatcher used to subscribe class to lifecycle events.
+     * @param modelSelector TabModelSelector used to subscribe to TabModelSelectorTabModelObserver
+     *         to capture when tabs are selected or new tabs are added.
+     */
+    public static void initialize(
+            ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector modelSelector) {
+        new TabUsageTracker(lifecycleDispatcher, modelSelector);
+    }
+
+    public TabUsageTracker(
+            ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector modelSelector) {
+        mInitialTabCount = 0;
+        mNewlyAddedTabCount = 0;
+        mModelSelector = modelSelector;
+        mApplicationResumed = false;
+
+        mLifecycleDispatcher = lifecycleDispatcher;
+        mLifecycleDispatcher.register(this);
+    }
+
+    @Override
+    public void onDestroy() {
+        mLifecycleDispatcher.unregister(this);
+    }
+
+    @Override
+    public void onStartWithNative() {}
+
+    /**
+     * Records 2 histograms.
+     * 1. Percentage of tabs used.
+     * 2. Number of tabs used.
+     */
+    @Override
+    public void onStopWithNative() {
+        // If onResume was never called, return early to omit invalid samples.
+        if (!mApplicationResumed) return;
+
+        int totalTabCount = mInitialTabCount + mNewlyAddedTabCount;
+        float totalTabsUsedPercentage = (float) mTabsUsed.size() / (float) totalTabCount * 100;
+
+        RecordHistogram.recordPercentageHistogram(
+                PERCENTAGE_OF_TABS_USED_HISTOGRAM, Math.round(totalTabsUsedPercentage));
+        RecordHistogram.recordCount100Histogram(NUMBER_OF_TABS_USED_HISTOGRAM, mTabsUsed.size());
+
+        mTabsUsed.clear();
+        mNewlyAddedTabCount = 0;
+        mTabModelSelectorTabModelObserver.destroy();
+        mApplicationResumed = false;
+    }
+
+    /**
+     * Initializes the tab count and the selected tab when CTA is resumed and starts observing for
+     * tab selections or any new tab creations.
+     */
+    @Override
+    public void onResumeWithNative() {
+        mInitialTabCount = mModelSelector.getTotalTabCount();
+        Tab currentlySelectedTab =
+                mModelSelector.getCurrentModel().getTabAt(mModelSelector.getCurrentModelIndex());
+        if (currentlySelectedTab != null) mTabsUsed.add(currentlySelectedTab.getId());
+
+        mTabModelSelectorTabModelObserver = new TabModelSelectorTabModelObserver(mModelSelector) {
+            @Override
+            public void didAddTab(Tab tab, int type, int creationState) {
+                mNewlyAddedTabCount++;
+            }
+
+            @Override
+            public void didSelectTab(Tab tab, int type, int lastId) {
+                mTabsUsed.add(tab.getId());
+            }
+        };
+        mApplicationResumed = true;
+    }
+
+    @Override
+    public void onPauseWithNative() {}
+
+    @VisibleForTesting
+    public TabModelSelectorTabModelObserver getTabModelSelectorTabModelObserverForTests() {
+        return mTabModelSelectorTabModelObserver;
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
index 7c13190a1..edf7b6c4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.bookmarks;
 
+import android.content.Intent;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -29,6 +30,8 @@
 public class BookmarkEditActivity extends SynchronousInitializationActivity {
     /** The intent extra specifying the ID of the bookmark to be edited. */
     public static final String INTENT_BOOKMARK_ID = "BookmarkEditActivity.BookmarkId";
+    /** The code when starting the folder move activity for a result. */
+    static final int MOVE_REQUEST_CODE = 15;
 
     private static final String TAG = "BookmarkEdit";
 
@@ -37,6 +40,7 @@
     private BookmarkTextInputLayout mTitleEditText;
     private BookmarkTextInputLayout mUrlEditText;
     private TextView mFolderTextView;
+    private boolean mInFolderSelect;
 
     private MenuItem mDeleteButton;
 
@@ -45,7 +49,7 @@
         public void bookmarkModelChanged() {
             if (mModel.doesBookmarkExist(mBookmarkId)) {
                 updateViewContent(true);
-            } else {
+            } else if (!mInFolderSelect) {
                 // This happens either when the user clicks delete button or partner bookmark is
                 // removed in background.
                 finish();
@@ -75,8 +79,10 @@
         mFolderTextView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                BookmarkFolderSelectActivity.startFolderSelectActivity(
-                        BookmarkEditActivity.this, mBookmarkId);
+                mInFolderSelect = true;
+                Intent intent = BookmarkFolderSelectActivity.createIntent(
+                        BookmarkEditActivity.this, /*createFolder=*/false, mBookmarkId);
+                startActivityForResult(intent, MOVE_REQUEST_CODE);
             }
         });
 
@@ -93,6 +99,16 @@
         });
     }
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == MOVE_REQUEST_CODE && resultCode == RESULT_OK) {
+            mInFolderSelect = false;
+            mBookmarkId = BookmarkFolderSelectActivity.parseMoveIntentResult(data);
+            updateViewContent(true);
+        }
+    }
+
     /**
      * @param modelChanged Whether this view update is due to a model change in background.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderSelectActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderSelectActivity.java
index 6672feb7..679945e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderSelectActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderSelectActivity.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.bookmarks;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
@@ -54,6 +55,8 @@
             INTENT_IS_CREATING_FOLDER = "BookmarkFolderSelectActivity.isCreatingFolder";
     static final String
             INTENT_BOOKMARKS_TO_MOVE = "BookmarkFolderSelectActivity.bookmarksToMove";
+    static final String INTENT_BOOKMARK_MOVE_RESULT =
+            "BookmarkFolderSelectActivity.bookmarkMoveResult";
     static final int CREATE_FOLDER_REQUEST_CODE = 13;
 
     private BookmarkModel mModel;
@@ -75,7 +78,7 @@
             if (mBookmarksToMove.contains(node.getId())) {
                 mBookmarksToMove.remove(node.getId());
                 if (mBookmarksToMove.isEmpty()) {
-                    finish();
+                    finishActivity(mBookmarksToMove);
                     return;
                 }
             } else if (node.isFolder()) {
@@ -89,14 +92,32 @@
      */
     public static void startFolderSelectActivity(Context context, BookmarkId... bookmarks) {
         assert bookmarks.length > 0;
+        Intent intent = BookmarkFolderSelectActivity.createIntent(
+                context, /*createFolder=*/false, bookmarks);
+        context.startActivity(intent);
+    }
+
+    /**
+     * @return An intent created from the given parameters.
+     */
+    public static Intent createIntent(
+            Context context, boolean createFolder, BookmarkId... bookmarks) {
         Intent intent = new Intent(context, BookmarkFolderSelectActivity.class);
-        intent.putExtra(INTENT_IS_CREATING_FOLDER, false);
+        intent.putExtra(INTENT_IS_CREATING_FOLDER, createFolder);
         ArrayList<String> bookmarkStrings = new ArrayList<>(bookmarks.length);
         for (BookmarkId id : bookmarks) {
             bookmarkStrings.add(id.toString());
         }
         intent.putStringArrayListExtra(INTENT_BOOKMARKS_TO_MOVE, bookmarkStrings);
-        context.startActivity(intent);
+        return intent;
+    }
+
+    /**
+     * @return The {@link BookmarkId} encoded in the given intent.
+     */
+    public static BookmarkId parseMoveIntentResult(Intent data) {
+        String bookmarkString = IntentUtils.safeGetStringExtra(data, INTENT_BOOKMARK_MOVE_RESULT);
+        return BookmarkId.getBookmarkIdFromString(bookmarkString);
     }
 
     /**
@@ -105,14 +126,8 @@
      */
     public static void startNewFolderSelectActivity(
             BookmarkAddEditFolderActivity activity, List<BookmarkId> bookmarks) {
-        assert bookmarks.size() > 0;
-        Intent intent = new Intent(activity, BookmarkFolderSelectActivity.class);
-        intent.putExtra(INTENT_IS_CREATING_FOLDER, true);
-        ArrayList<String> bookmarkStrings = new ArrayList<>(bookmarks.size());
-        for (BookmarkId id : bookmarks) {
-            bookmarkStrings.add(id.toString());
-        }
-        intent.putStringArrayListExtra(INTENT_BOOKMARKS_TO_MOVE, bookmarkStrings);
+        Intent intent = BookmarkFolderSelectActivity.createIntent(
+                activity, /*createFolder=*/true, (BookmarkId[]) bookmarks.toArray());
         activity.startActivityForResult(intent,
                 BookmarkAddEditFolderActivity.PARENT_FOLDER_REQUEST_CODE);
     }
@@ -123,6 +138,7 @@
         mModel = new BookmarkModel();
         List<String> stringList =
                 IntentUtils.safeGetStringArrayListExtra(getIntent(), INTENT_BOOKMARKS_TO_MOVE);
+        mBookmarksToMove = new ArrayList<>(stringList.size());
 
         // If the intent does not contain a list of bookmarks to move, return early. See
         // crbug.com/728244. If the bookmark model is not loaded, return early to avoid crashing
@@ -137,7 +153,6 @@
 
         mModel.addObserver(mBookmarkModelObserver);
 
-        mBookmarksToMove = new ArrayList<>(stringList.size());
         for (String string : stringList) {
             BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString(string);
             if (mModel.doesBookmarkExist(bookmarkId)) {
@@ -257,10 +272,7 @@
         } else if (entry.mType == FolderListEntry.TYPE_NEW_FOLDER) {
             BookmarkAddEditFolderActivity.startAddFolderActivity(this, mBookmarksToMove);
         } else if (entry.mType == FolderListEntry.TYPE_NORMAL) {
-            ReadingListUtils.typeSwapBookmarksIfNecessary(mModel, mBookmarksToMove, entry.mId);
-            mModel.moveBookmarks(mBookmarksToMove, entry.mId);
-            BookmarkUtils.setLastUsedParent(this, entry.mId);
-            finish();
+            moveBookmarksAndFinish(mBookmarksToMove, entry.mId);
         }
     }
 
@@ -269,14 +281,33 @@
         super.onActivityResult(requestCode, resultCode, data);
         assert !mIsCreatingFolder;
         if (requestCode == CREATE_FOLDER_REQUEST_CODE && resultCode == RESULT_OK) {
-            BookmarkId createdBookmark = BookmarkId.getBookmarkIdFromString(data.getStringExtra(
-                    BookmarkAddEditFolderActivity.INTENT_CREATED_BOOKMARK));
-            mModel.moveBookmarks(mBookmarksToMove, createdBookmark);
-            BookmarkUtils.setLastUsedParent(this, createdBookmark);
-            finish();
+            BookmarkId createdBookmark = BookmarkId.getBookmarkIdFromString(
+                    data.getStringExtra(BookmarkAddEditFolderActivity.INTENT_CREATED_BOOKMARK));
+            moveBookmarksAndFinish(mBookmarksToMove, createdBookmark);
         }
     }
 
+    private void moveBookmarksAndFinish(List<BookmarkId> bookmarks, BookmarkId parent) {
+        List<BookmarkId> movedBookmarks = new ArrayList<>();
+        ReadingListUtils.typeSwapBookmarksIfNecessary(
+                mModel, mBookmarksToMove, movedBookmarks, parent);
+        mModel.moveBookmarks(mBookmarksToMove, parent);
+        movedBookmarks.addAll(mBookmarksToMove);
+        BookmarkUtils.setLastUsedParent(this, parent);
+        finishActivity(movedBookmarks);
+    }
+
+    private void finishActivity(List<BookmarkId> bookmarks) {
+        // This means BookmarkFolderSelectActivity was called for a result.
+        if (getCallingActivity() != null) {
+            assert bookmarks.size() == 1;
+            Intent result = new Intent();
+            result.putExtra(INTENT_BOOKMARK_MOVE_RESULT, bookmarks.get(0).toString());
+            setResult(Activity.RESULT_OK, result);
+        }
+        finish();
+    }
+
     /**
      * Data object representing a folder entry used in FolderListAdapter.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java
index 07fc017..65891287 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java
@@ -431,7 +431,8 @@
         mIsAutoEnterAllowed = allowed;
         try {
             mActivity.setPictureInPictureParams(builder.build());
-        } catch(RuntimeException e) {
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Error setting PiP params", e);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java
index ee9be5c..23d885a4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java
@@ -92,8 +92,8 @@
         // remove the regular bookmark first so the save flow is shown.
         List<BookmarkId> bookmarkIds = new ArrayList<>();
         bookmarkIds.add(bookmarkId);
-        ReadingListUtils.typeSwapBookmarksIfNecessary(
-                bookmarkBridge, bookmarkIds, bookmarkBridge.getReadingListFolder());
+        ReadingListUtils.typeSwapBookmarksIfNecessary(bookmarkBridge, bookmarkIds,
+                new ArrayList<>(), bookmarkBridge.getReadingListFolder());
         if (sSkipShowSaveFlowForTesting) return true;
         BookmarkUtils.showSaveFlow(activity, bottomsheetController,
                 /*fromExplicitTrackUi=*/false, bookmarkIds.get(0), /*wasBookmarkMoved=*/true);
@@ -106,11 +106,14 @@
      *
      * @param bookmarkBridge The BookmarkBridge to perform add/delete operations.
      * @param bookmarksToMove The List of bookmarks to potentially type swap.
+     * @param typeSwappedBookmarks The list of bookmarks which have been type-swapped and thus don't
+     *         need to be moved.
      * @param newParentId The new parentId to use, the {@link BookmarkType} of this is used to
      *         determine if type-swapping is necessary.
      */
     public static void typeSwapBookmarksIfNecessary(BookmarkBridge bookmarkBridge,
-            List<BookmarkId> bookmarksToMove, BookmarkId newParentId) {
+            List<BookmarkId> bookmarksToMove, List<BookmarkId> typeSwappedBookmarks,
+            BookmarkId newParentId) {
         if (!ReadingListFeatures.shouldAllowBookmarkTypeSwapping()) return;
 
         List<BookmarkId> outputList = new ArrayList<>();
@@ -137,6 +140,7 @@
                 continue;
             }
             bookmarkBridge.deleteBookmark(bookmarkId);
+            typeSwappedBookmarks.add(newBookmark);
         }
 
         bookmarksToMove.addAll(outputList);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabUsageTrackerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabUsageTrackerTest.java
new file mode 100644
index 0000000..cab7657
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabUsageTrackerTest.java
@@ -0,0 +1,143 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.compositor.overlays.strip;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.metrics.test.ShadowRecordHistogram;
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.browser.TabUsageTracker;
+import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabCreationState;
+import org.chromium.chrome.browser.tab.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Test suite to verify that the TabUsageTracker correctly records the number of tabs used and the
+ * percentage of tabs used.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class})
+public class TabUsageTrackerTest {
+    @Mock
+    TabModelSelector mTabModelSelector;
+    @Mock
+    ActivityLifecycleDispatcher mDispatcher;
+    @Mock
+    TabModel mTabModel;
+
+    private static final int INITIAL_TAB_COUNT = 0;
+    private static final String NUMBER_OF_TABS_USED = "Android.ActivityStop.NumberOfTabsUsed";
+    private static final String PERCENTAGE_OF_TABS_USED =
+            "Android.ActivityStop.PercentageOfTabsUsed";
+
+    private TabUsageTracker mTabUsageTracker;
+
+    @Before
+    public void setUp() throws TimeoutException {
+        MockitoAnnotations.initMocks(this);
+        Mockito.when(mTabModel.getCount()).thenReturn(INITIAL_TAB_COUNT);
+        Mockito.when(mTabModelSelector.getCurrentModel()).thenReturn(mTabModel);
+
+        mTabUsageTracker = new TabUsageTracker(mDispatcher, mTabModelSelector);
+    }
+
+    @After
+    public void tearDown() {
+        ShadowRecordHistogram.reset();
+    }
+
+    @Test
+    @SmallTest
+    public void testOnStop_RecordsHistogram_NoInitialTabs() {
+        // Arrange
+        mTabUsageTracker.onResumeWithNative();
+        Tab tab1 = getMockedTab(1);
+        Tab tab2 = getMockedTab(2);
+
+        // Act: Create 2 tabs, select 1 tab and call onStop.
+        TabModelSelectorTabModelObserver observer =
+                mTabUsageTracker.getTabModelSelectorTabModelObserverForTests();
+        observer.didAddTab(tab1, TabLaunchType.FROM_CHROME_UI, TabCreationState.LIVE_IN_FOREGROUND);
+        observer.didAddTab(tab2, TabLaunchType.FROM_CHROME_UI, TabCreationState.LIVE_IN_FOREGROUND);
+        observer.didSelectTab(tab1, TabLaunchType.FROM_CHROME_UI, 0);
+
+        mTabUsageTracker.onStopWithNative();
+
+        // Assert
+        Assert.assertEquals(
+                1, ShadowRecordHistogram.getHistogramValueCountForTesting(NUMBER_OF_TABS_USED, 1));
+        Assert.assertEquals(1,
+                ShadowRecordHistogram.getHistogramValueCountForTesting(
+                        PERCENTAGE_OF_TABS_USED, 50));
+    }
+
+    @Test
+    @SmallTest
+    public void testOnStop_RecordsHistogram_HasInitialTabs() {
+        // Arrange
+        Tab tab1 = getMockedTab(1);
+        Tab selectedTab = getMockedTab(3);
+        // Start with 5 existing tabs and 1 selected tab.
+        Mockito.when(mTabModelSelector.getTotalTabCount()).thenReturn(5);
+        Mockito.when(mTabModel.getTabAt(Mockito.anyInt())).thenReturn(selectedTab);
+        mTabUsageTracker.onResumeWithNative();
+
+        // Act: Create 1 tab, select 1 tab and call onStop.
+        TabModelSelectorTabModelObserver observer =
+                mTabUsageTracker.getTabModelSelectorTabModelObserverForTests();
+        observer.didAddTab(tab1, TabLaunchType.FROM_CHROME_UI, TabCreationState.LIVE_IN_FOREGROUND);
+        observer.didSelectTab(tab1, TabLaunchType.FROM_CHROME_UI, 3);
+
+        mTabUsageTracker.onStopWithNative();
+
+        // Assert that number of tabs used is 2 and percentage is 2/6 * 100 = 33
+        Assert.assertEquals(
+                1, ShadowRecordHistogram.getHistogramValueCountForTesting(NUMBER_OF_TABS_USED, 2));
+        Assert.assertEquals(1,
+                ShadowRecordHistogram.getHistogramValueCountForTesting(
+                        PERCENTAGE_OF_TABS_USED, 33));
+    }
+
+    @Test
+    @SmallTest
+    public void testOnStop_CalledBeforeOnResume_DoesNotRecordHistogram() {
+        mTabUsageTracker.onStopWithNative();
+
+        Assert.assertEquals(
+                0, ShadowRecordHistogram.getHistogramTotalCountForTesting(NUMBER_OF_TABS_USED));
+        Assert.assertEquals(
+                0, ShadowRecordHistogram.getHistogramTotalCountForTesting(PERCENTAGE_OF_TABS_USED));
+    }
+
+    @Test
+    @SmallTest
+    public void testOnDestroy() {
+        mTabUsageTracker.onDestroy();
+
+        Mockito.verify(mDispatcher).unregister(mTabUsageTracker);
+    }
+
+    private Tab getMockedTab(int id) {
+        Tab tab = Mockito.mock(Tab.class);
+        Mockito.when(tab.getId()).thenReturn(id);
+        return tab;
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java
index 58cb5bc..7edef7e 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java
@@ -199,11 +199,14 @@
 
         ArrayList<BookmarkId> bookmarks = new ArrayList<>();
         bookmarks.add(existingBookmarkId);
-        ReadingListUtils.typeSwapBookmarksIfNecessary(bookmarkBridge, bookmarks, parentId);
+        ArrayList<BookmarkId> typeSwappedBookmarks = new ArrayList<>();
+        ReadingListUtils.typeSwapBookmarksIfNecessary(
+                bookmarkBridge, bookmarks, typeSwappedBookmarks, parentId);
         verify(bookmarkBridge)
                 .addToReadingList("Test", JUnitTestGURLs.getGURL(JUnitTestGURLs.NTP_URL));
         verify(bookmarkBridge).deleteBookmark(existingBookmarkId);
         Assert.assertEquals(0, bookmarks.size());
+        Assert.assertEquals(1, typeSwappedBookmarks.size());
     }
 
     @Test
@@ -225,11 +228,14 @@
 
         ArrayList<BookmarkId> bookmarks = new ArrayList<>();
         bookmarks.add(existingBookmarkId);
-        ReadingListUtils.typeSwapBookmarksIfNecessary(bookmarkBridge, bookmarks, parentId);
+        ArrayList<BookmarkId> typeSwappedBookmarks = new ArrayList<>();
+        ReadingListUtils.typeSwapBookmarksIfNecessary(
+                bookmarkBridge, bookmarks, typeSwappedBookmarks, parentId);
         verify(bookmarkBridge)
                 .addBookmark(parentId, 0, "Test", JUnitTestGURLs.getGURL(JUnitTestGURLs.NTP_URL));
         verify(bookmarkBridge).deleteBookmark(existingBookmarkId);
         Assert.assertEquals(0, bookmarks.size());
+        Assert.assertEquals(1, typeSwappedBookmarks.size());
     }
 
     @Test
@@ -262,8 +268,11 @@
         ArrayList<BookmarkId> bookmarks = new ArrayList<>();
         bookmarks.add(existingBookmarkId1);
         bookmarks.add(existingBookmarkId2);
-        ReadingListUtils.typeSwapBookmarksIfNecessary(bookmarkBridge, bookmarks, parentId);
+        ArrayList<BookmarkId> typeSwappedBookmarks = new ArrayList<>();
+        ReadingListUtils.typeSwapBookmarksIfNecessary(
+                bookmarkBridge, bookmarks, typeSwappedBookmarks, parentId);
         Assert.assertEquals(0, bookmarks.size());
+        Assert.assertEquals(2, typeSwappedBookmarks.size());
 
         verify(bookmarkBridge)
                 .addBookmark(parentId, 0, "Test1", JUnitTestGURLs.getGURL(JUnitTestGURLs.NTP_URL));
@@ -287,8 +296,11 @@
 
         ArrayList<BookmarkId> bookmarks = new ArrayList<>();
         bookmarks.add(existingBookmarkId);
-        ReadingListUtils.typeSwapBookmarksIfNecessary(bookmarkBridge, bookmarks, parentId);
+        ArrayList<BookmarkId> typeSwappedBookmarks = new ArrayList<>();
+        ReadingListUtils.typeSwapBookmarksIfNecessary(
+                bookmarkBridge, bookmarks, typeSwappedBookmarks, parentId);
         Assert.assertEquals(1, bookmarks.size());
+        Assert.assertEquals(0, typeSwappedBookmarks.size());
         Assert.assertEquals(existingBookmarkId, bookmarks.get(0));
     }
 
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index d1bb583..5ab56f2 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -5163,6 +5163,11 @@
      flag_descriptions::kSidePanelImprovedClobberingDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kSidePanelImprovedClobbering)},
 
+    {flag_descriptions::kSidePanelJourneysFlagId,
+     flag_descriptions::kSidePanelJourneysName,
+     flag_descriptions::kSidePanelJourneysDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(features::kSidePanelJourneys)},
+
     {flag_descriptions::kUnifiedSidePanelFlagId,
      flag_descriptions::kUnifiedSidePanelName,
      flag_descriptions::kUnifiedSidePanelDescription, kOsDesktop,
@@ -6594,6 +6599,14 @@
      flag_descriptions::kAutofillEnableVirtualCardName,
      flag_descriptions::kAutofillEnableVirtualCardDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableVirtualCard)},
+#if BUILDFLAG(IS_ANDROID)
+    {"autofill-enable-manual-fallback-for-virtual-cards",
+     flag_descriptions::kAutofillEnableManualFallbackForVirtualCardsName,
+     flag_descriptions::kAutofillEnableManualFallbackForVirtualCardsDescription,
+     kOsAndroid,
+     FEATURE_VALUE_TYPE(
+         autofill::features::kAutofillEnableManualFallbackForVirtualCards)},
+#endif  // BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     {"account-id-migration", flag_descriptions::kAccountIdMigrationName,
@@ -6825,6 +6838,14 @@
      flag_descriptions::kCanvas2DLayersDescription, kOsAll,
      SINGLE_VALUE_TYPE(switches::kEnableCanvas2DLayers)},
 
+    {"enable-machine-learning-model-loader-web-platform-api",
+     flag_descriptions::kEnableMachineLearningModelLoaderWebPlatformApiName,
+     flag_descriptions::
+         kEnableMachineLearningModelLoaderWebPlatformApiDescription,
+     kOsAll,
+     FEATURE_VALUE_TYPE(
+         features::kEnableMachineLearningModelLoaderWebPlatformApi)},
+
     {"enable-translate-sub-frames",
      flag_descriptions::kEnableTranslateSubFramesName,
      flag_descriptions::kEnableTranslateSubFramesDescription, kOsAll,
diff --git a/chrome/browser/ash/DEPS b/chrome/browser/ash/DEPS
index c354f3f22..c7d58b4 100644
--- a/chrome/browser/ash/DEPS
+++ b/chrome/browser/ash/DEPS
@@ -5,7 +5,7 @@
   # TODO(ananta): Remove this when we move files which display UI in
   # chrome/browser/chromeos to chrome/browser/ui/views/chromeos
   # crbug.com/728877
-  "+chrome/browser/ui/views/chrome_layout_provider.h",
+  "+chrome/browser/ui/views",
 
   "+components/guest_os",
   "+dbus",
diff --git a/chrome/browser/ash/input_method/ui/suggestion_window_view.cc b/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
index 52c8b4f..a8f131b 100644
--- a/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
+++ b/chrome/browser/ash/input_method/ui/suggestion_window_view.cc
@@ -136,19 +136,19 @@
 void SuggestionWindowView::OnThemeChanged() {
   BubbleDialogDelegateView::OnThemeChanged();
 
+  const auto* const color_provider = GetColorProvider();
   learn_more_button_->SetBorder(views::CreatePaddedBorder(
       views::CreateSolidSidedBorder(
           gfx::Insets::TLBR(1, 0, 0, 0),
-          GetColorProvider()->GetColor(ui::kColorBubbleFooterBorder)),
+          color_provider->GetColor(ui::kColorBubbleFooterBorder)),
       views::LayoutProvider::Get()->GetInsetsMetric(
           views::INSETS_VECTOR_IMAGE_BUTTON)));
 
-  // TODO(crbug/1099044): Update and use cros colors.
-  constexpr SkColor kSecondaryIconColor = gfx::kGoogleGrey500;
-  learn_more_button_->SetImage(
+  // TODO(crbug.com/1099044): Update and use cros colors.
+  learn_more_button_->SetImageModel(
       views::Button::ButtonState::STATE_NORMAL,
-      gfx::CreateVectorIcon(vector_icons::kHelpOutlineIcon,
-                            kSecondaryIconColor));
+      ui::ImageModel::FromVectorIcon(vector_icons::kHelpOutlineIcon,
+                                     ui::kColorIconSecondary));
 }
 
 SuggestionWindowView::SuggestionWindowView(gfx::NativeView parent,
diff --git a/chrome/browser/ash/notifications/request_pin_view.cc b/chrome/browser/ash/notifications/request_pin_view.cc
index 8fa5720..d0baac61 100644
--- a/chrome/browser/ash/notifications/request_pin_view.cc
+++ b/chrome/browser/ash/notifications/request_pin_view.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/ash/notifications/passphrase_textfield.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/chrome_typography.h"
 #include "chrome/grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
@@ -76,7 +77,7 @@
   error_label_->SetText(
       l10n_util::GetStringUTF16(IDS_REQUEST_PIN_DIALOG_PROCESSING));
   error_label_->SetTooltipText(error_label_->GetText());
-  error_label_->SetEnabledColor(SK_ColorGRAY);
+  error_label_->SetTextStyle(views::style::STYLE_SECONDARY);
   error_label_->SizeToPreferredSize();
   // The |textfield_| and OK button become disabled, but the user still can
   // close the dialog.
@@ -208,14 +209,9 @@
 }
 
 void RequestPinView::SetAcceptInput(bool accept_input) {
-  if (accept_input) {
-    textfield_->SetEnabled(true);
-    textfield_->SetBackgroundColor(SK_ColorWHITE);
+  textfield_->SetEnabled(accept_input);
+  if (accept_input)
     textfield_->RequestFocus();
-  } else {
-    textfield_->SetEnabled(false);
-    textfield_->SetBackgroundColor(SK_ColorGRAY);
-  }
 }
 
 void RequestPinView::SetErrorMessage(security_token_pin::ErrorLabel error_label,
@@ -234,7 +230,7 @@
   error_label_->SetVisible(true);
   error_label_->SetText(error_message);
   error_label_->SetTooltipText(error_message);
-  error_label_->SetEnabledColor(gfx::kGoogleRed600);
+  error_label_->SetTextStyle(STYLE_RED);
   error_label_->SizeToPreferredSize();
   textfield_->SetInvalid(true);
 }
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.cc
index ffe243d..8c37be14 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.cc
@@ -36,6 +36,9 @@
 #include "ui/gfx/image/image_skia.h"
 #include "url/gurl.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 // Width and height of the preview image for personal album.
@@ -613,3 +616,6 @@
   is_updating_backend_ = false;
   has_pending_updates_for_backend_ = false;
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.h
index e73b5a30..f640cf8 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.h
@@ -26,8 +26,11 @@
 
 class Profile;
 
+namespace ash {
+namespace personalization_app {
+
 class PersonalizationAppAmbientProviderImpl
-    : public ash::PersonalizationAppAmbientProvider {
+    : public PersonalizationAppAmbientProvider {
  public:
   explicit PersonalizationAppAmbientProviderImpl(content::WebUI* web_ui);
 
@@ -165,4 +168,7 @@
       recent_highlights_previews_weak_factory_{this};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_AMBIENT_PROVIDER_IMPL_H_
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl_unittest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl_unittest.cc
index 73f113d..3aa93347 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl_unittest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_ambient_provider_impl_unittest.cc
@@ -30,6 +30,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/webui/web_ui_util.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 constexpr char kFakeTestEmail[] = "fakeemail@example.com";
@@ -803,3 +806,6 @@
   // update.
   EXPECT_TRUE(settings()->show_weather);
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.cc
deleted file mode 100644
index 824d46a..0000000
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/web_applications/personalization_app/personalization_app_info.h"
-
-#include <memory>
-
-#include "ash/constants/ash_features.h"
-#include "ash/webui/grit/ash_personalization_app_resources.h"
-#include "ash/webui/personalization_app/personalization_app_url_constants.h"
-#include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
-#include "chrome/browser/web_applications/web_app_install_info.h"
-#include "chromeos/strings/grit/chromeos_strings.h"
-#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/gfx/geometry/size.h"
-
-std::unique_ptr<WebAppInstallInfo> CreateWebAppInfoForPersonalizationApp() {
-  std::unique_ptr<WebAppInstallInfo> info =
-      std::make_unique<WebAppInstallInfo>();
-  info->start_url = GURL(ash::kChromeUIPersonalizationAppURL);
-  info->scope = GURL(ash::kChromeUIPersonalizationAppURL);
-  info->title =
-      (chromeos::features::IsPersonalizationHubEnabled())
-          ? l10n_util::GetStringUTF16(
-                IDS_PERSONALIZATION_APP_PERSONALIZATION_HUB_TITLE)
-          : l10n_util::GetStringUTF16(IDS_PERSONALIZATION_APP_WALLPAPER_LABEL);
-  web_app::CreateIconInfoForSystemWebApp(
-      info->start_url,
-      {{"app_icon_192.png", 192, IDR_ASH_PERSONALIZATION_APP_ICON_192_PNG}},
-      *info);
-  info->display_mode = blink::mojom::DisplayMode::kStandalone;
-  info->user_display_mode = blink::mojom::DisplayMode::kStandalone;
-
-  return info;
-}
-
-PersonalizationSystemAppDelegate::PersonalizationSystemAppDelegate(
-    Profile* profile)
-    : web_app::SystemWebAppDelegate(web_app::SystemAppType::PERSONALIZATION,
-                                    "Personalization",
-                                    GURL(ash::kChromeUIPersonalizationAppURL),
-                                    profile) {}
-
-std::unique_ptr<WebAppInstallInfo>
-PersonalizationSystemAppDelegate::GetWebAppInfo() const {
-  return CreateWebAppInfoForPersonalizationApp();
-}
-
-gfx::Size PersonalizationSystemAppDelegate::GetMinimumWindowSize() const {
-  return {600, 420};
-}
-
-bool PersonalizationSystemAppDelegate::ShouldCaptureNavigations() const {
-  return true;
-}
-
-bool PersonalizationSystemAppDelegate::IsAppEnabled() const {
-  return chromeos::features::IsWallpaperWebUIEnabled();
-}
-
-bool PersonalizationSystemAppDelegate::ShouldShowInLauncher() const {
-  return false;
-}
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.h
deleted file mode 100644
index 64e578b9..0000000
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_info.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_INFO_H_
-#define CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_INFO_H_
-
-#include "ash/webui/personalization_app/personalization_app_url_constants.h"
-#include "chrome/browser/web_applications/system_web_apps/system_web_app_delegate.h"
-#include "chrome/browser/web_applications/system_web_apps/system_web_app_types.h"
-#include "ui/gfx/geometry/size.h"
-
-struct WebAppInstallInfo;
-
-class PersonalizationSystemAppDelegate : public web_app::SystemWebAppDelegate {
- public:
-  explicit PersonalizationSystemAppDelegate(Profile* profile);
-
-  // web_app::SystemWebAppDelegate overrides:
-  std::unique_ptr<WebAppInstallInfo> GetWebAppInfo() const override;
-  gfx::Size GetMinimumWindowSize() const override;
-  bool ShouldCaptureNavigations() const override;
-  bool IsAppEnabled() const override;
-  bool ShouldShowInLauncher() const override;
-};
-
-// Return a WebAppInstallInfo used to install the app.
-std::unique_ptr<WebAppInstallInfo> CreateWebAppInfoForPersonalizationApp();
-
-#endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_INFO_H_
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_integration_browsertest.cc
index febfb7f..898bb93 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_integration_browsertest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_integration_browsertest.cc
@@ -42,6 +42,9 @@
 #include "ui/snapshot/snapshot_aura.h"
 #include "ui/views/widget/widget.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 constexpr SkColor kDebugBackgroundColor = SK_ColorYELLOW;
@@ -182,7 +185,7 @@
     apps::AppLaunchParams launch_params =
         LaunchParamsForApp(web_app::SystemAppType::PERSONALIZATION);
     launch_params.override_url =
-        GURL(ash::kChromeUIPersonalizationAppWallpaperSubpageURL);
+        GURL(kChromeUIPersonalizationAppWallpaperSubpageURL);
     return LaunchApp(std::move(launch_params), browser);
   }
 
@@ -222,7 +225,7 @@
 // Test that the Personalization App installs correctly.
 IN_PROC_BROWSER_TEST_P(PersonalizationAppIntegrationTest,
                        PersonalizationAppInstalls) {
-  const GURL url(ash::kChromeUIPersonalizationAppURL);
+  const GURL url(kChromeUIPersonalizationAppURL);
   std::string appTitle = (chromeos::features::IsPersonalizationHubEnabled())
                              ? "Personalization"
                              : "Wallpaper";
@@ -316,3 +319,6 @@
 
 INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_GUEST_SESSION_P(
     PersonalizationAppIntegrationTest);
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.cc
index af2f019..8eed970 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.cc
@@ -7,6 +7,9 @@
 #include "ash/style/ash_color_provider.h"
 #include "chrome/browser/profiles/profile.h"
 
+namespace ash {
+namespace personalization_app {
+
 PersonalizationAppThemeProviderImpl::PersonalizationAppThemeProviderImpl(
     content::WebUI* web_ui)
     : web_ui_(web_ui), profile_(Profile::FromWebUI(web_ui_)) {}
@@ -45,3 +48,6 @@
   if (color_provider->IsDarkModeEnabled() != dark_mode_enabled)
     color_provider->ToggleColorMode();
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.h
index e6c53bb..9f1a6959 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl.h
@@ -18,8 +18,11 @@
 class WebUI;
 }  // namespace content
 
+namespace ash {
+namespace personalization_app {
+
 class PersonalizationAppThemeProviderImpl
-    : public ash::PersonalizationAppThemeProvider,
+    : public PersonalizationAppThemeProvider,
       ash::ColorModeObserver {
  public:
   explicit PersonalizationAppThemeProviderImpl(content::WebUI* web_ui);
@@ -62,4 +65,7 @@
       theme_observer_remote_;
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_THEME_PROVIDER_IMPL_H_
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl_unittest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl_unittest.cc
index 927b277a..a4846e0 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl_unittest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_theme_provider_impl_unittest.cc
@@ -20,6 +20,9 @@
 #include "content/public/test/test_web_ui.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 constexpr char kFakeTestEmail[] = "fakeemail@personalization";
@@ -147,3 +150,6 @@
   ash::AshColorProvider::Get()->ToggleColorMode();
   EXPECT_EQ(is_dark_mode_enabled().value(), dark_mode_enabled);
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
index e3cd9bb..7820822 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc
@@ -37,6 +37,9 @@
 #include "ui/gfx/geometry/size.h"
 #include "url/gurl.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 using ash::personalization_app::GetAccountId;
@@ -366,3 +369,6 @@
     std::unique_ptr<ash::UserImageFileSelector> file_selector) {
   user_image_file_selector_ = std::move(file_selector);
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.h
index 41468ed..150b9dd 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl.h
@@ -34,8 +34,11 @@
 class WebUI;
 }  // namespace content
 
+namespace ash {
+namespace personalization_app {
+
 class PersonalizationAppUserProviderImpl
-    : public ash::PersonalizationAppUserProvider,
+    : public PersonalizationAppUserProvider,
       public user_manager::UserManager::Observer,
       public ash::CameraPresenceNotifier::Observer {
  public:
@@ -146,4 +149,7 @@
       image_decode_weak_ptr_factory_{this};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_USER_PROVIDER_IMPL_H_
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl_unittest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl_unittest.cc
index 30fb5431..85126c9f 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl_unittest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_user_provider_impl_unittest.cc
@@ -45,6 +45,9 @@
 #include "ui/gfx/image/image_skia.h"
 #include "url/gurl.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 using ash::personalization_app::GetAccountId;
@@ -520,3 +523,6 @@
       ash::UserImageManager::kUserImageChangedHistogramName,
       ash::default_user_image::kHistogramImageExternal, 2);
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
index edd19d09..c91ce37a 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
@@ -59,6 +59,9 @@
 #include "ui/gfx/image/image_skia_operations.h"
 #include "url/gurl.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 using ash::WallpaperController;
@@ -788,3 +791,6 @@
   DCHECK(wallpaper_observer_remote_.is_bound());
   wallpaper_observer_remote_->OnWallpaperChanged(std::move(current_wallpaper));
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
index 9d58d475..324b721 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
@@ -54,10 +54,13 @@
 
 class Profile;
 
+namespace ash {
+namespace personalization_app {
+
 // Implemented in //chrome because this relies on chrome |wallpaper_handlers|
 // code.
 class PersonalizationAppWallpaperProviderImpl
-    : public ash::PersonalizationAppWallpaperProvider,
+    : public PersonalizationAppWallpaperProvider,
       ash::WallpaperControllerObserver {
  public:
   explicit PersonalizationAppWallpaperProviderImpl(content::WebUI* web_ui);
@@ -345,4 +348,7 @@
       weak_ptr_factory_{this};
 };
 
+}  // namespace personalization_app
+}  // namespace ash
+
 #endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_WALLPAPER_PROVIDER_IMPL_H_
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
index 028a4172..94e0f6f9 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
@@ -52,6 +52,9 @@
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/webui/web_ui_util.h"
 
+namespace ash {
+namespace personalization_app {
+
 namespace {
 
 constexpr char kFakeTestEmail[] = "fakeemail@personalization";
@@ -962,3 +965,6 @@
           test_wallpaper_controller()->wallpaper_info().value_or(
               ash::WallpaperInfo()));
 }
+
+}  // namespace personalization_app
+}  // namespace ash
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc
new file mode 100644
index 0000000..40a3224
--- /dev/null
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.cc
@@ -0,0 +1,63 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.h"
+
+#include <memory>
+
+#include "ash/constants/ash_features.h"
+#include "ash/webui/grit/ash_personalization_app_resources.h"
+#include "ash/webui/personalization_app/personalization_app_url_constants.h"
+#include "chrome/browser/ash/web_applications/system_web_app_install_utils.h"
+#include "chrome/browser/web_applications/web_app_install_info.h"
+#include "chromeos/strings/grit/chromeos_strings.h"
+#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/geometry/size.h"
+
+PersonalizationSystemAppDelegate::PersonalizationSystemAppDelegate(
+    Profile* profile)
+    : web_app::SystemWebAppDelegate(
+          web_app::SystemAppType::PERSONALIZATION,
+          "Personalization",
+          GURL(ash::personalization_app::kChromeUIPersonalizationAppURL),
+          profile) {}
+
+std::unique_ptr<WebAppInstallInfo>
+PersonalizationSystemAppDelegate::GetWebAppInfo() const {
+  std::unique_ptr<WebAppInstallInfo> info =
+      std::make_unique<WebAppInstallInfo>();
+  info->start_url =
+      GURL(ash::personalization_app::kChromeUIPersonalizationAppURL);
+  info->scope = GURL(ash::personalization_app::kChromeUIPersonalizationAppURL);
+  info->title =
+      (chromeos::features::IsPersonalizationHubEnabled())
+          ? l10n_util::GetStringUTF16(
+                IDS_PERSONALIZATION_APP_PERSONALIZATION_HUB_TITLE)
+          : l10n_util::GetStringUTF16(IDS_PERSONALIZATION_APP_WALLPAPER_LABEL);
+  web_app::CreateIconInfoForSystemWebApp(
+      info->start_url,
+      {{"app_icon_192.png", 192, IDR_ASH_PERSONALIZATION_APP_ICON_192_PNG}},
+      *info);
+  info->display_mode = blink::mojom::DisplayMode::kStandalone;
+  info->user_display_mode = blink::mojom::DisplayMode::kStandalone;
+
+  return info;
+}
+
+gfx::Size PersonalizationSystemAppDelegate::GetMinimumWindowSize() const {
+  return {600, 420};
+}
+
+bool PersonalizationSystemAppDelegate::ShouldCaptureNavigations() const {
+  return true;
+}
+
+bool PersonalizationSystemAppDelegate::IsAppEnabled() const {
+  return chromeos::features::IsWallpaperWebUIEnabled();
+}
+
+bool PersonalizationSystemAppDelegate::ShouldShowInLauncher() const {
+  return false;
+}
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.h b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.h
new file mode 100644
index 0000000..d40c132f
--- /dev/null
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.h
@@ -0,0 +1,30 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_SYSTEM_APP_DELEGATE_H_
+#define CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_SYSTEM_APP_DELEGATE_H_
+
+#include "ash/webui/personalization_app/personalization_app_url_constants.h"
+#include "chrome/browser/web_applications/system_web_apps/system_web_app_delegate.h"
+#include "chrome/browser/web_applications/system_web_apps/system_web_app_types.h"
+#include "ui/gfx/geometry/size.h"
+
+struct WebAppInstallInfo;
+
+class PersonalizationSystemAppDelegate : public web_app::SystemWebAppDelegate {
+ public:
+  explicit PersonalizationSystemAppDelegate(Profile* profile);
+
+  // web_app::SystemWebAppDelegate overrides:
+  std::unique_ptr<WebAppInstallInfo> GetWebAppInfo() const override;
+  gfx::Size GetMinimumWindowSize() const override;
+  bool ShouldCaptureNavigations() const override;
+  bool IsAppEnabled() const override;
+  bool ShouldShowInLauncher() const override;
+};
+
+// Return a WebAppInstallInfo used to install the app.
+std::unique_ptr<WebAppInstallInfo> CreateWebAppInfoForPersonalizationApp();
+
+#endif  // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_SYSTEM_APP_DELEGATE_H_
diff --git a/chrome/browser/autofill/credit_card_accessory_controller_impl.cc b/chrome/browser/autofill/credit_card_accessory_controller_impl.cc
index 4c20762..5088ed2 100644
--- a/chrome/browser/autofill/credit_card_accessory_controller_impl.cc
+++ b/chrome/browser/autofill/credit_card_accessory_controller_impl.cc
@@ -277,6 +277,29 @@
   if (vr::VrTabHelper::IsInVr(web_contents)) {
     return false;  // TODO(crbug.com/902305): Re-enable if possible.
   }
+  if (base::FeatureList::IsEnabled(
+          autofill::features::kAutofillEnableManualFallbackForVirtualCards)) {
+    autofill::PersonalDataManager* personal_data_manager =
+        PersonalDataManagerFactory::GetForBrowserContext(
+            web_contents->GetBrowserContext());
+    if (personal_data_manager) {
+      std::vector<CreditCard*> cards =
+          personal_data_manager->GetCreditCardsToSuggest(
+              /*include_server_cards=*/true);
+      bool has_virtual_card = base::ranges::any_of(cards, [](const auto& card) {
+        return card->virtual_card_enrollment_state() ==
+               CreditCard::VirtualCardEnrollmentState::ENROLLED;
+      });
+      if (has_virtual_card) {
+        // Virtual cards are available. We should always show manual fallback
+        // for virtual cards.
+        return true;
+      }
+    }
+  }
+
+  // For non-virtual cards show the credit card accessory sheet only
+  // when both keyboard accessory and manual fallback flags are enabled.
   return features::IsAutofillManualFallbackEnabled();
 }
 
diff --git a/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc b/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc
index 6b59332a..fbff104c3 100644
--- a/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc
+++ b/chrome/browser/autofill/credit_card_accessory_controller_impl_unittest.cc
@@ -8,6 +8,7 @@
 #include "base/test/mock_callback.h"
 #include "chrome/browser/autofill/accessory_controller.h"
 #include "chrome/browser/autofill/mock_manual_filling_controller.h"
+#include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
@@ -18,6 +19,7 @@
 #include "components/autofill/core/browser/test_browser_autofill_manager.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/common/autofill_payments_features.h"
+#include "components/autofill/core/common/autofill_prefs.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/unique_ids.h"
 #include "components/strings/grit/components_strings.h"
@@ -91,6 +93,7 @@
     scoped_feature_list_.InitWithFeatures(
         /*enabled_features=*/
         {autofill::features::kAutofillEnableMerchantBoundVirtualCards,
+         autofill::features::kAutofillEnableManualFallbackForVirtualCards,
          autofill::features::
              kAutofillShowUnmaskedCachedCardInManualFillingView},
         /*disabled_features=*/{
@@ -182,6 +185,39 @@
   }
 };
 
+TEST_F(CreditCardAccessoryControllerTest,
+       AllowedForWebContentsForNonVirtualCards) {
+  autofill::prefs::SetPaymentsIntegrationEnabled(profile()->GetPrefs(), true);
+  autofill::PersonalDataManager* personal_data_manager =
+      PersonalDataManagerFactory::GetForProfile(profile());
+  personal_data_manager->SetSyncingForTest(true);
+  // Add a non-virtual card.
+  autofill::CreditCard card = test::GetMaskedServerCard();
+  personal_data_manager->AddServerCreditCardForTest(
+      std::make_unique<autofill::CreditCard>(card));
+
+  // Verify that the accessory sheet is not allowed.
+  ASSERT_FALSE(
+      CreditCardAccessoryController::AllowedForWebContents(web_contents()));
+}
+
+TEST_F(CreditCardAccessoryControllerTest,
+       AllowedForWebContentsForVirtualCards) {
+  autofill::prefs::SetPaymentsIntegrationEnabled(profile()->GetPrefs(), true);
+  autofill::PersonalDataManager* personal_data_manager =
+      PersonalDataManagerFactory::GetForProfile(profile());
+  personal_data_manager->SetSyncingForTest(true);
+  // Add a virtual card.
+  autofill::CreditCard card = test::GetMaskedServerCard();
+  card.set_virtual_card_enrollment_state(autofill::CreditCard::ENROLLED);
+  personal_data_manager->AddServerCreditCardForTest(
+      std::make_unique<autofill::CreditCard>(card));
+
+  // Verify that the accessory sheet is allowed.
+  ASSERT_TRUE(
+      CreditCardAccessoryController::AllowedForWebContents(web_contents()));
+}
+
 TEST_F(CreditCardAccessoryControllerTest, RefreshSuggestions) {
   autofill::CreditCard card = test::GetCreditCard();
   data_manager_.AddCreditCard(card);
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.cc b/chrome/browser/autofill/manual_filling_controller_impl.cc
index 6bf1633..bbc086df 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl.cc
@@ -26,6 +26,7 @@
 #include "components/autofill/core/browser/ui/accessory_sheet_data.h"
 #include "components/autofill/core/browser/ui/accessory_sheet_enums.h"
 #include "components/autofill/core/common/autofill_features.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/autofill/core/common/autofill_util.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/password_manager/core/browser/credential_cache.h"
@@ -322,7 +323,9 @@
   if (!base::FeatureList::IsEnabled(
           autofill::features::kAutofillKeyboardAccessory) &&
       !base::FeatureList::IsEnabled(
-          autofill::features::kAutofillManualFallbackAndroid)) {
+          autofill::features::kAutofillManualFallbackAndroid) &&
+      !base::FeatureList::IsEnabled(
+          autofill::features::kAutofillEnableManualFallbackForVirtualCards)) {
     return last_focused_field_type_ ==
                FocusedFieldType::kFillablePasswordField ||
            last_focused_field_type_ == FocusedFieldType::kFillableUsernameField;
diff --git a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
index d61a6e5..7d0cef0 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
@@ -27,6 +27,7 @@
 #include "components/autofill/core/browser/ui/accessory_sheet_data.h"
 #include "components/autofill/core/browser/ui/accessory_sheet_enums.h"
 #include "components/autofill/core/common/autofill_features.h"
+#include "components/autofill/core/common/autofill_payments_features.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_web_contents_factory.h"
@@ -156,6 +157,7 @@
     scoped_feature_list_.InitWithFeatures(
         /*enabled_features=*/{},
         /*disabled_features=*/{
+            autofill::features::kAutofillEnableManualFallbackForVirtualCards,
             autofill::features::kAutofillKeyboardAccessory,
             autofill::features::kAutofillManualFallbackAndroid});
     ManualFillingControllerImpl::CreateForWebContentsForTesting(
@@ -342,6 +344,35 @@
   NotifyCreditCardSourceObserver(IsFillingSourceAvailable(false));
 }
 
+TEST_F(ManualFillingControllerTest,
+       ShowsAccessoryForCreditCardsWhenManualFallbackEnabledForVirtualCards) {
+  base::test::ScopedFeatureList features;
+  features.InitWithFeatures(/*enabled_features=*/
+                            {autofill::features::
+                                 kAutofillEnableManualFallbackForVirtualCards},
+                            /*disabled_features=*/{
+                                autofill::features::kAutofillKeyboardAccessory,
+                                autofill::features::
+                                    kAutofillManualFallbackAndroid});
+  const AccessorySheetData kTestCreditCardSheet =
+      populate_sheet(AccessoryTabType::CREDIT_CARDS);
+
+  // TODO(crbug.com/1169167): Because the data isn't cached, test that only one
+  // call to `GetSheetData()` happens.
+  EXPECT_CALL(mock_cc_controller_, GetSheetData)
+      .Times(AtLeast(1))
+      .WillRepeatedly(Return(kTestCreditCardSheet));
+  EXPECT_CALL(*view(), OnItemsAvailable(kTestCreditCardSheet))
+      .Times(AnyNumber());
+  EXPECT_CALL(*view(), ShowWhenKeyboardIsVisible());
+
+  FocusFieldAndClearExpectations(FocusedFieldType::kFillableNonSearchField);
+  NotifyCreditCardSourceObserver(IsFillingSourceAvailable(true));
+
+  EXPECT_CALL(*view(), Hide()).Times(0);
+  NotifyCreditCardSourceObserver(IsFillingSourceAvailable(false));
+}
+
 TEST_F(ManualFillingControllerLegacyTest,
        UpdatesCreditCardControllerOnFocusChange) {
   EXPECT_CALL(mock_cc_controller_, RefreshSuggestions);
diff --git a/chrome/browser/cart/commerce_hint_service.cc b/chrome/browser/cart/commerce_hint_service.cc
index 49266fd9..770f832 100644
--- a/chrome/browser/cart/commerce_hint_service.cc
+++ b/chrome/browser/cart/commerce_hint_service.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/commerce/core/commerce_feature_list.h"
+#include "components/commerce/core/commerce_heuristics_data.h"
 #include "components/search/ntp_features.h"
 #include "components/ukm/content/source_url_recorder.h"
 #include "content/public/browser/document_service.h"
@@ -133,8 +134,36 @@
     service_->OnWillSendRequest(binding_url_, is_addtocart);
   }
 
-  void OnNavigation(const GURL& url, OnNavigationCallback callback) override {
-    std::move(callback).Run(service_->ShouldSkip(url));
+  void OnNavigation(const GURL& url,
+                    const std::string& version_number,
+                    OnNavigationCallback callback) override {
+    mojom::HeuristicsPtr ptr(mojom::Heuristics::New());
+    bool should_skip = service_->ShouldSkip(url);
+    if (should_skip) {
+      std::move(callback).Run(should_skip, std::move(ptr));
+      return;
+    }
+    ptr->version_number =
+        commerce_heuristics::CommerceHeuristicsData::GetInstance().GetVersion();
+    // If the version number of heuristics on renderer side is up to date, skip
+    // sending heuristics.
+    if (ptr->version_number == version_number) {
+      std::move(callback).Run(should_skip, std::move(ptr));
+      return;
+    }
+    auto hint_heuristics =
+        commerce_heuristics::CommerceHeuristicsData::GetInstance()
+            .GetHintHeuristicsJSONForDomain(GetDomain(url));
+    auto global_heuristics =
+        commerce_heuristics::CommerceHeuristicsData::GetInstance()
+            .GetGlobalHeuristicsJSON();
+    // Populate if there is heuristics data from component, otherwise initialize
+    // heuristics with empty JSON.
+    ptr->hint_json_data =
+        hint_heuristics.has_value() ? std::move(*hint_heuristics) : "{}";
+    ptr->global_json_data =
+        global_heuristics.has_value() ? std::move(*global_heuristics) : "{}";
+    std::move(callback).Run(should_skip, std::move(ptr));
   }
 
  private:
@@ -265,6 +294,23 @@
   base::UmaHistogramBoolean("Commerce.Carts.XHRIsAddToCart", reported);
 }
 
+bool CommerceHintService::InitializeCommerceHeuristicsForTesting(
+    base::Version version,
+    const std::string& hint_json_data,
+    const std::string& global_json_data,
+    const std::string& product_id_json_data,
+    const std::string& cart_extraction_script) {
+  if (!commerce_heuristics::CommerceHeuristicsData::GetInstance()
+           .PopulateDataFromComponent(hint_json_data, global_json_data,
+                                      product_id_json_data,
+                                      cart_extraction_script)) {
+    return false;
+  }
+  commerce_heuristics::CommerceHeuristicsData::GetInstance().UpdateVersion(
+      version);
+  return true;
+}
+
 WEB_CONTENTS_USER_DATA_KEY_IMPL(CommerceHintService);
 
 }  // namespace cart
diff --git a/chrome/browser/cart/commerce_hint_service.h b/chrome/browser/cart/commerce_hint_service.h
index aad1c92..8045566 100644
--- a/chrome/browser/cart/commerce_hint_service.h
+++ b/chrome/browser/cart/commerce_hint_service.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/version.h"
 #include "chrome/browser/cart/cart_service.h"
 #include "chrome/common/cart/commerce_hints.mojom.h"
 #include "components/optimization_guide/content/browser/optimization_guide_decider.h"
@@ -35,6 +36,15 @@
                      std::vector<mojom::ProductPtr> products);
   bool ShouldSkip(const GURL& url);
 
+  // Testing-only. Used to initialize commerce heuristics data in browser
+  // process for testing.
+  bool InitializeCommerceHeuristicsForTesting(
+      base::Version version,
+      const std::string& hint_json_data,
+      const std::string& global_json_data,
+      const std::string& product_id_json_data,
+      const std::string& cart_extraction_script);
+
  private:
   explicit CommerceHintService(content::WebContents* web_contents);
   friend class content::WebContentsUserData<CommerceHintService>;
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 10aeeb4..fcc5afb6 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -1091,21 +1091,21 @@
   if (chromeos::features::IsWallpaperWebUIEnabled()) {
     RegisterWebUIControllerInterfaceBinder<
         ash::personalization_app::mojom::WallpaperProvider,
-        ash::PersonalizationAppUI>(map);
+        ash::personalization_app::PersonalizationAppUI>(map);
   }
 
   if (ash::features::IsPersonalizationHubEnabled()) {
     RegisterWebUIControllerInterfaceBinder<
         ash::personalization_app::mojom::AmbientProvider,
-        ash::PersonalizationAppUI>(map);
+        ash::personalization_app::PersonalizationAppUI>(map);
 
     RegisterWebUIControllerInterfaceBinder<
         ash::personalization_app::mojom::ThemeProvider,
-        ash::PersonalizationAppUI>(map);
+        ash::personalization_app::PersonalizationAppUI>(map);
 
     RegisterWebUIControllerInterfaceBinder<
         ash::personalization_app::mojom::UserProvider,
-        ash::PersonalizationAppUI>(map);
+        ash::personalization_app::PersonalizationAppUI>(map);
   }
 
   RegisterWebUIControllerInterfaceBinder<
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 7c0226d4..20e5a5c 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -3353,8 +3353,6 @@
     "../ash/web_applications/os_url_handler_system_web_app_info.h",
     "../ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.cc",
     "../ash/web_applications/personalization_app/personalization_app_ambient_provider_impl.h",
-    "../ash/web_applications/personalization_app/personalization_app_info.cc",
-    "../ash/web_applications/personalization_app/personalization_app_info.h",
     "../ash/web_applications/personalization_app/personalization_app_theme_provider_impl.cc",
     "../ash/web_applications/personalization_app/personalization_app_theme_provider_impl.h",
     "../ash/web_applications/personalization_app/personalization_app_user_provider_impl.cc",
@@ -3363,6 +3361,8 @@
     "../ash/web_applications/personalization_app/personalization_app_utils.h",
     "../ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc",
     "../ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h",
+    "../ash/web_applications/personalization_app/personalization_system_app_delegate.cc",
+    "../ash/web_applications/personalization_app/personalization_system_app_delegate.h",
     "../ash/web_applications/print_management_web_app_info.cc",
     "../ash/web_applications/print_management_web_app_info.h",
     "../ash/web_applications/projector_app/untrusted_projector_annotator_ui_config.cc",
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
index 93de3893..a80be19d 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.cc
@@ -74,11 +74,22 @@
 
 // A simple background class to show a colored circle behind the side icon once
 // the scanning is done.
-class CircleBackground : public views::Background {
+// TODO(pkasting): This is copy and pasted from ThemedSolidBackground.  Merge.
+class CircleBackground : public views::Background, public views::ViewObserver {
  public:
-  explicit CircleBackground(SkColor color) { SetNativeControlColor(color); }
+  explicit CircleBackground(views::View* view, ui::ColorId color_id)
+      : color_id_(color_id) {
+    observation_.Observe(view);
+    if (view->GetWidget())
+      OnViewThemeChanged(view);
+  }
+
+  CircleBackground(const CircleBackground&) = delete;
+  CircleBackground& operator=(const CircleBackground&) = delete;
+
   ~CircleBackground() override = default;
 
+  // views::Background:
   void Paint(gfx::Canvas* canvas, views::View* view) const override {
     int radius = view->bounds().width() / 2;
     gfx::PointF center(radius, radius);
@@ -88,11 +99,22 @@
     flags.setColor(get_color());
     canvas->DrawCircle(center, radius, flags);
   }
-};
 
-SkColor GetBackgroundColor(const views::View* view) {
-  return view->GetColorProvider()->GetColor(ui::kColorDialogBackground);
-}
+  // views::ViewObserver:
+  void OnViewThemeChanged(views::View* view) override {
+    SetNativeControlColor(view->GetColorProvider()->GetColor(color_id_));
+    view->SchedulePaint();
+  }
+
+  void OnViewIsDeleting(views::View* view) override {
+    DCHECK(observation_.IsObservingSource(view));
+    observation_.Reset();
+  }
+
+ private:
+  base::ScopedObservation<views::View, ViewObserver> observation_{this};
+  ui::ColorId color_id_;
+};
 
 ContentAnalysisDialog::TestObserver* observer_for_testing = nullptr;
 
@@ -144,11 +166,12 @@
   void Update() {
     if (!GetWidget())
       return;
-    SetImage(gfx::CreateVectorIcon(vector_icons::kBusinessIcon, kSideImageSize,
-                                   dialog()->GetSideImageLogoColor()));
+    SetImage(ui::ImageModel::FromVectorIcon(vector_icons::kBusinessIcon,
+                                            dialog()->GetSideImageLogoColor(),
+                                            kSideImageSize));
     if (dialog()->is_result()) {
       SetBackground(std::make_unique<CircleBackground>(
-          dialog()->GetSideImageBackgroundColor()));
+          this, dialog()->GetSideImageBackgroundColor()));
     }
   }
 
@@ -656,20 +679,20 @@
   return icon;
 }
 
-SkColor ContentAnalysisDialog::GetSideImageBackgroundColor() const {
+ui::ColorId ContentAnalysisDialog::GetSideImageBackgroundColor() const {
   DCHECK(is_result());
   DCHECK(contents_view_);
 
   switch (dialog_state_) {
     case State::PENDING:
       NOTREACHED();
-      return gfx::kGoogleBlue500;
+      [[fallthrough]];
     case State::SUCCESS:
-      return gfx::kGoogleBlue500;
+      return ui::kColorAccent;
     case State::FAILURE:
-      return gfx::kGoogleRed500;
+      return ui::kColorAlertHighSeverity;
     case State::WARNING:
-      return gfx::kGoogleYellow500;
+      return ui::kColorAlertMediumSeverity;
   }
 }
 
@@ -862,7 +885,8 @@
 }
 
 const gfx::ImageSkia* ContentAnalysisDialog::GetTopImage() const {
-  const bool use_dark = color_utils::IsDark(GetBackgroundColor(contents_view_));
+  const bool use_dark = color_utils::IsDark(
+      contents_view_->GetColorProvider()->GetColor(ui::kColorDialogBackground));
   return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
       GetTopImageId(use_dark));
 }
@@ -871,19 +895,19 @@
   return access_point_ == safe_browsing::DeepScanAccessPoint::PRINT;
 }
 
-SkColor ContentAnalysisDialog::GetSideImageLogoColor() const {
+ui::ColorId ContentAnalysisDialog::GetSideImageLogoColor() const {
   DCHECK(contents_view_);
 
   switch (dialog_state_) {
     case State::PENDING:
       // Match the spinner in the pending state.
-      return gfx::kGoogleBlue500;
+      return ui::kColorThrobberPreconnect;
     case State::SUCCESS:
     case State::FAILURE:
     case State::WARNING:
       // In a result state the background will have the result's color, so the
       // logo should have the same color as the background.
-      return GetBackgroundColor(contents_view_);
+      return ui::kColorDialogBackground;
   }
 }
 
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h
index 3ad0b090..7886908 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h
@@ -137,11 +137,11 @@
   }
 
   // Returns the side image's logo color depending on `dialog_state_`.
-  SkColor GetSideImageLogoColor() const;
+  ui::ColorId GetSideImageLogoColor() const;
 
   // Returns the side image's background circle color depending on
   // `dialog_state_`.
-  SkColor GetSideImageBackgroundColor() const;
+  ui::ColorId GetSideImageBackgroundColor() const;
 
   // Returns the appropriate top image depending on `dialog_state_`.
   const gfx::ImageSkia* GetTopImage() const;
diff --git a/chrome/browser/enterprise/connectors/file_system/signin_confirmation_modal.cc b/chrome/browser/enterprise/connectors/file_system/signin_confirmation_modal.cc
index 9cc918c..30607d07 100644
--- a/chrome/browser/enterprise/connectors/file_system/signin_confirmation_modal.cc
+++ b/chrome/browser/enterprise/connectors/file_system/signin_confirmation_modal.cc
@@ -87,9 +87,8 @@
 
 ui::ImageModel FileSystemConfirmationModal::GetWindowIcon() {
   // Show the enterprise icon.
-  return ui::ImageModel::FromImageSkia(gfx::CreateVectorIcon(
-      gfx::IconDescription(vector_icons::kBusinessIcon, kBusinessIconSize,
-                           gfx::kGoogleBlue500)));
+  return ui::ImageModel::FromVectorIcon(vector_icons::kBusinessIcon,
+                                        ui::kColorAccent, kBusinessIconSize);
 }
 
 ui::ModalType FileSystemConfirmationModal::GetModalType() const {
diff --git a/chrome/browser/enterprise/connectors/file_system/signin_confirmation_unittest.cc b/chrome/browser/enterprise/connectors/file_system/signin_confirmation_unittest.cc
index fc22e049..d5de2413 100644
--- a/chrome/browser/enterprise/connectors/file_system/signin_confirmation_unittest.cc
+++ b/chrome/browser/enterprise/connectors/file_system/signin_confirmation_unittest.cc
@@ -58,7 +58,6 @@
 
   auto icon = modal->GetWindowIcon();
   ASSERT_FALSE(icon.IsEmpty());
-  ASSERT_TRUE(icon.IsImage());
 
   views::View* message_view = modal->GetContentsView();
   ASSERT_NE(message_view, nullptr);
diff --git a/chrome/browser/feature_engagement/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitor.java b/chrome/browser/feature_engagement/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitor.java
index 7b02cd6..96f5cac 100644
--- a/chrome/browser/feature_engagement/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitor.java
+++ b/chrome/browser/feature_engagement/java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitor.java
@@ -19,6 +19,7 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
+import org.chromium.base.StrictModeContext;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.base.task.PostTask;
@@ -113,7 +114,7 @@
             return false;
         }
 
-        try {
+        try (StrictModeContext ignored = StrictModeContext.allowDiskWrites()) {
             cursor = ContextUtils.getApplicationContext().getContentResolver().query(
                     storeUri, mediaProjection, null, null, null);
         } catch (SecurityException se) {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index cbbf1190..d1345b16 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -412,6 +412,11 @@
     "expiry_milestone": 103
   },
   {
+    "name": "autofill-enable-manual-fallback-for-virtual-cards",
+    "owners": [ "siashah", "siyua" ],
+    "expiry_milestone": 106
+  },
+  {
     "name": "autofill-enable-merchant-bound-virtual-cards",
     "owners": [ "siashah", "siyua" ],
     "expiry_milestone": 105
@@ -2325,6 +2330,11 @@
     "expiry_milestone": 110
   },
   {
+    "name": "enable-machine-learning-model-loader-web-platform-api",
+    "owners": [ "honglinyu" ],
+    "expiry_milestone": 130
+  },
+  {
     "name": "enable-magnifier-continuous-mouse-following-mode-setting",
     "owners": [ "josiahk", "//ui/accessibility/OWNERS" ],
     "expiry_milestone": 98
@@ -5420,6 +5430,11 @@
     "expiry_milestone" : 104
   },
   {
+    "name" : "side-panel-journeys",
+    "owners": [ "mfacey", "chrome-journeys@google.com", "chrome-desktop-ui-sea@google.com"],
+    "expiry_milestone" : 110
+  },
+  {
     "name" : "side-search",
     "owners": [ "chrome-cros@google.com", "tluk" ],
     "expiry_milestone" : 104
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 8853da1..746f278 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -324,6 +324,12 @@
     "When enabled, Autofill will offer to use merchant bound virtual cards in "
     "payment forms.";
 
+const char kAutofillEnableManualFallbackForVirtualCardsName[] =
+    "Show manual fallback for virtual cards";
+const char kAutofillEnableManualFallbackForVirtualCardsDescription[] =
+    "When enabled, manual fallback will be enabled for virtual cards on "
+    "Android.";
+
 const char kAutofillEnableOfferNotificationForPromoCodesName[] =
     "Extend Autofill offers and rewards notification to promo code offers";
 const char kAutofillEnableOfferNotificationForPromoCodesDescription[] =
@@ -1629,6 +1635,11 @@
 const char kCanvas2DLayersDescription[] =
     "Enables the canvas 2D methods BeginLayer and EndLayer.";
 
+const char kEnableMachineLearningModelLoaderWebPlatformApiName[] =
+    "Enables Machine Learning Model Loader Web Platform API";
+const char kEnableMachineLearningModelLoaderWebPlatformApiDescription[] =
+    "Enables the Machine Learning Model Loader Web Platform API.";
+
 const char kSystemProxyForSystemServicesName[] =
     "Enable system-proxy for selected system services";
 const char kSystemProxyForSystemServicesDescription[] =
@@ -2274,6 +2285,11 @@
 const char kSidePanelImprovedClobberingDescription[] =
     "Improves the side panel clobbering experience for RHS side panels.";
 
+const char kSidePanelJourneysFlagId[] = "side-panel-journeys";
+const char kSidePanelJourneysName[] = "Side panel journeys";
+const char kSidePanelJourneysDescription[] =
+    "Enables Journeys within the side panel.";
+
 const char kSharedClipboardUIName[] =
     "Enable shared clipboard feature signals to be handled";
 const char kSharedClipboardUIDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 98991e7..0b3eab1 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -189,6 +189,9 @@
 extern const char kAutofillEnableMerchantBoundVirtualCardsName[];
 extern const char kAutofillEnableMerchantBoundVirtualCardsDescription[];
 
+extern const char kAutofillEnableManualFallbackForVirtualCardsName[];
+extern const char kAutofillEnableManualFallbackForVirtualCardsDescription[];
+
 extern const char kAutofillEnableOfferNotificationForPromoCodesName[];
 extern const char kAutofillEnableOfferNotificationForPromoCodesDescription[];
 
@@ -932,6 +935,9 @@
 extern const char kCanvas2DLayersName[];
 extern const char kCanvas2DLayersDescription[];
 
+extern const char kEnableMachineLearningModelLoaderWebPlatformApiName[];
+extern const char kEnableMachineLearningModelLoaderWebPlatformApiDescription[];
+
 extern const char kDestroyProfileOnBrowserCloseName[];
 extern const char kDestroyProfileOnBrowserCloseDescription[];
 
@@ -1286,6 +1292,10 @@
 extern const char kSidePanelImprovedClobberingName[];
 extern const char kSidePanelImprovedClobberingDescription[];
 
+extern const char kSidePanelJourneysFlagId[];
+extern const char kSidePanelJourneysName[];
+extern const char kSidePanelJourneysDescription[];
+
 extern const char kSharedClipboardUIName[];
 extern const char kSharedClipboardUIDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index 14f5865a..0e4b10b 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -83,6 +83,7 @@
 const base::Feature* const kFeaturesExposedToJava[] = {
     &autofill::features::kAutofillAddressProfileSavePromptNicknameSupport,
     &autofill::features::kAutofillCreditCardAuthentication,
+    &autofill::features::kAutofillEnableManualFallbackForVirtualCards,
     &autofill::features::kAutofillKeyboardAccessory,
     &autofill::features::kAutofillManualFallbackAndroid,
     &autofill::features::kAutofillRefreshStyleAndroid,
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 af7c86c..3405c22 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
@@ -206,6 +206,8 @@
             "AutofillAllowNonHttpActivation";
     public static final String AUTOFILL_CREDIT_CARD_AUTHENTICATION =
             "AutofillCreditCardAuthentication";
+    public static final String AUTOFILL_ENABLE_MANUAL_FALLBACK_FOR_VIRTUAL_CARDS =
+            "AutofillEnableManualFallbackForVirtualCards";
     public static final String AUTOFILL_ENABLE_SUPPORT_FOR_HONORIFIC_PREFIXES =
             "AutofillEnableSupportForHonorificPrefixes";
     public static final String AUTOFILL_ENABLE_SUPPORT_FOR_MORE_STRUCTURE_IN_ADDRESSES =
diff --git a/chrome/browser/hid/hid_chooser_context_unittest.cc b/chrome/browser/hid/hid_chooser_context_unittest.cc
index 043a0fc0..281f80f3 100644
--- a/chrome/browser/hid/hid_chooser_context_unittest.cc
+++ b/chrome/browser/hid/hid_chooser_context_unittest.cc
@@ -6,13 +6,13 @@
 
 #include "base/barrier_closure.h"
 #include "base/guid.h"
-#include "base/json/json_reader.h"
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_future.h"
+#include "base/test/values_test_util.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
@@ -40,6 +40,7 @@
 #include "components/user_manager/scoped_user_manager.h"
 #endif
 
+using ::base::test::ParseJson;
 using ::base::test::RunClosure;
 
 namespace {
@@ -55,12 +56,6 @@
 constexpr uint16_t kTestUsagePage = device::mojom::kPageGenericDesktop;
 constexpr uint16_t kTestUsage = device::mojom::kGenericDesktopGamePad;
 
-std::unique_ptr<base::Value> ReadJson(base::StringPiece json) {
-  absl::optional<base::Value> value = base::JSONReader::Read(json);
-  EXPECT_TRUE(value);
-  return value ? base::Value::ToUniquePtrValue(std::move(*value)) : nullptr;
-}
-
 // Main text fixture.
 class HidChooserContextTestBase {
  public:
@@ -257,28 +252,28 @@
 
   void SetAskForUrlsPolicy(base::StringPiece policy) {
     profile_->GetTestingPrefService()->SetManagedPref(
-        prefs::kManagedWebHidAskForUrls, ReadJson(policy));
+        prefs::kManagedWebHidAskForUrls, ParseJson(policy));
   }
 
   void SetBlockedForUrlsPolicy(base::StringPiece policy) {
     profile_->GetTestingPrefService()->SetManagedPref(
-        prefs::kManagedWebHidBlockedForUrls, ReadJson(policy));
+        prefs::kManagedWebHidBlockedForUrls, ParseJson(policy));
   }
 
   void SetAllowDevicesForUrlsPolicy(base::StringPiece policy) {
     testing_profile_manager_->local_state()->Get()->SetManagedPref(
-        prefs::kManagedWebHidAllowDevicesForUrls, ReadJson(policy));
+        prefs::kManagedWebHidAllowDevicesForUrls, ParseJson(policy));
   }
 
   void SetAllowDevicesWithHidUsagesForUrlsPolicy(base::StringPiece policy) {
     testing_profile_manager_->local_state()->Get()->SetManagedPref(
         prefs::kManagedWebHidAllowDevicesWithHidUsagesForUrls,
-        ReadJson(policy));
+        ParseJson(policy));
   }
 
   void SetAllowAllDevicesForUrlsPolicy(base::StringPiece policy) {
     testing_profile_manager_->local_state()->Get()->SetManagedPref(
-        prefs::kManagedWebHidAllowAllDevicesForUrls, ReadJson(policy));
+        prefs::kManagedWebHidAllowAllDevicesForUrls, ParseJson(policy));
   }
 
  private:
diff --git a/chrome/browser/hid/hid_policy_allowed_devices_unittest.cc b/chrome/browser/hid/hid_policy_allowed_devices_unittest.cc
index ae47cd12..0a03f4e 100644
--- a/chrome/browser/hid/hid_policy_allowed_devices_unittest.cc
+++ b/chrome/browser/hid/hid_policy_allowed_devices_unittest.cc
@@ -7,8 +7,8 @@
 #include <string>
 #include <utility>
 
-#include "base/json/json_reader.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/test/values_test_util.h"
 #include "chrome/browser/prefs/browser_prefs.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
@@ -24,15 +24,9 @@
 
 namespace {
 
+using ::base::test::ParseJson;
 using ::testing::UnorderedElementsAre;
 
-base::Value ReadJson(base::StringPiece json) {
-  base::JSONReader::ValueWithError result =
-      base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return result.value ? std::move(*result.value) : base::Value();
-}
-
 class HidPolicyAllowedDevicesTest : public testing::Test {
  public:
   HidPolicyAllowedDevicesTest() { RegisterLocalState(local_state_.registry()); }
@@ -46,17 +40,17 @@
 
   void SetAllowDevicesForUrlsPrefValue(base::StringPiece policy) {
     local_state_.Set(prefs::kManagedWebHidAllowDevicesForUrls,
-                     ReadJson(policy));
+                     ParseJson(policy));
   }
 
   void SetAllowDevicesWithHidUsagesForUrlsPrefValue(base::StringPiece policy) {
     local_state_.Set(prefs::kManagedWebHidAllowDevicesWithHidUsagesForUrls,
-                     ReadJson(policy));
+                     ParseJson(policy));
   }
 
   void SetAllowAllDevicesForUrlsPrefValue(base::StringPiece policy) {
     local_state_.Set(prefs::kManagedWebHidAllowAllDevicesForUrls,
-                     ReadJson(policy));
+                     ParseJson(policy));
   }
 
  protected:
diff --git a/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_interactive_uitest.cc b/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_interactive_uitest.cc
index 8294d2f..0f051ff1 100644
--- a/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_interactive_uitest.cc
+++ b/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_interactive_uitest.cc
@@ -43,8 +43,14 @@
 
 // This test doesn't check whether switching between browser windows results in
 // separate sessions or not.
+// Disabled on Linux for being flaky. crbug.com/1311773
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_VisibilityTest DISABLED_VisibilityTest
+#else
+#define MAYBE_VisibilityTest VisibilityTest
+#endif
 IN_PROC_BROWSER_TEST_F(ChromeVisibilityObserverInteractiveTest,
-                       VisibilityTest) {
+                       MAYBE_VisibilityTest) {
   // Observer should now be active as there is one active browser.
   EXPECT_TRUE(is_active());
 
diff --git a/chrome/browser/net/dns_over_https_browsertest.cc b/chrome/browser/net/dns_over_https_browsertest.cc
index bae06d9..e5d5924 100644
--- a/chrome/browser/net/dns_over_https_browsertest.cc
+++ b/chrome/browser/net/dns_over_https_browsertest.cc
@@ -2,6 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/feature_list.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/net/secure_dns_config.h"
 #include "chrome/browser/net/stub_resolver_config_reader.h"
@@ -17,6 +22,7 @@
 #include "net/dns/public/dns_over_https_server_config.h"
 #include "net/dns/public/doh_provider_entry.h"
 #include "net/dns/public/secure_dns_mode.h"
+#include "testing/gtest/include/gtest/gtest-message.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -25,27 +31,31 @@
 struct DohParameter {
   DohParameter(std::string provider,
                net::DnsOverHttpsServerConfig server,
-               bool valid)
+               bool valid,
+               bool provider_feature_enabled)
       : doh_provider(std::move(provider)),
         server_config(std::move(server)),
-        is_valid(valid) {}
+        is_valid(valid),
+        provider_feature_enabled(provider_feature_enabled) {}
 
   std::string doh_provider;
   net::DnsOverHttpsServerConfig server_config;
   bool is_valid;
+  bool provider_feature_enabled;
 };
 
 std::vector<DohParameter> GetDohServerTestCases() {
   std::vector<DohParameter> doh_test_cases;
   for (const auto* entry : net::DohProviderEntry::GetList()) {
+    const bool feature_enabled = base::FeatureList::IsEnabled(entry->feature);
     doh_test_cases.emplace_back(entry->provider, entry->doh_server_config,
-                                true);
+                                /*valid=*/true, feature_enabled);
   }
   // Negative test-case
   doh_test_cases.emplace_back(
       "NegativeTestExampleCom",
       *net::DnsOverHttpsServerConfig::FromString("https://www.example.com"),
-      false);
+      /*valid=*/false, /*provider_feature_enabled=*/false);
   return doh_test_cases;
 }
 
@@ -75,6 +85,9 @@
 };
 
 IN_PROC_BROWSER_TEST_P(DohBrowserTest, MANUAL_ExternalDohServers) {
+  SCOPED_TRACE(testing::Message() << "Provider's base::Feature is enabled: "
+                                  << GetParam().provider_feature_enabled);
+
   SecureDnsConfig secure_dns_config =
       SystemNetworkContextManager::GetStubResolverConfigReader()
           ->GetSecureDnsConfiguration(
diff --git a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
index 38dbea4e..f779d75 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
+++ b/chrome/browser/optimization_guide/prediction/prediction_manager_browsertest.cc
@@ -42,6 +42,7 @@
 #include "content/public/test/network_connection_change_simulator.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
+#include "testing/gmock/include/gmock/gmock.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 #include "ash/constants/ash_switches.h"
@@ -679,6 +680,25 @@
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.PredictionModelLoadedVersion.PainfulPageLoad",
       kSuccessfulModelVersion, 1);
+  EXPECT_THAT(
+      histogram_tester.GetAllSamples("OptimizationGuide.PredictionManager."
+                                     "ModelDeliveryEvents.PainfulPageLoad"),
+      testing::UnorderedElementsAre(
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kGetModelsRequest),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kDownloadServiceRequest),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDownloadStarted),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDownloaded),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDelivered),
+                       1)));
 }
 
 IN_PROC_BROWSER_TEST_F(PredictionManagerModelDownloadingBrowserTest,
@@ -727,6 +747,25 @@
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.PredictionModelLoadedVersion.PainfulPageLoad",
       kSuccessfulModelVersion, 1);
+  EXPECT_THAT(
+      histogram_tester.GetAllSamples("OptimizationGuide.PredictionManager."
+                                     "ModelDeliveryEvents.PainfulPageLoad"),
+      testing::UnorderedElementsAre(
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kGetModelsRequest),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kDownloadServiceRequest),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDownloadStarted),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDownloaded),
+                       1),
+          base::Bucket(static_cast<base::HistogramBase::Sample>(
+                           ModelDeliveryEvent::kModelDelivered),
+                       1)));
 }
 
 IN_PROC_BROWSER_TEST_F(PredictionManagerModelDownloadingBrowserTest,
diff --git a/chrome/browser/optimization_guide/prediction/prediction_model_download_client.cc b/chrome/browser/optimization_guide/prediction/prediction_model_download_client.cc
index 2bec965..8e4214c5a 100644
--- a/chrome/browser/optimization_guide/prediction/prediction_model_download_client.cc
+++ b/chrome/browser/optimization_guide/prediction/prediction_model_download_client.cc
@@ -16,6 +16,26 @@
 
 namespace optimization_guide {
 
+namespace {
+
+// Parses the optimization target from |custom_data|.
+absl::optional<proto::OptimizationTarget> ParseOptimizationTarget(
+    const download::DownloadParams::CustomData& custom_data) {
+  const auto target_it =
+      custom_data.find(kPredictionModelOptimizationTargetCustomDataKey);
+  if (target_it == custom_data.end()) {
+    return absl::nullopt;
+  }
+  proto::OptimizationTarget optimization_target;
+  if (!proto::OptimizationTarget_Parse(target_it->second,
+                                       &optimization_target)) {
+    return absl::nullopt;
+  }
+  return optimization_target;
+}
+
+}  // namespace
+
 PredictionModelDownloadClient::PredictionModelDownloadClient(Profile* profile)
     : profile_(profile) {}
 
@@ -80,8 +100,10 @@
     download::Client::FailureReason reason) {
   PredictionModelDownloadManager* download_manager =
       GetPredictionModelDownloadManager();
-  if (download_manager)
-    download_manager->OnDownloadFailed(guid);
+  if (download_manager) {
+    download_manager->OnDownloadFailed(
+        ParseOptimizationTarget(completion_info.custom_data), guid);
+  }
 }
 
 void PredictionModelDownloadClient::OnDownloadSucceeded(
@@ -89,8 +111,11 @@
     const download::CompletionInfo& completion_info) {
   PredictionModelDownloadManager* download_manager =
       GetPredictionModelDownloadManager();
-  if (download_manager)
-    download_manager->OnDownloadSucceeded(guid, completion_info.path);
+  if (download_manager) {
+    download_manager->OnDownloadSucceeded(
+        ParseOptimizationTarget(completion_info.custom_data), guid,
+        completion_info.path);
+  }
 }
 
 bool PredictionModelDownloadClient::CanServiceRemoveDownloadedFile(
diff --git a/chrome/browser/page_load_metrics/integration_tests/event_counts_browsertest.cc b/chrome/browser/page_load_metrics/integration_tests/event_counts_browsertest.cc
index fc4c1235..0d7816e1 100644
--- a/chrome/browser/page_load_metrics/integration_tests/event_counts_browsertest.cc
+++ b/chrome/browser/page_load_metrics/integration_tests/event_counts_browsertest.cc
@@ -9,18 +9,12 @@
 #include "content/public/test/browser_test_utils.h"
 
 #if defined(USE_AURA)
-// TODO(crbug.com/1311383) Fix flakiness and reenable the test.
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS)
-#define MAYBE_EventCounts DISABLED_EventCounts
-#else
-#define MAYBE_EventCounts EventCounts
-#endif
-IN_PROC_BROWSER_TEST_F(MetricIntegrationTest, MAYBE_EventCounts) {
+IN_PROC_BROWSER_TEST_F(MetricIntegrationTest, EventCounts) {
   LoadHTML(R"HTML(
     <p>Sample website</p>
     <script type="text/javascript">
     window.eventCounts =
-        {mousedown: 0, touchstart: 0, pointerdown: 0, click: 0};
+        {mouseup: 0, touchend: 0, pointerup: 0, click: 0};
     function recordEvent(e) {
         eventCounts[e.type]++;
     }
@@ -44,8 +38,9 @@
   content::SimulateMouseClick(web_contents(), 0,
                               blink::WebMouseEvent::Button::kLeft);
 
-  while (EvalJs(web_contents(), "window.eventCounts.mousedown").ExtractInt() <
-         3) {
+  while (EvalJs(web_contents(), "window.eventCounts.click").ExtractInt() < 3 &&
+         EvalJs(web_contents(), "window.eventCounts.pointerup").ExtractInt() <
+             3) {
     base::RunLoop run_loop;
     base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
         FROM_HERE, run_loop.QuitClosure(), base::Milliseconds(100));
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
index 4944fba..654a5bc 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.cc
@@ -33,8 +33,6 @@
 // )
 const double kDaysSinceLastVisitBucketSpacing = 1.7;
 
-const size_t kUkmCssJsBeforeFcpMax = 10;
-
 bool IsCSSOrJS(const std::string& mime_type) {
   std::string lower_mime_type = base::ToLowerASCII(mime_type);
   return lower_mime_type == "text/css" ||
@@ -183,16 +181,6 @@
 
     if (!IsCSSOrJS(resource->mime_type))
       continue;
-
-    if (!resource->completed_before_fcp)
-      continue;
-
-    if (resource->cache_type ==
-        page_load_metrics::mojom::CacheType::kNotCached) {
-      loaded_css_js_from_network_before_fcp_++;
-    } else {
-      loaded_css_js_from_cache_before_fcp_++;
-    }
   }
 }
 
@@ -215,13 +203,6 @@
     }
   }
 
-  LOCAL_HISTOGRAM_COUNTS_100(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached",
-      loaded_css_js_from_cache_before_fcp_);
-  LOCAL_HISTOGRAM_COUNTS_100(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached",
-      loaded_css_js_from_network_before_fcp_);
-
   RecordPrefetchProxyEvent();
   RecordAfterSRPEvent();
 }
@@ -243,19 +224,7 @@
     }
   }
 
-  int ukm_loaded_css_js_from_cache_before_fcp =
-      std::min(kUkmCssJsBeforeFcpMax, loaded_css_js_from_cache_before_fcp_);
-  builder.Setcount_css_js_loaded_cache_before_fcp(
-      ukm_loaded_css_js_from_cache_before_fcp);
-
-  int ukm_loaded_css_js_from_network_before_fcp =
-      std::min(kUkmCssJsBeforeFcpMax, loaded_css_js_from_network_before_fcp_);
-  builder.Setcount_css_js_loaded_network_before_fcp(
-      ukm_loaded_css_js_from_network_before_fcp);
-
   if (srp_metrics_ && srp_metrics_->predicted_urls_count_ > 0) {
-    builder.Setordered_eligible_pages_bitmask(
-        srp_metrics_->ordered_eligible_pages_bitmask_);
     builder.Setprefetch_eligible_count(srp_metrics_->prefetch_eligible_count_);
     builder.Setprefetch_attempted_count(
         srp_metrics_->prefetch_attempted_count_);
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
index 73f20bb..6be5600 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer.h
@@ -81,9 +81,6 @@
   // query on commit.
   base::Time navigation_start_;
 
-  size_t loaded_css_js_from_cache_before_fcp_ = 0;
-  size_t loaded_css_js_from_network_before_fcp_ = 0;
-
   // The minimum number of days since the last visit, as reported by
   // HistoryService, to any origin in the redirect chain. Set to -1 if there is
   // a response from the history service but was no previous visit.
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc
index 6962d6c..18b1f9e0 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_browsertest.cc
@@ -96,17 +96,6 @@
   std::unique_ptr<ukm::TestAutoSetUkmRecorder> ukm_recorder_;
 };
 
-IN_PROC_BROWSER_TEST_F(PrefetchProxyPageLoadMetricsObserverBrowserTest,
-                       BeforeFCPPlumbing) {
-  base::HistogramTester histogram_tester;
-  NavigateToOriginPath("/index.html");
-  NavigateAway();
-
-  histogram_tester.ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 2,
-      1);
-}
-
 // TODO(http://crbug.com/1025737) Flaky on Mac.
 #if BUILDFLAG(IS_MAC)
 #define MAYBE_HistoryPlumbing DISABLED_HistoryPlumbing
@@ -147,10 +136,6 @@
       "PageLoad.Clients.SubresourceLoading.DaysSinceLastVisitToOrigin", 0);
   histogram_tester.ExpectTotalCount(
       "PageLoad.Clients.SubresourceLoading.HasPreviousVisitToOrigin", 0);
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0);
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0);
 }
 
 class PrefetchProxyPageLoadMetricsObserverPrerenderBrowserTest
@@ -203,16 +188,8 @@
   content::test::PrerenderHostObserver host_observer(*GetWebContents(),
                                                      host_id);
   EXPECT_FALSE(host_observer.was_activated());
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0);
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0);
 
   // Activate the prerender page.
   prerender_test_helper().NavigatePrimaryPage(prerender_url);
   EXPECT_TRUE(host_observer.was_activated());
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 1);
-  histogram_tester.ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 1);
 }
diff --git a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc
index 25109a787..8c4bdf6 100644
--- a/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/prefetch_proxy_page_load_metrics_observer_unittest.cc
@@ -16,18 +16,6 @@
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_source.h"
 
-namespace {
-
-page_load_metrics::mojom::ResourceDataUpdatePtr CreateBaseResource(
-    bool was_cached,
-    bool is_complete) {
-  return CreateResource(was_cached, 1234 /* delta_bytes */,
-                        1234 /* encoded_body_length */,
-                        1234 /* decoded_body_length */, is_complete);
-}
-
-}  // namespace
-
 class TestPrefetchProxyPageLoadMetricsObserver
     : public PrefetchProxyPageLoadMetricsObserver {
  public:
@@ -85,42 +73,6 @@
     EXPECT_EQ(*value, expected_value.value());
   }
 
-  page_load_metrics::mojom::ResourceDataUpdatePtr CreateCSSResource(
-      bool was_cached,
-      bool is_complete,
-      bool completed_before_fcp) {
-    page_load_metrics::mojom::ResourceDataUpdatePtr update =
-        CreateBaseResource(was_cached, is_complete);
-    update->mime_type = "text/css";
-    update->is_main_frame_resource = in_main_frame_;
-    update->completed_before_fcp = completed_before_fcp;
-    return update;
-  }
-
-  page_load_metrics::mojom::ResourceDataUpdatePtr CreateJSResource(
-      bool was_cached,
-      bool is_complete,
-      bool completed_before_fcp) {
-    page_load_metrics::mojom::ResourceDataUpdatePtr update =
-        CreateBaseResource(was_cached, is_complete);
-    update->mime_type = "text/javascript";
-    update->is_main_frame_resource = in_main_frame_;
-    update->completed_before_fcp = completed_before_fcp;
-    return update;
-  }
-
-  page_load_metrics::mojom::ResourceDataUpdatePtr CreateOtherResource(
-      bool was_cached,
-      bool is_complete,
-      bool completed_before_fcp) {
-    page_load_metrics::mojom::ResourceDataUpdatePtr update =
-        CreateBaseResource(was_cached, is_complete);
-    update->mime_type = "other";
-    update->is_main_frame_resource = in_main_frame_;
-    update->completed_before_fcp = completed_before_fcp;
-    return update;
-  }
-
  protected:
   void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
     std::unique_ptr<TestPrefetchProxyPageLoadMetricsObserver> observer =
@@ -152,300 +104,13 @@
   bool in_main_frame_ = true;
 };
 
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_CSS) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 2,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 3, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 2);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 3);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_JS) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateJSResource(true /* was_cached */,
-                                       true /* is_complete */,
-                                       true /* completed_before_fcp */));
-  resources.push_back(CreateJSResource(true /* was_cached */,
-                                       true /* is_complete */,
-                                       true /* completed_before_fcp */));
-  resources.push_back(CreateJSResource(true /* was_cached */,
-                                       true /* is_complete */,
-                                       true /* completed_before_fcp */));
-
-  resources.push_back(CreateJSResource(false /* was_cached */,
-                                       true /* is_complete */,
-                                       true /* completed_before_fcp */));
-  resources.push_back(CreateJSResource(false /* was_cached */,
-                                       true /* is_complete */,
-                                       true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 2,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 3, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 2);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 3);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_Other) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateOtherResource(true /* was_cached */,
-                                          true /* is_complete */,
-                                          true /* completed_before_fcp */));
-  resources.push_back(CreateOtherResource(true /* was_cached */,
-                                          true /* is_complete */,
-                                          true /* completed_before_fcp */));
-  resources.push_back(CreateOtherResource(true /* was_cached */,
-                                          true /* is_complete */,
-                                          true /* completed_before_fcp */));
-
-  resources.push_back(CreateOtherResource(false /* was_cached */,
-                                          true /* is_complete */,
-                                          true /* completed_before_fcp */));
-  resources.push_back(CreateOtherResource(false /* was_cached */,
-                                          true /* is_complete */,
-                                          true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 0);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 0);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_NotComplete) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        false /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        false /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        false /* is_complete */,
-                                        false /* completed_before_fcp */));
-
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        false /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        false /* is_complete */,
-                                        false /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 0);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 0);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_Subframe) {
-  StartTest();
-  set_in_main_frame(false);
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 0);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 0);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, AfterFCP) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        false /* completed_before_fcp */));
-
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        false /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        false /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 0);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 0);
-}
-
-TEST_F(PrefetchProxyPageLoadMetricsObserverTest, BeforeFCP_MaxUKM) {
-  StartTest();
-
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
-  tester()->NavigateToUntrackedUrl();
-
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0,
-      1);
-  tester()->histogram_tester().ExpectUniqueSample(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 11, 1);
-
-  using UkmEntry = ukm::builders::PrefetchProxy;
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_network_before_fcpName, 0);
-  VerifyUKMEntry(UkmEntry::kcount_css_js_loaded_cache_before_fcpName, 10);
-}
-
 TEST_F(PrefetchProxyPageLoadMetricsObserverTest, DontRecordForNonHttp) {
   set_navigation_url(GURL("chrome://version"));
 
   StartTest();
 
-  std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources;
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(true /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-  resources.push_back(CreateCSSResource(false /* was_cached */,
-                                        true /* is_complete */,
-                                        true /* completed_before_fcp */));
-
-  tester()->SimulateResourceDataUseUpdate(resources);
   tester()->NavigateToUntrackedUrl();
 
-  tester()->histogram_tester().ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Noncached", 0);
-  tester()->histogram_tester().ExpectTotalCount(
-      "PageLoad.Clients.SubresourceLoading.LoadedCSSJSBeforeFCP.Cached", 0);
-
   VerifyNoUKM();
 }
 
diff --git a/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc b/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc
index e2245fba..a12a8504 100644
--- a/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc
+++ b/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/json/json_reader.h"
 #include "base/memory/raw_ptr.h"
+#include "base/test/values_test_util.h"
 #include "chrome/common/pref_names.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/policy/core/browser/configuration_policy_handler.h"
@@ -20,11 +20,7 @@
 
 namespace {
 
-absl::optional<base::Value> ReadJson(base::StringPiece json) {
-  auto result = base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return std::move(result.value);
-}
+using ::base::test::ParseJson;
 
 }  // namespace
 
@@ -81,7 +77,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_TRUE(handler()->CheckPolicySettings(policy, &errors));
@@ -141,7 +137,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -179,7 +175,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -215,7 +211,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -258,7 +254,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -294,7 +290,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -330,7 +326,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -367,7 +363,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -408,7 +404,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -449,7 +445,7 @@
   policy.Set(key::kSerialAllowUsbDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
diff --git a/chrome/browser/policy/webhid_device_policy_handler_unittest.cc b/chrome/browser/policy/webhid_device_policy_handler_unittest.cc
index f43b781..597a5f6 100644
--- a/chrome/browser/policy/webhid_device_policy_handler_unittest.cc
+++ b/chrome/browser/policy/webhid_device_policy_handler_unittest.cc
@@ -7,8 +7,8 @@
 #include <memory>
 #include <utility>
 
-#include "base/json/json_reader.h"
 #include "base/strings/string_util.h"
+#include "base/test/values_test_util.h"
 #include "chrome/common/pref_names.h"
 #include "components/policy/core/browser/configuration_policy_pref_store.h"
 #include "components/policy/core/browser/configuration_policy_pref_store_test.h"
@@ -22,6 +22,8 @@
 
 namespace {
 
+using ::base::test::IsJson;
+using ::base::test::ParseJson;
 using ::testing::WithParamInterface;
 
 constexpr char kDevicesKey[] = "devices";
@@ -32,12 +34,6 @@
 constexpr char kUsagePageKey[] = "usage_page";
 constexpr char kUsageKey[] = "usage";
 
-absl::optional<base::Value> ReadJson(base::StringPiece json) {
-  auto result = base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return std::move(result.value);
-}
-
 }  // namespace
 
 class WebHidDevicePolicyHandlerTest : public ConfigurationPolicyPrefStoreTest {
@@ -160,7 +156,7 @@
   policy.Set(
       key::kWebHidAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kAllowDevicesForUrls), /*external_data_fetcher=*/nullptr);
+      ParseJson(kAllowDevicesForUrls), /*external_data_fetcher=*/nullptr);
   ASSERT_TRUE(errors.empty());
   EXPECT_TRUE(handler->CheckPolicySettings(policy, &errors));
   EXPECT_TRUE(errors.empty());
@@ -175,7 +171,7 @@
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
              PolicySource::POLICY_SOURCE_CLOUD,
-             ReadJson(kAllowDevicesWithHidUsagesForUrls),
+             ParseJson(kAllowDevicesWithHidUsagesForUrls),
              /*external_data_fetcher=*/nullptr);
   ASSERT_TRUE(errors.empty());
   EXPECT_TRUE(handler->CheckPolicySettings(policy, &errors));
@@ -191,7 +187,7 @@
   policy.Set(
       key::kWebHidAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kAllowDevicesForUrls), nullptr);
+      ParseJson(kAllowDevicesForUrls), nullptr);
   UpdateProviderPolicy(policy);
 
   const base::Value* pref_value = nullptr;
@@ -265,7 +261,7 @@
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
              PolicySource::POLICY_SOURCE_CLOUD,
-             ReadJson(kAllowDevicesWithHidUsagesForUrls), nullptr);
+             ParseJson(kAllowDevicesWithHidUsagesForUrls), nullptr);
   UpdateProviderPolicy(policy);
 
   const base::Value* pref_value = nullptr;
@@ -348,7 +344,7 @@
   PolicyMap policy;
   policy.Set(test_data.policy_name, PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(test_data.policy),
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(test_data.policy),
              /*external_data_fetcher=*/nullptr);
 
   // Try CheckPolicySettings with the invalid policy. It returns success if the
@@ -368,10 +364,7 @@
     const base::Value* pref_value = nullptr;
     EXPECT_TRUE(store_->GetValue(test_data.pref_name, &pref_value));
     ASSERT_TRUE(pref_value);
-    absl::optional<base::Value> expected_pref_value =
-        ReadJson(test_data.expected_pref);
-    ASSERT_TRUE(expected_pref_value);
-    EXPECT_EQ(*expected_pref_value, *pref_value);
+    EXPECT_THAT(*pref_value, IsJson(test_data.expected_pref));
   } else {
     EXPECT_FALSE(store_->GetValue(test_data.pref_name, /*result=*/nullptr));
   }
diff --git a/chrome/browser/policy/webusb_allow_devices_for_urls_policy_handler_unittest.cc b/chrome/browser/policy/webusb_allow_devices_for_urls_policy_handler_unittest.cc
index 69021a6..0585a31c 100644
--- a/chrome/browser/policy/webusb_allow_devices_for_urls_policy_handler_unittest.cc
+++ b/chrome/browser/policy/webusb_allow_devices_for_urls_policy_handler_unittest.cc
@@ -7,10 +7,10 @@
 #include <memory>
 #include <utility>
 
-#include "base/json/json_reader.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/values_test_util.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/policy/core/browser/configuration_policy_pref_store.h"
 #include "components/policy/core/browser/configuration_policy_pref_store_test.h"
@@ -24,6 +24,9 @@
 
 namespace {
 
+using ::base::test::IsJson;
+using ::base::test::ParseJson;
+
 constexpr char kDevicesKey[] = "devices";
 constexpr char kUrlsKey[] = "urls";
 constexpr char kVendorIdKey[] = "vendor_id";
@@ -204,12 +207,6 @@
       }
     ])";
 
-absl::optional<base::Value> ReadJson(base::StringPiece json) {
-  auto result = base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return std::move(result.value);
-}
-
 }  // namespace
 
 class WebUsbAllowDevicesForUrlsPolicyHandlerTest
@@ -243,7 +240,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kValidPolicy), nullptr);
+      ParseJson(kValidPolicy), nullptr);
   ASSERT_TRUE(errors.empty());
   EXPECT_TRUE(handler()->CheckPolicySettings(policy, &errors));
   EXPECT_TRUE(errors.empty());
@@ -257,7 +254,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidTopLevelEntry), nullptr);
+      ParseJson(kInvalidPolicyInvalidTopLevelEntry), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -277,7 +274,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMissingDevicesProperty), nullptr);
+      ParseJson(kInvalidPolicyMissingDevicesProperty), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -297,7 +294,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMissingUrlsProperty), nullptr);
+      ParseJson(kInvalidPolicyMissingUrlsProperty), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -317,7 +314,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyUnknownProperty), nullptr);
+      ParseJson(kInvalidPolicyUnknownProperty), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_TRUE(handler()->CheckPolicySettings(policy, &errors));
@@ -337,7 +334,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMismatchedVendorIdType), nullptr);
+      ParseJson(kInvalidPolicyMismatchedVendorIdType), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -357,7 +354,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMismatchedProductIdType), nullptr);
+      ParseJson(kInvalidPolicyMismatchedProductIdType), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -377,7 +374,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyProductIdWithoutVendorId), nullptr);
+      ParseJson(kInvalidPolicyProductIdWithoutVendorId), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -397,7 +394,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidRequestingUrl), nullptr);
+      ParseJson(kInvalidPolicyInvalidRequestingUrl), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -417,7 +414,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidEmbeddingUrl), nullptr);
+      ParseJson(kInvalidPolicyInvalidEmbeddingUrl), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -437,7 +434,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidUrlsEntry), nullptr);
+      ParseJson(kInvalidPolicyInvalidUrlsEntry), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -457,7 +454,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(InvalidPolicyNoUrls), nullptr);
+      ParseJson(InvalidPolicyNoUrls), nullptr);
 
   ASSERT_TRUE(errors.empty());
   EXPECT_FALSE(handler()->CheckPolicySettings(policy, &errors));
@@ -477,7 +474,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kValidPolicy), nullptr);
+      ParseJson(kValidPolicy), nullptr);
   UpdateProviderPolicy(policy);
 
   const base::Value* pref_value = nullptr;
@@ -556,7 +553,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidTopLevelEntry), nullptr);
+      ParseJson(kInvalidPolicyInvalidTopLevelEntry), nullptr);
   UpdateProviderPolicy(policy);
 
   const base::Value* pref_value = nullptr;
@@ -574,7 +571,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMissingDevicesProperty), nullptr);
+      ParseJson(kInvalidPolicyMissingDevicesProperty), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -591,7 +588,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMissingUrlsProperty), nullptr);
+      ParseJson(kInvalidPolicyMissingUrlsProperty), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -608,7 +605,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyUnknownProperty), nullptr);
+      ParseJson(kInvalidPolicyUnknownProperty), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_TRUE(
@@ -616,7 +613,7 @@
   EXPECT_TRUE(pref_value);
 
   absl::optional<base::Value> expected_pref_value =
-      ReadJson(kInvalidPolicyUnknownPropertyAfterCleanup);
+      ParseJson(kInvalidPolicyUnknownPropertyAfterCleanup);
   EXPECT_EQ(*expected_pref_value, *pref_value);
 }
 
@@ -629,7 +626,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMismatchedVendorIdType), nullptr);
+      ParseJson(kInvalidPolicyMismatchedVendorIdType), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -646,7 +643,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyMismatchedProductIdType), nullptr);
+      ParseJson(kInvalidPolicyMismatchedProductIdType), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -663,7 +660,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyProductIdWithoutVendorId), nullptr);
+      ParseJson(kInvalidPolicyProductIdWithoutVendorId), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -680,7 +677,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidRequestingUrl), nullptr);
+      ParseJson(kInvalidPolicyInvalidRequestingUrl), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -697,7 +694,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidEmbeddingUrl), nullptr);
+      ParseJson(kInvalidPolicyInvalidEmbeddingUrl), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -714,7 +711,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(kInvalidPolicyInvalidUrlsEntry), nullptr);
+      ParseJson(kInvalidPolicyInvalidUrlsEntry), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -730,7 +727,7 @@
   policy.Set(
       key::kWebUsbAllowDevicesForUrls, PolicyLevel::POLICY_LEVEL_MANDATORY,
       PolicyScope::POLICY_SCOPE_MACHINE, PolicySource::POLICY_SOURCE_CLOUD,
-      ReadJson(InvalidPolicyNoUrls), nullptr);
+      ParseJson(InvalidPolicyNoUrls), nullptr);
   UpdateProviderPolicy(policy);
   const base::Value* pref_value = nullptr;
   EXPECT_FALSE(
@@ -778,7 +775,7 @@
   policy.Set(key::kWebUsbAllowDevicesForUrls,
              PolicyLevel::POLICY_LEVEL_MANDATORY,
              PolicyScope::POLICY_SCOPE_MACHINE,
-             PolicySource::POLICY_SOURCE_CLOUD, ReadJson(kPolicy), nullptr);
+             PolicySource::POLICY_SOURCE_CLOUD, ParseJson(kPolicy), nullptr);
 
   PolicyErrorMap errors;
   EXPECT_TRUE(errors.empty());
@@ -798,8 +795,7 @@
       store_->GetValue(prefs::kManagedWebUsbAllowDevicesForUrls, &pref_value));
   ASSERT_TRUE(pref_value);
 
-  absl::optional<base::Value> expected_pref_value = ReadJson(kNormalizedPolicy);
-  EXPECT_EQ(*expected_pref_value, *pref_value);
+  EXPECT_THAT(*pref_value, IsJson(kNormalizedPolicy));
 }
 
 }  // namespace policy
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
index 7eac464..b3984cf1 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
+++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_browsertest.cc
@@ -1520,30 +1520,6 @@
                   BuildPrefetchResourceMatchers(expected_entries)))
       << ActualHumanReadableMetricsToDebugString(actual_entries);
 
-  // This bit mask records which links were eligible for prefetching with
-  // respect to their order in the navigation prediction. The LSB corresponds to
-  // the first index in the prediction, and is set if that url was eligible.
-  // Given the above URLs, they map to each bit accordingly:
-  //
-  // Note: The only difference between eligible and non-eligible urls is the
-  // scheme.
-  //
-  //  (eligible)                           https://a.test/1
-  //  (eligible)                        https://a.test/2  |
-  //  (not eligible)        http://not-eligible.com/1  |  |
-  //  (not eligible)     http://not-eligible.com/2  |  |  |
-  //  (not eligible)  http://not-eligible.com/3  |  |  |  |
-  //  (eligible)            https://a.test/3  |  |  |  |  |
-  //                                       |  |  |  |  |  |
-  //                                       V  V  V  V  V  V
-  // int64_t expected_bitmask =        0b  1  0  0  0  1  1;
-
-  constexpr int64_t expected_bitmask = 0b100011;
-
-  VerifyUKMOnSRP(
-      starting_page,
-      ukm::builders::PrefetchProxy::kordered_eligible_pages_bitmaskName,
-      expected_bitmask);
   VerifyUKMOnSRP(starting_page,
                  ukm::builders::PrefetchProxy::kprefetch_eligible_countName, 3);
   VerifyUKMOnSRP(starting_page,
@@ -1752,9 +1728,6 @@
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), prefetch_404_url));
   base::RunLoop().RunUntilIdle();
 
-  VerifyUKMOnSRP(
-      starting_page,
-      ukm::builders::PrefetchProxy::kordered_eligible_pages_bitmaskName, 0b01);
   VerifyUKMOnSRP(starting_page,
                  ukm::builders::PrefetchProxy::kprefetch_eligible_countName, 1);
   VerifyUKMOnSRP(starting_page,
@@ -1827,9 +1800,6 @@
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), link_not_on_srp));
   base::RunLoop().RunUntilIdle();
 
-  VerifyUKMOnSRP(
-      starting_page,
-      ukm::builders::PrefetchProxy::kordered_eligible_pages_bitmaskName, 0b01);
   VerifyUKMOnSRP(starting_page,
                  ukm::builders::PrefetchProxy::kprefetch_eligible_countName, 1);
   VerifyUKMOnSRP(starting_page,
@@ -1890,9 +1860,6 @@
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), ineligible_link));
   base::RunLoop().RunUntilIdle();
 
-  VerifyUKMOnSRP(
-      starting_page,
-      ukm::builders::PrefetchProxy::kordered_eligible_pages_bitmaskName, 0b00);
   VerifyUKMOnSRP(starting_page,
                  ukm::builders::PrefetchProxy::kprefetch_eligible_countName, 0);
   VerifyUKMOnSRP(starting_page,
@@ -1968,9 +1935,6 @@
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), eligible_link_2));
   base::RunLoop().RunUntilIdle();
 
-  VerifyUKMOnSRP(
-      starting_page,
-      ukm::builders::PrefetchProxy::kordered_eligible_pages_bitmaskName, 0b11);
   VerifyUKMOnSRP(starting_page,
                  ukm::builders::PrefetchProxy::kprefetch_eligible_countName, 2);
   VerifyUKMOnSRP(starting_page,
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
index 83fa3db7..a172353 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
+++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.cc
@@ -1577,13 +1577,6 @@
   prefetch_container->SetPrefetchStatus(
       PrefetchProxyPrefetchStatus::kPrefetchNotStarted);
 
-  // Check that we won't go above the allowable size.
-  if (prefetch_container->GetOriginalPredictionIndex() <
-      sizeof(page_->srp_metrics_->ordered_eligible_pages_bitmask_) * 8) {
-    page_->srp_metrics_->ordered_eligible_pages_bitmask_ |=
-        1 << prefetch_container->GetOriginalPredictionIndex();
-  }
-
   if (!PrefetchProxyShouldPrefetchPosition(
           prefetch_container->GetOriginalPredictionIndex())) {
     prefetch_container->SetPrefetchStatus(
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
index f160d55a..25c4b0f 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
+++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper.h
@@ -90,18 +90,6 @@
    public:
     PrefetchMetrics();
 
-    // This bitmask keeps track each eligible page's placement in the original
-    // navigation prediction. The Nth-LSB is set if the Nth predicted page is
-    // eligible. Pages are in descending order of likelihood of user clicking.
-    // For example, if the following prediction is made:
-    //
-    //   [eligible, not eligible, eligible, eligible]
-    //
-    // then the resulting bitmask will be
-    //
-    //   0b1101.
-    int64_t ordered_eligible_pages_bitmask_ = 0;
-
     // The number of SRP links that were predicted. Only set on Google SRP pages
     // for eligible users. This should be used as the source of truth for
     // determining if the previous page was a Google SRP that could have had
diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
index 254ffb93..df17718 100644
--- a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
+++ b/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_tab_helper_unittest.cc
@@ -177,10 +177,6 @@
 
   PrefetchProxyTabHelper* tab_helper() const { return tab_helper_.get(); }
 
-  int64_t ordered_eligible_pages_bitmask() const {
-    return tab_helper_->srp_metrics().ordered_eligible_pages_bitmask_;
-  }
-
   size_t prefetch_eligible_count() const {
     return tab_helper_->srp_metrics().prefetch_eligible_count_;
   }
@@ -1097,27 +1093,6 @@
       "PrefetchProxy.Prefetch.Mainframe.TotalRedirects", 0, 1);
 }
 
-TEST_F(PrefetchProxyTabHelperTest, OrderedBitMask) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      "isolated-prerender-unlimited-prefetches");
-
-  NavigateSomewhere();
-  MakeNavigationPrediction(web_contents(),
-                           GURL("https://www.google.com/search?q=cats"),
-                           {
-                               GURL("http://not-eligible-1.com"),
-                               GURL("http://not-eligible-2.com"),
-                               GURL("https://eligible-1.com"),
-                               GURL("https://eligible-2.com"),
-                               GURL("https://eligible-3.com"),
-                               GURL("http://not-eligible-3.com"),
-                           });
-
-  EXPECT_EQ(predicted_urls_count(), 6U);
-  EXPECT_EQ(prefetch_eligible_count(), 3U);
-  EXPECT_EQ(ordered_eligible_pages_bitmask(), 0b011100);
-}
-
 TEST_F(PrefetchProxyTabHelperTest, NumberOfPrefetches_UnlimitedByCmdLine) {
   base::HistogramTester histogram_tester;
 
diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc
index 71b3f0e..e0f7c349 100644
--- a/chrome/browser/printing/print_browsertest.cc
+++ b/chrome/browser/printing/print_browsertest.cc
@@ -1734,7 +1734,9 @@
   EXPECT_EQ(rendered_page_count(), 3u);
 }
 
-IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PDFPluginNotKeyboardFocusable) {
+// Disabled due to flakiness: crbug.com/1311998
+IN_PROC_BROWSER_TEST_F(PrintBrowserTest,
+                       DISABLED_PDFPluginNotKeyboardFocusable) {
   ASSERT_TRUE(embedded_test_server()->Started());
   GURL url(embedded_test_server()->GetURL("/printing/multipage.html"));
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
diff --git a/chrome/browser/reputation/safety_tip_infobar.cc b/chrome/browser/reputation/safety_tip_infobar.cc
index 7a60f97..0e78b9d 100644
--- a/chrome/browser/reputation/safety_tip_infobar.cc
+++ b/chrome/browser/reputation/safety_tip_infobar.cc
@@ -49,7 +49,8 @@
   ScopedJavaLocalRef<jobject> java_bitmap;
   if (delegate->GetIconId() == infobars::InfoBarDelegate::kNoIconID &&
       !delegate->GetIcon().IsEmpty()) {
-    java_bitmap = gfx::ConvertToJavaBitmap(*delegate->GetIcon().ToSkBitmap());
+    java_bitmap = gfx::ConvertToJavaBitmap(
+        *delegate->GetIcon().Rasterize(nullptr).bitmap());
   }
 
   return Java_SafetyTipInfoBar_create(
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/accessibility_common/BUILD.gn
index a6dcac5..c349288 100644
--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/BUILD.gn
@@ -7,7 +7,7 @@
 import(
     "//chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/buildflags.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
 import("//third_party/closure_compiler/compile_js.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
index 072fdde..c0d2f36f 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
@@ -5,7 +5,7 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/common/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/common/BUILD.gn
index 81c26a1..a4bb1ce 100644
--- a/chrome/browser/resources/chromeos/accessibility/common/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/common/BUILD.gn
@@ -5,7 +5,7 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/enhanced_network_tts/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/enhanced_network_tts/BUILD.gn
index d043febbc..f72d9b6 100644
--- a/chrome/browser/resources/chromeos/accessibility/enhanced_network_tts/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/enhanced_network_tts/BUILD.gn
@@ -5,7 +5,7 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//third_party/closure_compiler/compile_js.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn
index e3222ca..d45002e 100644
--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/BUILD.gn
@@ -5,7 +5,7 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
index 2613f93..e870ab8 100644
--- a/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/BUILD.gn
@@ -5,7 +5,7 @@
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
diff --git a/chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni b/chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni
similarity index 100%
rename from chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni
rename to chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni
diff --git a/chrome/browser/serial/serial_chooser_context_unittest.cc b/chrome/browser/serial/serial_chooser_context_unittest.cc
index e49cd50..7fa404e 100644
--- a/chrome/browser/serial/serial_chooser_context_unittest.cc
+++ b/chrome/browser/serial/serial_chooser_context_unittest.cc
@@ -4,12 +4,12 @@
 
 #include "chrome/browser/serial/serial_chooser_context.h"
 
-#include "base/json/json_reader.h"
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/scoped_observation.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/values_test_util.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
@@ -37,10 +37,11 @@
 #include "components/user_manager/scoped_user_manager.h"
 #endif
 
-using testing::NiceMock;
-
 namespace {
 
+using ::base::test::ParseJson;
+using ::testing::NiceMock;
+
 constexpr char kTestUserEmail[] = "user@example.com";
 
 class MockPortObserver : public SerialChooserContext::PortObserver {
@@ -76,14 +77,6 @@
   return port;
 }
 
-std::unique_ptr<base::Value> ReadJson(base::StringPiece json) {
-  base::JSONReader::ValueWithError result =
-      base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return result.value ? base::Value::ToUniquePtrValue(std::move(*result.value))
-                      : nullptr;
-}
-
 class SerialChooserContextTestBase {
  public:
   SerialChooserContextTestBase() = default;
@@ -498,7 +491,7 @@
       prefs::kManagedDefaultSerialGuardSetting,
       std::make_unique<base::Value>(CONTENT_SETTING_BLOCK));
   profile_prefs->SetManagedPref(prefs::kManagedSerialAskForUrls,
-                                ReadJson(R"([ "https://foo.origin" ])"));
+                                ParseJson(R"([ "https://foo.origin" ])"));
 
   EXPECT_TRUE(context()->CanRequestObjectPermission(kFooOrigin));
   EXPECT_TRUE(context()->HasPortPermission(kFooOrigin, *port));
@@ -527,7 +520,7 @@
 
   auto* profile_prefs = profile()->GetTestingPrefService();
   profile_prefs->SetManagedPref(prefs::kManagedSerialBlockedForUrls,
-                                ReadJson(R"([ "https://foo.origin" ])"));
+                                ParseJson(R"([ "https://foo.origin" ])"));
 
   EXPECT_FALSE(context()->CanRequestObjectPermission(kFooOrigin));
   EXPECT_FALSE(context()->HasPortPermission(kFooOrigin, *port));
@@ -550,9 +543,9 @@
   const auto kBarOrigin = url::Origin::Create(GURL("https://bar.origin"));
 
   local_state()->SetManagedPref(prefs::kManagedSerialAllowAllPortsForUrls,
-                                ReadJson(R"([ "https://foo.origin" ])"));
+                                ParseJson(R"([ "https://foo.origin" ])"));
   local_state()->SetManagedPref(prefs::kManagedSerialAllowUsbDevicesForUrls,
-                                ReadJson(R"([
+                                ParseJson(R"([
                {
                  "devices": [{ "vendor_id": 6353, "product_id": 19985 }],
                  "urls": [ "https://bar.origin" ]
@@ -651,7 +644,7 @@
   const auto kBarOrigin = url::Origin::Create(GURL("https://bar.origin"));
 
   local_state()->SetManagedPref(prefs::kManagedSerialAllowUsbDevicesForUrls,
-                                ReadJson(R"([
+                                ParseJson(R"([
                {
                  "devices": [{ "vendor_id": 6353 }],
                  "urls": [ "https://google.com" ]
@@ -728,7 +721,7 @@
       prefs::kManagedDefaultSerialGuardSetting,
       std::make_unique<base::Value>(CONTENT_SETTING_BLOCK));
   local_state()->SetManagedPref(prefs::kManagedSerialAllowAllPortsForUrls,
-                                ReadJson(R"([ "https://foo.origin" ])"));
+                                ParseJson(R"([ "https://foo.origin" ])"));
 
   auto port = device::mojom::SerialPortInfo::New();
   port->token = base::UnguessableToken::Create();
@@ -753,9 +746,9 @@
   auto* profile_prefs = profile()->GetTestingPrefService();
   profile_prefs->SetManagedPref(
       prefs::kManagedSerialBlockedForUrls,
-      ReadJson(R"([ "https://foo.origin", "https://bar.origin" ])"));
+      ParseJson(R"([ "https://foo.origin", "https://bar.origin" ])"));
   local_state()->SetManagedPref(prefs::kManagedSerialAllowAllPortsForUrls,
-                                ReadJson(R"([ "https://foo.origin" ])"));
+                                ParseJson(R"([ "https://foo.origin" ])"));
 
   auto port = device::mojom::SerialPortInfo::New();
   port->token = base::UnguessableToken::Create();
@@ -807,7 +800,7 @@
   const auto origin = url::Origin::Create(GURL("https://google.com"));
 
   local_state()->SetManagedPref(prefs::kManagedSerialAllowUsbDevicesForUrls,
-                                ReadJson(R"([
+                                ParseJson(R"([
                {
                  "devices": [{ "vendor_id": 6353, "product_id": 22768 }],
                  "urls": [ "https://google.com" ]
diff --git a/chrome/browser/serial/serial_policy_allowed_ports_unittest.cc b/chrome/browser/serial/serial_policy_allowed_ports_unittest.cc
index c47266a..57a0acc 100644
--- a/chrome/browser/serial/serial_policy_allowed_ports_unittest.cc
+++ b/chrome/browser/serial/serial_policy_allowed_ports_unittest.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/serial/serial_policy_allowed_ports.h"
 
 #include "base/containers/contains.h"
-#include "base/json/json_reader.h"
+#include "base/test/values_test_util.h"
 #include "chrome/browser/prefs/browser_prefs.h"
 #include "chrome/common/pref_names.h"
 #include "components/prefs/testing_pref_service.h"
@@ -18,15 +18,9 @@
 
 namespace {
 
+using ::base::test::ParseJson;
 using ::testing::UnorderedElementsAre;
 
-base::Value ReadJson(base::StringPiece json) {
-  base::JSONReader::ValueWithError result =
-      base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return result.value ? std::move(*result.value) : base::Value();
-}
-
 device::mojom::SerialPortInfoPtr CreateUsbDevice(uint16_t vendor_id,
                                                  uint16_t product_id) {
   auto port = device::mojom::SerialPortInfo::New();
@@ -113,8 +107,8 @@
   const auto kGoogleOrigin = url::Origin::Create(GURL("https://google.com"));
   const auto kCrbugOrigin = url::Origin::Create(GURL("https://crbug.com"));
 
-  SetAllowAllPortsForUrlsPrefValue(ReadJson(kAllPortsPolicySetting));
-  SetAllowUsbDevicesForUrlsPrefValue(ReadJson(kUsbDevicesPolicySetting));
+  SetAllowAllPortsForUrlsPrefValue(ParseJson(kAllPortsPolicySetting));
+  SetAllowUsbDevicesForUrlsPrefValue(ParseJson(kUsbDevicesPolicySetting));
   InitializePolicy();
 
   EXPECT_EQ(1u, policy()->usb_device_policy().size());
@@ -180,8 +174,8 @@
   const auto kGoogleOrigin = url::Origin::Create(GURL("https://google.com"));
   const auto kCrbugOrigin = url::Origin::Create(GURL("https://crbug.com"));
 
-  SetAllowAllPortsForUrlsPrefValue(ReadJson(kAllPortsPolicySetting));
-  SetAllowUsbDevicesForUrlsPrefValue(ReadJson(kUsbDevicesPolicySetting));
+  SetAllowAllPortsForUrlsPrefValue(ParseJson(kAllPortsPolicySetting));
+  SetAllowUsbDevicesForUrlsPrefValue(ParseJson(kUsbDevicesPolicySetting));
 
   EXPECT_EQ(1u, policy()->usb_device_policy().size());
   EXPECT_EQ(1u, policy()->usb_vendor_policy().size());
@@ -239,8 +233,8 @@
       }
     ])";
 
-  SetAllowAllPortsForUrlsPrefValue(ReadJson(kAllPortsPolicySetting));
-  SetAllowUsbDevicesForUrlsPrefValue(ReadJson(kUsbDevicesPolicySetting));
+  SetAllowAllPortsForUrlsPrefValue(ParseJson(kAllPortsPolicySetting));
+  SetAllowUsbDevicesForUrlsPrefValue(ParseJson(kUsbDevicesPolicySetting));
   InitializePolicy();
 
   SetAllowAllPortsForUrlsPrefValue(base::Value(base::Value::Type::LIST));
@@ -279,7 +273,7 @@
   const auto kYoutubeOrigin =
       url::Origin::Create(GURL("https://www.youtube.com"));
 
-  SetAllowUsbDevicesForUrlsPrefValue(ReadJson(kUsbDevicesPolicySetting));
+  SetAllowUsbDevicesForUrlsPrefValue(ParseJson(kUsbDevicesPolicySetting));
   InitializePolicy();
 
   EXPECT_EQ(2u, policy()->usb_device_policy().size());
diff --git a/chrome/browser/ssl/known_interception_disclosure_infobar.cc b/chrome/browser/ssl/known_interception_disclosure_infobar.cc
index 3f274e45..7f892e28 100644
--- a/chrome/browser/ssl/known_interception_disclosure_infobar.cc
+++ b/chrome/browser/ssl/known_interception_disclosure_infobar.cc
@@ -49,7 +49,8 @@
   ScopedJavaLocalRef<jobject> java_bitmap;
   if (delegate->GetIconId() == infobars::InfoBarDelegate::kNoIconID &&
       !delegate->GetIcon().IsEmpty()) {
-    java_bitmap = gfx::ConvertToJavaBitmap(*delegate->GetIcon().ToSkBitmap());
+    java_bitmap = gfx::ConvertToJavaBitmap(
+        *delegate->GetIcon().Rasterize(nullptr).bitmap());
   }
 
   return Java_KnownInterceptionDisclosureInfoBar_create(
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.cc b/chrome/browser/supervised_user/supervised_user_url_filter.cc
index 9084dc0..1886d8a6 100644
--- a/chrome/browser/supervised_user/supervised_user_url_filter.cc
+++ b/chrome/browser/supervised_user/supervised_user_url_filter.cc
@@ -89,8 +89,8 @@
 bool IsAlwaysAllowedHost(const GURL& effective_url) {
   // Allow navigations to allowed origins.
   static const char* const kAllowedHosts[] = {
-      "families.google.com", "familylink.google.com", "accounts.google.com",
-      "myaccount.google.com"};
+      "accounts.google.com", "families.google.com", "familylink.google.com",
+      "myaccount.google.com", "support.google.com"};
 
   for (const char* allowedHost : kAllowedHosts) {
     if (allowedHost == effective_url.host_piece())
diff --git a/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc b/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc
index 6c3f9e1..9648f292 100644
--- a/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc
+++ b/chrome/browser/supervised_user/supervised_user_url_filter_unittest.cc
@@ -542,6 +542,7 @@
   EXPECT_TRUE(IsURLAllowlisted("https://myaccount.google.com/"));
   EXPECT_TRUE(IsURLAllowlisted("https://accounts.google.com/"));
   EXPECT_TRUE(IsURLAllowlisted("https://familylink.google.com/"));
+  EXPECT_TRUE(IsURLAllowlisted("https://support.google.com/"));
 
   // Chrome sync dashboard URLs (base initial URL, plus the version with locale
   // appended, and the redirect URL with locale appended).
diff --git a/chrome/browser/ui/android/infobars/autofill_credit_card_filling_infobar.cc b/chrome/browser/ui/android/infobars/autofill_credit_card_filling_infobar.cc
index 989a2e9..e2d153a61 100644
--- a/chrome/browser/ui/android/infobars/autofill_credit_card_filling_infobar.cc
+++ b/chrome/browser/ui/android/infobars/autofill_credit_card_filling_infobar.cc
@@ -35,7 +35,8 @@
   ScopedJavaLocalRef<jobject> java_bitmap;
   if (delegate->GetIconId() == infobars::InfoBarDelegate::kNoIconID &&
       !delegate->GetIcon().IsEmpty()) {
-    java_bitmap = gfx::ConvertToJavaBitmap(*delegate->GetIcon().ToSkBitmap());
+    java_bitmap = gfx::ConvertToJavaBitmap(
+        *delegate->GetIcon().Rasterize(nullptr).bitmap());
   }
 
   base::android::ScopedJavaLocalRef<jobject> java_delegate =
diff --git a/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc b/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
index 6b2abfe..609c43f 100644
--- a/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
+++ b/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
@@ -41,7 +41,7 @@
 
   // ConfirmInfoBarDelegate:
   infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
-  gfx::Image GetIcon() const override;
+  ui::ImageModel GetIcon() const override;
   std::u16string GetLinkText() const override;
   bool ShouldExpire(const NavigationDetails& details) const override;
   bool LinkClicked(WindowOpenDisposition disposition) override;
@@ -90,9 +90,9 @@
   return identifier_;
 }
 
-gfx::Image SimpleConfirmInfoBarDelegate::GetIcon() const {
+ui::ImageModel SimpleConfirmInfoBarDelegate::GetIcon() const {
   return icon_bitmap_.IsEmpty() ? ConfirmInfoBarDelegate::GetIcon()
-                                : icon_bitmap_;
+                                : ui::ImageModel::FromImage(icon_bitmap_);
 }
 
 std::u16string SimpleConfirmInfoBarDelegate::GetLinkText() const {
diff --git a/chrome/browser/ui/ash/security_token_session_restriction_view.cc b/chrome/browser/ui/ash/security_token_session_restriction_view.cc
index 3c6d324..720cbc3 100644
--- a/chrome/browser/ui/ash/security_token_session_restriction_view.cc
+++ b/chrome/browser/ui/ash/security_token_session_restriction_view.cc
@@ -32,10 +32,6 @@
 constexpr base::TimeDelta kCountdownUpdateInterval = base::Milliseconds(1000);
 constexpr base::TimeDelta kLastUpdateTime = base::Milliseconds(1000);
 
-gfx::ImageSkia GetImage() {
-  return gfx::CreateVectorIcon(chromeos::kEnterpriseIcon, 20, SK_ColorDKGRAY);
-}
-
 std::u16string GetTitle(
     ash::login::SecurityTokenSessionController::Behavior behavior) {
   switch (behavior) {
@@ -114,7 +110,9 @@
     base::OnceClosure accept_callback,
     ash::login::SecurityTokenSessionController::Behavior behavior,
     const std::string& domain)
-    : AppDialogView(GetImage()),
+    : AppDialogView(ui::ImageModel::FromVectorIcon(chromeos::kEnterpriseIcon,
+                                                   ui::kColorIcon,
+                                                   20)),
       behavior_(behavior),
       clock_(base::DefaultTickClock::GetInstance()),
       domain_(domain),
diff --git a/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc b/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc
index 5d86d72f..3bab47c 100644
--- a/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc
+++ b/chrome/browser/ui/ash/sharesheet/sharesheet_target_button.cc
@@ -140,7 +140,6 @@
 void SharesheetTargetButton::SetLabelProperties(views::Label* label) {
   label->SetMultiLine(true);
   label->SetMaximumWidth(kButtonTextMaxWidth);
-  label->SetBackgroundColor(SK_ColorTRANSPARENT);
   label->SetHandlesTooltips(true);
   label->SetTooltipText(label->GetText());
   label->SetAutoColorReadabilityEnabled(false);
diff --git a/chrome/browser/ui/ash/shelf/shelf_spinner_controller.cc b/chrome/browser/ui/ash/shelf/shelf_spinner_controller.cc
index 0d9a949a..9dbcdf9 100644
--- a/chrome/browser/ui/ash/shelf/shelf_spinner_controller.cc
+++ b/chrome/browser/ui/ash/shelf/shelf_spinner_controller.cc
@@ -127,11 +127,13 @@
                          0, 0);
 
     const int gap = kSpinningGapPercent * inactive_image_.width() / 100;
+    constexpr SkColor kThrobberColor = SK_ColorWHITE;
     gfx::PaintThrobberSpinning(
         canvas,
         gfx::Rect(gap, gap, inactive_image_.width() - 2 * gap,
                   inactive_image_.height() - 2 * gap),
-        SkColorSetA(SK_ColorWHITE, 0xFF * (1.0 - std::abs(animation_lirp))),
+        SkColorSetA(kThrobberColor, SkColorGetA(kThrobberColor) *
+                                        (1.0 - std::abs(animation_lirp))),
         now - data_.creation_time());
   }
 
diff --git a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
index 95a7797..534a186 100644
--- a/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
+++ b/chrome/browser/ui/ash/wallpaper_controller_client_impl.cc
@@ -660,7 +660,8 @@
   DCHECK(profile);
   if (ash::features::IsWallpaperWebUIEnabled()) {
     web_app::SystemAppLaunchParams params;
-    params.url = GURL(ash::kChromeUIPersonalizationAppWallpaperSubpageURL);
+    params.url = GURL(ash::personalization_app::
+                          kChromeUIPersonalizationAppWallpaperSubpageURL);
     params.launch_source = apps::mojom::LaunchSource::kFromShelf;
     web_app::LaunchSystemWebAppAsync(
         profile, web_app::SystemAppType::PERSONALIZATION, params);
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc
index 8021770..190bcd1 100644
--- a/chrome/browser/ui/autofill/chrome_autofill_client.cc
+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -816,10 +816,11 @@
 
   GetFormDataImporter()->CacheFetchedVirtualCard(credit_card->LastFourDigits());
 #if BUILDFLAG(IS_ANDROID)
-  // Show the virtual card snackbar only if the keyboard accessory feature is
-  // enabled. This is because the ManualFillingComponent for credit cards is
-  // only enabled when keyboard accessory is enabled.
-  if (features::IsAutofillManualFallbackEnabled()) {
+  // Show the virtual card snackbar only if the ManualFillingComponent component
+  // is enabled for credit cards.
+  if (features::IsAutofillManualFallbackEnabled() ||
+      base::FeatureList::IsEnabled(
+          autofill::features::kAutofillEnableManualFallbackForVirtualCards)) {
     (new AutofillSnackbarControllerImpl(web_contents()))->Show();
   }
 #else
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h
index 5a48ec9..f05dc49c 100644
--- a/chrome/browser/ui/color/chrome_color_id.h
+++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -68,10 +68,16 @@
   E_CPONLY(kColorDownloadToolbarButtonInactive) \
   E_CPONLY(kColorDownloadToolbarButtonRingBackground) \
   /* Extension colors. */ \
+  E_CPONLY(kColorExtensionDialogBackground) \
   E_CPONLY(kColorExtensionIconBadgeBackgroundDefault) \
   E_CPONLY(kColorExtensionIconBadgeForegroundDefault) \
   E_CPONLY(kColorExtensionIconDecorationAmbientShadow) \
+  E_CPONLY(kColorExtensionIconDecorationBackground) \
   E_CPONLY(kColorExtensionIconDecorationKeyShadow) \
+  E_CPONLY(kColorExtensionMenuIcon) \
+  E_CPONLY(kColorExtensionMenuIconDisabled) \
+  E_CPONLY(kColorExtensionMenuPinButtonIcon) \
+  E_CPONLY(kColorExtensionMenuPinButtonIconDisabled) \
   /* Eyedropper colors. */ \
   E_CPONLY(kColorEyedropperBoundary) \
   E_CPONLY(kColorEyedropperCentralPixelInnerRing) \
@@ -405,6 +411,8 @@
     ThemeProperties::COLOR_TOOLBAR_TOP_SEPARATOR_FRAME_INACTIVE) \
   /* WebAuthn colors. */ \
   E_CPONLY(kColorWebAuthnPinTextfieldBottomBorder) \
+  E_CPONLY(kColorWebAuthnProgressRingBackground) \
+  E_CPONLY(kColorWebAuthnProgressRingForeground) \
   /* Web contents colors. */ \
   E_CPONLY(kColorWebContentsBackground) \
   E_CPONLY(kColorWebContentsBackgroundLetterboxing) \
@@ -436,14 +444,14 @@
     E_CPONLY(kColorCaptionCloseButtonForegroundHovered) \
     E_CPONLY(kColorCaptionForegroundActive) \
     E_CPONLY(kColorCaptionForegroundInactive) \
-    E_CPONLY(kColorTryChromeAcceptButtonBackground) \
+    /* Try Chrome dialog colors. */ \
     E_CPONLY(kColorTryChromeBackground) \
     E_CPONLY(kColorTryChromeBorder) \
+    E_CPONLY(kColorTryChromeButtonBackgroundAccept) \
+    E_CPONLY(kColorTryChromeButtonBackgroundNoThanks) \
     E_CPONLY(kColorTryChromeButtonForeground) \
     E_CPONLY(kColorTryChromeForeground) \
-    E_CPONLY(kColorTryChromeIcon) \
-    E_CPONLY(kColorTryChromeNoThanksButtonBackground) \
-
+    E_CPONLY(kColorTryChromeHeaderForeground)
 #else
 #define CHROME_PLATFORM_SPECIFIC_COLOR_IDS
 #endif  // BUILDFLAG(IS_WIN)
diff --git a/chrome/browser/ui/color/chrome_color_mixer.cc b/chrome/browser/ui/color/chrome_color_mixer.cc
index 88dd99f..141fa3e2 100644
--- a/chrome/browser/ui/color/chrome_color_mixer.cc
+++ b/chrome/browser/ui/color/chrome_color_mixer.cc
@@ -227,7 +227,7 @@
   mixer[kColorDesktopMediaTabListBorder] = {ui::kColorMidground};
   mixer[kColorDesktopMediaTabListPreviewBackground] = {ui::kColorMidground};
   mixer[kColorDownloadItemProgressRingBackground] = {
-      ui::SetAlpha(kColorDownloadItemProgressRingForeground, 0x33)};
+      ui::kColorThrobberPreconnect};
   mixer[kColorDownloadItemProgressRingForeground] = {ui::kColorThrobber};
   mixer[kColorDownloadShelfBackground] = {kColorToolbar};
   mixer[kColorDownloadShelfButtonBackground] = {kColorDownloadShelfBackground};
@@ -242,13 +242,20 @@
   mixer[kColorDownloadToolbarButtonInactive] = {kColorToolbarButtonIcon};
   mixer[kColorDownloadToolbarButtonRingBackground] = {
       SkColorSetA(kColorDownloadToolbarButtonInactive, 0x33)};
+  mixer[kColorExtensionDialogBackground] = {SK_ColorWHITE};
   mixer[kColorExtensionIconBadgeBackgroundDefault] = {ui::kColorAccent};
   mixer[kColorExtensionIconBadgeForegroundDefault] =
       ui::GetColorWithMaxContrast(kColorExtensionIconBadgeBackgroundDefault);
   mixer[kColorExtensionIconDecorationAmbientShadow] =
       ui::SetAlpha(ui::kColorShadowBase, 0x26);
+  mixer[kColorExtensionIconDecorationBackground] = {SK_ColorWHITE};
   mixer[kColorExtensionIconDecorationKeyShadow] =
       ui::SetAlpha(ui::kColorShadowBase, 0x4D);
+  mixer[kColorExtensionMenuIcon] = {ui::kColorIcon};
+  mixer[kColorExtensionMenuIconDisabled] = {ui::kColorIconDisabled};
+  mixer[kColorExtensionMenuPinButtonIcon] = {ui::kColorAccent};
+  mixer[kColorExtensionMenuPinButtonIconDisabled] = ui::SetAlpha(
+      kColorExtensionMenuPinButtonIcon, gfx::kDisabledControlAlpha);
   mixer[kColorEyedropperBoundary] = {SK_ColorDKGRAY};
   mixer[kColorEyedropperCentralPixelInnerRing] = {SK_ColorBLACK};
   mixer[kColorEyedropperCentralPixelOuterRing] = {SK_ColorWHITE};
@@ -577,6 +584,8 @@
       GetToolbarTopSeparatorColorTransform(kColorToolbar,
                                            ui::kColorFrameInactive);
   mixer[kColorWebAuthnPinTextfieldBottomBorder] = {ui::kColorAccent};
+  mixer[kColorWebAuthnProgressRingBackground] = {ui::kColorThrobberPreconnect};
+  mixer[kColorWebAuthnProgressRingForeground] = {ui::kColorThrobber};
   mixer[kColorWebContentsBackground] = {kColorNewTabPageBackground};
   mixer[kColorWebContentsBackgroundLetterboxing] =
       ui::AlphaBlend(kColorWebContentsBackground, SK_ColorBLACK, 0x33);
diff --git a/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc b/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc
index 56fbac9..0254a77e 100644
--- a/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc
+++ b/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc
@@ -242,15 +242,15 @@
       GetCaptionForegroundColor(ui::kColorFrameActive);
   mixer[kColorCaptionForegroundInactive] =
       SetAlpha(GetCaptionForegroundColor(ui::kColorFrameInactive), 0x66);
-  mixer[kColorTryChromeAcceptButtonBackground] = {
-      SkColorSetRGB(0x00, 0x78, 0xDA)};
   mixer[kColorTryChromeBackground] = {SkColorSetRGB(0x1F, 0x1F, 0x1F)};
   mixer[kColorTryChromeBorder] = {SkColorSetARGB(0x80, 0x80, 0x80, 0x80)};
-  mixer[kColorTryChromeButtonForeground] = {SK_ColorWHITE};
-  mixer[kColorTryChromeForeground] = {SK_ColorWHITE};
-  mixer[kColorTryChromeIcon] = {SkColorSetA(SK_ColorWHITE, 0xAD)};
-  mixer[kColorTryChromeNoThanksButtonBackground] = {
+  mixer[kColorTryChromeButtonBackgroundAccept] = {
+      SkColorSetRGB(0x00, 0x78, 0xDA)};
+  mixer[kColorTryChromeButtonBackgroundNoThanks] = {
       SkColorSetA(SK_ColorWHITE, 0x33)};
+  mixer[kColorTryChromeButtonForeground] = {SK_ColorWHITE};
+  mixer[kColorTryChromeForeground] = {SkColorSetA(SK_ColorWHITE, 0xAD)};
+  mixer[kColorTryChromeHeaderForeground] = {SK_ColorWHITE};
 
   if (key.color_mode == ui::ColorProviderManager::ColorMode::kLight) {
     mixer[kColorNewTabPageBackground] = {ui::kColorNativeWindow};
diff --git a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
index f065e8ac..f89600b 100644
--- a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
+++ b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
@@ -230,7 +230,8 @@
   cc::PaintFlags paint_flags;
   paint_flags.setStyle(cc::PaintFlags::kFill_Style);
   paint_flags.setAntiAlias(true);
-  paint_flags.setColor(SK_ColorWHITE);
+  paint_flags.setColor(
+      color_provider_->GetColor(kColorExtensionIconDecorationBackground));
   paint_flags.setLooper(
       gfx::CreateShadowDrawLooper({key_shadow, ambient_shadow}));
 
diff --git a/chrome/browser/ui/profile_chooser_constants.h b/chrome/browser/ui/profile_chooser_constants.h
index 18fdd7d..c02809c 100644
--- a/chrome/browser/ui/profile_chooser_constants.h
+++ b/chrome/browser/ui/profile_chooser_constants.h
@@ -9,8 +9,6 @@
 
 namespace profiles {
 
-static const SkColor kHoverColor = SkColorSetRGB(0xEA, 0xEA, 0xEA);
-
 // Different views that can be displayed in the profile chooser bubble.
 enum BubbleViewMode {
   // Shows the default avatar bubble.
diff --git a/chrome/browser/ui/quick_answers/ui/quick_answers_view.cc b/chrome/browser/ui/quick_answers/ui/quick_answers_view.cc
index 81c8575..28a5cfe 100644
--- a/chrome/browser/ui/quick_answers/ui/quick_answers_view.cc
+++ b/chrome/browser/ui/quick_answers/ui/quick_answers_view.cc
@@ -388,7 +388,7 @@
     return;
 
   ResetContentView();
-  main_view_->SetBackground(views::CreateSolidBackground(SK_ColorTRANSPARENT));
+  main_view_->SetBackground(nullptr);
 
   // Add title.
   content_view_->AddChildView(
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc
index 9a691fc..75a12c3 100644
--- a/chrome/browser/ui/ui_features.cc
+++ b/chrome/browser/ui/ui_features.cc
@@ -130,6 +130,9 @@
 const base::Feature kSidePanelImprovedClobbering{
     "SidePanelImprovedClobbering", base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kSidePanelJourneys{"SidePanelJourneys",
+                                       base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables tabs to scroll in the tabstrip. https://crbug.com/951078
 const base::Feature kScrollableTabStrip{"ScrollableTabStrip",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/ui/ui_features.h b/chrome/browser/ui/ui_features.h
index 435c946..e72d5ad4 100644
--- a/chrome/browser/ui/ui_features.h
+++ b/chrome/browser/ui/ui_features.h
@@ -70,6 +70,8 @@
 extern const base::Feature kSidePanelDragAndDrop;
 extern const base::Feature kSidePanelImprovedClobbering;
 
+extern const base::Feature kSidePanelJourneys;
+
 #if BUILDFLAG(ENABLE_SIDE_SEARCH)
 extern const base::Feature kSideSearch;
 extern const base::Feature kSideSearchClearCacheWhenClosed;
diff --git a/chrome/browser/ui/user_education/tutorial/tutorial.cc b/chrome/browser/ui/user_education/tutorial/tutorial.cc
index 64a6957..9ce6e94 100644
--- a/chrome/browser/ui/user_education/tutorial/tutorial.cc
+++ b/chrome/browser/ui/user_education/tutorial/tutorial.cc
@@ -201,9 +201,12 @@
         params.arrow = arrow_;
         params.timeout = base::TimeDelta();
         params.dismiss_callback = base::BindOnce(
-            [](TutorialService* tutorial_service) {
-              tutorial_service->AbortTutorial();
+            [](absl::optional<int> step_number,
+               TutorialService* tutorial_service) {
+              tutorial_service->AbortTutorial(step_number);
             },
+            progress_.has_value() ? absl::make_optional(progress_.value().first)
+                                  : absl::nullopt,
             base::Unretained(tutorial_service));
 
         if (is_last_step_) {
@@ -290,13 +293,13 @@
   DCHECK_EQ(current_step, max_progress);
 
   builder.SetAbortedCallback(base::BindOnce(
-      [](TutorialService* tutorial_service, ui::TrackedElement* last_element,
-         ui::ElementIdentifier last_id,
+      [](int step_number, TutorialService* tutorial_service,
+         ui::TrackedElement* last_element, ui::ElementIdentifier last_id,
          ui::InteractionSequence::StepType last_step_type,
          ui::InteractionSequence::AbortedReason aborted_reason) {
-        tutorial_service->AbortTutorial();
+        tutorial_service->AbortTutorial(step_number);
       },
-      tutorial_service));
+      current_step, tutorial_service));
 
   return builder.Build();
 }
diff --git a/chrome/browser/ui/user_education/tutorial/tutorial_description.h b/chrome/browser/ui/user_education/tutorial/tutorial_description.h
index a014338..416ea2a 100644
--- a/chrome/browser/ui/user_education/tutorial/tutorial_description.h
+++ b/chrome/browser/ui/user_education/tutorial/tutorial_description.h
@@ -33,7 +33,7 @@
   virtual void RecordComplete(bool value) = 0;
 
   // Records the step on which the tutorial was aborted.
-  virtual void RecordAbort(int step) = 0;
+  virtual void RecordAbortStep(int step) = 0;
 
   // Records whether, when an IPH offered the tutorial, the user opted into
   // seeing the tutorial or not.
@@ -63,7 +63,7 @@
     UMA_HISTOGRAM_BOOLEAN(completed_name_, value);
   }
 
-  void RecordAbort(int step) override {
+  void RecordAbortStep(int step) override {
     UMA_HISTOGRAM_EXACT_LINEAR(aborted_name_, step, max_steps_);
   }
 
diff --git a/chrome/browser/ui/user_education/tutorial/tutorial_service.cc b/chrome/browser/ui/user_education/tutorial/tutorial_service.cc
index 34a4d832..3ecf527 100644
--- a/chrome/browser/ui/user_education/tutorial/tutorial_service.cc
+++ b/chrome/browser/ui/user_education/tutorial/tutorial_service.cc
@@ -90,7 +90,7 @@
   return true;
 }
 
-void TutorialService::AbortTutorial() {
+void TutorialService::AbortTutorial(absl::optional<int> abort_step) {
   // For various reasons, we could get called here while e.g. tearing down the
   // interaction sequence. We only want to actually run AbortTutorial() or
   // CompleteTutorial() exactly once, so we won't continue if the tutorial has
@@ -106,8 +106,9 @@
   if (running_tutorial_was_restarted_)
     return CompleteTutorial();
 
-  // TODO:(crbug.com/1295165) provide step number information from the
-  // interaction sequence into the abort callback.
+  if (abort_step.has_value())
+    running_tutorial_creation_params_->description_->histograms
+        ->RecordAbortStep(abort_step.value());
 
   // Log the failure of completion for the tutorial.
   if (running_tutorial_creation_params_->description_->histograms)
diff --git a/chrome/browser/ui/user_education/tutorial/tutorial_service.h b/chrome/browser/ui/user_education/tutorial/tutorial_service.h
index d542a5e..78c38dd 100644
--- a/chrome/browser/ui/user_education/tutorial/tutorial_service.h
+++ b/chrome/browser/ui/user_education/tutorial/tutorial_service.h
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/user_education/tutorial/tutorial.h"
 #include "chrome/browser/ui/user_education/tutorial/tutorial_identifier.h"
 #include "components/keyed_service/core/keyed_service.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/base/interaction/element_tracker.h"
 
 class HelpBubble;
@@ -61,6 +62,9 @@
     return currently_displayed_bubble_.get();
   }
 
+  // Calls the abort code for the running tutorial.
+  void AbortTutorial(absl::optional<int> abort_step);
+
  private:
   friend class Tutorial;
   friend class TutorialInteractiveUitest;
@@ -75,9 +79,6 @@
     ui::ElementContext context_;
   };
 
-  // Calls the abort code for the running tutorial.
-  void AbortTutorial();
-
   // Calls the completion code for the running tutorial.
   // TODO (dpenning): allow for registering a callback that performs any
   // IPH/other code on completion of tutorial
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc
index 56e81ea..bb99530d 100644
--- a/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc
+++ b/chrome/browser/ui/views/apps/app_dialog/app_block_dialog_view.cc
@@ -33,7 +33,7 @@
 AppBlockDialogView::AppBlockDialogView(const std::string& app_name,
                                        const gfx::ImageSkia& image,
                                        Profile* profile)
-    : AppDialogView(image) {
+    : AppDialogView(ui::ImageModel::FromImageSkia(image)) {
   SetTitle(l10n_util::GetStringFUTF16(IDS_APP_BLOCK_PROMPT_TITLE,
                                       base::UTF8ToUTF16(app_name)));
 
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc
index dd79186c..c9493ef 100644
--- a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc
+++ b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc
@@ -13,9 +13,9 @@
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/box_layout.h"
 
-AppDialogView::AppDialogView(const gfx::ImageSkia& image)
-    : BubbleDialogDelegateView(nullptr, views::BubbleBorder::NONE) {
-  SetIcon(image);
+AppDialogView::AppDialogView(const ui::ImageModel& image)
+    : BubbleDialogDelegateView(nullptr, views::BubbleBorder::NONE),
+      image_(image) {
   SetShowIcon(true);
   SetShowCloseButton(false);
   SetModalType(ui::MODAL_TYPE_SYSTEM);
@@ -25,6 +25,11 @@
 
 AppDialogView::~AppDialogView() = default;
 
+void AppDialogView::OnThemeChanged() {
+  views::BubbleDialogDelegateView::OnThemeChanged();
+  SetIcon(image_.Rasterize(GetColorProvider()));
+}
+
 void AppDialogView::InitializeView(const std::u16string& heading_text) {
   SetButtons(ui::DIALOG_BUTTON_OK);
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.h b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.h
index 1961b89..cbdd1f5b 100644
--- a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.h
+++ b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.h
@@ -12,8 +12,8 @@
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 #include "ui/views/controls/label.h"
 
-namespace gfx {
-class ImageSkia;
+namespace ui {
+class ImageModel;
 }
 
 // The app dialog that may display the app's name, icon. This is the base class
@@ -21,9 +21,12 @@
 class AppDialogView : public views::BubbleDialogDelegateView {
  public:
   METADATA_HEADER(AppDialogView);
-  explicit AppDialogView(const gfx::ImageSkia& image);
+  explicit AppDialogView(const ui::ImageModel& image);
   ~AppDialogView() override;
 
+  // views::BubbleDialogDelegateView:
+  void OnThemeChanged() override;
+
  protected:
   void InitializeView(const std::u16string& heading_text);
 
@@ -31,6 +34,7 @@
   void SetLabelText(const std::u16string& text);
 
  private:
+  ui::ImageModel image_;
   raw_ptr<views::Label> label_ = nullptr;
 };
 
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc
index 9f2838c..76ef921 100644
--- a/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc
+++ b/chrome/browser/ui/views/apps/app_dialog/app_pause_dialog_view.cc
@@ -38,7 +38,7 @@
     const gfx::ImageSkia& image,
     const apps::PauseData& pause_data,
     apps::AppServiceProxy::OnPauseDialogClosedCallback closed_callback)
-    : AppDialogView(image) {
+    : AppDialogView(ui::ImageModel::FromImageSkia(image)) {
   SetTitle(l10n_util::GetStringFUTF16(IDS_APP_PAUSE_PROMPT_TITLE,
                                       base::UTF8ToUTF16(app_name)));
 
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc
index 9be41627..8fd3891 100644
--- a/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc
+++ b/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc
@@ -108,7 +108,7 @@
     gfx::ImageSkia image,
     apps::UninstallDialog* uninstall_dialog)
     : apps::UninstallDialog::UiBase(uninstall_dialog),
-      AppDialogView(image),
+      AppDialogView(ui::ImageModel::FromImageSkia(image)),
       profile_(profile) {
   SetModalType(ui::MODAL_TYPE_WINDOW);
   SetTitle(GetWindowTitleForApp(profile, app_type, app_id, app_name));
diff --git a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
index 68fa296c..dc59739c 100644
--- a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
+++ b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
@@ -47,8 +47,6 @@
 
 constexpr int kSeparatorHeight = 12;
 
-constexpr SkColor kTitleSeparatorColor = SkColorSetRGB(0x9E, 0x9E, 0x9E);
-
 class IconView : public views::ImageView {
  public:
   METADATA_HEADER(IconView);
@@ -115,7 +113,6 @@
   auto* icon_view_ptr = AddChildView(std::make_unique<IconView>(icon_to_show));
 
   auto separator = std::make_unique<views::Separator>();
-  separator->SetColor(kTitleSeparatorColor);
   separator->SetPreferredHeight(kSeparatorHeight);
   auto* separator_ptr = AddChildView(std::move(separator));
 
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.cc b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.cc
index 34a61be..15813c1 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.cc
+++ b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.cc
@@ -8,7 +8,6 @@
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "content/public/browser/visibility.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
-#include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
 #include "ui/views/bubble/bubble_border.h"
 #include "ui/views/controls/webview/webview.h"
@@ -45,13 +44,11 @@
 
 WebUIBubbleDialogView::WebUIBubbleDialogView(
     views::View* anchor_view,
-    BubbleContentsWrapper* contents_wrapper,
-    const absl::optional<gfx::Rect>& anchor_rect)
+    BubbleContentsWrapper* contents_wrapper)
     : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
       contents_wrapper_(contents_wrapper),
       web_view_(AddChildView(std::make_unique<WebUIBubbleView>(
-          contents_wrapper_->web_contents()))),
-      bubble_anchor_(anchor_rect) {
+          contents_wrapper_->web_contents()))) {
   DCHECK(!contents_wrapper_->GetHost());
   contents_wrapper_->SetHost(weak_factory_.GetWeakPtr());
 
@@ -128,11 +125,5 @@
       event, GetFocusManager());
 }
 
-gfx::Rect WebUIBubbleDialogView::GetAnchorRect() const {
-  if (bubble_anchor_)
-    return bubble_anchor_.value();
-  return BubbleDialogDelegateView::GetAnchorRect();
-}
-
 BEGIN_METADATA(WebUIBubbleDialogView, views::BubbleDialogDelegateView)
 END_METADATA
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h
index 75079c2..fa9b557 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h
+++ b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h
@@ -19,22 +19,14 @@
 }  // namespace views
 
 // A Views bubble host for a BubbleContentsWrapper.
-// NOTE: The anchor rect takes precedence over the anchor view in this class.
-// This is the opposite of the behaviour specified in the
-// BubbleDialogDelegateView base class.
 class WebUIBubbleDialogView : public views::WidgetObserver,
                               public views::BubbleDialogDelegateView,
                               public BubbleContentsWrapper::Host {
  public:
   METADATA_HEADER(WebUIBubbleDialogView);
 
-  // An optional anchor_rect can be passed to anchor the dialog to a specific
-  // point on the screen. The provided anchor_rect will take precedent over the
-  // anchor_view.
-  WebUIBubbleDialogView(
-      views::View* anchor_view,
-      BubbleContentsWrapper* contents_wrapper,
-      const absl::optional<gfx::Rect>& anchor_rect = absl::nullopt);
+  WebUIBubbleDialogView(views::View* anchor_view,
+                        BubbleContentsWrapper* contents_wrapper);
   WebUIBubbleDialogView(const WebUIBubbleDialogView&) = delete;
   WebUIBubbleDialogView& operator=(const WebUIBubbleDialogView&) = delete;
   ~WebUIBubbleDialogView() override;
@@ -64,15 +56,6 @@
   }
   void ResetWebUIContentsForTesting();
 
-  // TODO(ffred): This is necessary because the default behaviour of the bubble
-  // dialog is that anchor view positioning takes precedent over anchor rect.
-  // This will not work because the anchor rect is used to explicitly specify
-  // the positioning of the bubble and the anchor view cannot be null.
-  //
-  // That being said, the base class should reconsider its behaviour so that
-  // this type of override is not necessary.
-  gfx::Rect GetAnchorRect() const override;
-
   virtual void Redraw() {}
 
  private:
@@ -82,7 +65,6 @@
 
   raw_ptr<BubbleContentsWrapper> contents_wrapper_;
   raw_ptr<views::WebView> web_view_;
-  absl::optional<gfx::Rect> bubble_anchor_;
 
   base::ScopedObservation<views::Widget, views::WidgetObserver>
       bubble_widget_observation_{this};
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view_unittest.cc b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view_unittest.cc
index 2cbbbc07..6ad14bdb 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_dialog_view_unittest.cc
+++ b/chrome/browser/ui/views/bubble/webui_bubble_dialog_view_unittest.cc
@@ -12,7 +12,6 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/geometry/rect.h"
 #include "ui/views/controls/webview/webview.h"
 #include "ui/views/widget/unique_widget_ptr.h"
 
@@ -122,22 +121,5 @@
   EXPECT_EQ(nullptr, web_view()->web_contents());
 }
 
-TEST_F(WebUIBubbleDialogViewTest, GetAnchorRectWithProvidedAnchorRect) {
-  UniqueWidgetPtr anchor_widget = std::make_unique<Widget>();
-  Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
-  anchor_widget->Init(std::move(params));
-  auto profile_ = std::make_unique<TestingProfile>();
-  auto contents_wrapper =
-      std::make_unique<TestBubbleContentsWrapper>(profile_.get());
-
-  gfx::Rect anchor(666, 666, 0, 0);
-  auto bubble_dialog = std::make_unique<WebUIBubbleDialogView>(
-      anchor_widget->GetContentsView(), contents_wrapper.get(), anchor);
-
-  EXPECT_EQ(bubble_dialog->GetAnchorRect(), anchor);
-
-  anchor_widget->CloseNow();
-}
-
 }  // namespace test
 }  // namespace views
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_manager.cc b/chrome/browser/ui/views/bubble/webui_bubble_manager.cc
index 494165b5..4dfb6da 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_manager.cc
+++ b/chrome/browser/ui/views/bubble/webui_bubble_manager.cc
@@ -6,7 +6,6 @@
 
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/browser_list.h"
-#include "ui/gfx/geometry/rect.h"
 #include "ui/views/widget/widget.h"
 
 namespace {
@@ -24,13 +23,13 @@
 
 WebUIBubbleManager::~WebUIBubbleManager() = default;
 
-bool WebUIBubbleManager::ShowBubble(const absl::optional<gfx::Rect>& anchor) {
+bool WebUIBubbleManager::ShowBubble() {
   if (bubble_view_)
     return false;
 
   cache_timer_->Stop();
 
-  bubble_view_ = CreateWebUIBubbleDialog(anchor);
+  bubble_view_ = CreateWebUIBubbleDialog();
 
   bubble_widget_observation_.Observe(bubble_view_->GetWidget());
   // Some bubbles can be triggered when there is no active browser (e.g. emoji
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_manager.h b/chrome/browser/ui/views/bubble/webui_bubble_manager.h
index 95d9914..9651502 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_manager.h
+++ b/chrome/browser/ui/views/bubble/webui_bubble_manager.h
@@ -32,14 +32,13 @@
   const WebUIBubbleManager& operator=(const WebUIBubbleManager&) = delete;
   ~WebUIBubbleManager() override;
 
-  bool ShowBubble(const absl::optional<gfx::Rect>& anchor = absl::nullopt);
+  bool ShowBubble();
   void CloseBubble();
   views::Widget* GetBubbleWidget() const;
   bool bubble_using_cached_web_contents() const {
     return bubble_using_cached_web_contents_;
   }
-  virtual base::WeakPtr<WebUIBubbleDialogView> CreateWebUIBubbleDialog(
-      const absl::optional<gfx::Rect>& anchor) = 0;
+  virtual base::WeakPtr<WebUIBubbleDialogView> CreateWebUIBubbleDialog() = 0;
 
   // views::WidgetObserver:
   void OnWidgetDestroying(views::Widget* widget) override;
@@ -111,8 +110,7 @@
   }
   ~WebUIBubbleManagerT() override = default;
 
-  base::WeakPtr<WebUIBubbleDialogView> CreateWebUIBubbleDialog(
-      const absl::optional<gfx::Rect>& anchor) override {
+  base::WeakPtr<WebUIBubbleDialogView> CreateWebUIBubbleDialog() override {
     BubbleContentsWrapper* contents_wrapper = nullptr;
 
     // Only use per profile peristence if the flag is set and if a
@@ -151,8 +149,8 @@
       contents_wrapper = cached_contents_wrapper();
     }
 
-    auto bubble_view = std::make_unique<WebUIBubbleDialogView>(
-        anchor_view_, contents_wrapper, anchor);
+    auto bubble_view =
+        std::make_unique<WebUIBubbleDialogView>(anchor_view_, contents_wrapper);
     auto weak_ptr = bubble_view->GetWeakPtr();
     views::BubbleDialogDelegateView::CreateBubble(std::move(bubble_view));
     return weak_ptr;
diff --git a/chrome/browser/ui/views/bubble/webui_bubble_manager_unittest.cc b/chrome/browser/ui/views/bubble/webui_bubble_manager_unittest.cc
index 4668e9c..f16df73 100644
--- a/chrome/browser/ui/views/bubble/webui_bubble_manager_unittest.cc
+++ b/chrome/browser/ui/views/bubble/webui_bubble_manager_unittest.cc
@@ -142,24 +142,6 @@
   profile_manager()->DeleteTestingProfile(kProfileName);
 }
 
-TEST_F(WebUIBubbleManagerTest, CreateWebUIBubbleDialogWithAnchorProvided) {
-  const char* kProfileName = "Person 1";
-  auto* test_profile = profile_manager()->CreateTestingProfile(kProfileName);
-
-  std::unique_ptr<views::Widget> anchor_widget =
-      CreateTestWidget(views::Widget::InitParams::TYPE_WINDOW);
-  auto bubble_manager =
-      std::make_unique<WebUIBubbleManagerT<TestWebUIController>>(
-          anchor_widget->GetContentsView(), test_profile, GURL(kTestURL), 1);
-  bubble_manager->DisableCloseBubbleHelperForTesting();
-
-  gfx::Rect anchor(666, 666, 0, 0);
-  bubble_manager->ShowBubble(anchor);
-  auto bubble_view = bubble_manager->bubble_view_for_testing();
-
-  EXPECT_EQ(bubble_view->GetAnchorRect(), anchor);
-}
-
 #if !BUILDFLAG(IS_CHROMEOS_ASH)  // No multi-profile on ChromeOS.
 
 TEST_F(WebUIBubbleManagerTest,
diff --git a/chrome/browser/ui/views/extensions/extension_dialog.cc b/chrome/browser/ui/views/extensions/extension_dialog.cc
index 2ab4322b..d36eddb0 100644
--- a/chrome/browser/ui/views/extensions/extension_dialog.cc
+++ b/chrome/browser/ui/views/extensions/extension_dialog.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/extensions/extension_view_host_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/browser/ui/color/chrome_color_id.h"
 #include "chrome/browser/ui/views/extensions/extension_dialog_observer.h"
 #include "chrome/browser/ui/views/extensions/extension_view_views.h"
 #include "components/constrained_window/constrained_window_views.h"
@@ -147,7 +148,8 @@
 
   // Show a white background while the extension loads.  This is prettier than
   // flashing a black unfilled window frame.
-  extension_view_->SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
+  extension_view_->SetBackground(views::CreateThemedSolidBackground(
+      extension_view_, kColorExtensionDialogBackground));
   extension_view_->SetPreferredSize(init_params.size);
   extension_view_->SetMinimumSize(init_params.min_size);
   extension_view_->SetVisible(true);
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 5fc6cb6..3b4d075 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_item_view.cc
@@ -13,6 +13,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/color/chrome_color_id.h"
 #include "chrome/browser/ui/extensions/extension_site_access_combobox_model.h"
 #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
 #include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
@@ -53,14 +54,14 @@
 
 void SetButtonIconWithColor(HoverButton* button,
                             const gfx::VectorIcon& icon,
-                            SkColor icon_color) {
+                            SkColor icon_color,
+                            SkColor disabled_icon_color) {
   button->SetImage(
       views::Button::STATE_NORMAL,
       gfx::CreateVectorIcon(icon, kSecondaryIconSizeDp, icon_color));
-  button->SetImage(views::Button::STATE_DISABLED,
-                   gfx::CreateVectorIcon(
-                       icon, kSecondaryIconSizeDp,
-                       SkColorSetA(icon_color, gfx::kDisabledControlAlpha)));
+  button->SetImage(
+      views::Button::STATE_DISABLED,
+      gfx::CreateVectorIcon(icon, kSecondaryIconSizeDp, disabled_icon_color));
 }
 
 }  // namespace
@@ -198,13 +199,15 @@
 
 void InstalledExtensionMenuItemView::OnThemeChanged() {
   views::View::OnThemeChanged();
-  const SkColor icon_color =
-      GetAdjustedIconColor(GetColorProvider()->GetColor(ui::kColorMenuIcon));
+  const auto* const color_provider = GetColorProvider();
+  const SkColor icon_color = color_provider->GetColor(kColorExtensionMenuIcon);
 
   if (pin_button_)
     views::InkDrop::Get(pin_button_)->SetBaseColor(icon_color);
 
-  SetButtonIconWithColor(context_menu_button_, kBrowserToolsIcon, icon_color);
+  SetButtonIconWithColor(
+      context_menu_button_, kBrowserToolsIcon, icon_color,
+      color_provider->GetColor(kColorExtensionMenuIconDisabled));
 
   UpdatePinButton();
 }
@@ -234,15 +237,15 @@
 
   if (!GetWidget())
     return;
-  SkColor unpinned_icon_color =
-      GetAdjustedIconColor(GetColorProvider()->GetColor(ui::kColorMenuIcon));
-  SkColor icon_color = IsPinned()
-                           ? GetAdjustedIconColor(GetColorProvider()->GetColor(
-                                 ui::kColorButtonBackgroundProminent))
-                           : unpinned_icon_color;
+  const auto* const color_provider = GetColorProvider();
+  const SkColor icon_color = color_provider->GetColor(
+      IsPinned() ? kColorExtensionMenuPinButtonIcon : kColorExtensionMenuIcon);
+  const SkColor disabled_icon_color = color_provider->GetColor(
+      IsPinned() ? kColorExtensionMenuPinButtonIconDisabled
+                 : kColorExtensionMenuIconDisabled);
   SetButtonIconWithColor(pin_button_,
                          IsPinned() ? views::kUnpinIcon : views::kPinIcon,
-                         icon_color);
+                         icon_color, disabled_icon_color);
 }
 
 bool InstalledExtensionMenuItemView::IsPinned() const {
@@ -271,16 +274,6 @@
   return context_menu_controller_->IsMenuRunning();
 }
 
-SkColor InstalledExtensionMenuItemView::GetAdjustedIconColor(
-    SkColor icon_color) const {
-  const SkColor background_color =
-      GetColorProvider()->GetColor(ui::kColorBubbleBackground);
-  if (background_color != SK_ColorTRANSPARENT) {
-    return color_utils::BlendForMinContrast(icon_color, background_color).color;
-  }
-  return icon_color;
-}
-
 BEGIN_METADATA(SiteAccessMenuItemView, views::View)
 END_METADATA
 
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_item_view.h b/chrome/browser/ui/views/extensions/extensions_menu_item_view.h
index e1a9a32ac..622d4c7 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_item_view.h
+++ b/chrome/browser/ui/views/extensions/extensions_menu_item_view.h
@@ -124,10 +124,6 @@
   HoverButton* pin_button_for_testing() { return pin_button_; }
 
  private:
-  // Maybe adjust `icon_color` to assure high enough contrast with the
-  // background.
-  SkColor GetAdjustedIconColor(SkColor icon_color) const;
-
   // Returns whether the action corresponding to this view is pinned to the
   // toolbar.
   bool IsPinned() const;
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
index adb8e67..b1cc980 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_view.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
@@ -175,6 +175,10 @@
       gfx::Insets::TLBR(0, kSettingsIconHorizontalPadding, 0, 0)));
   footer->SetImageLabelSpacing(footer->GetImageLabelSpacing() +
                                kSettingsIconHorizontalPadding);
+  footer->SetImageModel(
+      views::Button::STATE_NORMAL,
+      ui::ImageModel::FromVectorIcon(vector_icons::kSettingsIcon,
+                                     ui::kColorIcon, kSettingsIconSize));
 
   manage_extensions_button_ = footer.get();
   AddChildView(std::move(footer));
@@ -408,23 +412,6 @@
   return std::u16string();
 }
 
-void ExtensionsMenuView::OnThemeChanged() {
-  BubbleDialogDelegateView::OnThemeChanged();
-  if (manage_extensions_button_) {
-    const SkColor background_color =
-        GetColorProvider()->GetColor(ui::kColorBubbleBackground);
-    SkColor icon_color = GetColorProvider()->GetColor(ui::kColorMenuIcon);
-    if (background_color != SK_ColorTRANSPARENT) {
-      icon_color =
-          color_utils::BlendForMinContrast(icon_color, background_color).color;
-    }
-    manage_extensions_button_->SetImage(
-        views::Button::STATE_NORMAL,
-        gfx::CreateVectorIcon(vector_icons::kSettingsIcon, kSettingsIconSize,
-                              icon_color));
-  }
-}
-
 void ExtensionsMenuView::TabChangedAt(content::WebContents* contents,
                                       int index,
                                       TabChangeType change_type) {
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.h b/chrome/browser/ui/views/extensions/extensions_menu_view.h
index 56b028b..1fcbb19e 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_view.h
+++ b/chrome/browser/ui/views/extensions/extensions_menu_view.h
@@ -71,7 +71,6 @@
 
   // views::BubbleDialogDelegateView:
   std::u16string GetAccessibleWindowTitle() const override;
-  void OnThemeChanged() override;
 
   // TabStripModelObserver:
   void TabChangedAt(content::WebContents* contents,
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
index d2173fd..6ae5e32 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
@@ -1206,7 +1206,7 @@
 
   SkColor active_frame_color =
       window->GetProperty(chromeos::kFrameActiveColorKey);
-  EXPECT_EQ(active_frame_color, SkColorSetRGB(253, 254, 255))
+  EXPECT_EQ(active_frame_color, SkColorSetRGB(0xFD, 0xFE, 0xFF))
       << "RGB: " << SkColorGetR(active_frame_color) << ", "
       << SkColorGetG(active_frame_color) << ", "
       << SkColorGetB(active_frame_color);
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
index 7ee2b72..2d6d4f77 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc
@@ -184,7 +184,7 @@
 
 IN_PROC_BROWSER_TEST_F(WebAppOpaqueBrowserFrameViewTest, MediumThemeColor) {
   // Use the theme color for Gmail.
-  if (!InstallAndLaunchWebApp(SkColorSetRGB(0xd6, 0x49, 0x3b)))
+  if (!InstallAndLaunchWebApp(SkColorSetRGB(0xD6, 0x49, 0x3B)))
     return;
   EXPECT_EQ(web_app_frame_toolbar_->active_color_for_testing(),
             web_app_frame_toolbar_->GetColorProvider()->GetColor(
diff --git a/chrome/browser/ui/views/infobars/infobar_view.cc b/chrome/browser/ui/views/infobars/infobar_view.cc
index 36a60ac45..70d6f8e 100644
--- a/chrome/browser/ui/views/infobars/infobar_view.cc
+++ b/chrome/browser/ui/views/infobars/infobar_view.cc
@@ -88,10 +88,10 @@
   SetPaintToLayer();
   layer()->SetMasksToBounds(true);
 
-  gfx::Image image = this->delegate()->GetIcon();
+  const ui::ImageModel& image = this->delegate()->GetIcon();
   if (!image.IsEmpty()) {
     icon_ = new views::ImageView;
-    icon_->SetImage(image.ToImageSkia());
+    icon_->SetImage(image);
     icon_->SizeToPreferredSize();
     icon_->SetProperty(
         views::kMarginsKey,
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view_unittest.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view_unittest.cc
index 0424284..0ced146 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view_unittest.cc
@@ -39,7 +39,6 @@
 const int kOpenTimeMS = 100;
 const int kAnimationDurationMS = (kOpenTimeMS * 2) + kStayOpenTimeMS;
 const int kImageSize = 15;
-const SkColor kTestColor = SkColorSetRGB(64, 64, 64);
 const int kNumberOfSteps = 300;
 
 class TestIconLabelBubbleView : public IconLabelBubbleView {
@@ -142,10 +141,10 @@
  public:
   // IconLabelBubbleView::Delegate:
   SkColor GetIconLabelBubbleSurroundingForegroundColor() const override {
-    return kTestColor;
+    return gfx::kPlaceholderColor;
   }
   SkColor GetIconLabelBubbleBackgroundColor() const override {
-    return kTestColor;
+    return gfx::kPlaceholderColor;
   }
 };
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc
index fd6ad63..ccbc4291 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_suggestion_button_row_view.cc
@@ -49,8 +49,7 @@
       : MdTextButton(std::move(callback), text, CONTEXT_OMNIBOX_PRIMARY),
         icon_(&icon),
         popup_contents_view_(popup_contents_view),
-        selection_(selection),
-        icon_color_(SK_ColorTRANSPARENT) {
+        selection_(selection) {
     SetTriggerableEventFlags(GetTriggerableEventFlags() |
                              ui::EF_MIDDLE_MOUSE_BUTTON);
     views::InstallPillHighlightPathGenerator(this);
@@ -98,11 +97,8 @@
     // We can't use colors from NativeTheme as the omnibox theme might be
     // different (for example, if the NTP colors are customized).
     const auto* const theme_provider = GetThemeProvider();
-    SkColor icon_color =
-        icon_color_ != SK_ColorTRANSPARENT
-            ? icon_color_
-            : GetOmniboxColor(theme_provider, OmniboxPart::RESULTS_ICON,
-                              theme_state_);
+    SkColor icon_color = GetOmniboxColor(
+        theme_provider, OmniboxPart::RESULTS_ICON, theme_state_);
     SetImage(
         views::Button::STATE_NORMAL,
         gfx::CreateVectorIcon(*icon_, GetLayoutConstant(LOCATION_BAR_ICON_SIZE),
@@ -129,11 +125,9 @@
     node_data->role = ax::mojom::Role::kListBoxOption;
   }
 
-  void SetIcon(const gfx::VectorIcon& icon,
-               SkColor icon_color = SK_ColorTRANSPARENT) {
-    if (icon_ != &icon || icon_color != icon_color_) {
+  void SetIcon(const gfx::VectorIcon& icon) {
+    if (icon_ != &icon) {
       icon_ = &icon;
-      icon_color_ = icon_color;
       OnThemeChanged();
     }
   }
@@ -143,7 +137,6 @@
   raw_ptr<OmniboxPopupContentsView> popup_contents_view_;
   OmniboxPopupSelection selection_;
   OmniboxPartState theme_state_ = OmniboxPartState::NORMAL;
-  SkColor icon_color_;
 };
 
 BEGIN_METADATA(OmniboxSuggestionRowButton, views::MdTextButton)
@@ -229,8 +222,7 @@
     pedal_button_->SetText(pedal_strings.hint);
     pedal_button_->SetTooltipText(pedal_strings.suggestion_contents);
     pedal_button_->SetAccessibleName(pedal_strings.accessibility_hint);
-    pedal_button_->SetIcon(match().action->GetVectorIcon(),
-                           match().action->GetVectorIconColor());
+    pedal_button_->SetIcon(match().action->GetVectorIcon());
   }
 
   bool is_any_button_visible = keyword_button_->GetVisible() ||
diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
index 6d2744b6..b35a1ba 100644
--- a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
+++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
@@ -803,7 +803,8 @@
   GetCompositor()->AddChildFrameSink(surface_id.frame_sink_id());
   has_registered_frame_sink_hierarchy_ = true;
   video_view_->layer()->SetShowSurface(
-      surface_id, GetBounds().size(), SK_ColorBLACK,
+      surface_id, GetBounds().size(),
+      GetColorProvider()->GetColor(kColorPipWindowBackground),
       cc::DeadlinePolicy::UseDefaultDeadline(),
       true /* stretch_content_to_fill_bounds */);
 }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
index 27a87134..7e5f62c 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 
-#include "base/json/json_reader.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/values_test_util.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
@@ -288,6 +288,8 @@
 
 namespace {
 
+using ::base::test::ParseJson;
+
 constexpr char kTestUserEmail[] = "user@example.com";
 
 // Helper class that wraps a TestingProfile and a TestWebContents for a test
@@ -394,13 +396,6 @@
   std::unique_ptr<test::PageInfoBubbleViewTestApi> api_;
 };
 
-base::Value ReadJson(base::StringPiece json) {
-  base::JSONReader::ValueWithError result =
-      base::JSONReader::ReadAndReturnValueWithError(json);
-  EXPECT_TRUE(result.value) << result.error_message;
-  return result.value ? std::move(*result.value) : base::Value();
-}
-
 views::Label* GetChosenObjectTitle(const views::View::Views& children) {
   views::View* labels_container = children[1];
   return static_cast<views::Label*>(labels_container->children()[0]);
@@ -700,7 +695,7 @@
   // Add the policy setting to prefs.
   Profile* profile = web_contents_helper_->profile();
   profile->GetPrefs()->Set(prefs::kManagedWebUsbAllowDevicesForUrls,
-                           ReadJson(kWebUsbPolicySetting));
+                           ParseJson(kWebUsbPolicySetting));
   UsbChooserContext* store = UsbChooserContextFactory::GetForProfile(profile);
 
   auto objects = store->GetGrantedObjects(origin);
@@ -743,7 +738,7 @@
   // Add the policy setting to prefs.
   Profile* profile = web_contents_helper_->profile();
   profile->GetPrefs()->Set(prefs::kManagedWebUsbAllowDevicesForUrls,
-                           ReadJson(kWebUsbPolicySetting));
+                           ParseJson(kWebUsbPolicySetting));
 
   // Connect the UsbChooserContext with FakeUsbDeviceManager.
   device::FakeUsbDeviceManager usb_device_manager;
@@ -849,7 +844,7 @@
 
   // Add the policy setting to prefs.
   web_contents_helper_->local_state()->Set(
-      prefs::kManagedSerialAllowUsbDevicesForUrls, ReadJson(R"([
+      prefs::kManagedSerialAllowUsbDevicesForUrls, ParseJson(R"([
                {
                  "devices": [{ "vendor_id": 6353, "product_id": 5678 }],
                  "urls": [ "http://www.example.com" ]
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc
index 858ac7c..365baff 100644
--- a/chrome/browser/ui/views/payments/payment_request_item_list.cc
+++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -96,12 +96,16 @@
     auto edit_button = views::CreateVectorImageButton(
         base::BindRepeating(&Item::EditButtonPressed, base::Unretained(this)));
     edit_button->SetBorder(nullptr);
-    const SkColor icon_color =
-        color_utils::DeriveDefaultIconColor(SK_ColorBLACK);
-    edit_button->SetImage(views::Button::STATE_NORMAL,
-                          gfx::CreateVectorIcon(vector_icons::kEditIcon,
-                                                kEditIconSize, icon_color));
-    views::InkDrop::Get(edit_button.get())->SetBaseColor(icon_color);
+    edit_button->SetImageModel(
+        views::Button::STATE_NORMAL,
+        ui::ImageModel::FromVectorIcon(vector_icons::kEditIcon, ui::kColorIcon,
+                                       kEditIconSize));
+    views::InkDrop::Get(edit_button.get())
+        ->SetBaseColorCallback(base::BindRepeating(
+            [](views::View* host) {
+              return host->GetColorProvider()->GetColor(ui::kColorIcon);
+            },
+            edit_button.get()));
     edit_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
     edit_button->SetID(static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON));
     edit_button->SetAccessibleName(
diff --git a/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc b/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
index c9a4be9e..3dd6710 100644
--- a/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/secure_payment_confirmation_dialog_view.cc
@@ -347,7 +347,7 @@
           gfx::CreateVectorIcon(
               kCreditCardIcon,
               kSecurePaymentConfirmationInstrumentIconDefaultWidthPx,
-              SK_ColorGRAY));
+              gfx::kPlaceholderColor));
     } else {
       icon_view = CreateSecurePaymentConfirmationInstrumentIconView(
           gfx::ImageSkia::CreateFrom1xBitmap(*model_->instrument_icon())
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index fdd9d37..1a6a648 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -128,14 +128,15 @@
   canvas->DrawCircle(gfx::PointF(radius, radius), radius, flags);
 }
 
-gfx::ImageSkia CreateCircle(int size, SkColor color = SK_ColorWHITE) {
+gfx::ImageSkia CreateCircle(int size, SkColor color) {
   return gfx::CanvasImageSource::MakeImageSkia<CircleImageSource>(size, color);
 }
 
 gfx::ImageSkia CropCircle(const gfx::ImageSkia& image) {
   DCHECK_EQ(image.width(), image.height());
+  // The color here is irrelevant as long as it's opaque; only alpha matters.
   return gfx::ImageSkiaOperations::CreateMaskedImage(
-      image, CreateCircle(image.width()));
+      image, CreateCircle(image.width(), SK_ColorWHITE));
 }
 
 gfx::ImageSkia AddCircularBackground(const gfx::ImageSkia& image,
diff --git a/chrome/browser/ui/views/read_later/read_later_button.h b/chrome/browser/ui/views/read_later/read_later_button.h
index 876916b..ae858f7 100644
--- a/chrome/browser/ui/views/read_later/read_later_button.h
+++ b/chrome/browser/ui/views/read_later/read_later_button.h
@@ -71,7 +71,7 @@
 
     const raw_ptr<ReadLaterButton> parent_;
 
-    SkColor highlight_color_ = SK_ColorTRANSPARENT;
+    SkColor highlight_color_ = gfx::kPlaceholderColor;
 
     // Animation for showing the highlight color (in icon, text, and
     // background).
diff --git a/chrome/browser/ui/views/tab_search_bubble_host.cc b/chrome/browser/ui/views/tab_search_bubble_host.cc
index 3c4ad72..4c574a5a 100644
--- a/chrome/browser/ui/views/tab_search_bubble_host.cc
+++ b/chrome/browser/ui/views/tab_search_bubble_host.cc
@@ -5,11 +5,9 @@
 #include "chrome/browser/ui/views/tab_search_bubble_host.h"
 
 #include "base/bind.h"
-#include "base/i18n/rtl.h"
 #include "base/metrics/histogram_functions.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
-#include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/views/tabs/tab_strip_controller.h"
 #include "chrome/browser/ui/views/user_education/browser_feature_promo_controller.h"
 #include "chrome/common/webui_url_constants.h"
@@ -108,22 +106,8 @@
   if (controller)
     controller->CloseBubble(feature_engagement::kIPHTabSearchFeature);
 
-  absl::optional<gfx::Rect> anchor;
-  if (button_->GetWidget()->IsFullscreen() && !button_->IsDrawn()) {
-    // Use a screen-coordinate anchor rect when the tabstrip's search button is
-    // not drawn, and potentially positioned offscreen, in fullscreen mode.
-    // Place the anchor similar to where the button would be in non-fullscreen
-    // mode.
-    gfx::Rect bounds = button_->GetWidget()->GetWorkAreaBoundsInScreen();
-    int offset = GetLayoutConstant(TABSTRIP_REGION_VIEW_CONTROL_PADDING);
-
-    int x = base::i18n::IsRTL() ? bounds.x() + offset : bounds.right() - offset;
-
-    anchor.emplace(gfx::Rect(x, bounds.y() + offset, 0, 0));
-  }
-
   bubble_created_time_ = base::TimeTicks::Now();
-  webui_bubble_manager_.ShowBubble(anchor);
+  webui_bubble_manager_.ShowBubble();
 
   auto* tracker =
       feature_engagement::TrackerFactory::GetForBrowserContext(profile_);
diff --git a/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc b/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
index 366973f..a0f97b10 100644
--- a/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
+++ b/chrome/browser/ui/views/tab_search_bubble_host_browsertest.cc
@@ -7,22 +7,11 @@
 #include "base/run_loop.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
-#include "chrome/browser/ui/exclusive_access/exclusive_access_test.h"
-#include "chrome/browser/ui/test/test_browser_dialog.h"
 #include "chrome/browser/ui/views/bubble/webui_bubble_manager.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "content/public/test/browser_test.h"
 #include "ui/base/accelerators/accelerator.h"
-#include "ui/gfx/geometry/rect.h"
-
-void EnterFullscreen(Browser* browser) {
-  browser->exclusive_access_manager()
-      ->fullscreen_controller()
-      ->ToggleBrowserFullscreenMode();
-  FullscreenNotificationObserver(browser).Wait();
-}
 
 class TabSearchBubbleHostBrowserTest : public InProcessBrowserTest {
  public:
@@ -67,24 +56,6 @@
   RunUntilBubbleWidgetDestroyed();
 }
 
-IN_PROC_BROWSER_TEST_F(TabSearchBubbleHostBrowserTest,
-                       BubbleShowCorrectlyInFullscreen) {
-  EnterFullscreen(browser());
-
-  gfx::Rect rect(20, 4, 0, 0);
-  bubble_manager()->ShowBubble(rect);
-
-  bubble_manager()->bubble_view_for_testing()->ShowUI();
-  EXPECT_TRUE(bubble_manager()->GetBubbleWidget()->IsVisible());
-
-  gfx::Rect bound =
-      bubble_manager()->bubble_view_for_testing()->GetAnchorRect();
-  EXPECT_EQ(bound, rect);
-
-  tab_search_bubble_host()->CloseTabSearchBubble();
-  RunUntilBubbleWidgetDestroyed();
-}
-
 // On macOS, most accelerators are handled by CommandDispatcher.
 #if !BUILDFLAG(IS_MAC)
 IN_PROC_BROWSER_TEST_F(TabSearchBubbleHostBrowserTest,
@@ -104,23 +75,3 @@
   RunUntilBubbleWidgetDestroyed();
 }
 #endif
-
-class FullscreenTabSearchBubbleDialogTest : public DialogBrowserTest {
- public:
-  FullscreenTabSearchBubbleDialogTest() = default;
-
-  FullscreenTabSearchBubbleDialogTest(
-      const FullscreenTabSearchBubbleDialogTest&) = delete;
-  FullscreenTabSearchBubbleDialogTest& operator=(
-      const FullscreenTabSearchBubbleDialogTest&) = delete;
-
-  void ShowUi(const std::string& name) override {
-    EnterFullscreen(browser());
-    BrowserView* view = BrowserView::GetBrowserViewForBrowser(browser());
-    view->CreateTabSearchBubble();
-  }
-};
-
-IN_PROC_BROWSER_TEST_F(FullscreenTabSearchBubbleDialogTest, InvokeUi_default) {
-  ShowAndVerifyUi();
-}
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index 720d31cf..b746529 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -1505,7 +1505,7 @@
     BrowserFrameActiveState active_state) const {
   const ui::ThemeProvider* tp = GetThemeProvider();
   if (!tp)
-    return SK_ColorBLACK;
+    return gfx::kPlaceholderColor;
 
   constexpr int kColorIds[2][2] = {
       {ThemeProperties::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE,
@@ -1524,7 +1524,7 @@
 SkColor TabStrip::GetTabForegroundColor(TabActive active) const {
   const ui::ColorProvider* cp = GetColorProvider();
   if (!cp)
-    return SK_ColorBLACK;
+    return gfx::kPlaceholderColor;
 
   constexpr ChromeColorIds kColorIds[2][2] = {
       {kColorTabForegroundInactiveFrameInactive,
diff --git a/chrome/browser/ui/views/tabs/tab_style_views.cc b/chrome/browser/ui/views/tabs/tab_style_views.cc
index ac16fb5..1be54c5e 100644
--- a/chrome/browser/ui/views/tabs/tab_style_views.cc
+++ b/chrome/browser/ui/views/tabs/tab_style_views.cc
@@ -168,7 +168,7 @@
                    const SkPoint& p,
                    SkScalar radius,
                    SkColor color) {
-  const SkColor colors[2] = {color, SkColorSetA(color, 0)};
+  const SkColor colors[2] = {color, SkColorSetA(color, SK_AlphaTRANSPARENT)};
   cc::PaintFlags flags;
   flags.setAntiAlias(true);
   flags.setShader(cc::PaintShader::MakeRadialGradient(
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.cc b/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.cc
index 6f2bcae3..b6886ce 100644
--- a/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.cc
+++ b/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.cc
@@ -24,30 +24,15 @@
 #include "ui/views/widget/widget.h"
 
 ArrowBorder::ArrowBorder(int thickness,
-                         SkColor color,
-                         SkColor background_color,
+                         ui::ColorId color,
+                         ui::ColorId background_color,
                          const gfx::VectorIcon& arrow_icon,
                          const Properties* properties)
-    : views::Border(color),
-      insets_(gfx::Insets(thickness) + properties->insets),
+    : insets_(gfx::Insets(thickness) + properties->insets),
+      color_(color),
       arrow_border_insets_(properties->arrow_border_insets),
-      arrow_(gfx::CreateVectorIcon(arrow_icon, background_color)) {
-  switch (properties->arrow_rotation) {
-    case ArrowRotation::kNone:
-      break;
-    case ArrowRotation::k90Degrees:
-      arrow_ = gfx::ImageSkiaOperations::CreateRotatedImage(
-          arrow_, SkBitmapOperations::ROTATION_90_CW);
-      break;
-    case ArrowRotation::k180Degrees:
-      arrow_ = gfx::ImageSkiaOperations::CreateRotatedImage(
-          arrow_, SkBitmapOperations::ROTATION_180_CW);
-      break;
-    case ArrowRotation::k270Degrees:
-      arrow_ = gfx::ImageSkiaOperations::CreateRotatedImage(
-          arrow_, SkBitmapOperations::ROTATION_270_CW);
-      break;
-  }
+      arrow_rotation_(properties->arrow_rotation),
+      arrow_(ui::ImageModel::FromVectorIcon(arrow_icon, background_color)) {
 }
 
 void ArrowBorder::Paint(const views::View& view, gfx::Canvas* canvas) {
@@ -68,6 +53,7 @@
                                 SkClipOp::kDifference, true);
 
   // Paint the rectangular border, less the region occupied by the arrow.
+  const auto* const color_provider = view.GetColorProvider();
   {
     gfx::ScopedCanvas content_clip(canvas);
 
@@ -77,7 +63,7 @@
         gfx::ConvertInsetsToPixels(arrow_border_insets_, dsf)));
     canvas->sk_canvas()->clipRect(gfx::RectToSkRect(arrow_bounds),
                                   SkClipOp::kDifference, true);
-    canvas->DrawColor(color());
+    canvas->DrawColor(color_provider->GetColor(color_));
   }
 
   // Paint the arrow.
@@ -95,9 +81,27 @@
   else if (arrow_bounds.origin().y() < content_bounds.origin().y())
     arrow_bounds.Offset(0, arrow_bounds.height() - arrow_size.height());
 
-  canvas->DrawImageIntInPixel(arrow_.GetRepresentation(dsf), arrow_bounds.x(),
-                              arrow_bounds.y(), arrow_size.width(),
-                              arrow_size.height(), false, cc::PaintFlags());
+  gfx::ImageSkia arrow = arrow_.Rasterize(color_provider);
+  switch (arrow_rotation_) {
+    case ArrowRotation::kNone:
+      break;
+    case ArrowRotation::k90Degrees:
+      arrow = gfx::ImageSkiaOperations::CreateRotatedImage(
+          arrow, SkBitmapOperations::ROTATION_90_CW);
+      break;
+    case ArrowRotation::k180Degrees:
+      arrow = gfx::ImageSkiaOperations::CreateRotatedImage(
+          arrow, SkBitmapOperations::ROTATION_180_CW);
+      break;
+    case ArrowRotation::k270Degrees:
+      arrow = gfx::ImageSkiaOperations::CreateRotatedImage(
+          arrow, SkBitmapOperations::ROTATION_270_CW);
+      break;
+  }
+  canvas->DrawImageIntInPixel(
+      arrow.GetRepresentation(dsf), arrow_bounds.x(),
+      arrow_bounds.y(), arrow_size.width(), arrow_size.height(), false,
+      cc::PaintFlags());
 }
 
 gfx::Insets ArrowBorder::GetInsets() const {
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.h b/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.h
index c74137ea..2514397 100644
--- a/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.h
+++ b/chrome/browser/ui/views/try_chrome_dialog_win/arrow_border.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_TRY_CHROME_DIALOG_WIN_ARROW_BORDER_H_
 #define CHROME_BROWSER_UI_VIEWS_TRY_CHROME_DIALOG_WIN_ARROW_BORDER_H_
 
+#include "ui/base/models/image_model.h"
+#include "ui/color/color_id.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
@@ -50,8 +52,8 @@
   // |background_color| using |arrow_icon| to paint the arrow itself.
   // |properties| indicates details for positioning the arrow.
   ArrowBorder(int thickness,
-              SkColor color,
-              SkColor background_color,
+              ui::ColorId color,
+              ui::ColorId background_color,
               const gfx::VectorIcon& arrow_icon,
               const Properties* properties);
 
@@ -72,12 +74,16 @@
   // The region occupied by the border.
   const gfx::Insets insets_;
 
+  const ui::ColorId color_;
+
   // The insets into the bounding rectangle of the arrow into which the popup's
   // border should extend.
   const gfx::Insets arrow_border_insets_;
 
+  const ArrowRotation arrow_rotation_;
+
   // The arrow image to be painted in the border.
-  gfx::ImageSkia arrow_;
+  ui::ImageModel arrow_;
 
   // The bounding rectangle of the arrow, in pixels, relative to the window's
   // client area. This rectangle may extend into the contents of the popup
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
index 639c58cb..bb64eab7 100644
--- a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
+++ b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
@@ -32,7 +32,6 @@
 #include "chrome/installer/util/experiment.h"
 #include "chrome/installer/util/experiment_storage.h"
 #include "components/strings/grit/components_strings.h"
-#include "third_party/skia/include/core/SkColor.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -168,35 +167,98 @@
 // Whether a button is an accept or cancel-style button.
 enum class TryChromeButtonType { OPEN_CHROME, NO_THANKS };
 
-// Builds a Win10-styled rectangular button, for this toast displayed outside of
-// the browser.
-views::Builder<views::LabelButton> CreateWin10StyleButton(
-    views::Button::PressedCallback callback,
-    const std::u16string& text,
-    TryChromeButtonType button_type,
-    const ui::ColorProvider* color_provider) {
-  return views::Builder<views::LabelButton>(
-             std::make_unique<views::LabelButton>(std::move(callback), text,
-                                                  CONTEXT_WINDOWS10_NATIVE))
-      .SetHorizontalAlignment(gfx::ALIGN_CENTER)
-      .SetBackground(views::CreateSolidBackground(
-          button_type == TryChromeButtonType::OPEN_CHROME
-              ? color_provider->GetColor(kColorTryChromeAcceptButtonBackground)
-              : color_provider->GetColor(
-                    kColorTryChromeNoThanksButtonBackground)))
-      // TODO(crbug.com/1311857): Ensure text color and background color
-      // selected above meet minimum contrast requirements.
-      .SetEnabledTextColors(
-          color_provider->GetColor(kColorTryChromeButtonForeground))
-      // Request specific 32pt height, 166+pt width.
-      .SetMinSize(gfx::Size(166, 32))
-      .SetMaxSize(gfx::Size(0, 32))
-      // Make button focusable for keyboard navigation.
-      .SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
-}
-
 }  // namespace
 
+class Win10StyleButton : public views::LabelButton {
+ public:
+  METADATA_HEADER(Win10StyleButton);
+  Win10StyleButton(views::Button::PressedCallback callback,
+                   const std::u16string& text,
+                   TryChromeButtonType button_type)
+      : views::LabelButton(std::move(callback),
+                           text,
+                           CONTEXT_WINDOWS10_NATIVE) {
+    SetHorizontalAlignment(gfx::ALIGN_CENTER);
+    SetBackground(views::CreateThemedSolidBackground(
+        this, button_type == TryChromeButtonType::OPEN_CHROME
+                  ? kColorTryChromeButtonBackgroundAccept
+                  : kColorTryChromeButtonBackgroundNoThanks));
+    // Request specific 32pt height, 166+pt width.
+    SetMinSize(gfx::Size(166, 32));
+    SetMaxSize(gfx::Size(0, 32));
+    // Make button focusable for keyboard navigation.
+    SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
+  }
+  Win10StyleButton(const Win10StyleButton&) = delete;
+  Win10StyleButton& operator=(const Win10StyleButton&) = delete;
+  ~Win10StyleButton() override = default;
+
+  void OnThemeChanged() override {
+    views::LabelButton::OnThemeChanged();
+    SetEnabledTextColors(
+        GetColorProvider()->GetColor(kColorTryChromeButtonForeground));
+  }
+};
+
+BEGIN_VIEW_BUILDER(, Win10StyleButton, views::LabelButton)
+END_VIEW_BUILDER
+
+BEGIN_METADATA(Win10StyleButton, views::LabelButton)
+END_METADATA
+
+DEFINE_VIEW_BUILDER(, Win10StyleButton)
+
+class BodyLabel : public views::Label {
+ public:
+  METADATA_HEADER(BodyLabel);
+  BodyLabel() {
+    SetTextContext(CONTEXT_WINDOWS10_NATIVE);
+    SetMultiLine(true);
+    SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  }
+  BodyLabel(const BodyLabel&) = delete;
+  BodyLabel& operator=(const BodyLabel&) = delete;
+  ~BodyLabel() override = default;
+
+  // views::Label:
+  void OnThemeChanged() override {
+    views::Label::OnThemeChanged();
+    SetBackgroundColor(GetColorProvider()->GetColor(kColorTryChromeBackground));
+  }
+};
+
+BEGIN_VIEW_BUILDER(, BodyLabel, views::Label)
+END_VIEW_BUILDER
+
+BEGIN_METADATA(BodyLabel, views::Label)
+END_METADATA
+
+DEFINE_VIEW_BUILDER(, BodyLabel)
+
+class HeadingLabel : public BodyLabel {
+ public:
+  METADATA_HEADER(HeadingLabel);
+  HeadingLabel() = default;
+  HeadingLabel(const HeadingLabel&) = delete;
+  HeadingLabel& operator=(const HeadingLabel&) = delete;
+  ~HeadingLabel() override = default;
+
+  // BodyLabel:
+  void OnThemeChanged() override {
+    BodyLabel::OnThemeChanged();
+    SetEnabledColor(
+        GetColorProvider()->GetColor(kColorTryChromeHeaderForeground));
+  }
+};
+
+BEGIN_VIEW_BUILDER(, HeadingLabel, views::Label)
+END_VIEW_BUILDER
+
+BEGIN_METADATA(HeadingLabel, views::Label)
+END_METADATA
+
+DEFINE_VIEW_BUILDER(, HeadingLabel)
+
 // A View that unconditionally reports that it handles mouse presses. This
 // results in the widget capturing the mouse so that it receives a
 // ET_MOUSE_CAPTURE_CHANGED event upon button release following a drag out of
@@ -593,9 +655,8 @@
 void TryChromeDialog::Context::NotificationAreaCalculator::AddBorderToContents(
     views::Widget* popup,
     views::View* contents_view) {
-  contents_view->SetBorder(views::CreateSolidBorder(
-      kTryChromeBorderThickness,
-      popup->GetColorProvider()->GetColor(kColorTryChromeBorder)));
+  contents_view->SetBorder(views::CreateThemedSolidBorder(
+      kTryChromeBorderThickness, kColorTryChromeBorder));
 }
 
 gfx::Rect TryChromeDialog::Context::NotificationAreaCalculator::ComputeBounds(
@@ -636,10 +697,9 @@
   // and observe the popup so that these pointers can be appropriately cleared.
   contents_view_ = contents_view;
   auto border = std::make_unique<ArrowBorder>(
-      kTryChromeBorderThickness,
-      popup->GetColorProvider()->GetColor(kColorTryChromeBorder),
-      popup->GetColorProvider()->GetColor(kColorTryChromeBackground),
-      kInactiveToastArrowIcon, &properties_->border_properties);
+      kTryChromeBorderThickness, kColorTryChromeBorder,
+      kColorTryChromeBackground, kInactiveToastArrowIcon,
+      &properties_->border_properties);
   border_ = border.get();
   contents_view->SetBorder(std::move(border));
   popup->AddObserver(this);
@@ -1056,6 +1116,12 @@
   // that the logoff was cancelled. The toast may as well be shown.
 
   // Create the popup.
+  auto logo = views::Builder<views::ImageView>()
+                  .SetImage(ui::ImageModel::FromVectorIcon(
+                      kInactiveToastLogoIcon, kColorTryChromeHeaderForeground))
+                  .Build();
+  const gfx::Size logo_size = logo->GetPreferredSize();
+
   views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
   params.activatable = views::Widget::InitParams::Activatable::kYes;
   // An approximate window size. Layout() can adjust.
@@ -1065,26 +1131,15 @@
   popup_->AddObserver(this);
   popup_->Init(std::move(params));
 
-  auto* color_provider = popup_->GetColorProvider();
-  SkColor try_chrome_background_color =
-      color_provider->GetColor(kColorTryChromeBackground);
-  SkColor header_color = color_provider->GetColor(kColorTryChromeForeground);
-
-  auto logo =
-      views::Builder<views::ImageView>()
-          .SetImage(gfx::CreateVectorIcon(kInactiveToastLogoIcon, header_color))
-          .Build();
-  const gfx::Size logo_size = logo->GetPreferredSize();
-
   auto contents_view =
       views::Builder<ClickableView>()
           .SetOrientation(views::BoxLayout::Orientation::kVertical)
-          .SetBackground(
-              views::CreateSolidBackground(try_chrome_background_color))
           .SetMinimumCrossAxisSize(kToastWidth)
           .CustomConfigure(base::BindOnce(
               [](Context* context, views::Widget* popup,
                  ClickableView* contents_view) {
+                contents_view->SetBackground(views::CreateThemedSolidBackground(
+                    contents_view, kColorTryChromeBackground));
                 context->AddBorderToContents(popup, contents_view);
               },
               context_.get(), popup_));
@@ -1156,17 +1211,15 @@
             // accessibility checks.
             .SetAccessibleName(l10n_util::GetStringUTF16(IDS_CLOSE))
             .SetProperty(views::kTableColAndRowSpanKey, gfx::Size(1, 2))
-            .CustomConfigure(base::BindOnce(
-                [](SkColor image_button_color,
-                   views::ImageButton* image_button) {
-                  image_button->SetImage(
+            .CustomConfigure(
+                base::BindOnce([](views::ImageButton* image_button) {
+                  image_button->SetImageModel(
                       views::Button::STATE_NORMAL,
-                      gfx::CreateVectorIcon(kInactiveToastCloseIcon,
-                                            image_button_color));
+                      ui::ImageModel::FromVectorIcon(
+                          kInactiveToastCloseIcon, kColorTryChromeForeground));
                   DCHECK_EQ(image_button->GetPreferredSize().width(),
                             kCloseButtonWidth);
-                },
-                color_provider->GetColor(kColorTryChromeIcon))));
+                })));
   } else {
     table_view.AddChild(views::Builder<views::View>().SetProperty(
         views::kTableColAndRowSpanKey, gfx::Size(1, 2)));
@@ -1174,13 +1227,8 @@
 
   table_view.AddChildren(
       views::Builder<views::ImageView>(std::move(logo)),
-      views::Builder<views::Label>()
-          .SetText(l10n_util::GetStringUTF16(kExperiments[group_].heading_id))
-          .SetTextContext(CONTEXT_WINDOWS10_NATIVE)
-          .SetBackgroundColor(try_chrome_background_color)
-          .SetEnabledColor(header_color)
-          .SetMultiLine(true)
-          .SetHorizontalAlignment(gfx::ALIGN_LEFT));
+      views::Builder<HeadingLabel>()
+          .SetText(l10n_util::GetStringUTF16(kExperiments[group_].heading_id)));
 
   contents_view.AddChild(std::move(table_view));
 
@@ -1190,12 +1238,8 @@
   if (body_string_id) {
     const int logo_padding = logo_size.width() + kLogoPadding;
     contents_view.AddChild(
-        views::Builder<views::Label>()
+        views::Builder<BodyLabel>()
             .SetText(l10n_util::GetStringUTF16(body_string_id))
-            .SetTextContext(CONTEXT_WINDOWS10_NATIVE)
-            .SetBackgroundColor(try_chrome_background_color)
-            .SetMultiLine(true)
-            .SetHorizontalAlignment(gfx::ALIGN_LEFT)
             .SetProperty(
                 views::kMarginsKey,
                 gfx::Insets::TLBR(
@@ -1212,21 +1256,23 @@
   auto buttons =
       views::Builder<views::View>()
           .SetLayoutManager(std::make_unique<ButtonLayout>(kButtonsViewWidth))
-          .AddChild(CreateWin10StyleButton(
+          .AddChild(views::Builder<
+                    Win10StyleButton>(std::make_unique<Win10StyleButton>(
               base::BindRepeating(
                   &TryChromeDialog::ButtonPressed, base::Unretained(this),
                   installer::ExperimentMetrics::kSelectedOpenChromeAndNoCrash),
               l10n_util::GetStringUTF16(IDS_WIN10_TOAST_OPEN_CHROME),
-              TryChromeButtonType::OPEN_CHROME, color_provider));
+              TryChromeButtonType::OPEN_CHROME)));
   const auto style = kExperiments[group_].close_style;
   if (style == ExperimentVariations::CloseStyle::kNoThanksButton ||
       style == ExperimentVariations::CloseStyle::kNoThanksButtonAndCloseX) {
-    buttons.AddChild(CreateWin10StyleButton(
+    buttons.AddChild(views::Builder<
+                    Win10StyleButton>(std::make_unique<Win10StyleButton>(
         base::BindRepeating(&TryChromeDialog::ButtonPressed,
                             base::Unretained(this),
                             installer::ExperimentMetrics::kSelectedNoThanks),
         l10n_util::GetStringUTF16(IDS_WIN10_TOAST_NO_THANKS),
-        TryChromeButtonType::NO_THANKS, color_provider));
+        TryChromeButtonType::NO_THANKS)));
   }
 
   contents_view.AddChild(
diff --git a/chrome/browser/ui/views/user_education/browser_feature_promo_controller_unittest.cc b/chrome/browser/ui/views/user_education/browser_feature_promo_controller_unittest.cc
index 1680e1f5..90474f7 100644
--- a/chrome/browser/ui/views/user_education/browser_feature_promo_controller_unittest.cc
+++ b/chrome/browser/ui/views/user_education/browser_feature_promo_controller_unittest.cc
@@ -660,7 +660,7 @@
       UserEducationServiceFactory::GetForProfile(browser()->profile())
           ->tutorial_service();
   EXPECT_TRUE(tutorial_service.IsRunningTutorial());
-  tutorial_service.HideCurrentBubbleIfShowing();
+  tutorial_service.AbortTutorial(absl::nullopt);
 }
 
 TEST_F(BrowserFeaturePromoControllerTest, GetAnchorContext) {
diff --git a/chrome/browser/ui/views/user_education/tutorial_interactive_uitest.cc b/chrome/browser/ui/views/user_education/tutorial_interactive_uitest.cc
index e745d5d..5ff40f92 100644
--- a/chrome/browser/ui/views/user_education/tutorial_interactive_uitest.cc
+++ b/chrome/browser/ui/views/user_education/tutorial_interactive_uitest.cc
@@ -43,7 +43,7 @@
 
   void TearDownOnMainThread() override {
     auto* const service = GetTutorialService();
-    service->AbortTutorial();
+    service->AbortTutorial(absl::nullopt);
     service->tutorial_registry()->RemoveTutorialForTesting(kTestTutorialId);
   }
 
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
index c55cf6a..52509bc 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -182,12 +182,9 @@
     {"SiteABar", "Site A Bar"}};
 
 const base::flat_map<std::string, SkColor> g_app_name_icon_color = {
-    {"Site A", SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00)},
-    {"Site B", SkColorSetARGB(0xFF, 0x00, 0x00, 0x00)},
-    {"Site C", SkColorSetARGB(0x00, 0x00, 0x00, 0x00)},
-    {"Site A Foo", SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00)},
-    {"Site A Bar", SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00)},
-    {"Site A - Updated name", SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00)}};
+    {"Site A", SK_ColorGREEN},       {"Site B", SK_ColorBLACK},
+    {"Site C", SK_ColorTRANSPARENT}, {"Site A Foo", SK_ColorGREEN},
+    {"Site A Bar", SK_ColorGREEN},   {"Site A - Updated name", SK_ColorGREEN}};
 
 #if !BUILDFLAG(IS_CHROMEOS)
 class TestAppLauncherHandler : public AppLauncherHandler {
@@ -2210,17 +2207,17 @@
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
     BUILDFLAG(IS_CHROMEOS)
   DCHECK(base::Contains(g_app_name_icon_color, name));
-  SkColor expected_icon_pxiel_color = g_app_name_icon_color.find(name)->second;
+  SkColor expected_icon_pixel_color = g_app_name_icon_color.find(name)->second;
 #endif
 
 #if BUILDFLAG(IS_WIN)
   is_shortcut_and_icon_correct =
       (IsShortcutAndIconCorrectOnWin(profile, name,
                                      shortcut_override_->desktop.GetPath(),
-                                     expected_icon_pxiel_color) &&
+                                     expected_icon_pixel_color) &&
        IsShortcutAndIconCorrectOnWin(
            profile, name, shortcut_override_->application_menu.GetPath(),
-           expected_icon_pxiel_color));
+           expected_icon_pixel_color));
 #elif BUILDFLAG(IS_MAC)
   std::string shortcut_filename = name + ".app";
   base::FilePath app_shortcut_path =
@@ -2242,7 +2239,7 @@
   if (shortcut_exists) {
     SkColor icon_pixel_color = GetIconTopLeftColor(app_shortcut_path);
     is_shortcut_and_icon_correct =
-        (icon_pixel_color == expected_icon_pxiel_color);
+        (icon_pixel_color == expected_icon_pixel_color);
   }
 #elif BUILDFLAG(IS_LINUX)
   std::string shortcut_filename =
@@ -2252,11 +2249,11 @@
   if (base::PathExists(desktop_shortcut_path))
     is_shortcut_and_icon_correct = IconManagerCheckIconTopLeftColor(
         provider()->icon_manager(), id, {kLauncherIconSize, kInstallIconSize},
-        expected_icon_pxiel_color);
+        expected_icon_pixel_color);
 #elif BUILDFLAG(IS_CHROMEOS)
   is_shortcut_and_icon_correct = IconManagerCheckIconTopLeftColor(
       provider()->icon_manager(), id, {kLauncherIconSize, kInstallIconSize},
-      expected_icon_pxiel_color);
+      expected_icon_pixel_color);
 #endif
   return is_shortcut_and_icon_correct;
 }
diff --git a/chrome/browser/ui/views/webauthn/ring_progress_bar.cc b/chrome/browser/ui/views/webauthn/ring_progress_bar.cc
index df7d65bb..03febaf 100644
--- a/chrome/browser/ui/views/webauthn/ring_progress_bar.cc
+++ b/chrome/browser/ui/views/webauthn/ring_progress_bar.cc
@@ -6,10 +6,12 @@
 
 #include "base/cxx17_backports.h"
 #include "cc/paint/paint_flags.h"
+#include "chrome/browser/ui/color/chrome_color_id.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/color/color_provider.h"
 #include "ui/gfx/animation/linear_animation.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/color_utils.h"
@@ -20,8 +22,6 @@
 namespace {
 constexpr float kStrokeWidth = 4;
 constexpr base::TimeDelta kAnimationDuration = base::Milliseconds(200);
-static constexpr SkColor kRingColor = SkColorSetRGB(66, 133, 224);
-static constexpr SkColor kBackgroundColor = SkColorSetRGB(218, 220, 224);
 }  // namespace
 
 RingProgressBar::RingProgressBar() = default;
@@ -50,8 +50,12 @@
                 /*fTop=*/(content_bounds.height() / 2 - radius),
                 /*fRight=*/(content_bounds.width() / 2 + radius),
                 /*fBottom=*/(content_bounds.height() / 2 + radius)};
+  const auto* const color_provider = GetColorProvider();
   views::DrawProgressRing(
-      canvas, bounds, kBackgroundColor, kRingColor, kStrokeWidth,
+      canvas, bounds,
+      color_provider->GetColor(kColorWebAuthnProgressRingBackground),
+      color_provider->GetColor(kColorWebAuthnProgressRingForeground),
+      kStrokeWidth,
       /*start_angle=*/-90,
       /*sweep_angle=*/360 * animation_->CurrentValueBetween(initial_, target_));
 }
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index ae16fbf..99cda39 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -661,17 +661,19 @@
 }
 
 template <>
-WebUIController* NewWebUI<ash::PersonalizationAppUI>(WebUI* web_ui,
-                                                     const GURL& url) {
-  auto ambient_provider =
-      std::make_unique<PersonalizationAppAmbientProviderImpl>(web_ui);
-  auto theme_provider =
-      std::make_unique<PersonalizationAppThemeProviderImpl>(web_ui);
-  auto user_provider =
-      std::make_unique<PersonalizationAppUserProviderImpl>(web_ui);
-  auto wallpaper_provider =
-      std::make_unique<PersonalizationAppWallpaperProviderImpl>(web_ui);
-  return new ash::PersonalizationAppUI(
+WebUIController* NewWebUI<ash::personalization_app::PersonalizationAppUI>(
+    WebUI* web_ui,
+    const GURL& url) {
+  auto ambient_provider = std::make_unique<
+      ash::personalization_app::PersonalizationAppAmbientProviderImpl>(web_ui);
+  auto theme_provider = std::make_unique<
+      ash::personalization_app::PersonalizationAppThemeProviderImpl>(web_ui);
+  auto user_provider = std::make_unique<
+      ash::personalization_app::PersonalizationAppUserProviderImpl>(web_ui);
+  auto wallpaper_provider = std::make_unique<
+      ash::personalization_app::PersonalizationAppWallpaperProviderImpl>(
+      web_ui);
+  return new ash::personalization_app::PersonalizationAppUI(
       web_ui, std::move(ambient_provider), std::move(theme_provider),
       std::move(user_provider), std::move(wallpaper_provider));
 }
@@ -1081,9 +1083,10 @@
   if (url.host_piece() == chrome::kChromeUIVmHost) {
     return &NewWebUI<chromeos::VmUI>;
   }
-  if (url.host_piece() == ash::kChromeUIPersonalizationAppHost &&
+  if (url.host_piece() ==
+          ash::personalization_app::kChromeUIPersonalizationAppHost &&
       chromeos::features::IsWallpaperWebUIEnabled()) {
-    return &NewWebUI<ash::PersonalizationAppUI>;
+    return &NewWebUI<ash::personalization_app::PersonalizationAppUI>;
   }
   if (url.host_piece() == ash::kChromeUISystemExtensionsInternalsHost &&
       base::FeatureList::IsEnabled(ash::features::kSystemExtensions)) {
diff --git a/chrome/browser/ui/webui/chromeos/projector/selfie_cam_bubble_manager.cc b/chrome/browser/ui/webui/chromeos/projector/selfie_cam_bubble_manager.cc
index e057e7f..2258dd5 100644
--- a/chrome/browser/ui/webui/chromeos/projector/selfie_cam_bubble_manager.cc
+++ b/chrome/browser/ui/webui/chromeos/projector/selfie_cam_bubble_manager.cc
@@ -47,8 +47,6 @@
     2 * kExpandCollapseButtonRadius,
     2 * kExpandCollapseButtonRadius);
 constexpr int kButtonCircleHighlightPaddingDip = 2;
-constexpr SkColor kExpandCollapseButtonBackground =
-    SkColorSetARGB(0xFF, 0x8A, 0xB4, 0xF8);
 
 // Margin of the bubble with respect to the context window.
 constexpr int kMinAnchorMarginDip = 15;
@@ -60,9 +58,8 @@
   std::u16string text = l10n_util::GetStringUTF16(tooltip_text_id);
   auto button =
       std::make_unique<views::MdTextButton>(std::move(callback), text);
+  button->SetProminent(true);
   button->SetTooltipText(text);
-  button->SetBgColorOverride(kExpandCollapseButtonBackground);
-  button->SetEnabledTextColors(SK_ColorBLACK);
   button->SetCornerRadius(kExpandCollapseButtonRadius);
   button->SetPreferredSize(kExpandCollapseButtonPreferredSize);
   button->SetVisible(is_visible);
diff --git a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.cc b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.cc
index c47d0f83..526bcfd1 100644
--- a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.cc
+++ b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.cc
@@ -4,8 +4,6 @@
 
 #include "chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.h"
 
-#include <algorithm>
-#include <queue>
 #include <string>
 #include <utility>
 #include <vector>
@@ -18,65 +16,6 @@
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_tree.h"
 
-namespace {
-
-static const ax::mojom::Role kRolesToSkip[]{
-    ax::mojom::Role::kAudio,
-    ax::mojom::Role::kBanner,
-    ax::mojom::Role::kButton,
-    ax::mojom::Role::kComplementary,
-    ax::mojom::Role::kContentInfo,
-    ax::mojom::Role::kFooter,
-    ax::mojom::Role::kFooterAsNonLandmark,
-    ax::mojom::Role::kHeader,
-    ax::mojom::Role::kHeaderAsNonLandmark,
-    ax::mojom::Role::kImage,
-    ax::mojom::Role::kLabelText,
-    ax::mojom::Role::kNavigation,
-};
-static constexpr int kMaxNodes = 5000;
-
-// TODO(crbug.com/1266555): Replace this with a call to
-// OneShotAccessibilityTreeSearch.
-const ui::AXNode* GetArticleNode(const ui::AXNode* node) {
-  std::queue<const ui::AXNode*> queue;
-  queue.push(node);
-
-  while (!queue.empty()) {
-    const ui::AXNode* popped = queue.front();
-    queue.pop();
-    if (popped->GetRole() == ax::mojom::Role::kArticle)
-      return popped;
-    for (auto iter = popped->UnignoredChildrenBegin();
-         iter != popped->UnignoredChildrenEnd(); ++iter) {
-      queue.push(iter.get());
-    }
-  }
-
-  return nullptr;
-}
-
-void AddTextNodesToVector(const ui::AXNode* node,
-                          std::vector<std::string>* strings) {
-  if (node->GetRole() == ax::mojom::Role::kStaticText) {
-    std::string value;
-    if (node->GetStringAttribute(ax::mojom::StringAttribute::kName, &value))
-      strings->emplace_back(value);
-    return;
-  }
-
-  for (const auto role : kRolesToSkip) {
-    if (role == node->GetRole())
-      return;
-  }
-  for (auto iter = node->UnignoredChildrenBegin();
-       iter != node->UnignoredChildrenEnd(); ++iter) {
-    AddTextNodesToVector(iter.get(), strings);
-  }
-}
-
-}  // namespace
-
 ReadAnythingPageHandler::ReadAnythingPageHandler(
     mojo::PendingRemote<read_anything::mojom::Page> page,
     mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver)
@@ -88,35 +27,40 @@
   Browser* browser = chrome::FindLastActive();
   if (!browser)
     return;
+
   content::WebContents* web_contents =
       browser->tab_strip_model()->GetActiveWebContents();
-
-  // Get page contents (via snapshot of a11y tree) for read anything generation.
-  // This will include subframe content for any subframes loaded at this point.
-  web_contents->RequestAXTreeSnapshot(
-      base::BindOnce(&ReadAnythingPageHandler::CombineTextNodesAndMakeCallback,
-                     weak_pointer_factory_.GetWeakPtr()),
-      ui::AXMode::kWebContents,
-      /* exclude_offscreen= */ false, kMaxNodes,
-      /* timeout= */ {});
-}
-
-void ReadAnythingPageHandler::CombineTextNodesAndMakeCallback(
-    const ui::AXTreeUpdate& update) {
-  ui::AXTree tree;
-  bool success = tree.Unserialize(update);
-  if (!success)
+  if (!web_contents)
     return;
 
-  // If this page has an article node, only combine text from that node.
-  const ui::AXNode* read_anything_root = GetArticleNode(tree.root());
-  if (!read_anything_root) {
-    read_anything_root = tree.root();
-  }
+  // Read Anything just runs on the main frame and does not run on embedded
+  // content.
+  content::RenderFrameHost* render_frame_host = web_contents->GetMainFrame();
+  if (!render_frame_host)
+    return;
 
+  // Request a distilled AXTree for the main frame.
+  render_frame_host->RequestDistilledAXTree(
+      base::BindOnce(&ReadAnythingPageHandler::OnAXTreeDistilled,
+                     weak_pointer_factory_.GetWeakPtr()));
+}
+
+void ReadAnythingPageHandler::OnAXTreeDistilled(
+    const ui::AXTreeUpdate& snapshot,
+    const std::vector<ui::AXNodeID>& text_node_ids) {
+  ui::AXTree tree;
+  bool success = tree.Unserialize(snapshot);
+  if (!success)
+    return;
   std::vector<std::string> text_node_contents;
-  text_node_contents.reserve(update.nodes.size());
-  AddTextNodesToVector(read_anything_root, &text_node_contents);
-
+  text_node_contents.resize(text_node_ids.size());
+  for (size_t i = 0; i < text_node_ids.size(); ++i) {
+    ui::AXNode* node = tree.GetFromId(text_node_ids[i]);
+    if (!node)
+      continue;
+    std::string value;
+    if (node->GetStringAttribute(ax::mojom::StringAttribute::kName, &value))
+      text_node_contents[i] = value;
+  }
   page_->OnEssentialContent(std::move(text_node_contents));
 }
diff --git a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.h b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.h
index 0c9d9c6..be20d4d 100644
--- a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.h
+++ b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_page_handler.h
@@ -11,6 +11,7 @@
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "ui/accessibility/ax_node_id_forward.h"
 
 namespace ui {
 struct AXTreeUpdate;
@@ -29,7 +30,10 @@
   void ShowUI() override;
 
  private:
-  void CombineTextNodesAndMakeCallback(const ui::AXTreeUpdate& update);
+  // Callback method which receives an AXTree snapshot and a list of AXNodes
+  // which correspond to nodes in the tree that contain main content.
+  void OnAXTreeDistilled(const ui::AXTreeUpdate& snapshot,
+                         const std::vector<ui::AXNodeID>& text_node_ids);
 
   mojo::Receiver<read_anything::mojom::PageHandler> receiver_;
   mojo::Remote<read_anything::mojom::Page> page_;
diff --git a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.cc b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.cc
index c139c82..a7cfd02 100644
--- a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.cc
+++ b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.cc
@@ -6,6 +6,7 @@
 
 #include "chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_constants.h"
 #include "components/vector_icons/vector_icons.h"
+#include "ui/color/color_provider.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/geometry/geometry_export.h"
 #include "ui/views/background.h"
@@ -32,7 +33,8 @@
   auto title = std::make_unique<views::Label>();
   title->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
   title->SetText(u"  sans-serif \u25BE");
-  title->SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
+  title->SetBackground(views::CreateThemedSolidBackground(
+      title.get(), ui::kColorPrimaryBackground));
   title->SetFontList(gfx::FontList({"Roboto", "Arial", "sans-serif"},
                                    gfx::Font::FontStyle::NORMAL, kFontSize,
                                    gfx::Font::Weight::NORMAL));
@@ -45,17 +47,22 @@
       views::CreateVectorImageButton(std::move(settings_callback));
   // TODO(1266555): This is placeholder text, remove for final UI.
   settings_button->SetTooltipText(u"Settings");
-  views::SetImageFromVectorIcon(settings_button.get(),
-                                vector_icons::kSettingsIcon, kIconSize,
-                                SK_ColorBLACK);
   views::InstallCircleHighlightPathGenerator(settings_button.get(),
                                              gfx::Insets(kIconCornerRadius));
 
   // Add all components to view.
-  AddChildView(std::move(settings_button));
+  settings_button_ = AddChildView(std::move(settings_button));
   AddChildView(std::move(title));
 }
 
-void ReadAnythingToolbarView::OnSettingsClicked() {}
-
 ReadAnythingToolbarView::~ReadAnythingToolbarView() = default;
+
+void ReadAnythingToolbarView::OnThemeChanged() {
+  views::View::OnThemeChanged();
+
+  views::SetImageFromVectorIcon(
+      settings_button_, vector_icons::kSettingsIcon, kIconSize,
+      GetColorProvider()->GetColor(ui::kColorPrimaryForeground));
+}
+
+void ReadAnythingToolbarView::OnSettingsClicked() {}
diff --git a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.h b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.h
index 639fca0..1183ff9d 100644
--- a/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.h
+++ b/chrome/browser/ui/webui/read_later/side_panel/read_anything/read_anything_toolbar_view.h
@@ -8,6 +8,10 @@
 #include "base/memory/weak_ptr.h"
 #include "ui/views/view.h"
 
+namespace views {
+class ImageButton;
+}
+
 // Generic View for the toolbar of the Read Anything side panel.
 class ReadAnythingToolbarView : public views::View {
  public:
@@ -15,8 +19,13 @@
   ReadAnythingToolbarView(const ReadAnythingToolbarView&) = delete;
   ~ReadAnythingToolbarView() override;
 
+  // views::View:
+  void OnThemeChanged() override;
+
  private:
   void OnSettingsClicked();
+
+  views::ImageButton* settings_button_;
   base::WeakPtrFactory<ReadAnythingToolbarView> weak_pointer_factory_{this};
 };
 
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
index b487156..2ddec01d 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -57,14 +57,8 @@
 
   // Add a load time string for the frame color to allow the tab strip to paint
   // a background color that matches the frame before any content loads.
-  const auto* browser_window =
-      BrowserWindow::FindBrowserWindowWithWebContents(web_ui->GetWebContents());
-  const auto* theme_provider =
-      browser_window ? browser_window->GetThemeProvider() : nullptr;
-  const SkColor frame_color =
-      theme_provider
-          ? theme_provider->GetColor(ThemeProperties::COLOR_FRAME_ACTIVE)
-          : SK_ColorWHITE;
+  const auto& color_provider = web_ui->GetWebContents()->GetColorProvider();
+  const SkColor frame_color = color_provider.GetColor(ui::kColorFrameActive);
   html_source->AddString("frameColor",
                          color_utils::SkColorToRgbaString(frame_color));
 
diff --git a/chrome/browser/usb/usb_policy_allowed_devices_unittest.cc b/chrome/browser/usb/usb_policy_allowed_devices_unittest.cc
index 4aa0bf82..2c1983d 100644
--- a/chrome/browser/usb/usb_policy_allowed_devices_unittest.cc
+++ b/chrome/browser/usb/usb_policy_allowed_devices_unittest.cc
@@ -9,7 +9,7 @@
 #include <utility>
 
 #include "base/containers/contains.h"
-#include "base/json/json_reader.h"
+#include "base/test/values_test_util.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/prefs/pref_service.h"
@@ -22,7 +22,8 @@
 
 namespace {
 
-using testing::UnorderedElementsAre;
+using ::base::test::ParseJson;
+using ::testing::UnorderedElementsAre;
 
 class UsbPolicyAllowedDevicesTest : public testing::Test {
  public:
@@ -54,12 +55,6 @@
   TestingProfile profile_;
 };
 
-std::unique_ptr<base::Value> ReadJson(base::StringPiece json) {
-  absl::optional<base::Value> value = base::JSONReader::Read(json);
-  EXPECT_TRUE(value);
-  return value ? base::Value::ToUniquePtrValue(std::move(*value)) : nullptr;
-}
-
 }  // namespace
 
 TEST_F(UsbPolicyAllowedDevicesTest, InitializeWithMissingPrefValue) {
@@ -100,9 +95,7 @@
 }  // namespace
 
 TEST_F(UsbPolicyAllowedDevicesTest, InitializeWithExistingPrefValue) {
-  std::unique_ptr<base::Value> pref_value = ReadJson(kPolicySetting);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(ParseJson(kPolicySetting));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -134,9 +127,7 @@
   EXPECT_TRUE(usb_policy_allowed_devices->map().empty());
 
   // Ensure that the allowed devices can be dynamically updated.
-  std::unique_ptr<base::Value> pref_value = ReadJson(kPolicySetting);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(ParseJson(kPolicySetting));
 
   const auto& map = usb_policy_allowed_devices->map();
   EXPECT_EQ(map.size(), 3ul);
@@ -158,9 +149,7 @@
 
 TEST_F(UsbPolicyAllowedDevicesTest,
        InitializeWithExistingPolicyThenRemovePolicy) {
-  std::unique_ptr<base::Value> pref_value = ReadJson(kPolicySetting);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(ParseJson(kPolicySetting));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -186,8 +175,7 @@
   EXPECT_THAT(third, UnorderedElementsAre(kYoutubeOrigin));
 
   // Ensure that the allowed devices can be removed dynamically.
-  pref_value = std::make_unique<base::Value>(base::Value::Type::LIST);
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(base::Value(base::Value::Type::LIST));
 
   EXPECT_TRUE(usb_policy_allowed_devices->map().empty());
 }
@@ -212,10 +200,8 @@
 
 TEST_F(UsbPolicyAllowedDevicesTest,
        InitializeWithExistingPrefValueContainingDuplicateDevices) {
-  std::unique_ptr<base::Value> pref_value =
-      ReadJson(kPolicySettingWithEntriesContainingDuplicateDevices);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(
+      ParseJson(kPolicySettingWithEntriesContainingDuplicateDevices));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -250,10 +236,8 @@
 }  // namespace
 
 TEST_F(UsbPolicyAllowedDevicesTest, IsDeviceAllowed) {
-  std::unique_ptr<base::Value> pref_value =
-      ReadJson(kPolicySettingWithEntriesMatchingMultipleDevices);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(
+      ParseJson(kPolicySettingWithEntriesMatchingMultipleDevices));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -298,10 +282,8 @@
 }
 
 TEST_F(UsbPolicyAllowedDevicesTest, IsDeviceAllowedForUrlsNotInPref) {
-  std::unique_ptr<base::Value> pref_value =
-      ReadJson(kPolicySettingWithEntriesMatchingMultipleDevices);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(
+      ParseJson(kPolicySettingWithEntriesMatchingMultipleDevices));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -319,10 +301,8 @@
 }
 
 TEST_F(UsbPolicyAllowedDevicesTest, IsDeviceAllowedForDeviceNotInPref) {
-  std::unique_ptr<base::Value> pref_value =
-      ReadJson(kPolicySettingWithEntriesMatchingMultipleDevices);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(
+      ParseJson(kPolicySettingWithEntriesMatchingMultipleDevices));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
@@ -354,10 +334,8 @@
 
 TEST_F(UsbPolicyAllowedDevicesTest,
        IsDeviceAllowedForUrlContainingEmbeddingOrigin) {
-  std::unique_ptr<base::Value> pref_value =
-      ReadJson(kPolicySettingWithUrlContainingEmbeddingOrigin);
-
-  SetWebUsbAllowDevicesForUrlsPrefValue(*pref_value);
+  SetWebUsbAllowDevicesForUrlsPrefValue(
+      ParseJson(kPolicySettingWithUrlContainingEmbeddingOrigin));
 
   auto usb_policy_allowed_devices = CreateUsbPolicyAllowedDevices();
 
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc
index 7d141ac..76ee3d19 100644
--- a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc
+++ b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc
@@ -81,7 +81,7 @@
 #include "chrome/browser/ash/web_applications/os_flags_system_web_app_info.h"
 #include "chrome/browser/ash/web_applications/os_settings_web_app_info.h"
 #include "chrome/browser/ash/web_applications/os_url_handler_system_web_app_info.h"
-#include "chrome/browser/ash/web_applications/personalization_app/personalization_app_info.h"
+#include "chrome/browser/ash/web_applications/personalization_app/personalization_system_app_delegate.h"
 #include "chrome/browser/ash/web_applications/print_management_web_app_info.h"
 #include "chrome/browser/ash/web_applications/projector_system_web_app_info.h"
 #include "chrome/browser/ash/web_applications/scanning_system_web_app_info.h"
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index affdd2e..a3f0a6ba0 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1648727978-ae35d05176a5ada188035bfda696ed0e46aa2f8c.profdata
+chrome-mac-arm-main-1648749546-603688d46155520fe621e77b909c9a23052a7890.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 866650c..2eef1b1 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1648727978-c8743f457c84ebc5e76859a56fd9d5e5a1814668.profdata
+chrome-mac-main-1648749546-385ebeab098551b596321f02fe430c6fc884e2e9.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 5f8dae0c..889ff0f9d 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1648737916-f5a925377e928aefb9129222e7c307cbcf8b55c3.profdata
+chrome-win32-main-1648749603-177e1ce73c30bb82ea9fde41094e1af8b76be452.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 067002da..4deacf1d 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1648737916-cbe6c9c68be139088d66bc3b318097126ab926ca.profdata
+chrome-win64-main-1648760381-511c7cb90a13b23bd4c49b9b90e54ce8a3f2b9a9.profdata
diff --git a/chrome/common/cart/commerce_hints.mojom b/chrome/common/cart/commerce_hints.mojom
index 787d4c4c..67f5bdc 100644
--- a/chrome/common/cart/commerce_hints.mojom
+++ b/chrome/common/cart/commerce_hints.mojom
@@ -15,6 +15,15 @@
   string product_id;
 };
 
+struct Heuristics {
+  // Version number of the heuristics.
+  string version_number;
+  // JSON string of hint heuristics.
+  string hint_json_data;
+  // JSON string of global heuristics.
+  string global_json_data;
+};
+
 // This service is implemented in the browser process and is used by the
 // renderer to notify the CommerceHint events.
 interface CommerceHintObserver {
@@ -40,7 +49,9 @@
   // An XMLHttpRequest is about to be sent.
   OnWillSendRequest(bool is_addtocart);
 
-  // A navigation is about to happen or has happened. Return whether
-  // we should skip collecting commerce hints on current URL or not.
-  OnNavigation(url.mojom.Url url) => (bool should_skip);
+  // A navigation is about to happen or has happened. Return whether we
+  // should skip collecting commerce hints on current domain or not, and
+  // the commerce heuristics that are applicable in this domain.
+  OnNavigation(url.mojom.Url url, string version_number)
+    => (bool should_skip, Heuristics heuristics);
 };
diff --git a/chrome/common/net/x509_certificate_model.cc b/chrome/common/net/x509_certificate_model.cc
index 5ec353e..2211397c 100644
--- a/chrome/common/net/x509_certificate_model.cc
+++ b/chrome/common/net/x509_certificate_model.cc
@@ -239,15 +239,52 @@
 std::string X509CertificateModel::HashCertSHA256() const {
   auto hash =
       crypto::SHA256Hash(net::x509_util::CryptoBufferAsSpan(cert_data_.get()));
+  return base::HexEncode(hash.data(), hash.size());
+}
+
+std::string X509CertificateModel::HashCertSHA256WithSeparators() const {
+  auto hash =
+      crypto::SHA256Hash(net::x509_util::CryptoBufferAsSpan(cert_data_.get()));
   return ProcessRawBytes(hash.data(), hash.size());
 }
 
-std::string X509CertificateModel::HashCertSHA1() const {
+std::string X509CertificateModel::HashCertSHA1WithSeparators() const {
   auto hash =
       base::SHA1HashSpan(net::x509_util::CryptoBufferAsSpan(cert_data_.get()));
   return ProcessRawBytes(hash.data(), hash.size());
 }
 
+std::string X509CertificateModel::GetTitle() const {
+  if (!nickname_.empty())
+    return nickname_;
+
+  if (!parsed_successfully_)
+    return HashCertSHA256();
+
+  if (!subject_rdns_.empty()) {
+    OptionalStringOrError common_name = FindLastNameOfType(
+        net::der::Input(net::kTypeCommonNameOid), subject_rdns_);
+    if (auto* str = absl::get_if<std::string>(&common_name); str)
+      return std::move(*str);
+    if (absl::holds_alternative<Error>(common_name))
+      return HashCertSHA256();
+
+    std::string rv;
+    if (!net::ConvertToRFC2253(subject_rdns_, &rv))
+      return HashCertSHA256();
+    return rv;
+  }
+
+  if (subject_alt_names_) {
+    if (!subject_alt_names_->dns_names.empty())
+      return std::string(subject_alt_names_->dns_names[0]);
+    if (!subject_alt_names_->rfc822_names.empty())
+      return std::string(subject_alt_names_->rfc822_names[0]);
+  }
+
+  return HashCertSHA256();
+}
+
 std::string X509CertificateModel::GetVersion() const {
   DCHECK(parsed_successfully_);
   switch (tbs_.version) {
diff --git a/chrome/common/net/x509_certificate_model.h b/chrome/common/net/x509_certificate_model.h
index 301da4a..a8aa160 100644
--- a/chrome/common/net/x509_certificate_model.h
+++ b/chrome/common/net/x509_certificate_model.h
@@ -31,14 +31,35 @@
                        std::string nickname);
   ~X509CertificateModel();
 
+  // ---------------------------------------------------------------------------
   // These methods are always safe to call even if |cert_data| could not be
   // parsed.
+
+  // Returns hex SHA256 hash of the certificate data.
   std::string HashCertSHA256() const;
-  std::string HashCertSHA1() const;
+  // Returns space-separated and line wrapped hex SHA256 hash of the
+  // certificate data.
+  std::string HashCertSHA256WithSeparators() const;
+  // Returns space-separated and line wrapped hex SHA1 hash of the certificate
+  // data.
+  std::string HashCertSHA1WithSeparators() const;
+
+  // Get something that can be used as a title for the certificate, using the
+  // following priority:
+  //   |nickname| passed to constructor
+  //   subject commonName
+  //   full subject
+  //   dnsName or email address from subjectAltNames
+  // If none of those are present, or certificate could not be parsed,
+  // the hex SHA256 hash of the certificate data will be returned.
+  std::string GetTitle() const;
+
   CRYPTO_BUFFER* cert_buffer() const { return cert_data_.get(); }
   bool is_valid() const { return parsed_successfully_; }
 
+  // ---------------------------------------------------------------------------
   // The rest of the methods should only be called if |is_valid()| returns true.
+
   std::string GetVersion() const;
   std::string GetSerialNumberHexified() const;
 
diff --git a/chrome/common/net/x509_certificate_model_unittest.cc b/chrome/common/net/x509_certificate_model_unittest.cc
index d01b155..d6bec17 100644
--- a/chrome/common/net/x509_certificate_model_unittest.cc
+++ b/chrome/common/net/x509_certificate_model_unittest.cc
@@ -25,9 +25,16 @@
   EXPECT_EQ(
       "1D 7A 36 3C E1 24 30 88 1E C5 6C 9C F1 40 9C 49\nC4 91 04 36 18 E5 98 "
       "C3 56 E2 95 90 40 87 2F 5A",
-      model.HashCertSHA256());
+      model.HashCertSHA256WithSeparators());
   EXPECT_EQ("E9 B3 96 D2 DD DF FD B3 73 BF 2C 6A D0 73 69 6A\nA2 5B 4F 68",
-            model.HashCertSHA1());
+            model.HashCertSHA1WithSeparators());
+  if (GetParam().empty()) {
+    EXPECT_EQ(
+        "1D7A363CE12430881EC56C9CF1409C49C491043618E598C356E2959040872F5A",
+        model.GetTitle());
+  } else {
+    EXPECT_EQ(GetParam(), model.GetTitle());
+  }
   EXPECT_FALSE(model.is_valid());
 }
 
@@ -40,14 +47,15 @@
   EXPECT_EQ(
       "F6 41 C3 6C FE F4 9B C0 71 35 9E CF 88 EE D9 31\n7B 73 8B 59 89 41 6A "
       "D4 01 72 0C 0A 4E 2E 63 52",
-      model.HashCertSHA256());
+      model.HashCertSHA256WithSeparators());
   EXPECT_EQ("40 50 62 E5 BE FD E4 AF 97 E9 38 2A F1 6C C8 7C\n8F B7 C4 E2",
-            model.HashCertSHA1());
+            model.HashCertSHA1WithSeparators());
   ASSERT_TRUE(model.is_valid());
 
   EXPECT_EQ("3", model.GetVersion());
   EXPECT_EQ("2F:DF:BC:F6:AE:91:52:6D:0F:9A:A3:DF:40:34:3E:9A",
             model.GetSerialNumberHexified());
+
   EXPECT_EQ(OptionalStringOrError("Thawte SGC CA"),
             model.GetIssuerCommonName());
   EXPECT_EQ(OptionalStringOrError("Thawte Consulting (Pty) Ltd."),
@@ -59,6 +67,11 @@
   EXPECT_EQ(OptionalStringOrError("Google Inc"), model.GetSubjectOrgName());
   EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgUnitName());
 
+  if (GetParam().empty())
+    EXPECT_EQ("www.google.com", model.GetTitle());
+  else
+    EXPECT_EQ(GetParam(), model.GetTitle());
+
   EXPECT_EQ(
       OptionalStringOrError(
           "CN = Thawte SGC CA\nO = Thawte Consulting (Pty) Ltd.\nC = ZA\n"),
@@ -102,6 +115,11 @@
             model.GetSubjectOrgName());
   EXPECT_EQ(OptionalStringOrError("Security"), model.GetSubjectOrgUnitName());
 
+  if (GetParam().empty())
+    EXPECT_EQ("New Dream Network Certificate Authority", model.GetTitle());
+  else
+    EXPECT_EQ(GetParam(), model.GetTitle());
+
   EXPECT_EQ(OptionalStringOrError(
                 "emailAddress = support@dreamhost.com\nCN = New Dream Network "
                 "Certificate "
@@ -127,6 +145,10 @@
   ASSERT_TRUE(cert);
   x509_certificate_model::X509CertificateModel model(
       bssl::UpRef(cert->cert_buffer()), GetParam());
+  if (GetParam().empty())
+    EXPECT_EQ("xn--wgv71a119e.com", model.GetTitle());
+  else
+    EXPECT_EQ(GetParam(), model.GetTitle());
   EXPECT_EQ(OptionalStringOrError("xn--wgv71a119e.com"),
             model.GetIssuerCommonName());
   EXPECT_EQ(OptionalStringOrError("xn--wgv71a119e.com"),
@@ -159,8 +181,12 @@
   builder->SetSubject(kSubject);
 
   x509_certificate_model::X509CertificateModel model(
-      bssl::UpRef(builder->GetCertBuffer()), "");
+      bssl::UpRef(builder->GetCertBuffer()), GetParam());
   ASSERT_TRUE(model.is_valid());
+  if (GetParam().empty())
+    EXPECT_EQ(model.HashCertSHA256(), model.GetTitle());
+  else
+    EXPECT_EQ(GetParam(), model.GetTitle());
   EXPECT_EQ(OptionalStringOrError(Error()), model.GetSubjectCommonName());
   EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgName());
   EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgUnitName());
@@ -178,7 +204,7 @@
   builder->SetSubject(kSubject);
 
   x509_certificate_model::X509CertificateModel model(
-      bssl::UpRef(builder->GetCertBuffer()), "");
+      bssl::UpRef(builder->GetCertBuffer()), GetParam());
   EXPECT_FALSE(model.is_valid());
 }
 
@@ -192,13 +218,33 @@
   const uint8_t kSubject[] = {0x30, 0x00};
   builder->SetSubject(kSubject);
 
-  x509_certificate_model::X509CertificateModel model(
-      bssl::UpRef(builder->GetCertBuffer()), "");
-  ASSERT_TRUE(model.is_valid());
-  EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectCommonName());
-  EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgName());
-  EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgUnitName());
-  EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectName());
+  {
+    x509_certificate_model::X509CertificateModel model(
+        bssl::UpRef(builder->GetCertBuffer()), GetParam());
+    ASSERT_TRUE(model.is_valid());
+    if (GetParam().empty())
+      EXPECT_EQ(model.HashCertSHA256(), model.GetTitle());
+    else
+      EXPECT_EQ(GetParam(), model.GetTitle());
+    EXPECT_EQ(OptionalStringOrError(NotPresent()),
+              model.GetSubjectCommonName());
+    EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectOrgName());
+    EXPECT_EQ(OptionalStringOrError(NotPresent()),
+              model.GetSubjectOrgUnitName());
+    EXPECT_EQ(OptionalStringOrError(NotPresent()), model.GetSubjectName());
+  }
+  {
+    // If subject is empty but subjectAltNames is present, GetTitle checks
+    // there.
+    builder->SetSubjectAltNames({"foo.com", "bar.com"}, {});
+    x509_certificate_model::X509CertificateModel model(
+        bssl::UpRef(builder->GetCertBuffer()), GetParam());
+    ASSERT_TRUE(model.is_valid());
+    if (GetParam().empty())
+      EXPECT_EQ("foo.com", model.GetTitle());
+    else
+      EXPECT_EQ(GetParam(), model.GetTitle());
+  }
 }
 
 INSTANTIATE_TEST_SUITE_P(All,
diff --git a/chrome/renderer/cart/commerce_hint_agent.cc b/chrome/renderer/cart/commerce_hint_agent.cc
index 0db35e9..286c5069 100644
--- a/chrome/renderer/cart/commerce_hint_agent.cc
+++ b/chrome/renderer/cart/commerce_hint_agent.cc
@@ -422,12 +422,12 @@
   static re2::RE2::Options options;
   options.set_case_sensitive(false);
   if (cart_string_map.find(domain) == cart_string_map.end()) {
-    auto* pattern_from_component =
+    auto* global_pattern_from_component =
         commerce_heuristics::CommerceHeuristicsData::GetInstance()
             .GetCartPageURLPattern();
-    if (pattern_from_component &&
+    if (global_pattern_from_component &&
         kCartPattern.Get() == kCartPattern.default_value) {
-      return pattern_from_component;
+      return global_pattern_from_component;
     }
     static base::NoDestructor<re2::RE2> instance(kCartPattern.Get(), options);
     return instance.get();
@@ -456,12 +456,12 @@
   static re2::RE2::Options options;
   options.set_case_sensitive(false);
   if (checkout_string_map.find(domain) == checkout_string_map.end()) {
-    auto* pattern_from_component =
+    auto* global_pattern_from_component =
         commerce_heuristics::CommerceHeuristicsData::GetInstance()
             .GetCheckoutPageURLPattern();
-    if (pattern_from_component &&
+    if (global_pattern_from_component &&
         kCheckoutPattern.Get() == kCheckoutPattern.default_value) {
-      return pattern_from_component;
+      return global_pattern_from_component;
     }
     static base::NoDestructor<re2::RE2> instance(kCheckoutPattern.Get(),
                                                  options);
@@ -724,6 +724,8 @@
 
 }  // namespace
 
+using commerce_heuristics::CommerceHeuristicsData;
+
 CommerceHintAgent::CommerceHintAgent(content::RenderFrame* render_frame)
     : content::RenderFrameObserver(render_frame),
       content::RenderFrameObserverTracker<CommerceHintAgent>(render_frame) {
@@ -963,9 +965,8 @@
 }
 
 void CommerceHintAgent::WillSendRequest(const blink::WebURLRequest& request) {
-  if (should_skip_) {
+  if (should_skip_)
     return;
-  }
   blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
   const GURL& url(frame->GetDocument().Url());
   if (!url.SchemeIsHTTPOrHTTPS())
@@ -1007,12 +1008,13 @@
   mojo::Remote<mojom::CommerceHintObserver> observer =
       GetObserver(render_frame());
   if (!commerce::kOptimizeRendererSignal.Get()) {
-    DidStartNavigationCallback(url, std::move(observer), false);
+    DidStartNavigationCallback(url, std::move(observer), false,
+                               mojom::Heuristics::New());
     return;
   }
   auto* observer_ptr = observer.get();
   observer_ptr->OnNavigation(
-      url,
+      url, CommerceHeuristicsData::GetInstance().GetVersion(),
       base::BindOnce(&CommerceHintAgent::DidStartNavigationCallback,
                      weak_factory_.GetWeakPtr(), url, std::move(observer)));
 }
@@ -1020,15 +1022,28 @@
 void CommerceHintAgent::DidStartNavigationCallback(
     const GURL& url,
     mojo::Remote<mojom::CommerceHintObserver> observer,
-    bool should_skip) {
+    bool should_skip,
+    mojom::HeuristicsPtr heuristics) {
   should_skip_ = should_skip;
+  if (should_skip)
+    return;
+  if (!heuristics->version_number.empty() &&
+      heuristics->version_number !=
+          CommerceHeuristicsData::GetInstance().GetVersion()) {
+    bool is_populated =
+        CommerceHeuristicsData::GetInstance().PopulateDataFromComponent(
+            heuristics->hint_json_data, heuristics->global_json_data,
+            /*product_id_json_data*/ "", /*cart_extraction_script*/ "");
+    DCHECK(is_populated);
+    CommerceHeuristicsData::GetInstance().UpdateVersion(
+        base::Version(heuristics->version_number));
+  }
 }
 
 void CommerceHintAgent::DidCommitProvisionalLoad(
     ui::PageTransition transition) {
-  if (should_skip_) {
+  if (should_skip_)
     return;
-  }
   if (!starting_url_.is_valid())
     return;
   if (IsAddToCart(starting_url_.PathForRequestPiece())) {
@@ -1055,15 +1070,18 @@
   const GURL& url(frame->GetDocument().Url());
   if (!url.SchemeIs(url::kHttpsScheme))
     return;
+  has_finished_loading_ = true;
+  extraction_count_ = 0;
   mojo::Remote<mojom::CommerceHintObserver> observer =
       GetObserver(render_frame());
   if (!commerce::kOptimizeRendererSignal.Get()) {
-    DidFinishLoadCallback(url, std::move(observer), false);
+    DidFinishLoadCallback(url, std::move(observer), false,
+                          mojom::Heuristics::New());
     return;
   }
   auto* observer_ptr = observer.get();
   observer_ptr->OnNavigation(
-      url,
+      url, CommerceHeuristicsData::GetInstance().GetVersion(),
       base::BindOnce(&CommerceHintAgent::DidFinishLoadCallback,
                      weak_factory_.GetWeakPtr(), url, std::move(observer)));
 }
@@ -1071,13 +1089,22 @@
 void CommerceHintAgent::DidFinishLoadCallback(
     const GURL& url,
     mojo::Remote<mojom::CommerceHintObserver> observer,
-    bool should_skip) {
+    bool should_skip,
+    mojom::HeuristicsPtr heuristics) {
   should_skip_ = should_skip;
-  if (should_skip_) {
+  if (should_skip_)
     return;
+  if (!heuristics->version_number.empty() &&
+      heuristics->version_number !=
+          CommerceHeuristicsData::GetInstance().GetVersion()) {
+    bool is_populated =
+        CommerceHeuristicsData::GetInstance().PopulateDataFromComponent(
+            heuristics->hint_json_data, heuristics->global_json_data,
+            /*product_id_json_data*/ "", /*cart_extraction_script*/ "");
+    DCHECK(is_populated);
+    CommerceHeuristicsData::GetInstance().UpdateVersion(
+        base::Version(heuristics->version_number));
   }
-  has_finished_loading_ = true;
-  extraction_count_ = 0;
   // Some URLs might satisfy the patterns for both cart and checkout (e.g.
   // https://www.foo.com/cart/checkout). In those cases, cart has higher
   // priority.
@@ -1093,9 +1120,8 @@
 }
 
 void CommerceHintAgent::WillSubmitForm(const blink::WebFormElement& form) {
-  if (should_skip_) {
+  if (should_skip_)
     return;
-  }
   blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
   const GURL url(frame->GetDocument().Url());
   if (!url.SchemeIsHTTPOrHTTPS())
@@ -1115,9 +1141,8 @@
 
 // TODO(crbug/1164236): use MutationObserver on cart instead.
 void CommerceHintAgent::ExtractCartFromCurrentFrame() {
-  if (should_skip_) {
+  if (should_skip_)
     return;
-  }
   if (!has_finished_loading_)
     return;
   blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
diff --git a/chrome/renderer/cart/commerce_hint_agent.h b/chrome/renderer/cart/commerce_hint_agent.h
index 85be0bdf..2e401eac 100644
--- a/chrome/renderer/cart/commerce_hint_agent.h
+++ b/chrome/renderer/cart/commerce_hint_agent.h
@@ -101,15 +101,18 @@
 
   // Callbacks with business logics for handling navigation-related observer
   // calls. These callbacks are triggered when navigation-related signals are
-  // captured and carry an extra bool |should_act| indicating whether commerce
-  // hint signals should be collected on current URL or not.
+  // captured and carry (1) a bool `should_skip` indicating whether commerce
+  // hint signals should be collected on current URL or not. (2) `heuristics`
+  // carrying commerce heuristics that are applicable in current domain.
   void DidStartNavigationCallback(
       const GURL& url,
       mojo::Remote<mojom::CommerceHintObserver> observer,
-      bool should_skip);
+      bool should_skip,
+      mojom::HeuristicsPtr heuristics);
   void DidFinishLoadCallback(const GURL& url,
                              mojo::Remote<mojom::CommerceHintObserver> observer,
-                             bool should_skip);
+                             bool should_skip,
+                             mojom::HeuristicsPtr heuristics);
 };
 
 }  // namespace cart
diff --git a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
index 01d75af6..7894d5d 100644
--- a/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
+++ b/chrome/renderer/cart/commerce_hint_agent_browsertest.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/cart/cart_db_content.pb.h"
 #include "chrome/browser/cart/cart_service.h"
+#include "chrome/browser/cart/commerce_hint_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
 #include "chrome/browser/persisted_state_db/profile_proto_db.h"
@@ -42,6 +43,7 @@
 #include "chrome/test/base/android/android_browser_test.h"
 #else
 #include "chrome/test/base/in_process_browser_test.h"
+#include "components/commerce/core/commerce_heuristics_data.h"
 #endif
 
 namespace {
@@ -191,6 +193,8 @@
     PlatformBrowserTest::SetUpOnMainThread();
     Profile* profile =
         Profile::FromBrowserContext(web_contents()->GetBrowserContext());
+    commerce_hint_service_ =
+        cart::CommerceHintService::FromWebContents(web_contents());
     service_ = CartServiceFactory::GetForProfile(profile);
     auto* identity_manager = IdentityManagerFactory::GetForProfile(profile);
     ASSERT_TRUE(identity_manager);
@@ -414,6 +418,7 @@
 
   base::test::ScopedFeatureList scoped_feature_list_;
   CartService* service_;
+  cart::CommerceHintService* commerce_hint_service_;
   net::EmbeddedTestServer https_server_{net::EmbeddedTestServer::TYPE_HTTPS};
   std::unique_ptr<ukm::TestAutoSetUkmRecorder> ukm_recorder_;
   bool satisfied_;
@@ -478,6 +483,65 @@
 }
 #endif  // !BUILDFLAG(IS_CHROMEOS)
 
+// Flaky on Windows: https://crbug.com/1300332.
+#if BUILDFLAG(IS_WIN)
+#define MAYBE_VisitCart_GeneralPattern_FromComponent \
+  DISABLED_VisitCart_GeneralPattern_FromComponent
+#else
+#define MAYBE_VisitCart_GeneralPattern_FromComponent \
+  VisitCart_GeneralPattern_FromComponent
+#endif
+IN_PROC_BROWSER_TEST_F(CommerceHintAgentTest,
+                       MAYBE_VisitCart_GeneralPattern_FromComponent) {
+  bool is_populated =
+      commerce_hint_service_->InitializeCommerceHeuristicsForTesting(
+          base::Version("0.0.0.1"), "{}", R"###(
+          {
+            "cart_page_url_regex": "(special|lol)"
+          }
+      )###",
+          "", "");
+  DCHECK(is_populated);
+
+  NavigateToURL("https://www.guitarcenter.com/special.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 1);
+
+  NavigateToURL("https://www.guitarcenter.com/cart.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 1);
+
+  NavigateToURL("https://www.guitarcenter.com/lol.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 2);
+}
+
+IN_PROC_BROWSER_TEST_F(CommerceHintAgentTest,
+                       VisitCart_PerDomain_FromComponent) {
+  bool is_populated =
+      commerce_hint_service_->InitializeCommerceHeuristicsForTesting(
+          base::Version("0.0.0.1"), R"###(
+          {
+            "guitarcenter.com": {
+              "cart_url_regex" : "unique|laugh"
+            }
+          }
+      )###",
+          R"###(
+          {
+            "cart_page_url_regex": "(special|lol)"
+          }
+      )###",
+          "", "");
+  DCHECK(is_populated);
+
+  NavigateToURL("https://www.guitarcenter.com/unique.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 1);
+
+  NavigateToURL("https://www.guitarcenter.com/special.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 1);
+
+  NavigateToURL("https://www.guitarcenter.com/laugh.html");
+  WaitForUmaCount("Commerce.Carts.VisitCart", 2);
+}
+
 IN_PROC_BROWSER_TEST_F(CommerceHintAgentTest, ExtractCart) {
   // This page has three products.
   NavigateToURL("https://www.guitarcenter.com/cart.html");
@@ -668,7 +732,9 @@
 // nothing is specified in AddHintForTesting(), and the real hints are not
 // downloaded, all the URLs are considered non-shopping.
 IN_PROC_BROWSER_TEST_F(CommerceHintCacaoTest, Rejected) {
-  NavigateToURL("https://www.guitarcenter.com/");
+  NavigateToURL("https://www.guitarcenter.com/cart");
+  WaitForCartCount(kEmptyExpected);
+
   SendXHR("/add-to-cart", "product: 123");
   base::PlatformThread::Sleep(TestTimeouts::tiny_timeout() * 30);
   WaitForCartCount(kEmptyExpected);
@@ -1202,8 +1268,7 @@
   void SetUpInProcessBrowserTestFixture() override {
     scoped_feature_list_.InitWithFeaturesAndParameters(
         {{ntp_features::kNtpChromeCartModule,
-          {{"optimize-renderer-signal", "true"},
-           {"cart-extraction-gap-time", "0s"}}},
+          {{"cart-extraction-gap-time", "0s"}}},
          {optimization_guide::features::kOptimizationHints, {{}}}},
         {});
   }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index c8c9f340..ff64a68 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1224,6 +1224,7 @@
       "//components/cast_channel",
       "//components/cbor",
       "//components/certificate_transparency",
+      "//components/commerce/core:commerce_heuristics_data",
       "//components/commerce/core:feature_list",
       "//components/constrained_window",
       "//components/content_settings/browser",
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 6eb33a2..cdcc963c 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -273,32 +273,12 @@
         "$root_gen_dir/chrome/test/data/webui/nearby_share/shared/nearby_page_template_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/nearby_share/shared/nearby_visibility_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/add_users_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/ambient_mode_page_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/ambient_mode_photos_page_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/apps_page_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/app_details_item_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/app_detail_view_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/app_item_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/app_management_page_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/arc_detail_view_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/chrome_app_detail_view_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/dark_mode_subpage_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/dom_switch_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/main_view_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/pin_to_shelf_item_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/pwa_detail_view_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/supported_links_item_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/toggle_row_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/managed_apps_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_plugin_vm_browser_proxy.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/uninstall_button_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/crostini_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/crostini_extra_containers_subpage_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_test_utils.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/cups_printer_entry_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/date_time_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/device_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_receive_manager.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_quick_unlock_private.m.js",
@@ -307,11 +287,8 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_users_private.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fake_user_action_recorder.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/fingerprint_browsertest_chromeos.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/google_assistant_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/guest_os_shared_paths_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/guest_os_shared_usb_devices_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/input_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/onc_mojo_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/kerberos_accounts_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/kerberos_page_test.m.js",
@@ -321,7 +298,6 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_edit_dictionary_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_files_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_languages_page_v2_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/app_notifications_subpage_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/settings_scheduler_slider_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_settings_main_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_settings_ui_test.m.js",
@@ -336,16 +312,13 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_search_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_settings_search_box_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_settings_page_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/people_page_account_manager_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/people_page_change_picture_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/personalization_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/quick_unlock_authenticate_browsertest_chromeos.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/smart_inputs_page_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/smart_privacy_subpage_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/smb_shares_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/os_a11y_page_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/reducers_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/search_subpage_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/search_engine_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/switch_access_action_assignment_dialog_test.m.js",
@@ -365,8 +338,6 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_wallpaper_browser_proxy.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/tether_connection_dialog_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/text_to_speech_subpage_tests.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/timezone_selector_test.m.js",
-        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/timezone_subpage_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/tts_subpage_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/user_page_tests.m.js",
       ]
diff --git a/chrome/test/data/webui/settings/chromeos/BUILD.gn b/chrome/test/data/webui/settings/chromeos/BUILD.gn
index 90c00e6a..758d022 100644
--- a/chrome/test/data/webui/settings/chromeos/BUILD.gn
+++ b/chrome/test/data/webui/settings/chromeos/BUILD.gn
@@ -33,41 +33,12 @@
 js_modulizer("modulize") {
   input_files = [
     "add_users_tests.js",
-    "ambient_mode_page_test.js",
-    "ambient_mode_photos_page_test.js",
-    "apps_page_test.js",
-    "app_notifications_subpage_tests.js",
-    "app_management/app_details_item_test.js",
-    "app_management/app_detail_view_test.js",
-    "app_management/app_item_test.js",
-    "app_management/app_management_page_tests.js",
-    "app_management/chrome_app_detail_view_test.js",
-    "app_management/arc_detail_view_test.js",
-    "app_management/borealis_detail_view_test.js",
-    "app_management/dom_switch_test.js",
-    "app_management/main_view_test.js",
-    "app_management/pwa_detail_view_test.js",
-    "app_management/pin_to_shelf_item_test.js",
-    "app_management/plugin_vm_detail_view_test.js",
-    "app_management/managed_apps_test.js",
-    "app_management/reducers_test.js",
-    "app_management/resize_lock_item_test.js",
-    "app_management/supported_links_item_test.js",
-    "app_management/file_handling_item_test.js",
-    "app_management/test_plugin_vm_browser_proxy.js",
-    "app_management/toggle_row_test.js",
-    "app_management/test_store.js",
-    "app_management/test_util.js",
-    "app_management/uninstall_button_test.js",
-    "change_dictation_locale_dialog_test.js",
     "crostini_page_test.js",
     "crostini_extra_containers_subpage_test.js",
     "cups_printer_entry_tests.js",
     "cups_printer_landing_page_tests.js",
     "cups_printer_page_tests.js",
     "cups_printer_test_utils.js",
-    "dark_mode_subpage_tests.js",
-    "date_time_page_tests.js",
     "device_page_tests.js",
     "fake_quick_unlock_private.js",
     "fake_quick_unlock_uma.js",
@@ -77,14 +48,10 @@
     "fake_user_action_recorder.js",
     "fake_users_private.js",
     "fingerprint_browsertest_chromeos.js",
-    "google_assistant_page_test.js",
     "guest_os_shared_paths_test.js",
     "guest_os_shared_usb_devices_test.js",
-    "input_method_options_page_test.js",
-    "input_page_test.js",
     "kerberos_accounts_test.js",
     "kerberos_page_test.js",
-    "keyboard_shortcut_banner_test.js",
     "manage_accessibility_page_tests.js",
     "onc_mojo_test.js",
     "os_a11y_page_tests.js",
@@ -104,12 +71,10 @@
     "os_settings_ui_test.js",
     "os_settings_ui_test_2.js",
     "os_sync_controls_test.js",
-    "parental_controls_page_test.js",
     "people_page_account_manager_test.js",
     "people_page_change_picture_test.js",
     "quick_unlock_authenticate_browsertest_chromeos.js",
     "lock_screen_tests.js",
-    "personalization_page_test.js",
     "search_subpage_test.js",
     "search_engine_test.js",
     "settings_scheduler_slider_test.js",
@@ -122,7 +87,6 @@
     "switch_access_subpage_tests.js",
     "test_about_page_browser_proxy_chromeos.js",
     "test_crostini_browser_proxy.js",
-    "test_android_apps_browser_proxy.js",
     "test_cups_printers_browser_proxy.js",
     "test_device_name_browser_proxy.js",
     "test_guest_os_browser_proxy.js",
@@ -136,8 +100,6 @@
     "test_wallpaper_browser_proxy.js",
     "tether_connection_dialog_test.js",
     "text_to_speech_subpage_tests.js",
-    "timezone_selector_test.js",
-    "timezone_subpage_test.js",
     "tts_subpage_test.js",
     "user_page_tests.js",
   ]
diff --git a/chrome/test/data/webui/settings/chromeos/ambient_mode_page_test.js b/chrome/test/data/webui/settings/chromeos/ambient_mode_page_test.js
index 045f078..1310dc3 100644
--- a/chrome/test/data/webui/settings/chromeos/ambient_mode_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/ambient_mode_page_test.js
@@ -2,19 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {AmbientModeBrowserProxyImpl, AmbientModeTemperatureUnit, AmbientModeTopicSource, CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {waitAfterNextRender} from 'chrome://test/test_util.js';
 
-// #import {AmbientModeTopicSource, AmbientModeTemperatureUnit, AmbientModeBrowserProxyImpl, CrSettingsPrefs, routes, Router} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestBrowserProxy} from '../../test_browser_proxy.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+import {TestBrowserProxy} from '../../test_browser_proxy.js';
 
 /**
- * @implements {settings.AmbientModeBrowserProxy}
+ * @implements {AmbientModeBrowserProxy}
  */
 class TestAmbientModeBrowserProxy extends TestBrowserProxy {
   constructor() {
@@ -58,7 +55,7 @@
 
   setup(function() {
     browserProxy = new TestAmbientModeBrowserProxy();
-    settings.AmbientModeBrowserProxyImpl.instance_ = browserProxy;
+    AmbientModeBrowserProxyImpl.instance_ = browserProxy;
 
     PolymerTest.clearBody();
 
@@ -74,13 +71,13 @@
       };
 
       document.body.appendChild(ambientModePage);
-      Polymer.dom.flush();
+      flush();
     });
   });
 
   teardown(function() {
     ambientModePage.remove();
-    settings.Router.getInstance().resetRouteForTesting();
+    Router.getInstance().resetRouteForTesting();
   });
 
   test('toggleAmbientMode', () => {
@@ -95,7 +92,7 @@
 
     // Click the button will toggle the pref value.
     button.click();
-    Polymer.dom.flush();
+    flush();
     const enabled_toggled =
         ambientModePage.getPref('settings.ambient_mode.enabled.value');
     assertEquals(enabled_toggled, button.checked);
@@ -103,7 +100,7 @@
 
     // Click again will toggle the pref value.
     button.click();
-    Polymer.dom.flush();
+    flush();
     const enabled_toggled_twice =
         ambientModePage.getPref('settings.ambient_mode.enabled.value');
     assertEquals(enabled_toggled_twice, button.checked);
@@ -137,7 +134,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     // Spinner is not active and not visible.
     assertFalse(spinner.active);
@@ -160,7 +157,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const topicSourceList = ambientModePage.$$('topic-source-list');
     const ironList = topicSourceList.$$('iron-list');
@@ -180,7 +177,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const topicSourceList = ambientModePage.$$('topic-source-list');
     const ironList = topicSourceList.$$('iron-list');
@@ -200,7 +197,7 @@
     assertEquals(1, showAlbumEventCalls);
 
     // Should navigate to the ambient-mode/photos?topic-source=0 subpage.
-    const router = settings.Router.getInstance();
+    const router = Router.getInstance();
     assertEquals('/ambientMode/photos', router.getCurrentRoute().path);
     assertEquals('topicSource=0', router.getQueryParameters().toString());
   });
@@ -208,8 +205,7 @@
   test('Deep link to topic sources', async () => {
     const params = new URLSearchParams;
     params.append('settingId', '502');
-    settings.Router.getInstance().navigateTo(
-        settings.routes.AMBIENT_MODE, params);
+    Router.getInstance().navigateTo(routes.AMBIENT_MODE, params);
 
     // Select the google photos topic source.
     cr.webUIListenerCallback('topic-source-changed', {
@@ -219,11 +215,11 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const deepLinkElement =
         ambientModePage.$$('topic-source-list').$$('topic-source-item');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Topic sources row should be focused for settingId=502.');
@@ -235,7 +231,7 @@
       'topicSource': AmbientModeTopicSource.GOOGLE_PHOTOS,
       'hasAlbums': true
     });
-    Polymer.dom.flush();
+    flush();
 
     // When |selectedTemperatureUnit_| is invalid the radio buttons is not
     // visible. This is the initial state.
@@ -246,7 +242,7 @@
     // visible and enabled.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     radioGroup = ambientModePage.$$('#weatherDiv cr-radio-group');
     assertTrue(!!radioGroup);
@@ -262,7 +258,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const celsiusButton = ambientModePage.$$('cr-radio-button[name=celsius]');
     const fahrenheitButton =
@@ -309,7 +305,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const celsiusButton = ambientModePage.$$('cr-radio-button[name=celsius]');
 
@@ -329,7 +325,7 @@
     // Select celsius as the initial temperature unit.
     cr.webUIListenerCallback(
         'temperature-unit-changed', AmbientModeTemperatureUnit.CELSIUS);
-    Polymer.dom.flush();
+    flush();
 
     const button = ambientModePage.$$('#ambientModeEnable');
     assertTrue(!!button);
@@ -349,7 +345,7 @@
 
     // Click the button will toggle the pref value.
     button.click();
-    Polymer.dom.flush();
+    flush();
     enabled = ambientModePage.getPref('settings.ambient_mode.enabled.value');
     assertFalse(enabled);
     assertEquals(enabled, button.checked);
diff --git a/chrome/test/data/webui/settings/chromeos/ambient_mode_photos_page_test.js b/chrome/test/data/webui/settings/chromeos/ambient_mode_photos_page_test.js
index aa3b4fa..1c849df 100644
--- a/chrome/test/data/webui/settings/chromeos/ambient_mode_photos_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/ambient_mode_photos_page_test.js
@@ -2,18 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {AmbientModeBrowserProxyImpl, AmbientModeTopicSource} from 'chrome://os-settings/chromeos/os_settings.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {waitAfterNextRender} from 'chrome://test/test_util.js';
 
-// #import {AmbientModeTopicSource, AmbientModeBrowserProxyImpl} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestBrowserProxy} from '../../test_browser_proxy.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+import {TestBrowserProxy} from '../../test_browser_proxy.js';
 
 /**
- * @implements {settings.AmbientModeBrowserProxy}
+ * @implements {AmbientModeBrowserProxy}
  */
 class TestAmbientModeBrowserProxy extends TestBrowserProxy {
   constructor() {
@@ -50,13 +47,13 @@
 
   setup(function() {
     browserProxy = new TestAmbientModeBrowserProxy();
-    settings.AmbientModeBrowserProxyImpl.instance_ = browserProxy;
+    AmbientModeBrowserProxyImpl.instance_ = browserProxy;
     PolymerTest.clearBody();
 
     ambientModePhotosPage =
         document.createElement('settings-ambient-mode-photos-page');
     document.body.appendChild(ambientModePhotosPage);
-    Polymer.dom.flush();
+    flush();
   });
 
   teardown(function() {
@@ -121,7 +118,7 @@
   function displayPhotosPage_(albums, topicSource) {
     ambientModePhotosPage.albums = albums;
     ambientModePhotosPage.topicSource = topicSource;
-    Polymer.dom.flush();
+    flush();
   }
 
   /**
@@ -401,10 +398,10 @@
     const image1 = album1.$$('#image');
     image1.click();
     assertTrue(album1.checked);
-    Polymer.dom.flush();
+    flush();
 
     const artAlbumDialog = ambientModePhotosPage.$$('art-album-dialog');
-    await test_util.waitAfterNextRender(artAlbumDialog);
+    await waitAfterNextRender(artAlbumDialog);
     assertTrue(artAlbumDialog.$$('#dialog').open);
   });
 
@@ -856,13 +853,13 @@
         'There shouldn\'t be a tooltip for non-overflowing text.');
 
     getTitleElement_(0).text = createRandomString_(300);
-    Polymer.dom.flush();
+    flush();
     assertTrue(
         isTooltipAvailable_(getTitleElement_(0)),
         'There should be a tooltip for overflowing text.');
 
     getTitleElement_(0).text = createRandomString_(1);
-    Polymer.dom.flush();
+    flush();
     assertFalse(
         isTooltipAvailable_(getTitleElement_(0)),
         'There shouldn\'t be a tooltip for non-overflowing text.');
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/app_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/app_detail_view_test.js
index 13de9a7..f6537b3 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/app_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/app_detail_view_test.js
@@ -2,16 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, getPermissionValueBool, PageType, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf, isHidden, getPermissionItemByType, getPermissionCrToggleByType} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody} from './test_util.js';
+
 suite('<app-management-app-detail-view>', () => {
   let appDetailView;
   let fakeHandler;
@@ -26,8 +21,7 @@
 
     // Add an app, and make it the currently selected app.
     arcApp = await fakeHandler.addApp('app1_id', arcOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(arcApp.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(arcApp.id));
 
     appDetailView = document.createElement('app-management-app-detail-view');
 
@@ -37,7 +31,7 @@
 
   test('Change selected app', async () => {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         appDetailView.app_.id);
     assertEquals(arcApp.id, appDetailView.app_.id);
     assertTrue(!!appDetailView.$$('app-management-arc-detail-view'));
@@ -45,12 +39,11 @@
     const pwaOptions = {type: appManagement.mojom.AppType.kWeb};
     // Add an second pwa app, and make it the currently selected app.
     const pwaApp = await fakeHandler.addApp('app2_id', pwaOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(pwaApp.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(pwaApp.id));
     await fakeHandler.flushPipesForTesting();
 
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         appDetailView.app_.id);
     assertEquals(pwaApp.id, appDetailView.app_.id);
     assertFalse(!!appDetailView.$$('app-management-arc-detail-view'));
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/app_details_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/app_details_item_test.js
index 8968cb1c..2966e1cf 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/app_details_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/app_details_item_test.js
@@ -2,13 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {AppManagementStore, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+import {flushTasks} from 'chrome://test/test_util.js';
 
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, addApp} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHidden} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
+import {replaceBody, replaceStore, setupFakeHandler} from './test_util.js';
 
 suite('<app-management-app-details-item>', () => {
   let appDetailsItem;
@@ -21,7 +18,7 @@
     appDetailsItem = document.createElement('app-management-app-details-item');
 
     replaceBody(appDetailsItem);
-    test_util.flushTasks();
+    flushTasks();
   });
 
   test('PWA type', async function() {
@@ -33,19 +30,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -61,19 +56,17 @@
     // Add Android app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -89,19 +82,17 @@
     // Add Chrome app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -117,19 +108,17 @@
     // Add Chrome app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -145,19 +134,17 @@
     // Add Chrome app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -172,19 +159,17 @@
     // Add System app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -199,19 +184,17 @@
     // Add System app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#type').innerText.trim(),
@@ -227,19 +210,17 @@
     // Add Chrome app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#version').innerText.trim(),
@@ -255,19 +236,17 @@
     // Add Android app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     appDetailsItem.app = app;
 
     replaceBody(appDetailsItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         appDetailsItem.shadowRoot.querySelector('#version').innerText.trim(),
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/app_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/app_item_test.js
index 1de8ec5a..63a0271f 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/app_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/app_item_test.js
@@ -2,17 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {FakePageHandler} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {replaceBody} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// #import {Router} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import {FakePageHandler} from 'chrome://os-settings/chromeos/os_settings.js';
+import {replaceBody} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+import {Router} from 'chrome://os-settings/chromeos/os_settings.js';
+
 suite('<app-management-app-item>', () => {
   let appItem;
   let arcApp;
@@ -20,25 +16,24 @@
   setup(async () => {
     appItem = document.createElement('app-management-app-item');
     replaceBody(appItem);
-    await test_util.flushTasks();
+    await flushTasks();
 
     // Create an ARC app.
     const arcOptions = {type: appManagement.mojom.AppType.kArc};
 
-    arcApp = app_management.FakePageHandler.createApp('app1_id', arcOptions);
+    arcApp = FakePageHandler.createApp('app1_id', arcOptions);
     appItem.app = arcApp;
 
-    await test_util.flushTasks();
+    await flushTasks();
   });
 
   test('Onclick redirects to correct route', async () => {
-    assertFalse(!!settings.Router.getInstance().getQueryParameters().get('id'));
+    assertFalse(!!Router.getInstance().getQueryParameters().get('id'));
 
     appItem.click();
-    await test_util.flushTasks();
+    await flushTasks();
     assertEquals(
-        arcApp.id,
-        settings.Router.getInstance().getQueryParameters().get('id'));
+        arcApp.id, Router.getInstance().getQueryParameters().get('id'));
   });
 
   test('Icon renders', async () => {
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/app_management_page_tests.js b/chrome/test/data/webui/settings/chromeos/app_management/app_management_page_tests.js
index 50634138..a1647a12f 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/app_management_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/app_management_page_tests.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {BrowserProxy} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf} from './test_util.m.js';
-// clang-format on
-
 'use strict';
 
+import {BrowserProxy} from 'chrome://os-settings/chromeos/os_settings.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf} from './test_util.js';
+
 suite('AppManagementPageTests', () => {
   let appManagementPage;
   let fakeHandler;
@@ -45,7 +41,7 @@
   test('loads', async () => {
     // Check that the browser responds to the getApps() message.
     const {apps: initialApps} =
-        await app_management.BrowserProxy.getInstance().handler.getApps();
+        await BrowserProxy.getInstance().handler.getApps();
   });
 
   test('App list renders on page change', async () => {
@@ -64,7 +60,7 @@
     expectTrue(isHiddenByDomIf(getNoAppsFoundLabel()));
 
     fakeHandler.uninstall(app.id);
-    await test_util.flushTasks();
+    await flushTasks();
     expectEquals(0, getAppListChildren());
     expectFalse(isHiddenByDomIf(getNoAppsFoundLabel()));
   });
@@ -76,20 +72,20 @@
     expectEquals(3, getAppListChildren());
 
     appManagementPage.searchTerm = 's';
-    await test_util.flushTasks();
+    await flushTasks();
     expectEquals(2, getAppListChildren());
 
     fakeHandler.uninstall(sheets.id);
-    await test_util.flushTasks();
+    await flushTasks();
     expectEquals(1, getAppListChildren());
 
     appManagementPage.searchTerm = 'ss';
-    await test_util.flushTasks();
+    await flushTasks();
     expectEquals(0, getAppListChildren());
     expectFalse(isHiddenByDomIf(getNoAppsFoundLabel()));
 
     appManagementPage.searchTerm = '';
-    await test_util.flushTasks();
+    await flushTasks();
     expectEquals(2, getAppListChildren());
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/arc_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/arc_detail_view_test.js
index 45c512c..8ab390b 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/arc_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/arc_detail_view_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, PermissionType, updateSelectedAppId, getPermissionValueBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf, isHidden, getPermissionItemByType, getPermissionCrToggleByType} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, FakePageHandler, PermissionType, updateSelectedAppId, getPermissionValueBool} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf, isHidden, getPermissionItemByType, getPermissionCrToggleByType} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-arc-detail-view>', () => {
   let arcPermissionView;
   let fakeHandler;
@@ -21,8 +17,7 @@
   }
 
   function getPermissionBoolByType(permissionType) {
-    return app_management.util.getPermissionValueBool(
-        arcPermissionView.app_, permissionType);
+    return getPermissionValueBool(arcPermissionView.app_, permissionType);
   }
 
   async function clickPermissionToggle(permissionType) {
@@ -42,7 +37,7 @@
     // Create an ARC app without microphone permissions.
     const arcOptions = {
       type: appManagement.mojom.AppType.kArc,
-      permissions: app_management.FakePageHandler.createArcPermissions([
+      permissions: FakePageHandler.createArcPermissions([
         PermissionType.kCamera,
         PermissionType.kLocation,
         PermissionType.kNotifications,
@@ -53,8 +48,7 @@
 
     // Add an arc app, and make it the currently selected app.
     const app = await fakeHandler.addApp(null, arcOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     arcPermissionView =
         document.createElement('app-management-arc-detail-view');
@@ -63,7 +57,7 @@
 
   test('App is rendered correctly', () => {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         arcPermissionView.app_.id);
   });
 
@@ -141,14 +135,13 @@
     // Create an ARC app without any permissions.
     const arcOptions = {
       type: appManagement.mojom.AppType.kArc,
-      permissions: app_management.FakePageHandler.createArcPermissions([])
+      permissions: FakePageHandler.createArcPermissions([])
     };
 
     // Add an arc app, and make it the currently selected app.
     const app = await fakeHandler.addApp(null, arcOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
-    await test_util.flushTasks();
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
+    await flushTasks();
 
     expectFalse(isHiddenByDomIf(
         arcPermissionView.root.querySelector('#no-permissions')));
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/borealis_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/borealis_detail_view_test.js
index af4b9e1..41a9537 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/borealis_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/borealis_detail_view_test.js
@@ -2,17 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {PermissionType, createBoolPermission, AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.m.js';
-// #import {eventToPromise, flushTasks} from 'chrome://test/test_util.js';
-// #import {Router, routes, Route} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import {PermissionType, createBoolPermission, AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool, Router} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.js';
+import {eventToPromise, flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-borealis-detail-view>', function() {
   let borealisDetailView;
   let fakeHandler;
@@ -20,8 +15,7 @@
   const kBorealisClientAppId = 'epfhbkiklgmlkhfpbcdleadnhcfdjfmo';
 
   function getPermissionBoolByType(permissionType) {
-    return app_management.util.getPermissionValueBool(
-        borealisDetailView.app_, permissionType);
+    return getPermissionValueBool(borealisDetailView.app_, permissionType);
   }
 
   async function clickToggle(permissionType) {
@@ -30,7 +24,7 @@
   }
 
   function getSelectedAppFromStore() {
-    const storeData = app_management.AppManagementStore.getInstance().data;
+    const storeData = AppManagementStore.getInstance().data;
     return storeData.apps[storeData.selectedAppId];
   }
 
@@ -51,8 +45,7 @@
       permissions: permissions
     };
     const mainApp = await fakeHandler.addApp(kBorealisClientAppId, mainOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(mainApp.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(mainApp.id));
     borealisDetailView =
         document.createElement('app-management-borealis-detail-view');
     replaceBody(borealisDetailView);
@@ -60,7 +53,7 @@
 
   test('App is rendered correctly', function() {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         borealisDetailView.app_.id);
   });
 
@@ -94,22 +87,19 @@
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertTrue(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
   });
 
   test('Permission info links are correct', async function() {
@@ -122,8 +112,7 @@
       type: appManagement.mojom.AppType.kBorealis,
     };
     const app = await fakeHandler.addApp('foo', options);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
     await fakeHandler.flushPipesForTesting();
     assertFalse(!!borealisDetailView.$$('#main-link'));
     assertTrue(!!borealisDetailView.$$('#borealis-link'));
@@ -132,12 +121,12 @@
     const link = borealisDetailView.$$('#borealis-link');
     const anchorTag = link.$$('a');
     assertTrue(!!anchorTag);
-    const localizedLinkPromise = test_util.eventToPromise('link-clicked', link);
+    const localizedLinkPromise = eventToPromise('link-clicked', link);
     anchorTag.click();
-    await Promise.all([localizedLinkPromise, test_util.flushTasks()]);
+    await Promise.all([localizedLinkPromise, flushTasks()]);
     await fakeHandler.flushPipesForTesting();
     assertEquals(
-        settings.Router.getInstance().getQueryParameters().get('id'),
+        Router.getInstance().getQueryParameters().get('id'),
         kBorealisClientAppId);
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/chrome_app_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/chrome_app_detail_view_test.js
index 5e3a6bf..4a41107c 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/chrome_app_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/chrome_app_detail_view_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, getPermissionValueBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf, isHidden, getPermissionItemByType, getPermissionCrToggleByType} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-chrome-app-detail-view>', () => {
   let chromeAppDetailView;
   let fakeHandler;
@@ -27,22 +23,21 @@
 
     // Add an chrome app, and make it the currently selected app.
     const app = await fakeHandler.addApp(null, chromeOptions);
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     chromeAppDetailView =
         document.createElement('app-management-chrome-app-detail-view');
     replaceBody(chromeAppDetailView);
     fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
   });
 
   test('App is rendered correctly', () => {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         chromeAppDetailView.app_.id);
     assertTrue(!!chromeAppDetailView.$$('app-management-pin-to-shelf-item'));
     assertTrue(!!chromeAppDetailView.$$('#more-settings'));
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/dom_switch_test.js b/chrome/test/data/webui/settings/chromeos/app_management/dom_switch_test.js
index 7516d943..e99ef09 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/dom_switch_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/dom_switch_test.js
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import 'chrome://os-settings/chromeos/os_settings.js';
+
 suite('<app-management-dom-switch>', function() {
   let domSwitch;
   let domBind;
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/file_handling_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/file_handling_item_test.js
index 3a4356d..e325cc0 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/file_handling_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/file_handling_item_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, addApp} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-file-handling-item>', () => {
   let fileHandlingItem;
   let fakeHandler;
@@ -24,7 +20,7 @@
         document.createElement('app-management-file-handling-item');
 
     replaceBody(fileHandlingItem);
-    test_util.flushTasks();
+    flushTasks();
   });
 
   // Simple test that just verifies the file handling item is present and
@@ -45,19 +41,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', pwaOptions);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     fileHandlingItem.app = app;
 
     replaceBody(fileHandlingItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectFalse(
         fileHandlingItem.shadowRoot.querySelector('#toggle-row').isChecked());
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/main_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/main_view_test.js
index 23b2040..f20d5be 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/main_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/main_view_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {PageType} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody} from './test_util.m.js';
-// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody} from './test_util.js';
+import {Router} from 'chrome://os-settings/chromeos/os_settings.js';
+
 suite('<app-management-main-view>', function() {
   let mainView;
   let fakeHandler;
@@ -46,11 +42,11 @@
 
     const appItems = getAppItems();
     expectEquals(1, appItems.length);
-    assertFalse(!!settings.Router.getInstance().getQueryParameters().get('id'));
+    assertFalse(!!Router.getInstance().getQueryParameters().get('id'));
     store.setReducersEnabled(false);
 
     appItems[0].click();
     fakeHandler.flushPipesForTesting();
-    assertTrue(!!settings.Router.getInstance().getQueryParameters().get('id'));
+    assertTrue(!!Router.getInstance().getQueryParameters().get('id'));
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/managed_apps_test.js b/chrome/test/data/webui/settings/chromeos/app_management/managed_apps_test.js
index 8e7f8c2..b0dced9 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/managed_apps_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/managed_apps_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {PermissionType, TriState, FakePageHandler, AppManagementStore, updateSelectedAppId, createTriStatePermission} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, getPermissionToggleByType } from './test_util.m.js';
-// clang-format on
-
 'use strict';
 
+import {PermissionType, TriState, FakePageHandler, AppManagementStore, updateSelectedAppId, createTriStatePermission} from 'chrome://os-settings/chromeos/os_settings.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+import {setupFakeHandler, replaceStore, replaceBody, getPermissionToggleByType} from './test_util.js';
+
 suite('<app-management-managed-apps>', () => {
   let appDetailView;
   let fakeHandler;
@@ -32,16 +28,14 @@
       isPinned: appManagement.mojom.OptionalBool.kTrue,
       isPolicyPinned: appManagement.mojom.OptionalBool.kTrue,
       installReason: appManagement.mojom.InstallReason.kPolicy,
-      permissions: app_management.FakePageHandler.createWebPermissions(
-          permissionOptions),
+      permissions: FakePageHandler.createWebPermissions(permissionOptions),
     };
     const app = await fakeHandler.addApp(null, policyAppOptions);
     // Select created app.
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
     appDetailView = document.createElement('app-management-pwa-detail-view');
     replaceBody(appDetailView);
-    await test_util.flushTasks();
+    await flushTasks();
   });
 
   // TODO(crbug.com/999412): rewrite test.
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/pin_to_shelf_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/pin_to_shelf_item_test.js
index 7fb965d..866b407 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/pin_to_shelf_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/pin_to_shelf_item_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceBody} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceBody} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-pin-to-shelf-item>', () => {
   let pinToShelfItem;
   let fakeHandler;
@@ -21,7 +17,7 @@
     pinToShelfItem = document.createElement('app-management-pin-to-shelf-item');
 
     replaceBody(pinToShelfItem);
-    test_util.flushTasks();
+    flushTasks();
   });
 
   test('Toggle pin to shelf', async () => {
@@ -35,18 +31,14 @@
 
     await fakeHandler.flushPipesForTesting();
     pinToShelfItem.app = app;
-    assertFalse(app_management.util.convertOptionalBoolToBool(
-        app_management.AppManagementStore.getInstance()
-            .data.apps[app.id]
-            .isPinned));
+    assertFalse(convertOptionalBoolToBool(
+        AppManagementStore.getInstance().data.apps[app.id].isPinned));
 
     pinToShelfItem.click();
-    test_util.flushTasks();
+    flushTasks();
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(app_management.util.convertOptionalBoolToBool(
-        app_management.AppManagementStore.getInstance()
-            .data.apps[app.id]
-            .isPinned));
+    assertTrue(convertOptionalBoolToBool(
+        AppManagementStore.getInstance().data.apps[app.id].isPinned));
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_detail_view_test.js
index e3392b6..89b5bbd0 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/plugin_vm_detail_view_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {PluginVmBrowserProxyImpl, PermissionType, createBoolPermission, AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestPluginVmBrowserProxy} from './test_plugin_vm_browser_proxy.m.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.m.js';
-// clang-format on
-
 'use strict';
 
+import {PluginVmBrowserProxyImpl, PermissionType, createBoolPermission, AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
+import {TestPluginVmBrowserProxy} from './test_plugin_vm_browser_proxy.js';
+import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.js';
+
 suite('<app-management-plugin-vm-detail-view>', function() {
   /** @enum {number} */
   const Permissions = {
@@ -26,8 +22,7 @@
   let appId;
 
   function getPermissionBoolByType(permissionType) {
-    return app_management.util.getPermissionValueBool(
-        pluginVmDetailView.app_, permissionType);
+    return getPermissionValueBool(pluginVmDetailView.app_, permissionType);
   }
 
   function isCrToggleChecked(permissionType) {
@@ -45,7 +40,7 @@
   }
 
   function getSelectedAppFromStore() {
-    const storeData = app_management.AppManagementStore.getInstance().data;
+    const storeData = AppManagementStore.getInstance().data;
     return storeData.apps[storeData.selectedAppId];
   }
 
@@ -107,7 +102,7 @@
 
   setup(async function() {
     pluginVmBrowserProxy = new TestPluginVmBrowserProxy();
-    settings.PluginVmBrowserProxyImpl.instance_ = pluginVmBrowserProxy;
+    PluginVmBrowserProxyImpl.instance_ = pluginVmBrowserProxy;
     fakeHandler = setupFakeHandler();
     replaceStore();
 
@@ -136,8 +131,7 @@
     };
     const app = await fakeHandler.addApp(null, options);
     appId = app.id;
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(appId));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(appId));
 
     pluginVmDetailView =
         document.createElement('app-management-plugin-vm-detail-view');
@@ -147,7 +141,7 @@
 
   test('App is rendered correctly', function() {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         pluginVmDetailView.app_.id);
   });
 
@@ -237,21 +231,18 @@
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertTrue(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/pwa_detail_view_test.js b/chrome/test/data/webui/settings/chromeos/app_management/pwa_detail_view_test.js
index 51eacd1f..b92c8a7f 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/pwa_detail_view_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/pwa_detail_view_test.js
@@ -2,22 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.m.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, updateSelectedAppId, getPermissionValueBool, convertOptionalBoolToBool} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody, getPermissionCrToggleByType, getPermissionToggleByType} from './test_util.js';
+
 suite('<app-management-pwa-detail-view>', function() {
   let pwaPermissionView;
   let fakeHandler;
 
   function getPermissionBoolByType(permissionType) {
-    return app_management.util.getPermissionValueBool(
-        pwaPermissionView.app_, permissionType);
+    return getPermissionValueBool(pwaPermissionView.app_, permissionType);
   }
 
   async function clickToggle(permissionType) {
@@ -26,7 +21,7 @@
   }
 
   function getSelectedAppFromStore() {
-    const storeData = app_management.AppManagementStore.getInstance().data;
+    const storeData = AppManagementStore.getInstance().data;
     return storeData.apps[storeData.selectedAppId];
   }
 
@@ -36,8 +31,7 @@
 
     // Add an app, and make it the currently selected app.
     const app = await fakeHandler.addApp();
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     pwaPermissionView =
         document.createElement('app-management-pwa-detail-view');
@@ -46,7 +40,7 @@
 
   test('App is rendered correctly', function() {
     assertEquals(
-        app_management.AppManagementStore.getInstance().data.selectedAppId,
+        AppManagementStore.getInstance().data.selectedAppId,
         pwaPermissionView.app_.id);
   });
 
@@ -82,21 +76,18 @@
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertTrue(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
     pinToShelfItem.click();
     await fakeHandler.flushPipesForTesting();
     assertFalse(toggle.checked);
     assertEquals(
         toggle.checked,
-        app_management.util.convertOptionalBoolToBool(
-            getSelectedAppFromStore().isPinned));
+        convertOptionalBoolToBool(getSelectedAppFromStore().isPinned));
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/reducers_test.js b/chrome/test/data/webui/settings/chromeos/app_management/reducers_test.js
index 1983d74..4da5f90 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/reducers_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/reducers_test.js
@@ -2,15 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {createApp} from './test_util.m.js';
-// #import {addApp, AppState, changeApp, createInitialState, reduceAction, removeApp, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import {createApp} from './test_util.js';
+import {addApp, AppState, changeApp, createInitialState, reduceAction, removeApp, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+
 suite('app state', function() {
   let apps;
 
@@ -23,8 +19,8 @@
 
   test('updates when an app is added', function() {
     const newApp = createApp('3', {type: 1, title: 'a'});
-    const action = app_management.actions.addApp(newApp);
-    apps = app_management.AppState.updateApps(apps, action);
+    const action = addApp(newApp);
+    apps = AppState.updateApps(apps, action);
 
     // Check that apps contains a key for each app id.
     assertTrue(!!apps['1']);
@@ -40,8 +36,8 @@
 
   test('updates when an app is changed', function() {
     const changedApp = createApp('2', {type: 1, title: 'a'});
-    const action = app_management.actions.changeApp(changedApp);
-    apps = app_management.AppState.updateApps(apps, action);
+    const action = changeApp(changedApp);
+    apps = AppState.updateApps(apps, action);
 
     // Check that app has changed.
     const app = apps['2'];
@@ -53,8 +49,8 @@
   });
 
   test('updates when an app is removed', function() {
-    const action = app_management.actions.removeApp('1');
-    apps = app_management.AppState.updateApps(apps, action);
+    const action = removeApp('1');
+    apps = AppState.updateApps(apps, action);
 
     // Check that app is removed.
     assertFalse(!!apps['1']);
@@ -68,7 +64,7 @@
   let state;
 
   setup(function() {
-    state = app_management.util.createInitialState([
+    state = createInitialState([
       createApp('1'),
       createApp('2'),
     ]);
@@ -79,26 +75,26 @@
   });
 
   test('updates selected app id', function() {
-    let action = app_management.actions.updateSelectedAppId('1');
-    state = app_management.reduceAction(state, action);
+    let action = updateSelectedAppId('1');
+    state = reduceAction(state, action);
     assertEquals('1', state.selectedAppId);
 
-    action = app_management.actions.updateSelectedAppId('2');
-    state = app_management.reduceAction(state, action);
+    action = updateSelectedAppId('2');
+    state = reduceAction(state, action);
     assertEquals('2', state.selectedAppId);
 
-    action = app_management.actions.updateSelectedAppId(null);
-    state = app_management.reduceAction(state, action);
+    action = updateSelectedAppId(null);
+    state = reduceAction(state, action);
     assertEquals(null, state.selectedAppId);
   });
 
   test('removing an app resets selected app id', function() {
-    let action = app_management.actions.updateSelectedAppId('1');
-    state = app_management.reduceAction(state, action);
+    let action = updateSelectedAppId('1');
+    state = reduceAction(state, action);
     assertEquals('1', state.selectedAppId);
 
-    action = app_management.actions.removeApp('1');
-    state = app_management.reduceAction(state, action);
+    action = removeApp('1');
+    state = reduceAction(state, action);
     assertEquals(null, state.selectedAppId);
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/resize_lock_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/resize_lock_item_test.js
index 3966cc2a..005e5b9 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/resize_lock_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/resize_lock_item_test.js
@@ -2,16 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// #import {setupFakeHandler, replaceBody, isHidden} from './test_util.m.js';
-// #import {FakePageHandler} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
-
 'use strict';
 
+import 'chrome://os-settings/chromeos/os_settings.js';
+
+import {flushTasks} from 'chrome://test/test_util.js';
+import {setupFakeHandler, replaceBody, isHidden} from './test_util.js';
+
+
 suite('<app-management-resize-lock-item>', () => {
   let resizeLockItem;
   let fakeHandler;
@@ -21,7 +19,7 @@
     resizeLockItem = document.createElement('app-management-resize-lock-item');
 
     replaceBody(resizeLockItem);
-    test_util.flushTasks();
+    flushTasks();
   });
 
   test('Resize lock setting visibility', async () => {
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/supported_links_item_test.js b/chrome/test/data/webui/settings/chromeos/app_management/supported_links_item_test.js
index 3c497d7..484bdbbe 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/supported_links_item_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/supported_links_item_test.js
@@ -2,16 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, addApp} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHidden} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import {AppManagementStore, updateSelectedAppId} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody, isHidden} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-supported-links-item>', () => {
   let supportedLinksItem;
   let fakeHandler;
@@ -24,7 +20,7 @@
         document.createElement('app-management-supported-links-item');
 
     replaceBody(supportedLinksItem);
-    test_util.flushTasks();
+    flushTasks();
   });
 
   test('PWA - preferred -> browser', async function() {
@@ -37,19 +33,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', pwaOptions);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     supportedLinksItem.app = app;
 
     replaceBody(supportedLinksItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
@@ -57,11 +51,10 @@
 
     await supportedLinksItem.shadowRoot.querySelector('#browser').click();
     await fakeHandler.whenCalled('setPreferredApp');
-    await test_util.flushTasks();
+    await flushTasks();
 
-    expectFalse(app_management.AppManagementStore.getInstance()
-                    .data.apps[app.id]
-                    .isPreferredApp);
+    expectFalse(
+        AppManagementStore.getInstance().data.apps[app.id].isPreferredApp);
 
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
@@ -78,19 +71,17 @@
     // Add ARC app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', arcOptions);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     supportedLinksItem.app = app;
 
     replaceBody(supportedLinksItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
@@ -98,11 +89,10 @@
 
     await supportedLinksItem.shadowRoot.querySelector('#preferred').click();
     await fakeHandler.whenCalled('setPreferredApp');
-    await test_util.flushTasks();
+    await flushTasks();
 
-    expectTrue(app_management.AppManagementStore.getInstance()
-                   .data.apps[app.id]
-                   .isPreferredApp);
+    expectTrue(
+        AppManagementStore.getInstance().data.apps[app.id].isPreferredApp);
 
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
@@ -119,19 +109,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', pwaOptions);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     supportedLinksItem.app = app;
 
     replaceBody(supportedLinksItem);
     fakeHandler.flushPipesForTesting();
-    test_util.flushTasks();
+    flushTasks();
 
     assertTrue(isHidden(supportedLinksItem));
   });
@@ -147,19 +135,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', options);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     supportedLinksItem.app = app;
 
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertTrue(!!supportedLinksItem.shadowRoot.querySelector(
         '#disabled-explanation-text'));
@@ -180,19 +166,17 @@
     // Add PWA app, and make it the currently selected app.
     const app = await fakeHandler.addApp('app1', pwaOptions);
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     supportedLinksItem.app = app;
 
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertFalse(!!supportedLinksItem.querySelector('#dialog'));
 
@@ -200,7 +184,7 @@
     const heading = supportedLinksItem.shadowRoot.querySelector('#heading');
     heading.shadowRoot.querySelector('a').click();
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
     const dialog = supportedLinksItem.shadowRoot.querySelector('#dialog')
                        .shadowRoot.querySelector('#dialog');
     assertTrue(dialog.open);
@@ -216,7 +200,7 @@
     // Close dialog.
     dialog.shadowRoot.querySelector('#close').click();
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
     assertFalse(supportedLinksItem.shadowRoot.querySelector('#dialog')
                     .shadowRoot.querySelector('#dialog')
                     .open);
@@ -236,17 +220,15 @@
     await fakeHandler.addApp('app2', pwaOptions);
     fakeHandler.overlappingAppIds = ['app2'];
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
     supportedLinksItem.app = app;
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     // Pre-test checks
     assertFalse(!!supportedLinksItem.querySelector('#overlap-dialog'));
@@ -264,13 +246,12 @@
     supportedLinksItem.shadowRoot.querySelector('#overlap-dialog')
         .$.cancel.click();
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertFalse(
         !!supportedLinksItem.shadowRoot.querySelector('#overlap-dialog'));
-    expectFalse(app_management.AppManagementStore.getInstance()
-                    .data.apps[app.id]
-                    .isPreferredApp);
+    expectFalse(
+        AppManagementStore.getInstance().data.apps[app.id].isPreferredApp);
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
         'browser');
@@ -288,17 +269,15 @@
     await fakeHandler.addApp('app2', pwaOptions);
     fakeHandler.overlappingAppIds = ['app2'];
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app.id));
 
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
     supportedLinksItem.app = app;
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     // Pre-test checks
     assertFalse(!!supportedLinksItem.querySelector('#overlap-dialog'));
@@ -309,7 +288,7 @@
     await supportedLinksItem.shadowRoot.querySelector('#preferred').click();
     await promise;
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
     assertTrue(
         !!supportedLinksItem.shadowRoot.querySelector('#overlap-dialog'));
 
@@ -319,13 +298,12 @@
         .$.change.click();
     await promise;
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertFalse(
         !!supportedLinksItem.shadowRoot.querySelector('#overlap-dialog'));
-    expectTrue(app_management.AppManagementStore.getInstance()
-                   .data.apps[app.id]
-                   .isPreferredApp);
+    expectTrue(
+        AppManagementStore.getInstance().data.apps[app.id].isPreferredApp);
     expectEquals(
         supportedLinksItem.shadowRoot.querySelector('cr-radio-group').selected,
         'preferred');
@@ -349,16 +327,14 @@
     await fakeHandler.addApp('app2', pwaOptions2);
     fakeHandler.overlappingAppIds = ['app2'];
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app1.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app1.id));
     await fakeHandler.flushPipesForTesting();
 
-    expectTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app1.id]);
+    expectTrue(!!AppManagementStore.getInstance().data.apps[app1.id]);
     supportedLinksItem.app = app1;
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertFalse(
         !!supportedLinksItem.shadowRoot.querySelector('#overlap-warning'));
@@ -382,19 +358,16 @@
     const app2 = await fakeHandler.addApp('app2', pwaOptions2);
     fakeHandler.overlappingAppIds = ['app2'];
 
-    app_management.AppManagementStore.getInstance().dispatch(
-        app_management.actions.updateSelectedAppId(app1.id));
+    AppManagementStore.getInstance().dispatch(updateSelectedAppId(app1.id));
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
-    expectTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app1.id]);
-    expectTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app2.id]);
+    expectTrue(!!AppManagementStore.getInstance().data.apps[app1.id]);
+    expectTrue(!!AppManagementStore.getInstance().data.apps[app2.id]);
     supportedLinksItem.app = app1;
     replaceBody(supportedLinksItem);
     await fakeHandler.flushPipesForTesting();
-    await test_util.flushTasks();
+    await flushTasks();
 
     assertTrue(
         !!supportedLinksItem.shadowRoot.querySelector('#overlap-warning'));
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js b/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js
index 37aae93d..57d615e 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/test_plugin_vm_browser_proxy.js
@@ -2,12 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {TestBrowserProxy} from '../../../test_browser_proxy.js';
-// clang-format on
+import {TestBrowserProxy} from '../../../test_browser_proxy.js';
 
-/** @implements {settings.PluginVmBrowserProxy} */
-/* #export */ class TestPluginVmBrowserProxy extends TestBrowserProxy {
+/** @implements {PluginVmBrowserProxy} */
+export class TestPluginVmBrowserProxy extends TestBrowserProxy {
   constructor() {
     super([
       'isRelaunchNeededForNewPermissions',
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/test_store.js b/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
index 0671cfa..3ef271a 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/test_store.js
@@ -2,22 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {TestStore} from 'chrome://test/test_store.js';
-// #import {AppManagementStore, createEmptyState, reduceAction} from 'chrome://os-settings/chromeos/os_settings.js';
-// clang-format on
+import {AppManagementStore, createEmptyState, reduceAction} from 'chrome://os-settings/chromeos/os_settings.js';
+import {TestStore} from 'chrome://test/test_store.js';
 
-cr.define('app_management', function() {
-  /* #export */ class TestAppManagementStore extends cr.ui.TestStore {
-    constructor(data) {
-      super(
-          data, app_management.AppManagementStore,
-          app_management.util.createEmptyState(), app_management.reduceAction);
-    }
+export class TestAppManagementStore extends TestStore {
+  constructor(data) {
+    super(data, AppManagementStore, createEmptyState(), reduceAction);
   }
-
-  // #cr_define_end
-  return {
-    TestAppManagementStore: TestAppManagementStore,
-  };
-});
+}
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/test_util.js b/chrome/test/data/webui/settings/chromeos/app_management/test_util.js
index 93c73ad9..da56232 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/test_util.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/test_util.js
@@ -2,29 +2,27 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {BrowserProxy, FakePageHandler, AppManagementComponentBrowserProxy} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestAppManagementStore} from './test_store.m.js';
-// clang-format on
-
 'use strict';
 
+import {BrowserProxy, FakePageHandler, AppManagementComponentBrowserProxy} from 'chrome://os-settings/chromeos/os_settings.js';
+import {TestAppManagementStore} from './test_store.js';
+
 /**
  * Create an app for testing purpose.
  * @param {string} id
  * @param {Object=} optConfig
  * @return {!App}
  */
-/* #export */ function createApp(id, config) {
-  return app_management.FakePageHandler.createApp(id, config);
+export function createApp(id, config) {
+  return FakePageHandler.createApp(id, config);
 }
 
 /**
- * @return {app_management.FakePageHandler}
+ * @return {FakePageHandler}
  */
-/* #export */ function setupFakeHandler() {
-  const browserProxy = app_management.BrowserProxy.getInstance();
-  const fakeHandler = new app_management.FakePageHandler(
+export function setupFakeHandler() {
+  const browserProxy = BrowserProxy.getInstance();
+  const fakeHandler = new FakePageHandler(
       browserProxy.callbackRouter.$.bindNewPipeAndPassRemote());
   browserProxy.handler = fakeHandler.getRemote();
 
@@ -37,10 +35,10 @@
 /**
  * Replace the app management store instance with a new, empty
  * TestAppManagementStore.
- * @return {app_management.TestAppManagementStore}
+ * @return {TestAppManagementStore}
  */
-/* #export */ function replaceStore() {
-  const store = new app_management.TestAppManagementStore();
+export function replaceStore() {
+  const store = new TestAppManagementStore();
   store.setReducersEnabled(true);
   store.replaceSingleton();
   return store;
@@ -50,7 +48,7 @@
  * @param {Element} element
  * @return {bool}
  */
-/* #export */ function isHidden(element) {
+export function isHidden(element) {
   const rect = element.getBoundingClientRect();
   return rect.height === 0 && rect.width === 0;
 }
@@ -59,7 +57,7 @@
  * Replace the current body of the test with a new element.
  * @param {Element} element
  */
-/* #export */ function replaceBody(element) {
+export function replaceBody(element) {
   PolymerTest.clearBody();
 
   window.history.replaceState({}, '', '/');
@@ -76,7 +74,7 @@
 async function navigateTo(route) {
   window.history.replaceState({}, '', route);
   window.dispatchEvent(new CustomEvent('location-changed'));
-  await test_util.flushTasks();
+  await flushTasks();
 }
 
 /**
@@ -84,7 +82,7 @@
  * @param {Object} permissionType
  * @return {Element}
  */
-/* #export */ function getPermissionItemByType(view, permissionType) {
+export function getPermissionItemByType(view, permissionType) {
   return view.root.querySelector('[permission-type=' + permissionType + ']');
 }
 
@@ -93,7 +91,7 @@
  * @param {Object} permissionType
  * @return {Element}
  */
-/* #export */ function getPermissionToggleByType(view, permissionType) {
+export function getPermissionToggleByType(view, permissionType) {
   return getPermissionItemByType(view, permissionType)
       .shadowRoot.querySelector('app-management-toggle-row');
 }
@@ -103,7 +101,7 @@
  * @param {Object} permissionType
  * @return {Element}
  */
-/* #export */ function getPermissionCrToggleByType(view, permissionType) {
+export function getPermissionCrToggleByType(view, permissionType) {
   return getPermissionToggleByType(view, permissionType)
       .shadowRoot.querySelector('cr-toggle');
 }
@@ -112,7 +110,7 @@
  * @param {Element} element
  * @return {boolean}
  */
-/* #export */ function isHiddenByDomIf(element) {
+export function isHiddenByDomIf(element) {
   // Happens when the dom-if is false and the element is not rendered.
   if (!element) {
     return true;
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/toggle_row_test.js b/chrome/test/data/webui/settings/chromeos/app_management/toggle_row_test.js
index 8de441b6..877e8761 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/toggle_row_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/toggle_row_test.js
@@ -2,29 +2,27 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {replaceBody} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import 'chrome://os-settings/chromeos/os_settings.js';
+
+import {replaceBody} from './test_util.js';
+import {flushTasks} from 'chrome://test/test_util.js';
+
 suite('<app-management-toggle-row', () => {
   let toggleRow;
 
   setup(async () => {
     toggleRow = document.createElement('app-management-toggle-row');
     replaceBody(toggleRow);
-    await test_util.flushTasks();
+    await flushTasks();
   });
 
   test('Click toggle', async () => {
     toggleRow.setToggle(false);
     assertFalse(toggleRow.isChecked());
     toggleRow.click();
-    await test_util.flushTasks();
+    await flushTasks();
     assertTrue(toggleRow.isChecked());
   });
 
@@ -35,12 +33,12 @@
     assertFalse(!!toggleRow.shadowRoot.querySelector('cr-policy-indicator'));
 
     toggleRow.managed = true;
-    await test_util.flushTasks();
+    await flushTasks();
     assertTrue(!!toggleRow.shadowRoot.querySelector('cr-toggle').disabled);
     assertTrue(!!toggleRow.shadowRoot.querySelector('cr-policy-indicator'));
 
     toggleRow.click();
-    await test_util.flushTasks();
+    await flushTasks();
     assertFalse(toggleRow.isChecked());
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/app_management/uninstall_button_test.js b/chrome/test/data/webui/settings/chromeos/app_management/uninstall_button_test.js
index 473f66e..c9b0d0d 100644
--- a/chrome/test/data/webui/settings/chromeos/app_management/uninstall_button_test.js
+++ b/chrome/test/data/webui/settings/chromeos/app_management/uninstall_button_test.js
@@ -2,16 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
-
-// #import {AppManagementStore, FakePageHandler, updateSelectedAppId, PageType} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {setupFakeHandler, replaceStore, replaceBody, isHiddenByDomIf, isHidden} from './test_util.m.js';
-// #import {flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
-
 'use strict';
 
+import 'chrome://os-settings/chromeos/os_settings.js';
+
+import {AppManagementStore} from 'chrome://os-settings/chromeos/os_settings.js';
+import {setupFakeHandler, replaceStore, replaceBody} from './test_util.js';
+
 suite('<app-management-uninstall-button', () => {
   let uninstallButton;
   let fakeHandler;
@@ -33,8 +30,7 @@
     app = await fakeHandler.addApp('app1_id', arcOptions);
     await fakeHandler.flushPipesForTesting();
 
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
 
     uninstallButton = document.createElement('app-management-uninstall-button');
     uninstallButton.app = app;
@@ -47,8 +43,7 @@
 
     uninstallButton.shadowRoot.querySelector('#uninstallButton').click();
     await fakeHandler.flushPipesForTesting();
-    assertFalse(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertFalse(!!AppManagementStore.getInstance().data.apps[app.id]);
   });
 
   test('Disabled by policy', async () => {
@@ -56,8 +51,7 @@
     uninstallButton.shadowRoot.querySelector('#uninstallButton').click();
     await fakeHandler.flushPipesForTesting();
     // Disabled by policy, clicking should not remove app.
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
   });
 
   test('System app, button hidden', async () => {
@@ -65,7 +59,6 @@
     assertFalse(!!uninstallButton.shadowRoot.querySelector('#uninstallButton'));
     await fakeHandler.flushPipesForTesting();
     // Disabled by policy, clicking should not remove app.
-    assertTrue(
-        !!app_management.AppManagementStore.getInstance().data.apps[app.id]);
+    assertTrue(!!AppManagementStore.getInstance().data.apps[app.id]);
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/apps_page_test.js b/chrome/test/data/webui/settings/chromeos/apps_page_test.js
index efcd482..f71ad3e3 100644
--- a/chrome/test/data/webui/settings/chromeos/apps_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/apps_page_test.js
@@ -2,17 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import 'chrome://os-settings/chromeos/os_settings.js';
 
-// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-// #import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
-// #import {AndroidAppsBrowserProxyImpl, Router, routes, setAppNotificationProviderForTesting, createBoolPermission} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestAndroidAppsBrowserProxy} from './test_android_apps_browser_proxy.m.js';
-// #import {flush} from'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {waitAfterNextRender, flushTasks} from 'chrome://test/test_util.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// clang-format on
+import {AndroidAppsBrowserProxyImpl, createBoolPermission, Router, routes, setAppNotificationProviderForTesting} from 'chrome://os-settings/chromeos/os_settings.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {flushTasks, waitAfterNextRender} from 'chrome://test/test_util.js';
+
+import {TestAndroidAppsBrowserProxy} from './test_android_apps_browser_proxy.js';
 
 /** @type {?OsSettingsAppsPageElement} */
 let appsPage = null;
@@ -227,7 +226,7 @@
   setup(async () => {
     loadTimeData.overrideValues({showOsSettingsAppNotificationsRow: true});
     androidAppsBrowserProxy = new TestAndroidAppsBrowserProxy();
-    settings.AndroidAppsBrowserProxyImpl.instance_ = androidAppsBrowserProxy;
+    AndroidAppsBrowserProxyImpl.instance_ = androidAppsBrowserProxy;
     PolymerTest.clearBody();
     mojoApi_ = new FakeAppNotificationHandler();
     setAppNotificationProviderForTesting(mojoApi_);
@@ -241,7 +240,7 @@
     mojoApi_.resetForTest();
     appsPage.remove();
     appsPage = null;
-    settings.Router.getInstance().resetRouteForTesting();
+    Router.getInstance().resetRouteForTesting();
   });
 
   suite('Page Combinations', function() {
@@ -257,7 +256,7 @@
     test('Only App Management Shown', function() {
       appsPage.showAndroidApps = false;
       appsPage.showStartup = false;
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(AppManagementShown());
       assertFalse(AndroidAppsShown());
@@ -267,7 +266,7 @@
     test('Android Apps and App Management Shown', function() {
       appsPage.showAndroidApps = true;
       appsPage.showStartup = false;
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(AppManagementShown());
       assertTrue(AndroidAppsShown());
@@ -277,7 +276,7 @@
     test('Android Apps, On Startup and App Management Shown', function() {
       appsPage.showAndroidApps = true;
       appsPage.showStartup = true;
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(AppManagementShown());
       assertTrue(AndroidAppsShown());
@@ -288,7 +287,7 @@
     test('App notification row', async () => {
       appsPage.showAndroidApps = true;
       appsPage.showStartup = true;
-      Polymer.dom.flush();
+      flush();
 
       const rowLink = appsPage.$$('#appNotifications');
       assertTrue(!!rowLink);
@@ -330,7 +329,7 @@
         playStoreEnabled: false,
         settingsAppAvailable: false,
       };
-      Polymer.dom.flush();
+      flush();
     });
 
     test('Clicking enable button enables ARC', function() {
@@ -339,41 +338,41 @@
       assertFalse(!!appsPage.$$('.subpage-arrow'));
 
       button.click();
-      Polymer.dom.flush();
+      flush();
       assertTrue(appsPage.prefs.arc.enabled.value);
 
       appsPage.androidAppsInfo = {
         playStoreEnabled: true,
         settingsAppAvailable: false,
       };
-      Polymer.dom.flush();
+      flush();
       assertTrue(!!appsPage.$$('.subpage-arrow'));
     });
 
     test('On startup dropdown menu', async () => {
       appsPage.prefs = setPrefs(1);
-      Polymer.dom.flush();
+      flush();
       assertEquals(1, appsPage.$$('#onStartupDropdown').pref.value);
 
       appsPage.prefs = setPrefs(2);
-      Polymer.dom.flush();
+      flush();
       assertEquals(2, appsPage.$$('#onStartupDropdown').pref.value);
 
       appsPage.prefs = setPrefs(3);
-      Polymer.dom.flush();
+      flush();
       assertEquals(3, appsPage.$$('#onStartupDropdown').pref.value);
     });
 
     test('Deep link to On startup dropdown menu', async () => {
-      Polymer.dom.flush();
+      flush();
 
       const params = new URLSearchParams;
       params.append('settingId', '703');
-      settings.Router.getInstance().navigateTo(settings.routes.APPS, params);
+      Router.getInstance().navigateTo(routes.APPS, params);
 
       const deepLinkElement = appsPage.$$('#onStartupDropdown')
                                   .shadowRoot.querySelector('#dropdownMenu');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'On startup dropdown menu should be focused for settingId=703.');
@@ -381,15 +380,15 @@
 
     test('Deep link to manage android prefs', async () => {
       appsPage.havePlayStoreApp = false;
-      Polymer.dom.flush();
+      flush();
 
       const params = new URLSearchParams;
       params.append('settingId', '700');
-      settings.Router.getInstance().navigateTo(settings.routes.APPS, params);
+      Router.getInstance().navigateTo(routes.APPS, params);
 
       const deepLinkElement =
           appsPage.$$('#manageApps').shadowRoot.querySelector('cr-icon-button');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'Manage android prefs button should be focused for settingId=700.');
@@ -398,10 +397,10 @@
     test('Deep link to turn on Play Store', async () => {
       const params = new URLSearchParams;
       params.append('settingId', '702');
-      settings.Router.getInstance().navigateTo(settings.routes.APPS, params);
+      Router.getInstance().navigateTo(routes.APPS, params);
 
       const deepLinkElement = appsPage.$$('#enable');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'Turn on play store button should be focused for settingId=702.');
@@ -416,7 +415,7 @@
 
     setup(function() {
       androidAppsBrowserProxy = new TestAndroidAppsBrowserProxy();
-      settings.AndroidAppsBrowserProxyImpl.instance_ = androidAppsBrowserProxy;
+      AndroidAppsBrowserProxyImpl.instance_ = androidAppsBrowserProxy;
       PolymerTest.clearBody();
       subpage = document.createElement('settings-android-apps-subpage');
       document.body.appendChild(subpage);
@@ -424,8 +423,8 @@
 
       // Because we can't simulate the loadTimeData value androidAppsVisible,
       // this route doesn't exist for tests. Add it in for testing.
-      if (!settings.routes.ANDROID_APPS_DETAILS) {
-        settings.routes.ANDROID_APPS_DETAILS = settings.routes.APPS.createChild(
+      if (!routes.ANDROID_APPS_DETAILS) {
+        routes.ANDROID_APPS_DETAILS = routes.APPS.createChild(
             '/' + chromeos.settings.mojom.GOOGLE_PLAY_STORE_SUBPAGE_PATH);
       }
 
@@ -434,7 +433,7 @@
         playStoreEnabled: true,
         settingsAppAvailable: false,
       };
-      Polymer.dom.flush();
+      flush();
     });
 
     teardown(function() {
@@ -453,14 +452,14 @@
         playStoreEnabled: true,
         settingsAppAvailable: true,
       };
-      Polymer.dom.flush();
+      flush();
       assertTrue(!!subpage.$$('#manageApps'));
 
       subpage.androidAppsInfo = {
         playStoreEnabled: true,
         settingsAppAvailable: false,
       };
-      Polymer.dom.flush();
+      flush();
       assertTrue(!subpage.$$('#manageApps'));
     });
 
@@ -469,13 +468,13 @@
         playStoreEnabled: true,
         settingsAppAvailable: true,
       };
-      Polymer.dom.flush();
+      flush();
       const button = subpage.$$('#manageApps');
       assertTrue(!!button);
       const promise =
           androidAppsBrowserProxy.whenCalled('showAndroidAppsSettings');
       button.click();
-      Polymer.dom.flush();
+      flush();
       return promise;
     });
 
@@ -488,7 +487,7 @@
       assertTrue(!!remove);
 
       subpage.onRemoveTap_();
-      Polymer.dom.flush();
+      flush();
       assertTrue(dialog.open);
       dialog.close();
     });
@@ -506,7 +505,7 @@
         playStoreEnabled: true,
         settingsAppAvailable: true,
       };
-      Polymer.dom.flush();
+      flush();
 
       assertFalse(!!subpage.$$('#remove'));
       assertTrue(!!subpage.$$('#manageApps'));
@@ -518,14 +517,14 @@
         playStoreEnabled: false,
         settingsAppAvailable: true,
       };
-      Polymer.dom.flush();
+      flush();
 
       const button = subpage.$$('#manageApps');
       assertTrue(!!button);
       const promise =
           androidAppsBrowserProxy.whenCalled('showAndroidAppsSettings');
       button.click();
-      Polymer.dom.flush();
+      flush();
       return promise;
     });
 
@@ -534,16 +533,15 @@
         playStoreEnabled: false,
         settingsAppAvailable: true,
       };
-      Polymer.dom.flush();
+      flush();
 
       const params = new URLSearchParams;
       params.append('settingId', '700');
-      settings.Router.getInstance().navigateTo(
-          settings.routes.ANDROID_APPS_DETAILS, params);
+      Router.getInstance().navigateTo(routes.ANDROID_APPS_DETAILS, params);
 
       const deepLinkElement =
           subpage.$$('#manageApps').shadowRoot.querySelector('cr-icon-button');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'Manage android prefs button should be focused for settingId=700.');
@@ -552,11 +550,10 @@
     test('Deep link to remove play store', async () => {
       const params = new URLSearchParams;
       params.append('settingId', '701');
-      settings.Router.getInstance().navigateTo(
-          settings.routes.ANDROID_APPS_DETAILS, params);
+      Router.getInstance().navigateTo(routes.ANDROID_APPS_DETAILS, params);
 
       const deepLinkElement = subpage.$$('#remove cr-button');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'Remove play store button should be focused for settingId=701.');
@@ -565,12 +562,12 @@
     test('ManageUsbDevice', function() {
       // ARCVM is not enabled
       subpage.showArcvmManageUsb = false;
-      Polymer.dom.flush();
+      flush();
       assertFalse(!!subpage.$$('#manageArcvmShareUsbDevices'));
 
       // ARCMV is enabled
       subpage.showArcvmManageUsb = true;
-      Polymer.dom.flush();
+      flush();
       assertTrue(!!subpage.$$('#manageArcvmShareUsbDevices'));
     });
   });
diff --git a/chrome/test/data/webui/settings/chromeos/change_dictation_locale_dialog_test.js b/chrome/test/data/webui/settings/chromeos/change_dictation_locale_dialog_test.js
index 3363ec0..2279c6e7 100644
--- a/chrome/test/data/webui/settings/chromeos/change_dictation_locale_dialog_test.js
+++ b/chrome/test/data/webui/settings/chromeos/change_dictation_locale_dialog_test.js
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import 'chrome://os-settings/chromeos/os_settings.js';
 
-// #import {assertEquals, assertTrue, assertFalse} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {eventToPromise} from 'chrome://test/test_util.js';
-// clang-format on
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
 suite('DictationChangeLanguageLocaleDialogTest', function() {
   /** @type {!ChangeDictationLocaleDialog} */
@@ -32,7 +30,7 @@
     dialog.pref = pref;
     dialog.options = options;
     document.body.appendChild(dialog);
-    Polymer.dom.flush();
+    flush();
   });
 
   test('Cancel button closes dialog', function() {
diff --git a/chrome/test/data/webui/settings/chromeos/dark_mode_subpage_tests.js b/chrome/test/data/webui/settings/chromeos/dark_mode_subpage_tests.js
index b2a4c6a..35a58d7 100644
--- a/chrome/test/data/webui/settings/chromeos/dark_mode_subpage_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/dark_mode_subpage_tests.js
@@ -2,15 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {waitAfterNextRender} from 'chrome://test/test_util.js';
 
-// #import {Router, routes, CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
 let darkModePage = null;
 
@@ -39,7 +36,7 @@
   darkModePage = document.createElement('settings-dark-mode-subpage');
   darkModePage.prefs = prefElement.prefs;
   document.body.appendChild(darkModePage);
-  Polymer.dom.flush();
+  flush();
 }
 
 suite('DarkModeHandler', function() {
@@ -75,12 +72,12 @@
 
     // Click the button, and dark mode should be enabled.
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(getPrefValue());
 
     // Click the button again to disable dark mode again.
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertFalse(getPrefValue());
   });
 
@@ -99,38 +96,38 @@
 
     // Enable theming from pref and expect an update to a radio button group.
     darkModePage.setPrefValue('ash.dark_mode.color_mode_themed', true);
-    Polymer.dom.flush();
+    flush();
     assertEquals('true', darkModeThemedRadioGroup.selected);
 
     // Disable theming from pref and expect an update to a radio button group.
     darkModePage.setPrefValue('ash.dark_mode.color_mode_themed', false);
-    Polymer.dom.flush();
+    flush();
     assertEquals('false', darkModeThemedRadioGroup.selected);
 
     // Clicking the 'on' radio should updates the theming pref to on.
     const darkModeThemedOn = darkModePage.$$('#darkModeThemedOn');
     darkModeThemedOn.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(getPrefValue());
 
     // Clicking the 'off' radio should updates the theming pref to off.
     const darkModeThemedOff = darkModePage.$$('#darkModeThemedOff');
     darkModeThemedOff.click();
-    Polymer.dom.flush();
+    flush();
     assertFalse(getPrefValue());
   });
 
   test('Deep link to dark mode toggle button', async () => {
     const params = new URLSearchParams;
     params.append('settingId', '505');
-    settings.Router.getInstance().navigateTo(settings.routes.DARK_MODE, params);
+    Router.getInstance().navigateTo(routes.DARK_MODE, params);
 
-    Polymer.dom.flush();
+    flush();
 
     const deepLinkElement = darkModePage.$$('#darkModeToggleButton')
                                 .shadowRoot.querySelector('cr-toggle');
 
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
 
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
@@ -152,10 +149,10 @@
     darkModePage.setPrefValue('ash.dark_mode.color_mode_themed', true);
     const params = new URLSearchParams;
     params.append('settingId', '506');
-    settings.Router.getInstance().navigateTo(settings.routes.DARK_MODE, params);
-    Polymer.dom.flush();
+    Router.getInstance().navigateTo(routes.DARK_MODE, params);
+    flush();
     let deepLinkElement = darkModePage.$$('#darkModeThemedOn').$$('#button');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
 
     assertEquals('true', darkModeThemedRadioGroup.selected);
     assertEquals(
@@ -166,10 +163,10 @@
     // Disable theming from pref and expect deep link to focus the themed-off
     // radio button.
     darkModePage.setPrefValue('ash.dark_mode.color_mode_themed', false);
-    settings.Router.getInstance().navigateTo(settings.routes.DARK_MODE, params);
-    Polymer.dom.flush();
+    Router.getInstance().navigateTo(routes.DARK_MODE, params);
+    flush();
     deepLinkElement = darkModePage.$$('#darkModeThemedOff').$$('#button');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
 
     assertEquals('false', darkModeThemedRadioGroup.selected);
     assertEquals(
diff --git a/chrome/test/data/webui/settings/chromeos/date_time_page_tests.js b/chrome/test/data/webui/settings/chromeos/date_time_page_tests.js
index 896e8b7b..033d69af0 100644
--- a/chrome/test/data/webui/settings/chromeos/date_time_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/date_time_page_tests.js
@@ -2,19 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js'
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {assert} from 'chrome://resources/js/assert.m.js';
-// #import {flush} from'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.js';
-// #import {TimeZoneAutoDetectMethod, TimeZoneBrowserProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {waitAfterNextRender, flushTasks} from 'chrome://test/test_util.js';
-// clang-format on
+import {TimeZoneAutoDetectMethod, TimeZoneBrowserProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js';
+import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.js';
+import {flushTasks, waitAfterNextRender} from 'chrome://test/test_util.js';
 
-/** @implements {settings.TimeZoneBrowserProxy} */
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+
+/** @implements {TimeZoneBrowserProxy} */
 class TestTimeZoneBrowserProxy extends TestBrowserProxy {
   constructor() {
     super([
@@ -98,7 +96,7 @@
       resolve_timezone_by_geolocation_method_short: {
         key: 'generated.resolve_timezone_by_geolocation_method_short',
         type: chrome.settingsPrivate.PrefType.NUMBER,
-        value: settings.TimeZoneAutoDetectMethod.IP_ONLY,
+        value: TimeZoneAutoDetectMethod.IP_ONLY,
       },
       resolve_timezone_by_geolocation_on_off: {
         key: 'generated.resolve_timezone_by_geolocation_on_off',
@@ -117,8 +115,8 @@
     prefsCopy.generated.resolve_timezone_by_geolocation_method_short
         .enforcement = chrome.settingsPrivate.Enforcement.ENFORCED;
     prefsCopy.generated.resolve_timezone_by_geolocation_method_short.value =
-        valueFromPolicy ? settings.TimeZoneAutoDetectMethod.IP_ONLY :
-                          settings.TimeZoneAutoDetectMethod.DISABLED;
+        valueFromPolicy ? TimeZoneAutoDetectMethod.IP_ONLY :
+                          TimeZoneAutoDetectMethod.DISABLED;
 
     prefsCopy.generated.resolve_timezone_by_geolocation_on_off.controlledBy =
         chrome.settingsPrivate.ControlledBy.USER_POLICY;
@@ -145,7 +143,7 @@
         .enforcement = undefined;
     // Auto-resolve defaults to true.
     prefsCopy.generated.resolve_timezone_by_geolocation_method_short.value =
-        settings.TimeZoneAutoDetectMethod.IP_ONLY;
+        TimeZoneAutoDetectMethod.IP_ONLY;
 
     prefsCopy.settings.timezone.controlledBy = undefined;
     prefsCopy.settings.timezone.enforcement = undefined;
@@ -246,13 +244,13 @@
 
   setup(function() {
     testBrowserProxy = new TestTimeZoneBrowserProxy();
-    settings.TimeZoneBrowserProxyImpl.instance_ = testBrowserProxy;
+    TimeZoneBrowserProxyImpl.instance_ = testBrowserProxy;
     PolymerTest.clearBody();
     CrSettingsPrefs.resetForTesting();
   });
 
   teardown(function() {
-    settings.Router.getInstance().resetRouteForTesting();
+    Router.getInstance().resetRouteForTesting();
   });
 
   function getTimeZoneSelector(id) {
@@ -295,7 +293,7 @@
     testBrowserProxy.setTimeZones(fakeTimeZones);
     const prefs = getFakePrefs();
     dateTime = initializeDateTime(prefs, false);
-    Polymer.dom.flush();
+    flush();
     const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
 
     assertEquals(0, testBrowserProxy.getCallCount('getTimeZones'));
@@ -305,7 +303,7 @@
     verifyTimeZonesPopulated(false);
 
     clickDisableAutoDetect(dateTime);
-    Polymer.dom.flush();
+    flush();
 
     verifyAutoDetectSetting(false, false);
     assertTrue(resolveMethodDropdown.disabled);
@@ -323,7 +321,7 @@
         'prefs.generated.resolve_timezone_by_geolocation_on_off.value', false);
     dateTime.set(
         'prefs.generated.resolve_timezone_by_geolocation_method_short.value',
-        settings.TimeZoneAutoDetectMethod.DISABLED);
+        TimeZoneAutoDetectMethod.DISABLED);
 
     await testBrowserProxy.whenCalled('getTimeZones');
 
@@ -345,13 +343,13 @@
 
     const params = new URLSearchParams;
     params.append('settingId', '1001');
-    settings.Router.getInstance().navigateTo(settings.routes.DATETIME, params);
+    Router.getInstance().navigateTo(routes.DATETIME, params);
 
-    Polymer.dom.flush();
+    flush();
 
     const deepLinkElement = dateTime.$$('#timeZoneAutoDetect')
                                 .shadowRoot.querySelector('cr-toggle');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Auto set time zone toggle should be focused for settingId=1001.');
@@ -361,7 +359,7 @@
     testBrowserProxy.setTimeZones(fakeTimeZones);
     const prefs = getFakePrefs();
     dateTime = initializeDateTime(prefs, true, true);
-    Polymer.dom.flush();
+    flush();
     const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
 
     assertEquals(0, testBrowserProxy.getCallCount('getTimeZones'));
@@ -419,15 +417,14 @@
         'prefs.generated.resolve_timezone_by_geolocation_on_off.value', true);
     dateTime.set(
         'prefs.generated.resolve_timezone_by_geolocation_method_short.value',
-        settings.TimeZoneAutoDetectMethod.IP_ONLY);
+        TimeZoneAutoDetectMethod.IP_ONLY);
 
     // Set fake child account.
     loadTimeData.overrideValues({
       isChild: true,
     });
 
-    await settings.Router.getInstance().navigateTo(
-        settings.routes.DATETIME_TIMEZONE_SUBPAGE);
+    await Router.getInstance().navigateTo(routes.DATETIME_TIMEZONE_SUBPAGE);
 
     const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
     const timezoneSelector = getTimeZoneSelector('#userTimeZoneSelector');
@@ -461,14 +458,13 @@
         'prefs.generated.resolve_timezone_by_geolocation_on_off.value', false);
     dateTime.set(
         'prefs.generated.resolve_timezone_by_geolocation_method_short.value',
-        settings.TimeZoneAutoDetectMethod.DISABLED);
+        TimeZoneAutoDetectMethod.DISABLED);
     // Set fake child account.
     loadTimeData.overrideValues({
       isChild: true,
     });
 
-    await settings.Router.getInstance().navigateTo(
-        settings.routes.DATETIME_TIMEZONE_SUBPAGE);
+    await Router.getInstance().navigateTo(routes.DATETIME_TIMEZONE_SUBPAGE);
 
     const resolveMethodDropdown = dateTime.$$('#timeZoneResolveMethodDropdown');
     const timezoneSelector = getTimeZoneSelector('#userTimeZoneSelector');
@@ -504,7 +500,7 @@
 
     // Make the date and time editable.
     cr.webUIListenerCallback('can-set-date-time-changed', true);
-    await test_util.flushTasks();
+    await flushTasks();
     assertGT(setDateTimeButton.offsetHeight, 0);
 
     assertEquals(0, testBrowserProxy.getCallCount('showSetDateTimeUI'));
diff --git a/chrome/test/data/webui/settings/chromeos/google_assistant_page_test.js b/chrome/test/data/webui/settings/chromeos/google_assistant_page_test.js
index 1b16db72..546fc82 100644
--- a/chrome/test/data/webui/settings/chromeos/google_assistant_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/google_assistant_page_test.js
@@ -2,22 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {ConsentStatus, CrSettingsPrefs, DspHotwordState, GoogleAssistantBrowserProxyImpl, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {waitAfterNextRender} from 'chrome://test/test_util.js';
 
-// #import {ConsentStatus, DspHotwordState} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {GoogleAssistantBrowserProxyImpl} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {TestBrowserProxy} from '../../test_browser_proxy.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+import {TestBrowserProxy} from '../../test_browser_proxy.js';
 
 /**
- * @implements {settings.GoogleAssistantBrowserProxy}
+ * @implements {GoogleAssistantBrowserProxy}
  */
 class TestGoogleAssistantBrowserProxy extends TestBrowserProxy {
   constructor() {
@@ -60,7 +54,7 @@
 
   setup(function() {
     browserProxy = new TestGoogleAssistantBrowserProxy();
-    settings.GoogleAssistantBrowserProxyImpl.instance_ = browserProxy;
+    GoogleAssistantBrowserProxyImpl.instance_ = browserProxy;
 
     PolymerTest.clearBody();
 
@@ -79,7 +73,7 @@
   });
 
   test('toggleAssistant', function() {
-    Polymer.dom.flush();
+    flush();
     const button = page.$$('#google-assistant-enable');
     assertTrue(!!button);
     assertFalse(button.disabled);
@@ -87,7 +81,7 @@
 
     // Tap the enable toggle button and ensure the state becomes enabled.
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(button.checked);
   });
 
@@ -96,14 +90,14 @@
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
     page.setPrefValue('settings.voice_interaction.context.enabled', false);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-context-enable');
     assertTrue(!!button);
     assertFalse(button.disabled);
     assertFalse(button.checked);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(button.checked);
     assertTrue(
         page.getPref('settings.voice_interaction.context.enabled.value'));
@@ -114,14 +108,14 @@
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
     page.setPrefValue('settings.voice_interaction.hotword.enabled', false);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-hotword-enable');
     assertTrue(!!button);
     assertFalse(button.disabled);
     assertFalse(button.checked);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(button.checked);
     assertTrue(
         page.getPref('settings.voice_interaction.hotword.enabled.value'));
@@ -133,7 +127,7 @@
     assertFalse(!!button);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     button = page.$$('#google-assistant-hotword-enable');
     assertTrue(!!button);
@@ -147,7 +141,7 @@
       value: false,
     });
 
-    Polymer.dom.flush();
+    flush();
     const button = page.$$('#google-assistant-hotword-enable');
     const indicator = page.$$('#google-assistant-hotword-enable')
                           .shadowRoot.querySelector('cr-policy-pref-indicator');
@@ -164,12 +158,12 @@
     page.setPrefValue(
         'settings.voice_interaction.activity_control.consent_status',
         ConsentStatus.kActivityControlAccepted);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#retrain-voice-model');
     assertTrue(!!button);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     return browserProxy.whenCalled('retrainAssistantVoiceModel');
   });
 
@@ -177,21 +171,21 @@
     let button = page.$$('#retrain-voice-model');
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#retrain-voice-model');
     assertFalse(!!button);
 
     // Hotword disabled.
     // Button should not be shown.
     page.setPrefValue('settings.voice_interaction.hotword.enabled', false);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#retrain-voice-model');
     assertFalse(!!button);
 
     // Hotword enabled.
     // Button should be shown.
     page.setPrefValue('settings.voice_interaction.hotword.enabled', true);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#retrain-voice-model');
     assertTrue(!!button);
   });
@@ -202,16 +196,15 @@
     page.setPrefValue(
         'settings.voice_interaction.activity_control.consent_status',
         ConsentStatus.kActivityControlAccepted);
-    Polymer.dom.flush();
+    flush();
 
     const params = new URLSearchParams;
     params.append('settingId', '607');
-    settings.Router.getInstance().navigateTo(
-        settings.routes.GOOGLE_ASSISTANT, params);
+    Router.getInstance().navigateTo(routes.GOOGLE_ASSISTANT, params);
 
     const deepLinkElement =
         page.$$('#retrain-voice-model').shadowRoot.querySelector('cr-button');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Retrain model button should be focused for settingId=607.');
@@ -222,14 +215,14 @@
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
     page.setPrefValue('settings.voice_interaction.notification.enabled', false);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-notification-enable');
     assertTrue(!!button);
     assertFalse(button.disabled);
     assertFalse(button.checked);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(button.checked);
     assertTrue(
         page.getPref('settings.voice_interaction.notification.enabled.value'));
@@ -240,14 +233,14 @@
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
     page.setPrefValue('settings.voice_interaction.launch_with_mic_open', false);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-launch-with-mic-open');
     assertTrue(!!button);
     assertFalse(button.disabled);
     assertFalse(button.checked);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     assertTrue(button.checked);
     assertTrue(
         page.getPref('settings.voice_interaction.launch_with_mic_open.value'));
@@ -257,12 +250,12 @@
     let button = page.$$('#google-assistant-settings');
     assertFalse(!!button);
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-settings');
     assertTrue(!!button);
 
     button.click();
-    Polymer.dom.flush();
+    flush();
     return browserProxy.whenCalled('showGoogleAssistantSettings');
   });
 
@@ -272,14 +265,14 @@
     assertFalse(button.disabled);
     assertFalse(button.checked);
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
     button = page.$$('#google-assistant-enable');
     assertTrue(!!button);
     assertFalse(button.disabled);
     assertTrue(button.checked);
 
     page.setPrefValue('settings.assistant.disabled_by_policy', true);
-    Polymer.dom.flush();
+    flush();
     assertTrue(!!button);
     assertTrue(button.disabled);
     assertFalse(button.checked);
@@ -302,7 +295,7 @@
 
   setup(function() {
     browserProxy = new TestGoogleAssistantBrowserProxy();
-    settings.GoogleAssistantBrowserProxyImpl.instance_ = browserProxy;
+    GoogleAssistantBrowserProxyImpl.instance_ = browserProxy;
 
     PolymerTest.clearBody();
 
@@ -313,7 +306,7 @@
       page = document.createElement('settings-google-assistant-page');
       page.prefs = prefElement.prefs;
       document.body.appendChild(page);
-      Polymer.dom.flush();
+      flush();
     });
   });
 
@@ -328,7 +321,7 @@
   function selectValue(select, value) {
     select.value = value;
     select.dispatchEvent(new CustomEvent('change'));
-    Polymer.dom.flush();
+    flush();
   }
 
   test('hotwordToggleVisibilityWithNoDspHotword', function() {
@@ -336,7 +329,7 @@
     assertFalse(!!toggle);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     toggle = page.$$('#google-assistant-hotword-enable');
     assertFalse(!!toggle);
@@ -347,7 +340,7 @@
     assertFalse(!!container);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     container = page.$$('#dsp-hotword-container');
     assertTrue(!!container);
@@ -363,7 +356,7 @@
       value: true,
     });
 
-    Polymer.dom.flush();
+    flush();
     const dropdown = page.$$('#dsp-hotword-state');
     indicator = page.$$('#hotword-policy-pref-indicator');
     assertTrue(!!dropdown);
@@ -381,7 +374,7 @@
       value: true,
     });
 
-    Polymer.dom.flush();
+    flush();
     const dropdown = page.$$('#dsp-hotword-state');
     indicator = page.$$('#hotword-policy-pref-indicator');
     assertTrue(!!dropdown);
@@ -400,7 +393,7 @@
       value: false,
     });
 
-    Polymer.dom.flush();
+    flush();
     const dropdown = page.$$('#dsp-hotword-state');
     indicator = page.$$('#hotword-policy-pref-indicator');
     assertTrue(!!dropdown);
@@ -413,28 +406,28 @@
     assertFalse(!!dropdown);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     dropdown = page.$$('#dsp-hotword-state');
     assertTrue(!!dropdown);
     assertFalse(dropdown.disabled);
 
     selectValue(dropdown, DspHotwordState.DEFAULT_ON);
-    Polymer.dom.flush();
+    flush();
     assertTrue(
         page.getPref('settings.voice_interaction.hotword.enabled.value'));
     assertFalse(
         page.getPref('settings.voice_interaction.hotword.always_on.value'));
 
     selectValue(dropdown, DspHotwordState.ALWAYS_ON);
-    Polymer.dom.flush();
+    flush();
     assertTrue(
         page.getPref('settings.voice_interaction.hotword.enabled.value'));
     assertTrue(
         page.getPref('settings.voice_interaction.hotword.always_on.value'));
 
     selectValue(dropdown, DspHotwordState.OFF);
-    Polymer.dom.flush();
+    flush();
     assertFalse(
         page.getPref('settings.voice_interaction.hotword.enabled.value'));
     assertFalse(
@@ -446,7 +439,7 @@
     assertFalse(!!dropdown);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     dropdown = page.$$('#dsp-hotword-state');
     assertTrue(!!dropdown);
@@ -454,17 +447,17 @@
 
     page.setPrefValue('settings.voice_interaction.hotword.enabled', true);
     page.setPrefValue('settings.voice_interaction.hotword.always_on', false);
-    Polymer.dom.flush();
+    flush();
     assertEquals(Number(dropdown.value), DspHotwordState.DEFAULT_ON);
 
     page.setPrefValue('settings.voice_interaction.hotword.enabled', true);
     page.setPrefValue('settings.voice_interaction.hotword.always_on', true);
-    Polymer.dom.flush();
+    flush();
     assertEquals(Number(dropdown.value), DspHotwordState.ALWAYS_ON);
 
     page.setPrefValue('settings.voice_interaction.hotword.enabled', false);
     page.setPrefValue('settings.voice_interaction.hotword.always_on', false);
-    Polymer.dom.flush();
+    flush();
     assertEquals(Number(dropdown.value), DspHotwordState.OFF);
   });
 
@@ -473,16 +466,16 @@
     assertFalse(!!dropdown);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     dropdown = page.$$('#dsp-hotword-state');
     assertTrue(!!dropdown);
     assertFalse(dropdown.disabled);
     selectValue(dropdown, DspHotwordState.OFF);
-    Polymer.dom.flush();
+    flush();
 
     selectValue(dropdown, DspHotwordState.DEFAULT_ON);
-    Polymer.dom.flush();
+    flush();
     return browserProxy.whenCalled('syncVoiceModelStatus');
   });
 
@@ -491,16 +484,16 @@
     assertFalse(!!dropdown);
 
     page.setPrefValue('settings.voice_interaction.enabled', true);
-    Polymer.dom.flush();
+    flush();
 
     dropdown = page.$$('#dsp-hotword-state');
     assertTrue(!!dropdown);
     assertFalse(dropdown.disabled);
     selectValue(dropdown, DspHotwordState.OFF);
-    Polymer.dom.flush();
+    flush();
 
     selectValue(dropdown, DspHotwordState.ALWAYS_ON);
-    Polymer.dom.flush();
+    flush();
     return browserProxy.whenCalled('syncVoiceModelStatus');
   });
 });
diff --git a/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.js b/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.js
index 2d886df..254cb8c2 100644
--- a/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/input_method_options_page_test.js
@@ -2,13 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/lazy_load.js';
-// #import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {FakeSettingsPrivate} from './fake_settings_private.js';
-// #import {waitAfterNextRender} from '../../test_util.js';
-// clang-format on
+import 'chrome://os-settings/chromeos/lazy_load.js';
+
+import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {waitAfterNextRender} from '../../test_util.js';
+
+import {FakeSettingsPrivate} from './fake_settings_private.js';
 
 /**
  * @fileoverview Suite of tests for the OS Settings input method options page.
@@ -44,7 +45,7 @@
     PolymerTest.clearBody();
     CrSettingsPrefs.deferInitialization = true;
     const settingsPrefs = document.createElement('settings-prefs');
-    settingsPrivate = new settings.FakeSettingsPrivate(getFakePrefs());
+    settingsPrivate = new FakeSettingsPrivate(getFakePrefs());
     settingsPrefs.initialize(settingsPrivate);
     document.body.appendChild(settingsPrefs);
     await CrSettingsPrefs.initialized;
@@ -61,10 +62,10 @@
   function createOptionsPage(id) {
     const params = new URLSearchParams;
     params.append('id', id);
-    settings.Router.getInstance().navigateTo(
-        settings.routes.OS_LANGUAGES_INPUT_METHOD_OPTIONS, params);
+    Router.getInstance().navigateTo(
+        routes.OS_LANGUAGES_INPUT_METHOD_OPTIONS, params);
 
-    Polymer.dom.flush();
+    flush();
   }
 
   test('US English page', () => {
@@ -109,7 +110,7 @@
     assertEquals(select.value, '0');
     select.value = '1';
     select.dispatchEvent(new CustomEvent('change'));
-    await test_util.waitAfterNextRender(select);
+    await waitAfterNextRender(select);
     assertEquals(
         optionsPage.getPref(PREFS_KEY)
             .value['xkb:us::eng']['physicalKeyboardAutoCorrectionLevel'],
@@ -121,7 +122,7 @@
     const toggleButton = options[1].querySelector('cr-toggle');
     assertEquals(toggleButton.checked, false);
     toggleButton.click();
-    await test_util.waitAfterNextRender(toggleButton);
+    await waitAfterNextRender(toggleButton);
     assertEquals(toggleButton.checked, true);
     assertEquals(
         optionsPage.getPref(PREFS_KEY)
diff --git a/chrome/test/data/webui/settings/chromeos/input_page_test.js b/chrome/test/data/webui/settings/chromeos/input_page_test.js
index b557ce8..49316af 100644
--- a/chrome/test/data/webui/settings/chromeos/input_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/input_page_test.js
@@ -2,27 +2,27 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {LanguagesBrowserProxyImpl, LanguagesMetricsProxyImpl, LanguagesPageInteraction, InputsShortcutReminderState} from 'chrome://os-settings/chromeos/lazy_load.js';
-// #import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.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';
-// #import {getFakeLanguagePrefs} from './fake_language_settings_private.js'
-// #import {FakeSettingsPrivate} from './fake_settings_private.js';
-// #import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.js';
-// #import {TestLanguagesMetricsProxy} from './test_os_languages_metrics_proxy.m.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {fakeDataBind} from '../../test_util.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {isVisible, waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {InputsShortcutReminderState, LanguagesBrowserProxyImpl, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from 'chrome://os-settings/chromeos/lazy_load.js';
+import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.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';
+import {isVisible, waitAfterNextRender} from 'chrome://test/test_util.js';
+
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+import {fakeDataBind} from '../../test_util.js';
+
+import {getFakeLanguagePrefs} from './fake_language_settings_private.js';
+import {FakeSettingsPrivate} from './fake_settings_private.js';
+import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.js';
+import {TestLanguagesMetricsProxy} from './test_os_languages_metrics_proxy.m.js';
 
 suite('input page', () => {
   /** @type {!SettingsInputPageElement} */
   let inputPage;
-  /** @type {!settings.LanguagesMetricsProxy} */
+  /** @type {!LanguagesMetricsProxy} */
   let metricsProxy;
-  /** @type {!settings.LanguagesBrowserProxy} */
+  /** @type {!LanguagesBrowserProxy} */
   let browserProxy;
   /** @type {!LanguagesHelper} */
   let languageHelper;
@@ -34,8 +34,7 @@
   setup(() => {
     document.body.innerHTML = '';
     const prefElement = document.createElement('settings-prefs');
-    const settingsPrivate =
-        new settings.FakeSettingsPrivate(settings.getFakeLanguagePrefs());
+    const settingsPrivate = new FakeSettingsPrivate(getFakeLanguagePrefs());
     prefElement.initialize(settingsPrivate);
 
     /**
@@ -98,12 +97,12 @@
 
     return CrSettingsPrefs.initialized.then(() => {
       // Set up test browser proxy.
-      browserProxy = new settings.TestLanguagesBrowserProxy();
-      settings.LanguagesBrowserProxyImpl.setInstance(browserProxy);
+      browserProxy = new TestLanguagesBrowserProxy();
+      LanguagesBrowserProxyImpl.setInstance(browserProxy);
 
       // Sets up test metrics proxy.
-      metricsProxy = new settings.TestLanguagesMetricsProxy();
-      settings.LanguagesMetricsProxyImpl.instance_ = metricsProxy;
+      metricsProxy = new TestLanguagesMetricsProxy();
+      LanguagesMetricsProxyImpl.instance_ = metricsProxy;
 
       // Set up fake languageSettingsPrivate API.
       const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
@@ -112,31 +111,31 @@
       // Instantiate the data model with data bindings for prefs.
       const settingsLanguages = document.createElement('settings-languages');
       settingsLanguages.prefs = prefElement.prefs;
-      test_util.fakeDataBind(prefElement, settingsLanguages, 'prefs');
+      fakeDataBind(prefElement, settingsLanguages, 'prefs');
       document.body.appendChild(settingsLanguages);
 
       // Create page with data bindings for prefs and data model.
       inputPage = document.createElement('os-settings-input-page');
       inputPage.prefs = prefElement.prefs;
-      test_util.fakeDataBind(prefElement, inputPage, 'prefs');
+      fakeDataBind(prefElement, inputPage, 'prefs');
       inputPage.languages = settingsLanguages.languages;
-      test_util.fakeDataBind(settingsLanguages, inputPage, 'languages');
+      fakeDataBind(settingsLanguages, inputPage, 'languages');
       inputPage.languageHelper = settingsLanguages.languageHelper;
-      test_util.fakeDataBind(settingsLanguages, inputPage, 'language-helper');
+      fakeDataBind(settingsLanguages, inputPage, 'language-helper');
       languageHelper = inputPage.languageHelper;
       document.body.appendChild(inputPage);
     });
   });
 
   teardown(function() {
-    settings.Router.getInstance().resetRouteForTesting();
+    Router.getInstance().resetRouteForTesting();
   });
 
   suite('language pack notice', () => {
     test('is shown when needed', () => {
       inputPage.shouldShowLanguagePacksNotice_ = true;
       loadTimeData.overrideValues({languagePacksHandwritingEnabled: true});
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(isVisible(inputPage.$$('#languagePacksNotice')));
     });
@@ -144,7 +143,7 @@
     test('is hidden when needed', () => {
       inputPage.shouldShowLanguagePacksNotice_ = false;
       loadTimeData.overrideValues({languagePacksHandwritingEnabled: false});
-      Polymer.dom.flush();
+      flush();
 
       assertFalse(isVisible(inputPage.$$('#languagePacksNotice')));
     });
@@ -177,7 +176,7 @@
       const inputMethodsList = inputPage.$.inputMethodsList;
       const items = inputMethodsList.querySelectorAll('.list-item');
       items[0].querySelector('.subpage-arrow').click();
-      const router = settings.Router.getInstance();
+      const router = Router.getInstance();
       assertEquals(
           router.getCurrentRoute().getAbsolutePath(),
           'chrome://os-settings/osLanguages/inputMethodOptions');
@@ -198,7 +197,7 @@
 
       // clicks remove input method button.
       items[0].querySelector('.icon-clear').click();
-      Polymer.dom.flush();
+      flush();
 
       inputMethodsList = inputPage.$.inputMethodsList;
       items = inputMethodsList.querySelectorAll('.list-item');
@@ -215,7 +214,7 @@
       // Remove US Dvorak keyboard, so there is only 1 component IME left.
       languageHelper.removeInputMethod(
           '_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us:dvorak:eng');
-      Polymer.dom.flush();
+      flush();
 
       const inputMethodsList = inputPage.$.inputMethodsList;
       const items = inputMethodsList.querySelectorAll('.list-item');
@@ -237,7 +236,7 @@
 
       inputPage.setPrefValue(
           'settings.language.allowed_input_methods', ['xkb:us::eng']);
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(!!inputPage.$$('#inputMethodsManagedbyPolicy'));
     });
@@ -247,14 +246,13 @@
     test('Deep link to spell check', async () => {
       const params = new URLSearchParams;
       params.append('settingId', '1207');
-      settings.Router.getInstance().navigateTo(
-          settings.routes.OS_LANGUAGES_INPUT, params);
+      Router.getInstance().navigateTo(routes.OS_LANGUAGES_INPUT, params);
 
-      Polymer.dom.flush();
+      flush();
 
       const deepLinkElement = inputPage.$$('#enableSpellcheckingToggle')
                                   .shadowRoot.querySelector('cr-toggle');
-      await test_util.waitAfterNextRender(deepLinkElement);
+      await waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
           'Spell check toggle should be focused for settingId=1207.');
@@ -271,7 +269,7 @@
     setup(() => {
       assertFalse(!!inputPage.$$('os-settings-add-input-methods-dialog'));
       inputPage.$$('#addInputMethod').click();
-      Polymer.dom.flush();
+      flush();
 
       dialog = inputPage.$$('os-settings-add-input-methods-dialog');
       assertTrue(!!dialog);
@@ -384,7 +382,7 @@
     test('suggested input methods hidden when no languages is enabled', () => {
       languageHelper.setPrefValue('intl.accept_languages', '');
       languageHelper.setPrefValue('settings.language.preferred_languages', '');
-      Polymer.dom.flush();
+      flush();
 
       suggestedInputMethods = dialog.$$('#suggestedInputMethods');
       // suggested input methods is rendered previously.
@@ -401,7 +399,7 @@
           .forEach(inputMethod => {
             languageHelper.addInputMethod(inputMethod.id);
           });
-      Polymer.dom.flush();
+      flush();
 
       suggestedInputMethods = dialog.$$('#suggestedInputMethods');
       // suggested input methods is rendered previously.
@@ -423,19 +421,19 @@
 
       // Search hides suggestedInputMethods and allInputMethodsLabel.
       searchInput.setValue('v');
-      Polymer.dom.flush();
+      flush();
       assertTrue(dialog.$$('#allInputMethodsLabel').hidden);
       assertEquals('none', getComputedStyle(suggestedInputMethods).display);
 
       // Search input methods name
       searchInput.setValue('vietnamese');
-      Polymer.dom.flush();
+      flush();
       assertEquals(1, getItems().length);
       assertTrue(getItems()[0].textContent.includes('Vietnamese'));
 
       // Search input methods' language
       searchInput.setValue('Turkmen');
-      Polymer.dom.flush();
+      flush();
       assertEquals(1, getItems().length);
       assertTrue(getItems()[0].textContent.includes('Swahili keyboard'));
     });
@@ -446,13 +444,13 @@
 
       // Test that dialog is not closed if 'Escape' is pressed on the input
       // and a search query exists.
-      MockInteractions.keyDownOn(searchInput, 19, [], 'Escape');
+      keyDownOn(searchInput, 19, [], 'Escape');
       assertTrue(dialog.$.dialog.open);
 
       // Test that dialog is closed if 'Escape' is pressed on the input and no
       // search query exists.
       searchInput.setValue('');
-      MockInteractions.keyDownOn(searchInput, 19, [], 'Escape');
+      keyDownOn(searchInput, 19, [], 'Escape');
       assertFalse(dialog.$.dialog.open);
     });
   });
@@ -461,7 +459,7 @@
     test('when deactivating show ime menu', async () => {
       inputPage.setPrefValue('settings.language.ime_menu_activated', true);
       inputPage.$$('#showImeMenu').click();
-      Polymer.dom.flush();
+      flush();
 
       assertFalse(
           await metricsProxy.whenCalled('recordToggleShowInputOptionsOnShelf'));
@@ -470,7 +468,7 @@
     test('when activating show ime menu', async () => {
       inputPage.setPrefValue('settings.language.ime_menu_activated', false);
       inputPage.$$('#showImeMenu').click();
-      Polymer.dom.flush();
+      flush();
 
       assertTrue(
           await metricsProxy.whenCalled('recordToggleShowInputOptionsOnShelf'));
@@ -478,7 +476,7 @@
 
     test('when adding input methods', async () => {
       inputPage.$$('#addInputMethod').click();
-      Polymer.dom.flush();
+      flush();
 
       await metricsProxy.whenCalled('recordAddInputMethod');
     });
@@ -491,7 +489,7 @@
       const items = inputMethodsList.querySelectorAll('.list-item');
       items[0].click();
       assertEquals(
-          settings.LanguagesPageInteraction.SWITCH_INPUT_METHOD,
+          LanguagesPageInteraction.SWITCH_INPUT_METHOD,
           await metricsProxy.whenCalled('recordInteraction'));
     });
 
@@ -499,7 +497,7 @@
       // Enable Update 2.
       inputPage.languageSettingsV2Update2Enabled_ = true;
       loadTimeData.overrideValues({enableLanguageSettingsV2Update2: true});
-      Polymer.dom.flush();
+      flush();
 
       // Default shortcut reminder with two elements should show "last used IME"
       // reminder.
@@ -512,7 +510,7 @@
       // Add US Swahili keyboard, a third party IME.
       languageHelper.addInputMethod(
           'ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:us:sw');
-      Polymer.dom.flush();
+      flush();
 
       // Shortcut reminder should show "next IME" shortcut.
       inputPage.$$('keyboard-shortcut-banner').$.dismiss.click();
@@ -526,7 +524,7 @@
           'ash.shortcut_reminders.last_used_ime_dismissed', false);
       inputPage.setPrefValue(
           'ash.shortcut_reminders.next_ime_dismissed', false);
-      Polymer.dom.flush();
+      flush();
 
       // Shortcut reminder should show both shortcuts.
       inputPage.$$('keyboard-shortcut-banner').$.dismiss.click();
@@ -538,7 +536,7 @@
     test('when clicking on "learn more" about language packs', async () => {
       inputPage.shouldShowLanguagePacksNotice_ = true;
       loadTimeData.overrideValues({languagePacksHandwritingEnabled: true});
-      Polymer.dom.flush();
+      flush();
 
       const anchor = inputPage.$$('#languagePacksNotice').$$('a');
       // The below would normally create a new window, which would change the
@@ -570,7 +568,7 @@
         onDeviceGrammarCheckEnabled: false,
       });
 
-      Polymer.dom.flush();
+      flush();
       // spell check is initially on
       spellCheckToggle = inputPage.$$('#enableSpellcheckingToggle');
       assertTrue(!!spellCheckToggle);
@@ -626,7 +624,7 @@
 
           // toggle off by clicking name
           spellCheckList[0].querySelector('.name-with-error').click();
-          Polymer.dom.flush();
+          flush();
 
           assertFalse(spellCheckLanguageToggle.checked);
           assertDeepEquals(
@@ -639,7 +637,7 @@
 
           // toggle on by clicking name
           spellCheckList[0].querySelector('.name-with-error').click();
-          Polymer.dom.flush();
+          flush();
 
           assertTrue(spellCheckLanguageToggle.checked);
           assertDeepEquals(
@@ -649,7 +647,7 @@
     test('shows force-on existing spell check language', () => {
       // Force-enable an existing language via policy.
       languageHelper.setPrefValue('spellcheck.forced_dictionaries', ['sw']);
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -672,7 +670,7 @@
     test('shows force-on non-enabled spell check language', () => {
       // Force-enable a new language via policy.
       languageHelper.setPrefValue('spellcheck.forced_dictionaries', ['nb']);
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -695,7 +693,7 @@
     test('can disable non-enabled spell check language', () => {
       // Add a new language to spellcheck.dictionaries which isn't enabled.
       languageHelper.setPrefValue('spellcheck.dictionaries', ['en-US', 'nb']);
-      Polymer.dom.flush();
+      flush();
 
       let newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -712,7 +710,7 @@
 
       // Disable nb.
       newSpellCheckList[2].querySelector('cr-toggle').click();
-      Polymer.dom.flush();
+      flush();
       newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
 
@@ -734,7 +732,7 @@
           // Force-disable a language via policy.
           languageHelper.setPrefValue(
               'spellcheck.blocked_dictionaries', ['nb']);
-          Polymer.dom.flush();
+          flush();
           const newSpellCheckList =
               spellCheckListContainer.querySelectorAll('.list-item');
           assertEquals(2, newSpellCheckList.length);
@@ -744,7 +742,7 @@
       // Force-disable a language via policy.
       languageHelper.setPrefValue('spellcheck.blocked_dictionaries', ['nb']);
       languageHelper.enableLanguage('nb');
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -796,7 +794,7 @@
       // Enabling a language without spellcheck support should not add it to
       // the list
       languageHelper.enableLanguage('tk');
-      Polymer.dom.flush();
+      flush();
       assertEquals(spellCheckList.length, spellCheckLanguagesCount);
     });
 
@@ -832,7 +830,7 @@
         {languageCode, isReady: false, downloadFailed: true},
       ]);
 
-      Polymer.dom.flush();
+      flush();
       assertFalse(errorDivs[0].hidden);
       assertFalse(retryButtons[0].hidden);
       assertFalse(retryButtons[0].disabled);
@@ -847,7 +845,7 @@
         {languageCode, isReady: true, downloadFailed: false},
       ]);
 
-      Polymer.dom.flush();
+      flush();
       assertTrue(errorDivs[0].hidden);
       assertTrue(retryButtons[0].hidden);
     });
@@ -874,7 +872,7 @@
       const editDictionarySubpageTrigger =
           inputPage.$$('#editDictionarySubpageTrigger');
       editDictionarySubpageTrigger.click();
-      const router = settings.Router.getInstance();
+      const router = Router.getInstance();
       assertEquals(
           router.getCurrentRoute().getAbsolutePath(),
           'chrome://os-settings/osLanguages/editDictionary');
@@ -898,7 +896,7 @@
         enableLanguageSettingsV2Update2: true,
         onDeviceGrammarCheckEnabled: true,
       });
-      Polymer.dom.flush();
+      flush();
 
       // Spell check is initially on.
       spellCheckToggle = inputPage.$$('#enableSpellcheckingToggle');
@@ -926,7 +924,7 @@
 
       // Remove the language.
       spellCheckLanguageToggle.click();
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -939,7 +937,7 @@
     test('can remove non-enabled language from spell check list', () => {
       // Add a new non-enabled language to spellcheck.dictionaries.
       languageHelper.setPrefValue('spellcheck.dictionaries', ['en-US', 'nb']);
-      Polymer.dom.flush();
+      flush();
 
       let newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -952,7 +950,7 @@
 
       // Remove nb.
       newSpellCheckList[1].querySelector('cr-icon-button').click();
-      Polymer.dom.flush();
+      flush();
       newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
 
@@ -968,7 +966,7 @@
     test('shows force-on spell check language turned on by user', () => {
       // Force-enable a spell check language originally set by the user.
       languageHelper.setPrefValue('spellcheck.forced_dictionaries', ['en-US']);
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -992,7 +990,7 @@
     test('shows force-on enabled spell check language', () => {
       // Force-enable an enabled language via policy.
       languageHelper.setPrefValue('spellcheck.forced_dictionaries', ['sw']);
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -1014,7 +1012,7 @@
     test('shows force-on non-enabled spell check language', () => {
       // Force-enable a non-enabled language via policy.
       languageHelper.setPrefValue('spellcheck.forced_dictionaries', ['nb']);
-      Polymer.dom.flush();
+      flush();
 
       const newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -1037,7 +1035,7 @@
     test('does not show force-off spell check language enabled by user', () => {
       // Force-disable a spell check language originally set by the user.
       languageHelper.setPrefValue('spellcheck.blocked_dictionaries', ['en-US']);
-      Polymer.dom.flush();
+      flush();
 
       // The spell check list should just have "add languages".
       const newSpellCheckList =
@@ -1048,7 +1046,7 @@
     test('does not show force-off enabled spell check language', () => {
       // Force-disable an enabled language via policy.
       languageHelper.setPrefValue('spellcheck.blocked_dictionaries', ['sw']);
-      Polymer.dom.flush();
+      flush();
 
       // The spell check list should be the same (en-US, "add languages").
       const newSpellCheckList =
@@ -1061,7 +1059,7 @@
     test('does not show force-off non-enabled spell check language', () => {
       // Force-disable a non-enabled language via policy.
       languageHelper.setPrefValue('spellcheck.blocked_dictionaries', ['nb']);
-      Polymer.dom.flush();
+      flush();
 
       // The spell check list should be the same (en-US, "add languages").
       const newSpellCheckList =
@@ -1087,7 +1085,7 @@
     test('languages are in sorted order', () => {
       languageHelper.setPrefValue(
           'spellcheck.dictionaries', ['sw', 'en-US', 'nb', 'en-CA']);
-      Polymer.dom.flush();
+      flush();
       // The spell check list should be sorted by display name:
       // English (Canada), English (United States), Norwegian Bokmål, then
       // Swahili.
@@ -1107,7 +1105,7 @@
       const spellCheckLanguageToggle =
           spellCheckList[0].querySelector('cr-icon-button');
       spellCheckLanguageToggle.click();
-      Polymer.dom.flush();
+      flush();
 
       let newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -1128,7 +1126,7 @@
 
       // Add an enabled language (en-US).
       languageHelper.toggleSpellCheck('en-US', true);
-      Polymer.dom.flush();
+      flush();
 
       newSpellCheckList =
           spellCheckListContainer.querySelectorAll('.list-item');
@@ -1144,7 +1142,7 @@
       // Remove en-US from Accept-Language, which is also an enabled spell check
       // language.
       languageHelper.disableLanguage('en-US');
-      Polymer.dom.flush();
+      flush();
 
       // en-US should still be there.
       let newSpellCheckList =
@@ -1155,7 +1153,7 @@
 
       // Add a spell check language not in Accept-Language.
       languageHelper.toggleSpellCheck('nb', true);
-      Polymer.dom.flush();
+      flush();
 
       // The spell check list should now have en-US, nb and "add languages".
       newSpellCheckList =
@@ -1167,7 +1165,7 @@
 
       // Add an arbitrary language to Accept-Language.
       languageHelper.enableLanguage('tk');
-      Polymer.dom.flush();
+      flush();
 
       // The spell check list should remain the same.
       newSpellCheckList =
@@ -1191,7 +1189,7 @@
     test('error handling', () => {
       // Enable Swahili so we have two languages for testing.
       languageHelper.setPrefValue('spellcheck.dictionaries', ['en-US', 'sw']);
-      Polymer.dom.flush();
+      flush();
       const checkAllHidden = nodes => {
         assertTrue(nodes.every(node => node.hidden));
       };
@@ -1211,7 +1209,7 @@
         {languageCode, isReady: false, downloadFailed: true},
       ]);
 
-      Polymer.dom.flush();
+      flush();
       assertFalse(errorDivs[0].hidden);
       assertFalse(retryButtons[0].hidden);
       assertFalse(retryButtons[0].disabled);
@@ -1226,7 +1224,7 @@
         {languageCode, isReady: true, downloadFailed: false},
       ]);
 
-      Polymer.dom.flush();
+      flush();
       assertTrue(errorDivs[0].hidden);
       assertTrue(retryButtons[0].hidden);
     });
@@ -1244,7 +1242,7 @@
       const editDictionarySubpageTrigger =
           inputPage.$$('#editDictionarySubpageTrigger');
       editDictionarySubpageTrigger.click();
-      const router = settings.Router.getInstance();
+      const router = Router.getInstance();
       assertEquals(
           router.getCurrentRoute().getAbsolutePath(),
           'chrome://os-settings/osLanguages/editDictionary');
@@ -1297,12 +1295,12 @@
       // However, we should still set loadTimeData as some other code may use
       // it (such as languages.js).
       loadTimeData.overrideValues({enableLanguageSettingsV2Update2: true});
-      Polymer.dom.flush();
+      flush();
 
       assertFalse(
           !!inputPage.$$('os-settings-add-spellcheck-languages-dialog'));
       inputPage.$$('#addSpellcheckLanguages').click();
-      Polymer.dom.flush();
+      flush();
 
       dialog = inputPage.$$('os-settings-add-spellcheck-languages-dialog');
       assertTrue(!!dialog);
@@ -1427,7 +1425,7 @@
     test('policy disabled languages cannot be selected and show icon', () => {
       // Force-disable sw.
       languageHelper.setPrefValue('spellcheck.blocked_dictionaries', ['sw']);
-      Polymer.dom.flush();
+      flush();
 
       const swCheckboxWithPolicy = getAllLanguagesCheckboxWithPolicies()[1];
       const swCheckbox =
@@ -1443,7 +1441,7 @@
     test('labels do not appear if there are no suggested languages', () => {
       // Disable sw, the only default suggested language, as a web language.
       languageHelper.disableLanguage('sw');
-      Polymer.dom.flush();
+      flush();
 
       // Suggested languages should not show up whatsoever.
       assertFalse(isVisible(suggestedLanguages));
@@ -1455,7 +1453,7 @@
       // Remove en-US from the dictionary list AND the enabled languages list.
       languageHelper.setPrefValue('spellcheck.dictionaries', []);
       languageHelper.disableLanguage('en-US');
-      Polymer.dom.flush();
+      flush();
 
       // Both Swahili (as it is an enabled language) and English (US) (as it is
       // enabled as an input method) should appear in the list.
@@ -1478,19 +1476,19 @@
 
       // Issue query that matches the |displayedName| in lowercase.
       searchInput.setValue('norwegian');
-      Polymer.dom.flush();
+      flush();
       assertEquals(getAllLanguagesCheckboxWithPolicies().length, 1);
       assertTrue(getAllLanguagesCheckboxWithPolicies()[0].textContent.includes(
           'Norwegian Bokmål'));
 
       // Issue query that matches the |nativeDisplayedName|.
       searchInput.setValue('norsk');
-      Polymer.dom.flush();
+      flush();
       assertEquals(getAllLanguagesCheckboxWithPolicies().length, 1);
 
       // Issue query that does not match any language.
       searchInput.setValue('egaugnal');
-      Polymer.dom.flush();
+      flush();
       assertEquals(getAllLanguagesCheckboxWithPolicies().length, 0);
       assertFalse(dialog.$$('#no-search-results').hidden);
     });
@@ -1501,13 +1499,13 @@
 
       // Test that dialog is not closed if 'Escape' is pressed on the input
       // and a search query exists.
-      MockInteractions.keyDownOn(searchInput, 19, [], 'Escape');
+      keyDownOn(searchInput, 19, [], 'Escape');
       assertTrue(dialog.$.dialog.open);
 
       // Test that dialog is closed if 'Escape' is pressed on the input and no
       // search query exists.
       searchInput.setValue('');
-      MockInteractions.keyDownOn(searchInput, 19, [], 'Escape');
+      keyDownOn(searchInput, 19, [], 'Escape');
       assertFalse(dialog.$.dialog.open);
     });
   });
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
index aa686bf..fc5e507 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -288,7 +288,7 @@
     class extends OSSettingsV3BrowserTest {
   /** @override */
   get browsePreload() {
-    return 'chrome://os-settings/test_loader.html?module=settings/chromeos/app_details_item_test.m.js';
+    return 'chrome://os-settings/test_loader.html?module=settings/chromeos/app_management/app_details_item_test.js';
   }
 
   /** @override */
@@ -345,53 +345,65 @@
 [['AccessibilityPage', 'os_a11y_page_tests.m.js'],
  ['AboutPage', 'os_about_page_tests.m.js'],
  ['AccountsPage', 'add_users_tests.m.js'],
- ['AmbientModePage', 'ambient_mode_page_test.m.js'],
- ['AmbientModePhotosPage', 'ambient_mode_photos_page_test.m.js'],
- ['AppsPage', 'apps_page_test.m.js'],
- ['AppNotificationsSubpage', 'app_notifications_subpage_tests.m.js'],
- ['AppManagementAppDetailsItem', 'app_details_item_test.m.js'],
- ['AppManagementAppDetailView', 'app_detail_view_test.m.js'],
- ['AppManagementAppItem', 'app_item_test.m.js'],
- ['AppManagementArcDetailView', 'arc_detail_view_test.m.js'],
- ['AppManagementBorealisDetailView', 'borealis_detail_view_test.m.js'],
- ['AppManagementChromeAppDetailView', 'chrome_app_detail_view_test.m.js'],
- ['AppManagementDomSwitch', 'dom_switch_test.m.js'],
- ['AppManagementFileHandlingItem', 'file_handling_item_test.m.js'],
- ['AppManagementMainView', 'main_view_test.m.js'],
- ['AppManagementManagedApp', 'managed_apps_test.m.js'],
- ['AppManagementPage', 'app_management_page_tests.m.js'],
- ['AppManagementPinToShelfItem', 'pin_to_shelf_item_test.m.js'],
- ['AppManagementPluginVmDetailView', 'plugin_vm_detail_view_test.m.js'],
- ['AppManagementPwaDetailView', 'pwa_detail_view_test.m.js'],
- ['AppManagementReducers', 'reducers_test.m.js'],
- ['AppManagementResizeLockItem', 'resize_lock_item_test.m.js'],
- ['AppManagementSupportedLinksItem', 'supported_links_item_test.m.js'],
- ['AppManagementToggleRow', 'toggle_row_test.m.js'],
- ['AppManagementUninstallButton', 'uninstall_button_test.m.js'],
+ ['AmbientModePage', 'ambient_mode_page_test.js'],
+ ['AmbientModePhotosPage', 'ambient_mode_photos_page_test.js'],
+ ['AppsPage', 'apps_page_test.js'],
+ ['AppNotificationsSubpage', 'app_notifications_subpage_tests.js'],
+ ['AppManagementAppDetailsItem', 'app_management/app_details_item_test.js'],
+ ['AppManagementAppDetailView', 'app_management/app_detail_view_test.js'],
+ ['AppManagementAppItem', 'app_management/app_item_test.js'],
+ ['AppManagementArcDetailView', 'app_management/arc_detail_view_test.js'],
+ [
+   'AppManagementBorealisDetailView',
+   'app_management/borealis_detail_view_test.js'
+ ],
+ [
+   'AppManagementChromeAppDetailView',
+   'app_management/chrome_app_detail_view_test.js'
+ ],
+ ['AppManagementDomSwitch', 'app_management/dom_switch_test.js'],
+ ['AppManagementFileHandlingItem', 'app_management/file_handling_item_test.js'],
+ ['AppManagementMainView', 'app_management/main_view_test.js'],
+ ['AppManagementManagedApp', 'app_management/managed_apps_test.js'],
+ ['AppManagementPage', 'app_management/app_management_page_tests.js'],
+ ['AppManagementPinToShelfItem', 'app_management/pin_to_shelf_item_test.js'],
+ [
+   'AppManagementPluginVmDetailView',
+   'app_management/plugin_vm_detail_view_test.js'
+ ],
+ ['AppManagementPwaDetailView', 'app_management/pwa_detail_view_test.js'],
+ ['AppManagementReducers', 'app_management/reducers_test.js'],
+ ['AppManagementResizeLockItem', 'app_management/resize_lock_item_test.js'],
+ [
+   'AppManagementSupportedLinksItem',
+   'app_management/supported_links_item_test.js'
+ ],
+ ['AppManagementToggleRow', 'app_management/toggle_row_test.js'],
+ ['AppManagementUninstallButton', 'app_management/uninstall_button_test.js'],
  ['BluetoothPage', 'bluetooth_page_tests.js'],
  ['CellularNetworksList', 'cellular_networks_list_test.js'],
  ['CellularRoamingToggleButton', 'cellular_roaming_toggle_button_test.js'],
  ['CellularSetupDialog', 'cellular_setup_dialog_test.js'],
  [
    'DictationChangeLanguageLocaleDialogTest',
-   'change_dictation_locale_dialog_test.m.js'
+   'change_dictation_locale_dialog_test.js'
  ],
  ['CupsPrinterEntry', 'cups_printer_entry_tests.m.js'],
  ['CupsPrinterLandingPage', 'cups_printer_landing_page_tests.m.js'],
  // TODO(crbug/1240970): Re-enable once flakiness is fixed.
  // ['CupsPrinterPage', 'cups_printer_page_tests.m.js'],
- ['DarkModeSubpage', 'dark_mode_subpage_tests.m.js'],
- ['DateTimePage', 'date_time_page_tests.m.js'],
+ ['DarkModeSubpage', 'dark_mode_subpage_tests.js'],
+ ['DateTimePage', 'date_time_page_tests.js'],
  ['EsimInstallErrorDialog', 'esim_install_error_dialog_test.js'],
  ['EsimRemoveProfileDialog', 'esim_remove_profile_dialog_test.js'],
  ['EsimRenameDialog', 'esim_rename_dialog_test.js'],
  ['FilesPage', 'os_files_page_test.m.js'],
  ['FingerprintPage', 'fingerprint_browsertest_chromeos.m.js'],
- ['GoogleAssistantPage', 'google_assistant_page_test.m.js'],
+ ['GoogleAssistantPage', 'google_assistant_page_test.js'],
  ['GuestOsSharedPaths', 'guest_os_shared_paths_test.m.js'],
  ['GuestOsSharedUsbDevices', 'guest_os_shared_usb_devices_test.m.js'],
- ['InputMethodOptionPage', 'input_method_options_page_test.m.js'],
- ['InputPage', 'input_page_test.m.js'],
+ ['InputMethodOptionPage', 'input_method_options_page_test.js'],
+ ['InputPage', 'input_page_test.js'],
  ['InternetConfig', 'internet_config_test.js'],
  ['InternetDetailMenu', 'internet_detail_menu_test.js'],
  ['InternetDetailPage', 'internet_detail_page_tests.js'],
@@ -455,14 +467,14 @@
  ['OsSearchPage', 'os_search_page_test.m.js'],
  ['OsSettingsSearchBox', 'os_settings_search_box_test.m.js'],
  ['OSSettingsMenu', 'os_settings_menu_test.m.js'],
- ['ParentalControlsPage', 'parental_controls_page_test.m.js'],
+ ['ParentalControlsPage', 'parental_controls_page_test.js'],
  ['PeoplePage', 'os_people_page_test.m.js'],
  ['PeoplePageChangePicture', 'people_page_change_picture_test.m.js'],
  [
    'PeoplePageQuickUnlock',
    'quick_unlock_authenticate_browsertest_chromeos.m.js'
  ],
- ['PersonalizationPage', 'personalization_page_test.m.js'],
+ ['PersonalizationPage', 'personalization_page_test.js'],
  ['PrintingPage', 'os_printing_page_tests.m.js'],
  ['PrivacyPage', 'os_privacy_page_test.m.js'],
  ['ResetPage', 'os_reset_page_test.m.js'],
@@ -480,8 +492,8 @@
  ['SwitchAccessSubpage', 'switch_access_subpage_tests.m.js'],
  ['TetherConnectionDialog', 'tether_connection_dialog_test.m.js'],
  ['TextToSpeechSubpage', 'text_to_speech_subpage_tests.m.js'],
- ['TimezoneSelector', 'timezone_selector_test.m.js'],
- ['TimezoneSubpage', 'timezone_subpage_test.m.js'],
+ ['TimezoneSelector', 'timezone_selector_test.js'],
+ ['TimezoneSubpage', 'timezone_subpage_test.js'],
  ['TtsSubpage', 'tts_subpage_test.m.js'],
  ['UserPage', 'user_page_tests.m.js'],
 ].forEach(test => registerTest(...test));
diff --git a/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js b/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js
index fb09842..dea991e7 100644
--- a/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/parental_controls_page_test.js
@@ -2,18 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {osPageVisibility, ParentalControlsBrowserProxy, ParentalControlsBrowserProxyImpl} from 'chrome://os-settings/chromeos/os_settings.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.js';
 
-// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-// #import {osPageVisibility, ParentalControlsBrowserProxyImpl, ParentalControlsBrowserProxy} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {assert} from 'chrome://resources/js/assert.m.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
-/** @implements {parental_controls.ParentalControlsBrowserProxy} */
+/** @implements {ParentalControlsBrowserProxy} */
 class TestParentalControlsBrowserProxy extends TestBrowserProxy {
   constructor() {
     super([
@@ -49,14 +46,14 @@
 
   setup(function() {
     parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
-    parental_controls.ParentalControlsBrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
+    ParentalControlsBrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
 
     PolymerTest.clearBody();
     parentalControlsPage =
         document.createElement('settings-parental-controls-page');
-    parentalControlsPage.pageVisibility = settings.osPageVisibility;
+    parentalControlsPage.pageVisibility = osPageVisibility;
     document.body.appendChild(parentalControlsPage);
-    Polymer.dom.flush();
+    flush();
   });
 
   teardown(function() {
@@ -127,14 +124,14 @@
 
   setup(async function() {
     parentalControlsBrowserProxy = new TestParentalControlsBrowserProxy();
-    parental_controls.ParentalControlsBrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
+    ParentalControlsBrowserProxyImpl.instance_ = parentalControlsBrowserProxy;
 
     PolymerTest.clearBody();
     parentalControlsPage =
         document.createElement('settings-parental-controls-page');
-    parentalControlsPage.pageVisibility = settings.osPageVisibility;
+    parentalControlsPage.pageVisibility = osPageVisibility;
     document.body.appendChild(parentalControlsPage);
-    Polymer.dom.flush();
+    flush();
   });
 
   teardown(function() {
diff --git a/chrome/test/data/webui/settings/chromeos/personalization_page_test.js b/chrome/test/data/webui/settings/chromeos/personalization_page_test.js
index 374c6858..266ff75 100644
--- a/chrome/test/data/webui/settings/chromeos/personalization_page_test.js
+++ b/chrome/test/data/webui/settings/chromeos/personalization_page_test.js
@@ -2,24 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/os_settings.js';
+import {PersonalizationHubBrowserProxyImpl, Router, routes, WallpaperBrowserProxyImpl} from 'chrome://os-settings/chromeos/os_settings.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {flushTasks, waitAfterNextRender} from 'chrome://test/test_util.js';
 
-// #import {PersonalizationHubBrowserProxyImpl, WallpaperBrowserProxyImpl, routes, Router} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {TestPersonalizationHubBrowserProxy} from './test_personalization_hub_browser_proxy.m.js';
-// #import {TestWallpaperBrowserProxy} from './test_wallpaper_browser_proxy.m.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {flushTasks, waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
+
+import {TestPersonalizationHubBrowserProxy} from './test_personalization_hub_browser_proxy.m.js';
+import {TestWallpaperBrowserProxy} from './test_wallpaper_browser_proxy.m.js';
 
 let personalizationPage = null;
 
-/** @type {?settings.TestPersonalizationHubBrowserProxy} */
+/** @type {?TestPersonalizationHubBrowserProxy} */
 let PersonalizationHubBrowserProxy = null;
 
-/** @type {?settings.TestWallpaperBrowserProxy} */
+/** @type {?TestWallpaperBrowserProxy} */
 let WallpaperBrowserProxy = null;
 
 function createPersonalizationPage() {
@@ -53,7 +51,7 @@
   });
 
   document.body.appendChild(personalizationPage);
-  Polymer.dom.flush();
+  flush();
 }
 
 suite('PersonalizationHandler', function() {
@@ -62,19 +60,18 @@
   });
 
   setup(function() {
-    WallpaperBrowserProxy = new settings.TestWallpaperBrowserProxy();
-    settings.WallpaperBrowserProxyImpl.instance_ = WallpaperBrowserProxy;
-    PersonalizationHubBrowserProxy =
-        new settings.TestPersonalizationHubBrowserProxy();
-    settings.PersonalizationHubBrowserProxyImpl.instance_ =
+    WallpaperBrowserProxy = new TestWallpaperBrowserProxy();
+    WallpaperBrowserProxyImpl.instance_ = WallpaperBrowserProxy;
+    PersonalizationHubBrowserProxy = new TestPersonalizationHubBrowserProxy();
+    PersonalizationHubBrowserProxyImpl.instance_ =
         PersonalizationHubBrowserProxy;
     createPersonalizationPage();
   });
 
   teardown(async function() {
     personalizationPage.remove();
-    settings.Router.getInstance().resetRouteForTesting();
-    await test_util.flushTasks();
+    Router.getInstance().resetRouteForTesting();
+    await flushTasks();
   });
 
   test('wallpaperManager', async () => {
@@ -93,7 +90,7 @@
 
   test('wallpaperSettingVisible', function() {
     personalizationPage.showWallpaperRow_ = false;
-    Polymer.dom.flush();
+    flush();
     assertTrue(personalizationPage.$$('#wallpaperButton').hidden);
   });
 
@@ -103,7 +100,7 @@
     WallpaperBrowserProxy.setIsWallpaperPolicyControlled(true);
     createPersonalizationPage();
     await WallpaperBrowserProxy.whenCalled('isWallpaperPolicyControlled');
-    Polymer.dom.flush();
+    flush();
     assertFalse(personalizationPage.$$('#wallpaperPolicyIndicator').hidden);
     assertTrue(personalizationPage.$$('#wallpaperButton').disabled);
   });
@@ -111,13 +108,12 @@
   test('Deep link to open wallpaper button', async () => {
     const params = new URLSearchParams;
     params.append('settingId', '500');
-    settings.Router.getInstance().navigateTo(
-        settings.routes.PERSONALIZATION, params);
+    Router.getInstance().navigateTo(routes.PERSONALIZATION, params);
 
     const deepLinkElement =
         personalizationPage.shadowRoot.getElementById('wallpaperButton')
             .shadowRoot.querySelector('#icon');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Wallpaper button should be focused for settingId=500.');
@@ -128,9 +124,7 @@
         personalizationPage.shadowRoot.getElementById('changePictureRow');
     assertTrue(!!row);
     row.click();
-    assertEquals(
-        settings.routes.CHANGE_PICTURE,
-        settings.Router.getInstance().getCurrentRoute());
+    assertEquals(routes.CHANGE_PICTURE, Router.getInstance().getCurrentRoute());
   });
 
   test('ambientMode', function() {
@@ -141,9 +135,7 @@
       const row = personalizationPage.$$('#ambientModeRow');
       assertTrue(!!row);
       row.click();
-      assertEquals(
-          settings.routes.AMBIENT_MODE,
-          settings.Router.getInstance().getCurrentRoute());
+      assertEquals(routes.AMBIENT_MODE, Router.getInstance().getCurrentRoute());
     }
   });
 
@@ -153,7 +145,7 @@
     // hidden due to no personalization section show in the guest mode.
     loadTimeData.overrideValues({isDarkModeAllowed: true, isGuest: true});
     assertTrue(loadTimeData.getBoolean('isDarkModeAllowed'));
-    Polymer.dom.flush();
+    flush();
     let row = personalizationPage.$$('#darkModeRow');
     assertTrue(!row);
 
@@ -161,20 +153,18 @@
     loadTimeData.overrideValues({isDarkModeAllowed: true, isGuest: false});
     assertFalse(loadTimeData.getBoolean('isGuest'));
     createPersonalizationPage();
-    Polymer.dom.flush();
+    flush();
     row = personalizationPage.$$('#darkModeRow');
     assertFalse(!row);
     row.click();
-    assertTrue(
-        settings.routes.DARK_MODE ===
-        settings.Router.getInstance().getCurrentRoute());
+    assertTrue(routes.DARK_MODE === Router.getInstance().getCurrentRoute());
 
     // Disable dark mode feature and check that dark mode row is hidden.
     loadTimeData.overrideValues({isDarkModeAllowed: false, isGuest: false});
     assertFalse(loadTimeData.getBoolean('isDarkModeAllowed'));
     createPersonalizationPage();
     personalizationPage.prefs.ash.dark_mode.enabled.value = false;
-    Polymer.dom.flush();
+    flush();
     row = personalizationPage.$$('#darkModeRow');
     assertTrue(!row);
   });
@@ -182,19 +172,18 @@
   test('Deep link to change account picture', async () => {
     const params = new URLSearchParams;
     params.append('settingId', '503');
-    settings.Router.getInstance().navigateTo(
-        settings.routes.CHANGE_PICTURE, params);
+    Router.getInstance().navigateTo(routes.CHANGE_PICTURE, params);
 
-    Polymer.dom.flush();
+    flush();
 
-    await test_util.waitAfterNextRender(personalizationPage);
+    await waitAfterNextRender(personalizationPage);
 
     const changePicturePage = personalizationPage.$$('settings-change-picture');
     assertTrue(!!changePicturePage);
     const deepLinkElement = changePicturePage.$$('#pictureList')
                                 .$$('#selector')
                                 .$$('[class="iron-selected"]');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Account picture elem should be focused for settingId=503.');
@@ -204,8 +193,8 @@
     loadTimeData.overrideValues({isPersonalizationHubEnabled: true});
     assertTrue(loadTimeData.getBoolean('isPersonalizationHubEnabled'));
     createPersonalizationPage();
-    Polymer.dom.flush();
-    await test_util.waitAfterNextRender(personalizationPage);
+    flush();
+    await waitAfterNextRender(personalizationPage);
 
     const crLinks =
         personalizationPage.shadowRoot.querySelectorAll('cr-link-row');
@@ -218,8 +207,8 @@
     loadTimeData.overrideValues({isPersonalizationHubEnabled: true});
     assertTrue(loadTimeData.getBoolean('isPersonalizationHubEnabled'));
     createPersonalizationPage();
-    Polymer.dom.flush();
-    await test_util.waitAfterNextRender(personalizationPage);
+    flush();
+    await waitAfterNextRender(personalizationPage);
 
     const hubLink = personalizationPage.shadowRoot.getElementById(
         'personalizationHubButton');
diff --git a/chrome/test/data/webui/settings/chromeos/test_android_apps_browser_proxy.js b/chrome/test/data/webui/settings/chromeos/test_android_apps_browser_proxy.js
index 36c531f..b80d5bc 100644
--- a/chrome/test/data/webui/settings/chromeos/test_android_apps_browser_proxy.js
+++ b/chrome/test/data/webui/settings/chromeos/test_android_apps_browser_proxy.js
@@ -2,12 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import {TestBrowserProxy} from '../../test_browser_proxy.js';
-// clang-format on
+import {TestBrowserProxy} from '../../test_browser_proxy.js';
 
-/** @implements {settings.AndroidAppsBrowserProxy} */
-/* #export */ class TestAndroidAppsBrowserProxy extends TestBrowserProxy {
+/** @implements {AndroidAppsBrowserProxy} */
+export class TestAndroidAppsBrowserProxy extends TestBrowserProxy {
   constructor() {
     super([
       'requestAndroidAppsInfo',
diff --git a/chrome/test/data/webui/settings/chromeos/timezone_selector_test.js b/chrome/test/data/webui/settings/chromeos/timezone_selector_test.js
index 104a769..5ecb934 100644
--- a/chrome/test/data/webui/settings/chromeos/timezone_selector_test.js
+++ b/chrome/test/data/webui/settings/chromeos/timezone_selector_test.js
@@ -2,13 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/lazy_load.js';
+import 'chrome://os-settings/chromeos/lazy_load.js';
 
-// #import {flush} from'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {assertEquals} from '../../chai_assert.js';
-// #import {assert} from 'chrome://resources/js/assert.m.js';
-// clang-format on
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {assertEquals} from '../../chai_assert.js';
 
 suite('TimezoneSelectorTests', function() {
   /** @type {TimezoneSelector} */
@@ -35,7 +34,7 @@
     };
     document.body.appendChild(timezoneSelector);
 
-    Polymer.dom.flush();
+    flush();
 
     assertEquals(null, timezoneSelector.$$('#userTimeZoneSelector'));
     assertEquals(null, timezoneSelector.$$('#systemTimezoneSelector'));
@@ -54,7 +53,7 @@
     };
     document.body.appendChild(timezoneSelector);
 
-    Polymer.dom.flush();
+    flush();
 
     const userTimezoneSelector =
         assert(timezoneSelector.$$('#userTimeZoneSelector'));
diff --git a/chrome/test/data/webui/settings/chromeos/timezone_subpage_test.js b/chrome/test/data/webui/settings/chromeos/timezone_subpage_test.js
index ad8f546..eb2303f 100644
--- a/chrome/test/data/webui/settings/chromeos/timezone_subpage_test.js
+++ b/chrome/test/data/webui/settings/chromeos/timezone_subpage_test.js
@@ -2,17 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// clang-format off
-// #import 'chrome://os-settings/chromeos/lazy_load.js';
+import 'chrome://os-settings/chromeos/lazy_load.js';
 
-// #import {CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js'
-// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
-// #import {assertEquals} from '../../chai_assert.js';
-// #import {assert} from 'chrome://resources/js/assert.m.js';
-// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
-// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
-// #import {waitAfterNextRender} from 'chrome://test/test_util.js';
-// clang-format on
+import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {waitAfterNextRender} from 'chrome://test/test_util.js';
+
+import {assertEquals} from '../../chai_assert.js';
 
 suite('TimezoneSubpageTests', function() {
   /** @type {TimezoneSubpage} */
@@ -34,7 +32,7 @@
   teardown(function() {
     timezoneSubpage.remove();
     CrSettingsPrefs.resetForTesting();
-    settings.Router.getInstance().resetRouteForTesting();
+    Router.getInstance().resetRouteForTesting();
   });
 
   test('Timezone autodetect by geolocation radio', async () => {
@@ -44,13 +42,13 @@
     // Resolve timezone by geolocation is on.
     timezoneSubpage.setPrefValue(
         'generated.resolve_timezone_by_geolocation_on_off', true);
-    Polymer.dom.flush();
+    flush();
     assertEquals('true', timezoneRadioGroup.selected);
 
     // Resolve timezone by geolocation is off.
     timezoneSubpage.setPrefValue(
         'generated.resolve_timezone_by_geolocation_on_off', false);
-    Polymer.dom.flush();
+    flush();
     assertEquals('false', timezoneRadioGroup.selected);
 
     // Set timezone autodetect on by clicking the 'on' radio.
@@ -77,12 +75,11 @@
 
     const params = new URLSearchParams;
     params.append('settingId', '1001');
-    settings.Router.getInstance().navigateTo(
-        settings.routes.DATETIME_TIMEZONE_SUBPAGE, params);
+    Router.getInstance().navigateTo(routes.DATETIME_TIMEZONE_SUBPAGE, params);
 
     const deepLinkElement =
         timezoneSubpage.$$('#timeZoneAutoDetectOn').$$('#button');
-    await test_util.waitAfterNextRender(deepLinkElement);
+    await waitAfterNextRender(deepLinkElement);
     assertEquals(
         deepLinkElement, getDeepActiveElement(),
         'Auto set time zone toggle should be focused for settingId=1001.');
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index 1de48f5..aa1f90d7 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -191,6 +191,52 @@
 
   # https://crbug.com/1309331
   "policy.CookiesAllowedForUrls",
+
+  # https://crbug.com/1307582
+  "policy.AccessibilityPolicies.docked_magnifier",
+
+  # https://crbug.com/1307940
+  "policy.URLCheck.blocklist",
+
+  # https://crbug.com/1309114
+  "policy.BlockThirdPartyCookies.lacros",
+
+  # https://crbug.com/1309288
+  "policy.AudioCaptureAllowed",
+  "policy.AlternateErrorPagesEnabled",
+
+  # https://crbug.com/1309289
+  "policy.AllowDeletingBrowserHistory",
+
+  # https://crbug.com/1307750
+  "dlp.DataLeakPreventionRulesListPrinting.ash_blocked",
+  "dlp.DataLeakPreventionRulesListPrinting.ash_allowed",
+
+  # https://crbug.com/1309052
+  "policy.ShowHomeButton",
+  "policy.ShowLogoutButtonInTray",
+
+  # https://crbug.com/1309075
+  "policy.AccessibilityPolicies.virtual_keyboard",
+  "policy.AccessibilityPolicies.spoken_feedback",
+
+  # https://crbug.com/1309466
+  "arc.StartStop.vm",
+
+  # https://crbug.com/1309492
+  "inputs.VirtualKeyboardGlideTyping.clamshell_a11y_floating",
+  "inputs.VirtualKeyboardChangeInput.a11y",
+  "arc.DragDrop.chrome_to_android",
+
+  # https://crbug.com/1311081
+  "policy.AutoOpenAllowedForURLs.lacros",
+
+  # https://crbug.com/1312120
+  "oobe.Smoke",
+
+  # https://crbug.com/1312121
+  "policy.DefaultJavaScriptSetting",
+  "policy.CookiesBlockedForUrls",
 ]
 
 # To disable a specific test in lacros_all_tast_tests, add it the following
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 34b8ee4..5c50c86d 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -294,6 +294,7 @@
       "//components/captive_portal/content:unit_tests",
       "//components/cast_certificate:unit_tests",
       "//components/cast_channel:unit_tests",
+      "//components/cast_streaming:unit_tests",
       "//components/certificate_transparency:unit_tests",
       "//components/content_capture/browser:unit_tests",
       "//components/content_settings/browser:unit_tests",
@@ -391,10 +392,7 @@
     ]
 
     if (!is_win) {  #!iOS and!Windows
-      deps += [
-        "//components/cast:unit_tests",
-        "//components/cast_streaming:unit_tests",
-      ]
+      deps += [ "//components/cast:unit_tests" ]
     }
 
     if (!is_fuchsia) {  #!iOS and!Fuchsia
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc
index 696361f0..85a9470 100644
--- a/components/autofill/core/common/autofill_payments_features.cc
+++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -60,6 +60,11 @@
     "AutofillEnableMerchantBoundVirtualCards",
     base::FEATURE_ENABLED_BY_DEFAULT};
 
+// When enabled, enable manual falling component for virtual cards on Android.
+const base::Feature kAutofillEnableManualFallbackForVirtualCards{
+    "AutofillEnableManualFallbackForVirtualCards",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // When enabled, a notification will be displayed on page navigation if the
 // domain has an eligible merchant promo code offer or reward.
 const base::Feature kAutofillEnableOfferNotificationForPromoCodes{
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h
index 43eaafc..ad61063 100644
--- a/components/autofill/core/common/autofill_payments_features.h
+++ b/components/autofill/core/common/autofill_payments_features.h
@@ -21,6 +21,7 @@
 extern const base::Feature kAutofillAutoTriggerManualFallbackForCards;
 extern const base::Feature kAutofillCreditCardAuthentication;
 extern const base::Feature kAutofillCreditCardUploadFeedback;
+extern const base::Feature kAutofillEnableManualFallbackForVirtualCards;
 extern const base::Feature kAutofillEnableMerchantBoundVirtualCards;
 extern const base::Feature kAutofillEnableOfferNotificationForPromoCodes;
 extern const base::Feature kAutofillEnableOffersInClankKeyboardAccessory;
diff --git a/components/cast_streaming/browser/BUILD.gn b/components/cast_streaming/browser/BUILD.gn
index 356a6c1b..f428bc5 100644
--- a/components/cast_streaming/browser/BUILD.gn
+++ b/components/cast_streaming/browser/BUILD.gn
@@ -4,29 +4,6 @@
 
 import("//testing/test.gni")
 
-# TODO(crbug.com/1207718): Remove cast_message_port_impl code from this
-# component and replace with a more general interface.
-# TODO(crbug.com/1208195): Move code to correct place with respect to the
-# /public folder to only expose publicly needed headers.
-source_set("core") {
-  deps = [
-    "//base",
-    "//media",
-  ]
-  public_deps = [
-    "//components/cast/message_port",
-    "//third_party/openscreen/src/cast/common:public",
-    "//third_party/openscreen/src/cast/streaming:common",
-  ]
-  visibility = [ ":*" ]
-  sources = [
-    "cast_message_port_impl.cc",
-    "cast_message_port_impl.h",
-    "message_serialization.cc",
-    "message_serialization.h",
-  ]
-}
-
 source_set("receiver_session_public") {
   deps = [
     "//base",
@@ -40,57 +17,157 @@
   sources = [ "public/receiver_session.h" ]
 }
 
-source_set("receiver_session") {
-  deps = [
-    ":core",
-    ":network_context",
-    ":receiver_session_public",
-    ":streaming_session",
-    "//base",
-    "//media",
-    "//media/mojo/common",
-    "//media/mojo/mojom",
-    "//mojo/public/cpp/system",
-  ]
-  public_deps = [
-    "//components/cast_streaming/public/mojom",
-    "//third_party/openscreen/src/cast/streaming:receiver",
-  ]
-  visibility = [ ":*" ]
-  sources = [
-    "receiver_session_impl.cc",
-    "receiver_session_impl.h",
-  ]
-}
+# MessagePort cannot be used on Windows due to intersection of its PostMessage
+# method with a macro of the same name, so hide the targets that use it and all
+# that depend on it behind a platform check.
+if (!is_win) {
+  # TODO(crbug.com/1207718): Remove cast_message_port_impl code from this
+  # component and replace with a more general interface.
+  # TODO(crbug.com/1208195): Move code to correct place with respect to the
+  # /public folder to only expose publicly needed headers.
+  source_set("core") {
+    deps = [
+      "//base",
+      "//media",
+    ]
+    public_deps = [
+      "//components/cast/message_port",
+      "//third_party/openscreen/src/cast/common:public",
+      "//third_party/openscreen/src/cast/streaming:common",
+    ]
+    visibility = [ ":*" ]
+    sources = [
+      "cast_message_port_impl.cc",
+      "cast_message_port_impl.h",
+      "message_serialization.cc",
+      "message_serialization.h",
+    ]
+  }
 
-source_set("streaming_session") {
-  deps = [
-    ":core",
-    ":receiver_session_public",
-    ":renderer_controls",
-    "//base",
-    "//components/cast_streaming/public",
-    "//components/cast_streaming/public:config_conversions",
-    "//components/cast_streaming/public/mojom",
-    "//components/openscreen_platform",
-    "//media",
-    "//media/mojo/common",
-    "//media/mojo/mojom",
-    "//mojo/public/cpp/system",
-    "//third_party/openscreen/src/cast/common:public",
-    "//third_party/openscreen/src/cast/streaming:receiver",
-    "//third_party/openscreen/src/util",
-  ]
-  public_deps = [ "//components/cast/message_port" ]
-  visibility = [ ":*" ]
-  sources = [
-    "cast_streaming_session.cc",
-    "cast_streaming_session.h",
-    "renderer_controller_config.cc",
-    "renderer_controller_config.h",
-    "stream_consumer.cc",
-    "stream_consumer.h",
-  ]
+  source_set("receiver_session") {
+    deps = [
+      ":core",
+      ":network_context",
+      ":receiver_session_public",
+      ":streaming_session",
+      "//base",
+      "//media",
+      "//media/mojo/common",
+      "//media/mojo/mojom",
+      "//mojo/public/cpp/system",
+    ]
+    public_deps = [
+      "//components/cast_streaming/public/mojom",
+      "//third_party/openscreen/src/cast/streaming:receiver",
+    ]
+    visibility = [ ":*" ]
+    sources = [
+      "receiver_session_impl.cc",
+      "receiver_session_impl.h",
+    ]
+  }
+
+  source_set("streaming_session") {
+    deps = [
+      ":core",
+      ":receiver_session_public",
+      ":renderer_controls",
+      "//base",
+      "//components/cast_streaming/public",
+      "//components/cast_streaming/public:config_conversions",
+      "//components/cast_streaming/public/mojom",
+      "//components/openscreen_platform",
+      "//media",
+      "//media/mojo/common",
+      "//media/mojo/mojom",
+      "//mojo/public/cpp/system",
+      "//third_party/openscreen/src/cast/common:public",
+      "//third_party/openscreen/src/cast/streaming:receiver",
+      "//third_party/openscreen/src/util",
+    ]
+    public_deps = [ "//components/cast/message_port" ]
+    visibility = [ ":*" ]
+    sources = [
+      "cast_streaming_session.cc",
+      "cast_streaming_session.h",
+      "renderer_controller_config.cc",
+      "renderer_controller_config.h",
+      "stream_consumer.cc",
+      "stream_consumer.h",
+    ]
+  }
+
+  # TODO(crbug.com/1207715): Move to /tests directory.
+  source_set("test_sender") {
+    testonly = true
+    deps = [
+      ":core",
+      "//components/cast_streaming/public",
+      "//components/cast_streaming/public:config_conversions",
+      "//media/mojo/common",
+      "//media/mojo/mojom",
+      "//mojo/public/cpp/system",
+      "//third_party/openscreen/src/platform:api",
+      "//third_party/openscreen/src/util",
+    ]
+    public_deps = [
+      "//base",
+      "//components/openscreen_platform",
+      "//media",
+      "//third_party/openscreen/src/cast/common:public",
+      "//third_party/openscreen/src/cast/streaming:sender",
+    ]
+    sources = [
+      "test/cast_message_port_sender_impl.cc",
+      "test/cast_message_port_sender_impl.h",
+      "test/cast_streaming_test_sender.cc",
+      "test/cast_streaming_test_sender.h",
+    ]
+  }
+
+  # TODO(crbug.com/1207715): Move to /tests directory.
+  source_set("test_receiver") {
+    testonly = true
+    deps = [
+      ":streaming_session",
+      "//base",
+      "//components/cast_streaming/public",
+      "//components/cast_streaming/public:config_conversions",
+      "//components/openscreen_platform",
+      "//media",
+      "//media/mojo/common",
+      "//mojo/public/cpp/system",
+      "//third_party/openscreen/src/cast/common:public",
+      "//third_party/openscreen/src/cast/streaming:receiver",
+      "//third_party/openscreen/src/platform:api",
+      "//third_party/openscreen/src/util",
+    ]
+    visibility = [ ":*" ]
+    sources = [
+      "test/cast_streaming_test_receiver.cc",
+      "test/cast_streaming_test_receiver.h",
+    ]
+  }
+
+  # TODO(crbug.com/1207715): Move to /tests directory.
+  test("e2e_tests") {
+    deps = [
+      ":core",
+      ":streaming_session",
+      ":test_receiver",
+      ":test_sender",
+      "//base/test:test_support",
+      "//components/openscreen_platform:openscreen_platform_net",
+      "//media",
+      "//mojo/core/embedder",
+      "//testing/gtest",
+      "//third_party/openscreen/src/platform:api",
+    ]
+    sources = [
+      "cast_streaming_session_unittest.cc",
+      "test/run_all_unittests.cc",
+    ]
+  }
 }
 
 source_set("network_context") {
@@ -131,79 +208,10 @@
     ":network_context",
     ":receiver_session_public",
   ]
-  deps = [ ":receiver_session" ]
-}
 
-# TODO(crbug.com/1207715): Move to /tests directory.
-source_set("test_sender") {
-  testonly = true
-  deps = [
-    ":core",
-    "//components/cast_streaming/public",
-    "//components/cast_streaming/public:config_conversions",
-    "//media/mojo/common",
-    "//media/mojo/mojom",
-    "//mojo/public/cpp/system",
-    "//third_party/openscreen/src/platform:api",
-    "//third_party/openscreen/src/util",
-  ]
-  public_deps = [
-    "//base",
-    "//components/openscreen_platform",
-    "//media",
-    "//third_party/openscreen/src/cast/common:public",
-    "//third_party/openscreen/src/cast/streaming:sender",
-  ]
-  sources = [
-    "test/cast_message_port_sender_impl.cc",
-    "test/cast_message_port_sender_impl.h",
-    "test/cast_streaming_test_sender.cc",
-    "test/cast_streaming_test_sender.h",
-  ]
-}
-
-# TODO(crbug.com/1207715): Move to /tests directory.
-source_set("test_receiver") {
-  testonly = true
-  deps = [
-    ":streaming_session",
-    "//base",
-    "//components/cast_streaming/public",
-    "//components/cast_streaming/public:config_conversions",
-    "//components/openscreen_platform",
-    "//media",
-    "//media/mojo/common",
-    "//mojo/public/cpp/system",
-    "//third_party/openscreen/src/cast/common:public",
-    "//third_party/openscreen/src/cast/streaming:receiver",
-    "//third_party/openscreen/src/platform:api",
-    "//third_party/openscreen/src/util",
-  ]
-  visibility = [ ":*" ]
-  sources = [
-    "test/cast_streaming_test_receiver.cc",
-    "test/cast_streaming_test_receiver.h",
-  ]
-}
-
-# TODO(crbug.com/1207715): Move to /tests directory.
-test("e2e_tests") {
-  deps = [
-    ":core",
-    ":streaming_session",
-    ":test_receiver",
-    ":test_sender",
-    "//base/test:test_support",
-    "//components/openscreen_platform:openscreen_platform_net",
-    "//media",
-    "//mojo/core/embedder",
-    "//testing/gtest",
-    "//third_party/openscreen/src/platform:api",
-  ]
-  sources = [
-    "cast_streaming_session_unittest.cc",
-    "test/run_all_unittests.cc",
-  ]
+  if (!is_win) {
+    deps = [ ":receiver_session" ]
+  }
 }
 
 # TODO(crbug.com/1207721): Add more unit tests for code in this directory.
@@ -211,12 +219,18 @@
   testonly = true
   deps = [
     ":browser",
-    ":core",
     ":renderer_controls",
     "//base",
     "//base/test:test_support",
-    "//components/cast/message_port:test_message_port_receiver",
     "//testing/gtest",
   ]
-  sources = [ "cast_message_port_impl_unittest.cc" ]
+  sources = []
+
+  if (!is_win) {
+    deps += [
+      ":core",
+      "//components/cast/message_port:test_message_port_receiver",
+    ]
+    sources += [ "cast_message_port_impl_unittest.cc" ]
+  }
 }
diff --git a/components/commerce/core/commerce_heuristics_data.cc b/components/commerce/core/commerce_heuristics_data.cc
index 5ddb7c8..170170e 100644
--- a/components/commerce/core/commerce_heuristics_data.cc
+++ b/components/commerce/core/commerce_heuristics_data.cc
@@ -5,6 +5,7 @@
 #include "components/commerce/core/commerce_heuristics_data.h"
 
 #include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
 #include "base/no_destructor.h"
 
 namespace commerce_heuristics {
@@ -65,6 +66,7 @@
     return false;
   }
   hint_heuristics_ = std::move(*hint_json_value->GetIfDict());
+  global_heuristics_string_ = global_json_data;
   global_heuristics_ = std::move(*global_json_value->GetIfDict());
   // Global regex patterns.
   product_skip_pattern_ = ConstructGlobalRegex(kSkipProductPatternType);
@@ -94,6 +96,27 @@
   return GetCommerceHintHeuristics(kMerchantCartURLType, domain);
 }
 
+absl::optional<std::string>
+CommerceHeuristicsData::GetHintHeuristicsJSONForDomain(
+    const std::string& domain) {
+  if (!hint_heuristics_.contains(domain)) {
+    return absl::nullopt;
+  }
+  base::Value::Dict* domain_heuristics = hint_heuristics_.FindDict(domain);
+  if (!domain_heuristics || domain_heuristics->empty()) {
+    return absl::nullopt;
+  }
+  base::Value::Dict res_dic;
+  res_dic.Set(domain, std::move(*domain_heuristics));
+  std::string res_string;
+  base::JSONWriter::Write(res_dic, &res_string);
+  return absl::optional<std::string>(res_string);
+}
+
+absl::optional<std::string> CommerceHeuristicsData::GetGlobalHeuristicsJSON() {
+  return global_heuristics_string_;
+}
+
 const re2::RE2* CommerceHeuristicsData::GetProductSkipPattern() {
   return product_skip_pattern_.get();
 }
diff --git a/components/commerce/core/commerce_heuristics_data.h b/components/commerce/core/commerce_heuristics_data.h
index 0b501b7..3975de3 100644
--- a/components/commerce/core/commerce_heuristics_data.h
+++ b/components/commerce/core/commerce_heuristics_data.h
@@ -39,6 +39,13 @@
   // Try to get merchant cart URL for `domain`.
   absl::optional<std::string> GetMerchantCartURL(const std::string& domain);
 
+  // Try to get hint heuristics JSON data for `domain`.
+  absl::optional<std::string> GetHintHeuristicsJSONForDomain(
+      const std::string& domain);
+
+  // Try to get global heuristics JSON data.
+  absl::optional<std::string> GetGlobalHeuristicsJSON();
+
   // Try to get the product skip pattern.
   const re2::RE2* GetProductSkipPattern();
 
@@ -95,6 +102,7 @@
   base::Version version_;
   base::Value::Dict hint_heuristics_;
   base::Value::Dict global_heuristics_;
+  std::string global_heuristics_string_;
   std::unique_ptr<re2::RE2> product_skip_pattern_;
   std::unique_ptr<re2::RE2> rule_discount_partner_merchant_pattern_;
   std::unique_ptr<re2::RE2> coupon_discount_partner_merchant_pattern_;
diff --git a/components/commerce/core/commerce_heuristics_data_unittest.cc b/components/commerce/core/commerce_heuristics_data_unittest.cc
index 2775093f..7dd04bd0 100644
--- a/components/commerce/core/commerce_heuristics_data_unittest.cc
+++ b/components/commerce/core/commerce_heuristics_data_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/commerce/core/commerce_heuristics_data.h"
+#include "base/strings/string_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace commerce_heuristics {
@@ -56,14 +57,14 @@
   base::Version version1("2022.1.1.1200");
   commerce_heuristics::CommerceHeuristicsData::GetInstance().UpdateVersion(
       version1);
-  ASSERT_EQ(
+  EXPECT_EQ(
       commerce_heuristics::CommerceHeuristicsData::GetInstance().GetVersion(),
       "2022.1.1.1200");
 
   base::Version version2("2022.2.1.1300");
   commerce_heuristics::CommerceHeuristicsData::GetInstance().UpdateVersion(
       version2);
-  ASSERT_EQ(
+  EXPECT_EQ(
       commerce_heuristics::CommerceHeuristicsData::GetInstance().GetVersion(),
       "2022.2.1.1300");
 }
@@ -74,49 +75,49 @@
                                              kGlobalHeuristicsJSONData, "",
                                              ""));
   auto* hint_heuristics = GetHintHeuristics();
-  ASSERT_EQ(hint_heuristics->size(), 3u);
-  ASSERT_TRUE(hint_heuristics->contains("foo.com"));
-  ASSERT_TRUE(hint_heuristics->contains("bar.com"));
-  ASSERT_TRUE(hint_heuristics->contains("baz.com"));
-  ASSERT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("merchant_name"),
+  EXPECT_EQ(hint_heuristics->size(), 3u);
+  EXPECT_TRUE(hint_heuristics->contains("foo.com"));
+  EXPECT_TRUE(hint_heuristics->contains("bar.com"));
+  EXPECT_TRUE(hint_heuristics->contains("baz.com"));
+  EXPECT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("merchant_name"),
             "Foo");
-  ASSERT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("cart_url"),
+  EXPECT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("cart_url"),
             "foo.com/cart");
-  ASSERT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("cart_url_regex"),
+  EXPECT_EQ(*hint_heuristics->FindDict("foo.com")->FindString("cart_url_regex"),
             "foo.com/([^/]+/)?cart");
-  ASSERT_EQ(*hint_heuristics->FindDict("bar.com")->FindString("merchant_name"),
+  EXPECT_EQ(*hint_heuristics->FindDict("bar.com")->FindString("merchant_name"),
             "Bar");
-  ASSERT_EQ(
+  EXPECT_EQ(
       *hint_heuristics->FindDict("bar.com")->FindString("checkout_url_regex"),
       "bar.com/([^/]+/)?checkout");
-  ASSERT_EQ(
+  EXPECT_EQ(
       *hint_heuristics->FindDict("baz.com")->FindString("purchase_url_regex"),
       "baz.com/([^/]+/)?purchase");
   auto* global_heuristics = GetGlobalHeuristics();
-  ASSERT_EQ(global_heuristics->size(), 7u);
-  ASSERT_TRUE(global_heuristics->contains("sensitive_product_regex"));
-  ASSERT_EQ(*global_heuristics->FindString("sensitive_product_regex"),
+  EXPECT_EQ(global_heuristics->size(), 7u);
+  EXPECT_TRUE(global_heuristics->contains("sensitive_product_regex"));
+  EXPECT_EQ(*global_heuristics->FindString("sensitive_product_regex"),
             "\\b\\B");
-  ASSERT_TRUE(
+  EXPECT_TRUE(
       global_heuristics->contains("rule_discount_partner_merchant_regex"));
-  ASSERT_EQ(
+  EXPECT_EQ(
       *global_heuristics->FindString("rule_discount_partner_merchant_regex"),
       "foo");
-  ASSERT_TRUE(
+  EXPECT_TRUE(
       global_heuristics->contains("coupon_discount_partner_merchant_regex"));
-  ASSERT_EQ(
+  EXPECT_EQ(
       *global_heuristics->FindString("coupon_discount_partner_merchant_regex"),
       "bar");
-  ASSERT_TRUE(global_heuristics->contains("cart_page_url_regex"));
-  ASSERT_EQ(*global_heuristics->FindString("cart_page_url_regex"), "cart");
-  ASSERT_TRUE(global_heuristics->contains("checkout_page_url_regex"));
-  ASSERT_EQ(*global_heuristics->FindString("checkout_page_url_regex"),
+  EXPECT_TRUE(global_heuristics->contains("cart_page_url_regex"));
+  EXPECT_EQ(*global_heuristics->FindString("cart_page_url_regex"), "cart");
+  EXPECT_TRUE(global_heuristics->contains("checkout_page_url_regex"));
+  EXPECT_EQ(*global_heuristics->FindString("checkout_page_url_regex"),
             "checkout");
-  ASSERT_TRUE(global_heuristics->contains("purchase_button_text_regex"));
-  ASSERT_EQ(*global_heuristics->FindString("purchase_button_text_regex"),
+  EXPECT_TRUE(global_heuristics->contains("purchase_button_text_regex"));
+  EXPECT_EQ(*global_heuristics->FindString("purchase_button_text_regex"),
             "purchase");
-  ASSERT_TRUE(global_heuristics->contains("add_to_cart_request_regex"));
-  ASSERT_EQ(*global_heuristics->FindString("add_to_cart_request_regex"),
+  EXPECT_TRUE(global_heuristics->contains("add_to_cart_request_regex"));
+  EXPECT_EQ(*global_heuristics->FindString("add_to_cart_request_regex"),
             "add_to_cart");
 }
 
@@ -130,11 +131,11 @@
               "merchant_name": "Bar"
   )###";
 
-  ASSERT_FALSE(commerce_heuristics::CommerceHeuristicsData::GetInstance()
+  EXPECT_FALSE(commerce_heuristics::CommerceHeuristicsData::GetInstance()
                    .PopulateDataFromComponent(broken_hint_json_string,
                                               kGlobalHeuristicsJSONData, "",
                                               ""));
-  ASSERT_FALSE(
+  EXPECT_FALSE(
       commerce_heuristics::CommerceHeuristicsData::GetInstance()
           .PopulateDataFromComponent(kHintHeuristicsJSONData, "{", "", ""));
 }
@@ -145,10 +146,10 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(*data.GetMerchantName("foo.com"), "Foo");
-  ASSERT_EQ(*data.GetMerchantName("bar.com"), "Bar");
-  ASSERT_FALSE(data.GetMerchantName("baz.com").has_value());
-  ASSERT_FALSE(data.GetMerchantName("xyz.com").has_value());
+  EXPECT_EQ(*data.GetMerchantName("foo.com"), "Foo");
+  EXPECT_EQ(*data.GetMerchantName("bar.com"), "Bar");
+  EXPECT_FALSE(data.GetMerchantName("baz.com").has_value());
+  EXPECT_FALSE(data.GetMerchantName("xyz.com").has_value());
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetMerchantCartURL) {
@@ -157,8 +158,8 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(*data.GetMerchantCartURL("foo.com"), "foo.com/cart");
-  ASSERT_FALSE(data.GetMerchantCartURL("baz.com").has_value());
+  EXPECT_EQ(*data.GetMerchantCartURL("foo.com"), "foo.com/cart");
+  EXPECT_FALSE(data.GetMerchantCartURL("baz.com").has_value());
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetProductSkipPattern) {
@@ -167,7 +168,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetProductSkipPattern()->pattern(), "\\b\\B");
+  EXPECT_EQ(data.GetProductSkipPattern()->pattern(), "\\b\\B");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetRuleDiscountPartnerMerchantPattern) {
@@ -176,7 +177,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetRuleDiscountPartnerMerchantPattern()->pattern(), "foo");
+  EXPECT_EQ(data.GetRuleDiscountPartnerMerchantPattern()->pattern(), "foo");
 }
 
 TEST_F(CommerceHeuristicsDataTest,
@@ -186,7 +187,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCouponDiscountPartnerMerchantPattern()->pattern(), "bar");
+  EXPECT_EQ(data.GetCouponDiscountPartnerMerchantPattern()->pattern(), "bar");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetCartPageURLPattern) {
@@ -195,7 +196,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCartPageURLPattern()->pattern(), "cart");
+  EXPECT_EQ(data.GetCartPageURLPattern()->pattern(), "cart");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetCheckoutPageURLPattern) {
@@ -204,7 +205,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCheckoutPageURLPattern()->pattern(), "checkout");
+  EXPECT_EQ(data.GetCheckoutPageURLPattern()->pattern(), "checkout");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetPurchaseButtonTextPattern) {
@@ -213,7 +214,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetPurchaseButtonTextPattern()->pattern(), "purchase");
+  EXPECT_EQ(data.GetPurchaseButtonTextPattern()->pattern(), "purchase");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetAddToCartRequestPattern) {
@@ -222,7 +223,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetAddToCartRequestPattern()->pattern(), "add_to_cart");
+  EXPECT_EQ(data.GetAddToCartRequestPattern()->pattern(), "add_to_cart");
 }
 
 TEST_F(CommerceHeuristicsDataTest, TestGetCartPageURLPatternForDomain) {
@@ -231,7 +232,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCartPageURLPatternForDomain("foo.com")->pattern(),
+  EXPECT_EQ(data.GetCartPageURLPatternForDomain("foo.com")->pattern(),
             "foo.com/([^/]+/)?cart");
 }
 
@@ -241,7 +242,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCheckoutPageURLPatternForDomain("bar.com")->pattern(),
+  EXPECT_EQ(data.GetCheckoutPageURLPatternForDomain("bar.com")->pattern(),
             "bar.com/([^/]+/)?checkout");
 }
 
@@ -251,7 +252,7 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetPurchasePageURLPatternForDomain("baz.com")->pattern(),
+  EXPECT_EQ(data.GetPurchasePageURLPatternForDomain("baz.com")->pattern(),
             "baz.com/([^/]+/)?purchase");
 }
 
@@ -261,11 +262,11 @@
   ASSERT_TRUE(data.PopulateDataFromComponent(
       kHintHeuristicsJSONData, kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_EQ(data.GetCartPageURLPatternForDomain("foo.com")->pattern(),
+  EXPECT_EQ(data.GetCartPageURLPatternForDomain("foo.com")->pattern(),
             "foo.com/([^/]+/)?cart");
-  ASSERT_EQ(data.GetCheckoutPageURLPatternForDomain("bar.com")->pattern(),
+  EXPECT_EQ(data.GetCheckoutPageURLPatternForDomain("bar.com")->pattern(),
             "bar.com/([^/]+/)?checkout");
-  ASSERT_EQ(data.GetPurchasePageURLPatternForDomain("baz.com")->pattern(),
+  EXPECT_EQ(data.GetPurchasePageURLPatternForDomain("baz.com")->pattern(),
             "baz.com/([^/]+/)?purchase");
 
   ASSERT_TRUE(data.PopulateDataFromComponent(
@@ -278,10 +279,57 @@
   )###",
       kGlobalHeuristicsJSONData, "", ""));
 
-  ASSERT_FALSE(data.GetCartPageURLPatternForDomain("foo.com"));
-  ASSERT_FALSE(data.GetCheckoutPageURLPatternForDomain("bar.com"));
-  ASSERT_FALSE(data.GetPurchasePageURLPatternForDomain("baz.com"));
-  ASSERT_EQ(data.GetPurchasePageURLPatternForDomain("qux.com")->pattern(),
+  EXPECT_FALSE(data.GetCartPageURLPatternForDomain("foo.com"));
+  EXPECT_FALSE(data.GetCheckoutPageURLPatternForDomain("bar.com"));
+  EXPECT_FALSE(data.GetPurchasePageURLPatternForDomain("baz.com"));
+  EXPECT_EQ(data.GetPurchasePageURLPatternForDomain("qux.com")->pattern(),
             "qux.com/([^/]+/)?purchase");
 }
+
+TEST_F(CommerceHeuristicsDataTest, TestGetHintHeuristicsJSONForDomain) {
+  auto& data = commerce_heuristics::CommerceHeuristicsData::GetInstance();
+  std::string hint_heuristics_string = R"###(
+      {
+          "foo.com":{
+              "merchant_name":"Foo"
+          },
+          "bar.com":{}
+      }
+  )###";
+  std::string foo_expected = R"###(
+      {
+          "foo.com":{
+              "merchant_name":"Foo"
+          }
+      }
+  )###";
+  foo_expected = base::CollapseWhitespaceASCII(foo_expected, true);
+
+  ASSERT_TRUE(
+      data.PopulateDataFromComponent(hint_heuristics_string, "{}", "", ""));
+
+  auto foo_heuristics =
+      commerce_heuristics::CommerceHeuristicsData::GetInstance()
+          .GetHintHeuristicsJSONForDomain("foo.com");
+  EXPECT_TRUE(foo_heuristics.has_value());
+  EXPECT_EQ(*foo_heuristics, foo_expected);
+  auto bar_heuristics =
+      commerce_heuristics::CommerceHeuristicsData::GetInstance()
+          .GetHintHeuristicsJSONForDomain("bar.com");
+  EXPECT_FALSE(bar_heuristics.has_value());
+}
+
+TEST_F(CommerceHeuristicsDataTest, TestGetGlobalHeuristicsJSON) {
+  auto& data = commerce_heuristics::CommerceHeuristicsData::GetInstance();
+  std::string global_heuristics_string = "{\"cart_pattern\" : \"foo\"}";
+
+  ASSERT_TRUE(
+      data.PopulateDataFromComponent("{}", global_heuristics_string, "", ""));
+
+  auto global_heuristics_optional =
+      commerce_heuristics::CommerceHeuristicsData::GetInstance()
+          .GetGlobalHeuristicsJSON();
+  EXPECT_TRUE(global_heuristics_optional.has_value());
+  EXPECT_EQ(*global_heuristics_optional, global_heuristics_string);
+}
 }  // namespace commerce_heuristics
diff --git a/components/infobars/android/confirm_infobar.cc b/components/infobars/android/confirm_infobar.cc
index 578c355..a0f154dd 100644
--- a/components/infobars/android/confirm_infobar.cc
+++ b/components/infobars/android/confirm_infobar.cc
@@ -52,7 +52,8 @@
   ScopedJavaLocalRef<jobject> java_bitmap;
   if (delegate->GetIconId() == infobars::InfoBarDelegate::kNoIconID &&
       !delegate->GetIcon().IsEmpty()) {
-    java_bitmap = gfx::ConvertToJavaBitmap(*delegate->GetIcon().ToSkBitmap());
+    java_bitmap = gfx::ConvertToJavaBitmap(
+        *delegate->GetIcon().Rasterize(nullptr).bitmap());
   }
 
   return Java_ConfirmInfoBar_create(
diff --git a/components/infobars/core/BUILD.gn b/components/infobars/core/BUILD.gn
index 8882f9c1..4447d21 100644
--- a/components/infobars/core/BUILD.gn
+++ b/components/infobars/core/BUILD.gn
@@ -28,10 +28,10 @@
   public_deps = [
     "//base",
     "//skia",
+    "//ui/base",
   ]
 
   deps = [
-    "//ui/base",
     "//ui/gfx",
     "//ui/gfx/animation",
     "//ui/strings",
diff --git a/components/infobars/core/infobar_delegate.cc b/components/infobars/core/infobar_delegate.cc
index 80a1d73..e3f33ad9 100644
--- a/components/infobars/core/infobar_delegate.cc
+++ b/components/infobars/core/infobar_delegate.cc
@@ -36,20 +36,19 @@
   return empty_icon;
 }
 
-gfx::Image InfoBarDelegate::GetIcon() const {
+ui::ImageModel InfoBarDelegate::GetIcon() const {
 #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID)
   const gfx::VectorIcon& vector_icon = GetVectorIcon();
-  if (!vector_icon.is_empty()) {
-    return gfx::Image(
-        gfx::CreateVectorIcon(vector_icon, 20, gfx::kGoogleBlue500));
-  }
+  if (!vector_icon.is_empty())
+    return ui::ImageModel::FromVectorIcon(vector_icon, ui::kColorAccent, 20);
 #endif
 
   int icon_id = GetIconId();
   return icon_id == kNoIconID
-             ? gfx::Image()
-             : ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
-                   icon_id);
+             ? ui::ImageModel()
+             : ui::ImageModel::FromImage(
+                   ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
+                       icon_id));
 }
 
 std::u16string InfoBarDelegate::GetLinkText() const {
diff --git a/components/infobars/core/infobar_delegate.h b/components/infobars/core/infobar_delegate.h
index 7c1f945..75c3fc5f 100644
--- a/components/infobars/core/infobar_delegate.h
+++ b/components/infobars/core/infobar_delegate.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "build/build_config.h"
+#include "ui/base/models/image_model.h"
 #include "ui/base/window_open_disposition.h"
 #include "url/gurl.h"
 
@@ -229,7 +230,7 @@
   // Most subclasses should not override this; override GetIconId() instead
   // unless the infobar needs to show an image from somewhere other than the
   // resource bundle as its icon.
-  virtual gfx::Image GetIcon() const;
+  virtual ui::ImageModel GetIcon() const;
 
   // Returns the text of the link to be displayed, if any. Otherwise returns
   // an empty string.
diff --git a/components/omnibox/browser/actions/omnibox_action.cc b/components/omnibox/browser/actions/omnibox_action.cc
index 20e31b9..bd78a6b8a 100644
--- a/components/omnibox/browser/actions/omnibox_action.cc
+++ b/components/omnibox/browser/actions/omnibox_action.cc
@@ -89,10 +89,6 @@
 }
 #endif
 
-SkColor OmniboxAction::GetVectorIconColor() const {
-  return SK_ColorTRANSPARENT;
-}
-
 size_t OmniboxAction::EstimateMemoryUsage() const {
   size_t total = 0;
   total += base::trace_event::EstimateMemoryUsage(url_);
diff --git a/components/omnibox/browser/actions/omnibox_action.h b/components/omnibox/browser/actions/omnibox_action.h
index 7179610..6f0ad77 100644
--- a/components/omnibox/browser/actions/omnibox_action.h
+++ b/components/omnibox/browser/actions/omnibox_action.h
@@ -148,10 +148,6 @@
   virtual const gfx::VectorIcon& GetVectorIcon() const;
 #endif
 
-  // Returns SK_ColorTRANSPARENT by default to indicate usage of normal theme
-  // color for suggestion row buttons; or override to force icon color.
-  virtual SkColor GetVectorIconColor() const;
-
   // Estimates RAM usage in bytes for this Action.
   virtual size_t EstimateMemoryUsage() const;
 
diff --git a/components/optimization_guide/core/optimization_guide_enums.h b/components/optimization_guide/core/optimization_guide_enums.h
index a7e817c..7eedee2 100644
--- a/components/optimization_guide/core/optimization_guide_enums.h
+++ b/components/optimization_guide/core/optimization_guide_enums.h
@@ -133,6 +133,46 @@
   kMaxValue = kSpecificVisitForUrlNotFound,
 };
 
+// Different events of the prediction model delivery lifecycle for an
+// OptimizationTarget.
+// Keep in sync with OptimizationGuideModelDeliveryEvent in enums.xml.
+enum class ModelDeliveryEvent {
+  kUnknown = 0,
+
+  // The model was delivered from immediately or after a
+  // successful download.
+  kModelDeliveredAtRegistration = 1,
+  kModelDelivered = 2,
+
+  // GetModelsRequest was sent to the optimization guide server.
+  kGetModelsRequest = 3,
+
+  // Model was requested to be downloaded using download service.
+  kDownloadServiceRequest = 4,
+
+  // Download service started the model download.
+  kModelDownloadStarted = 5,
+
+  // Model got downloaded from the download service.
+  kModelDownloaded = 6,
+
+  // Download service was unavailable.
+  kDownloadServiceUnavailable = 7,
+
+  // GetModelsResponse failed.
+  kGetModelsResponseFailure = 8,
+
+  // Download URL received from model metadata is invalid
+  kDownloadURLInvalid = 9,
+
+  // Model download failed due to download service or verifying the downloaded
+  // model.
+  kModelDownloadFailure = 10,
+
+  // Add new values above this line.
+  kMaxValue = kModelDownloadFailure,
+};
+
 }  // namespace optimization_guide
 
 #endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_OPTIMIZATION_GUIDE_ENUMS_H_
diff --git a/components/optimization_guide/core/prediction_manager.cc b/components/optimization_guide/core/prediction_manager.cc
index f50b03a..fc190d56 100644
--- a/components/optimization_guide/core/prediction_manager.cc
+++ b/components/optimization_guide/core/prediction_manager.cc
@@ -135,6 +135,16 @@
       model_info.version());
 }
 
+void RecordLifecycleState(
+    optimization_guide::proto::OptimizationTarget optimization_target,
+    optimization_guide::ModelDeliveryEvent event) {
+  base::UmaHistogramEnumeration(
+      "OptimizationGuide.PredictionManager.ModelDeliveryEvents." +
+          optimization_guide::GetStringNameForOptimizationTarget(
+              optimization_target),
+      event);
+}
+
 // Returns whether models should be fetched from the
 // remote Optimization Guide Service.
 bool ShouldFetchModels(bool off_the_record, PrefService* pref_service) {
@@ -278,13 +288,15 @@
           << (*model_it->second).GetModelFilePath().AsUTF8Unsafe()
           << "\nHas metadata: " << (model_metadata ? "True" : "False");
     }
+    RecordLifecycleState(optimization_target,
+                         ModelDeliveryEvent::kModelDeliveredAtRegistration);
   }
 
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (registered_optimization_targets_and_metadata_.contains(
-          optimization_target))
+          optimization_target)) {
     return;
-
+  }
   DCHECK(!model_metadata ||
          IsModelMetadataTypeOnServerAllowlist(*model_metadata));
 
@@ -381,6 +393,11 @@
         "DownloadServiceAvailabilityBlockedFetch",
         !download_service_available);
     if (!download_service_available) {
+      for (const auto& optimization_target_and_metadata :
+           registered_optimization_targets_and_metadata_) {
+        RecordLifecycleState(optimization_target_and_metadata.first,
+                             ModelDeliveryEvent::kDownloadServiceUnavailable);
+      }
       // We cannot download any models from the server, so don't refresh them.
       return;
     }
@@ -434,6 +451,8 @@
           << "Fetching models for Optimization Target "
           << model_info.optimization_target();
     }
+    RecordLifecycleState(optimization_target_and_metadata.first,
+                         ModelDeliveryEvent::kGetModelsRequest);
   }
 
   bool fetch_initiated =
@@ -441,7 +460,7 @@
           models_info, active_field_trials, proto::CONTEXT_BATCH_UPDATE_MODELS,
           application_locale_,
           base::BindOnce(&PredictionManager::OnModelsFetched,
-                         ui_weak_ptr_factory_.GetWeakPtr()));
+                         ui_weak_ptr_factory_.GetWeakPtr(), models_info));
 
   if (fetch_initiated)
     SetLastModelFetchAttemptTime(clock_->Now());
@@ -452,12 +471,17 @@
 }
 
 void PredictionManager::OnModelsFetched(
+    const std::vector<proto::ModelInfo> models_request_info,
     absl::optional<std::unique_ptr<proto::GetModelsResponse>>
         get_models_response_data) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (!get_models_response_data)
+  if (!get_models_response_data) {
+    for (const auto& model_info : models_request_info) {
+      RecordLifecycleState(model_info.optimization_target(),
+                           ModelDeliveryEvent::kGetModelsResponseFailure);
+    }
     return;
-
+  }
   SetLastModelFetchSuccessTime(clock_->Now());
 
   if ((*get_models_response_data)->models_size() > 0) {
@@ -491,6 +515,10 @@
           prediction_model_download_manager_->StartDownload(
               download_url, model.model_info().optimization_target());
         }
+        RecordLifecycleState(model.model_info().optimization_target(),
+                             download_url.is_valid()
+                                 ? ModelDeliveryEvent::kDownloadServiceRequest
+                                 : ModelDeliveryEvent::kDownloadURLInvalid);
         base::UmaHistogramBoolean(
             "OptimizationGuide.PredictionManager.IsDownloadUrlValid." +
                 GetStringNameForOptimizationTarget(
@@ -548,6 +576,8 @@
          model.model_info().has_optimization_target());
 
   RecordModelUpdateVersion(model.model_info());
+  RecordLifecycleState(model.model_info().optimization_target(),
+                       ModelDeliveryEvent::kModelDownloaded);
   if (optimization_guide_logger_->ShouldEnableDebugLogs()) {
     OPTIMIZATION_GUIDE_LOGGER(optimization_guide_logger_)
         << "Model Files Downloaded target: "
@@ -574,14 +604,27 @@
   }
 }
 
+void PredictionManager::OnModelDownloadStarted(
+    proto::OptimizationTarget optimization_target) {
+  RecordLifecycleState(optimization_target,
+                       ModelDeliveryEvent::kModelDownloadStarted);
+}
+
+void PredictionManager::OnModelDownloadFailed(
+    proto::OptimizationTarget optimization_target) {
+  RecordLifecycleState(optimization_target,
+                       ModelDeliveryEvent::kModelDownloadFailure);
+}
+
 void PredictionManager::NotifyObserversOfNewModel(
     proto::OptimizationTarget optimization_target,
-    const ModelInfo& model_info) const {
+    const ModelInfo& model_info) {
   auto observers_it =
       registered_observers_for_optimization_targets_.find(optimization_target);
   if (observers_it == registered_observers_for_optimization_targets_.end())
     return;
-
+  RecordLifecycleState(optimization_target,
+                       ModelDeliveryEvent::kModelDelivered);
   for (auto& observer : observers_it->second) {
     observer.OnModelUpdated(optimization_target, model_info);
     if (optimization_guide_logger_->ShouldEnableDebugLogs()) {
diff --git a/components/optimization_guide/core/prediction_manager.h b/components/optimization_guide/core/prediction_manager.h
index 9247fa6..cd702674 100644
--- a/components/optimization_guide/core/prediction_manager.h
+++ b/components/optimization_guide/core/prediction_manager.h
@@ -126,6 +126,10 @@
 
   // PredictionModelDownloadObserver:
   void OnModelReady(const proto::PredictionModel& model) override;
+  void OnModelDownloadStarted(
+      proto::OptimizationTarget optimization_target) override;
+  void OnModelDownloadFailed(
+      proto::OptimizationTarget optimization_target) override;
 
  protected:
   // Process |prediction_models| to be stored in the in memory optimization
@@ -153,7 +157,8 @@
   // the response and stores them for use. The metadata entry containing the
   // time that updates should be fetched from the remote Optimization Guide
   // Service is updated, even when the response is empty.
-  void OnModelsFetched(absl::optional<std::unique_ptr<proto::GetModelsResponse>>
+  void OnModelsFetched(const std::vector<proto::ModelInfo> models_request_info,
+                       absl::optional<std::unique_ptr<proto::GetModelsResponse>>
                            get_models_response_data);
 
   // Callback run after the model and host model features store is fully
@@ -224,7 +229,7 @@
   // Notifies observers of |optimization_target| that the model has been
   // updated.
   void NotifyObserversOfNewModel(proto::OptimizationTarget optimization_target,
-                                 const ModelInfo& model_info) const;
+                                 const ModelInfo& model_info);
 
   // A map of optimization target to the model file containing the model for the
   // target.
diff --git a/components/optimization_guide/core/prediction_manager_unittest.cc b/components/optimization_guide/core/prediction_manager_unittest.cc
index 441bce2..e4e87ed 100644
--- a/components/optimization_guide/core/prediction_manager_unittest.cc
+++ b/components/optimization_guide/core/prediction_manager_unittest.cc
@@ -929,13 +929,16 @@
   prediction_manager()->AddObserverForOptimizationTargetModel(
       proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD, absl::nullopt, &observer);
 
-  SetStoreInitialized();
+  SetStoreInitialized(/*load_models=*/true, /*have_models_in_store=*/false);
   EXPECT_FALSE(prediction_model_fetcher()->models_fetched());
 
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.PredictionManager."
       "DownloadServiceAvailabilityBlockedFetch",
       true, 1);
+  histogram_tester.ExpectUniqueSample(
+      "OptimizationGuide.PredictionManager.ModelDeliveryEvents.PainfulPageLoad",
+      ModelDeliveryEvent::kDownloadServiceUnavailable, 1);
 }
 
 TEST_F(PredictionManagerTest, UpdateModelWithDownloadUrl) {
@@ -999,10 +1002,21 @@
   prediction_manager()->AddObserverForOptimizationTargetModel(
       proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD, absl::nullopt, &observer);
 
+  RunUntilIdle();
+
   histogram_tester.ExpectUniqueSample(
       "OptimizationGuide.PredictionManager.ModelAvailableAtRegistration."
       "PainfulPageLoad",
       true, 1);
+  histogram_tester.ExpectTotalCount(
+      "OptimizationGuide.PredictionManager.ModelDeliveryEvents.PainfulPageLoad",
+      2);
+  histogram_tester.ExpectBucketCount(
+      "OptimizationGuide.PredictionManager.ModelDeliveryEvents.PainfulPageLoad",
+      ModelDeliveryEvent::kModelDownloaded, 1);
+  histogram_tester.ExpectBucketCount(
+      "OptimizationGuide.PredictionManager.ModelDeliveryEvents.PainfulPageLoad",
+      ModelDeliveryEvent::kModelDelivered, 1);
 }
 
 TEST_F(PredictionManagerTest,
diff --git a/components/optimization_guide/core/prediction_model_download_manager.cc b/components/optimization_guide/core/prediction_model_download_manager.cc
index f351ff2..4b44271 100644
--- a/components/optimization_guide/core/prediction_model_download_manager.cc
+++ b/components/optimization_guide/core/prediction_model_download_manager.cc
@@ -96,6 +96,9 @@
 
 }  // namespace
 
+const char kPredictionModelOptimizationTargetCustomDataKey[] =
+    "PredictionModelOptimizationTargetCustomDataKey";
+
 PredictionModelDownloadManager::PredictionModelDownloadManager(
     download::BackgroundDownloadService* download_service,
     const base::FilePath& models_dir_path,
@@ -115,6 +118,8 @@
   download_params.client =
       download::DownloadClient::OPTIMIZATION_GUIDE_PREDICTION_MODELS;
   download_params.guid = base::GenerateGUID();
+  download_params.custom_data[kPredictionModelOptimizationTargetCustomDataKey] =
+      proto::OptimizationTarget_Name(optimization_target);
   download_params.callback =
       base::BindRepeating(&PredictionModelDownloadManager::OnDownloadStarted,
                           ui_weak_ptr_factory_.GetWeakPtr(),
@@ -205,10 +210,13 @@
             optimization_guide::GetStringNameForOptimizationTarget(
                 optimization_target),
         base::TimeTicks::Now() - download_requested_time);
+    for (PredictionModelDownloadObserver& observer : observers_)
+      observer.OnModelDownloadStarted(optimization_target);
   }
 }
 
 void PredictionModelDownloadManager::OnDownloadSucceeded(
+    absl::optional<proto::OptimizationTarget> optimization_target,
     const std::string& guid,
     const base::FilePath& file_path) {
   pending_download_guids_.erase(guid);
@@ -222,15 +230,19 @@
       base::BindOnce(&PredictionModelDownloadManager::ProcessDownload,
                      base::Unretained(this), file_path),
       base::BindOnce(&PredictionModelDownloadManager::StartUnzipping,
-                     ui_weak_ptr_factory_.GetWeakPtr()));
+                     ui_weak_ptr_factory_.GetWeakPtr(), optimization_target));
 }
 
-void PredictionModelDownloadManager::OnDownloadFailed(const std::string& guid) {
+void PredictionModelDownloadManager::OnDownloadFailed(
+    absl::optional<proto::OptimizationTarget> optimization_target,
+    const std::string& guid) {
   pending_download_guids_.erase(guid);
 
   base::UmaHistogramBoolean(
       "OptimizationGuide.PredictionModelDownloadManager.DownloadSucceeded",
       false);
+  if (optimization_target)
+    NotifyModelDownloadFailed(*optimization_target);
 }
 
 absl::optional<std::pair<base::FilePath, base::FilePath>>
@@ -289,12 +301,17 @@
 }
 
 void PredictionModelDownloadManager::StartUnzipping(
+    absl::optional<proto::OptimizationTarget> optimization_target,
     const absl::optional<std::pair<base::FilePath, base::FilePath>>&
         unzip_paths) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (!unzip_paths)
+  if (!unzip_paths) {
+    if (optimization_target) {
+      NotifyModelDownloadFailed(*optimization_target);
+    }
     return;
+  }
 
 #if BUILDFLAG(IS_IOS)
   auto unzipper = unzip::LaunchInProcessUnzipper();
@@ -304,11 +321,12 @@
   unzip::Unzip(
       std::move(unzipper), unzip_paths->first, unzip_paths->second,
       base::BindOnce(&PredictionModelDownloadManager::OnDownloadUnzipped,
-                     ui_weak_ptr_factory_.GetWeakPtr(), unzip_paths->first,
-                     unzip_paths->second));
+                     ui_weak_ptr_factory_.GetWeakPtr(), optimization_target,
+                     unzip_paths->first, unzip_paths->second));
 }
 
 void PredictionModelDownloadManager::OnDownloadUnzipped(
+    absl::optional<proto::OptimizationTarget> optimization_target,
     const base::FilePath& original_file_path,
     const base::FilePath& unzipped_dir_path,
     bool success) {
@@ -320,6 +338,9 @@
       base::BindOnce(base::GetDeleteFileCallback(), original_file_path));
 
   if (!success) {
+    if (optimization_target) {
+      NotifyModelDownloadFailed(*optimization_target);
+    }
     RecordPredictionModelDownloadStatus(
         PredictionModelDownloadStatus::kFailedCrxUnzip);
     return;
@@ -330,7 +351,7 @@
       base::BindOnce(&PredictionModelDownloadManager::ProcessUnzippedContents,
                      models_dir_path_, unzipped_dir_path),
       base::BindOnce(&PredictionModelDownloadManager::NotifyModelReady,
-                     ui_weak_ptr_factory_.GetWeakPtr()));
+                     ui_weak_ptr_factory_.GetWeakPtr(), optimization_target));
 }
 
 // static
@@ -453,14 +474,26 @@
 }
 
 void PredictionModelDownloadManager::NotifyModelReady(
+    absl::optional<proto::OptimizationTarget> optimization_target,
     const absl::optional<proto::PredictionModel>& model) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (!model)
+  if (!model) {
+    if (optimization_target) {
+      NotifyModelDownloadFailed(*optimization_target);
+    }
     return;
+  }
 
   for (PredictionModelDownloadObserver& observer : observers_)
     observer.OnModelReady(*model);
 }
 
+void PredictionModelDownloadManager::NotifyModelDownloadFailed(
+    proto::OptimizationTarget optimization_target) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  for (PredictionModelDownloadObserver& observer : observers_)
+    observer.OnModelDownloadFailed(optimization_target);
+}
+
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/prediction_model_download_manager.h b/components/optimization_guide/core/prediction_model_download_manager.h
index 30c27d2..20191e2 100644
--- a/components/optimization_guide/core/prediction_model_download_manager.h
+++ b/components/optimization_guide/core/prediction_model_download_manager.h
@@ -30,6 +30,8 @@
 class PredictionModel;
 }  // namespace proto
 
+extern const char kPredictionModelOptimizationTargetCustomDataKey[];
+
 // Manages the downloads of prediction models.
 // Keep in sync with OptimizationGuidePredictionModelDownloadState in enums.xml.
 class PredictionModelDownloadManager {
@@ -98,12 +100,18 @@
                          const std::string& guid,
                          download::DownloadParams::StartResult start_result);
 
-  // Invoked when the download as specified by |downloaded_guid| succeeded.
-  void OnDownloadSucceeded(const std::string& downloaded_guid,
-                           const base::FilePath& file_path);
+  // Invoked when the download as specified by |downloaded_guid| succeeded for
+  // |optimization_target|.
+  void OnDownloadSucceeded(
+      absl::optional<proto::OptimizationTarget> optimization_target,
+      const std::string& downloaded_guid,
+      const base::FilePath& file_path);
 
-  // Invoked when the download as specified by |failed_download_guid| failed.
-  void OnDownloadFailed(const std::string& failed_download_guid);
+  // Invoked when the download as specified by |failed_download_guid| failed
+  // for |optimization_target|.
+  void OnDownloadFailed(
+      absl::optional<proto::OptimizationTarget> optimization_target,
+      const std::string& failed_download_guid);
 
   // Verifies the download came from a trusted source and process the downloaded
   // contents. Returns a pair of file paths of the form (src, dst) if
@@ -116,14 +124,17 @@
   // Starts unzipping the contents of |unzip_paths|, if present. |unzip_paths|
   // is a pair of the form (src, dst), if present.
   void StartUnzipping(
+      absl::optional<proto::OptimizationTarget> optimization_target,
       const absl::optional<std::pair<base::FilePath, base::FilePath>>&
           unzip_paths);
 
   // Invoked when the contents of |original_file_path| have been unzipped to
   // |unzipped_dir_path|.
-  void OnDownloadUnzipped(const base::FilePath& original_file_path,
-                          const base::FilePath& unzipped_dir_path,
-                          bool success);
+  void OnDownloadUnzipped(
+      absl::optional<proto::OptimizationTarget> optimization_target,
+      const base::FilePath& original_file_path,
+      const base::FilePath& unzipped_dir_path,
+      bool success);
 
   // Processes the contents in |unzipped_dir_path|.
   //
@@ -133,10 +144,16 @@
       const base::FilePath& model_dir_path,
       const base::FilePath& unzipped_dir_path);
 
-  // Notifies |observers_| that a model is ready.
+  // Notifies |observers_| that a model is ready for |optimization_target|.
   //
   // Must be invoked on the UI thread.
-  void NotifyModelReady(const absl::optional<proto::PredictionModel>& model);
+  void NotifyModelReady(
+      absl::optional<proto::OptimizationTarget> optimization_target,
+      const absl::optional<proto::PredictionModel>& model);
+
+  // Notifies |observers_| that a model download failed for
+  // |optimization_target|.
+  void NotifyModelDownloadFailed(proto::OptimizationTarget optimization_target);
 
   // The set of GUIDs that are still pending download.
   std::set<std::string> pending_download_guids_;
diff --git a/components/optimization_guide/core/prediction_model_download_manager_unittest.cc b/components/optimization_guide/core/prediction_model_download_manager_unittest.cc
index fbc71983..4866849 100644
--- a/components/optimization_guide/core/prediction_model_download_manager_unittest.cc
+++ b/components/optimization_guide/core/prediction_model_download_manager_unittest.cc
@@ -45,6 +45,11 @@
     last_ready_model_ = model;
   }
 
+  void OnModelDownloadStarted(
+      proto::OptimizationTarget optimization_target) override {}
+  void OnModelDownloadFailed(
+      proto::OptimizationTarget optimization_target) override {}
+
   absl::optional<proto::PredictionModel> last_ready_model() const {
     return last_ready_model_;
   }
@@ -118,11 +123,13 @@
                             PredictionModelDownloadFileStatus file_status) {
     WriteFileForStatus(file_status);
     download_manager()->OnDownloadSucceeded(
-        guid, GetFilePathForDownloadFileStatus(file_status));
+        proto::OptimizationTarget::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD, guid,
+        GetFilePathForDownloadFileStatus(file_status));
   }
 
   void SetDownloadFailed(const std::string& guid) {
-    download_manager()->OnDownloadFailed(guid);
+    download_manager()->OnDownloadFailed(
+        proto::OptimizationTarget::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD, guid);
   }
 
   void RunUntilIdle() { task_environment_.RunUntilIdle(); }
diff --git a/components/optimization_guide/core/prediction_model_download_observer.h b/components/optimization_guide/core/prediction_model_download_observer.h
index d3a8172..fcfa41e9 100644
--- a/components/optimization_guide/core/prediction_model_download_observer.h
+++ b/components/optimization_guide/core/prediction_model_download_observer.h
@@ -16,6 +16,14 @@
  public:
   // Invoked when a model has been downloaded and verified.
   virtual void OnModelReady(const proto::PredictionModel& model) = 0;
+
+  // Invoked when a model download started.
+  virtual void OnModelDownloadStarted(
+      proto::OptimizationTarget optimization_target) = 0;
+
+  // Invoked when a model download, its extraction, verification, etc., failed.
+  virtual void OnModelDownloadFailed(
+      proto::OptimizationTarget optimization_target) = 0;
 };
 
 }  // namespace optimization_guide
diff --git a/components/translate/core/browser/BUILD.gn b/components/translate/core/browser/BUILD.gn
index 4d074e5..f57e625 100644
--- a/components/translate/core/browser/BUILD.gn
+++ b/components/translate/core/browser/BUILD.gn
@@ -83,7 +83,7 @@
       "translate_infobar_delegate.cc",
       "translate_infobar_delegate.h",
     ]
-    deps += [ "//components/infobars/core" ]
+    public_deps += [ "//components/infobars/core" ]
   }
 }
 
diff --git a/components/url_pattern_index/README b/components/url_pattern_index/README
deleted file mode 100644
index 755e9df3..0000000
--- a/components/url_pattern_index/README
+++ /dev/null
@@ -1,12 +0,0 @@
-UrlPatternIndex component can be used to build an index over a set of URL rules,
-and speed up matching network requests against these rules.
-
-A URL rule (see flat::UrlRule structure) describes a subset of network requests
-that it targets. The essential element of the rule is its URL pattern, which is
-a simplified regular expression (a string with wildcards). UrlPatternIndex is
-mainly based on text fragments extracted from the patterns.
-
-The component uses FlatBuffers serialization library to represent the rules and
-the index. The key advantage of the format is that it does not require
-deserialization. Once built, the data structure can be stored on disk or
-transferred, then copied/loaded/memory-mapped and used directly.
diff --git a/components/url_pattern_index/README.md b/components/url_pattern_index/README.md
new file mode 100644
index 0000000..99c5878
--- /dev/null
+++ b/components/url_pattern_index/README.md
@@ -0,0 +1,129 @@
+# `UrlPatternIndex` overview
+
+The UrlPatternIndex component can be used to build an index over a set of URL
+rules, and speed up matching network requests against these rules.
+
+A URL rule (see `flat::UrlRule` structure) describes a subset of network
+requests that it targets. The essential element of the rule is its URL pattern,
+which is a simplified regular expression (a string with wildcards).
+`UrlPatternIndex` is mainly based on text fragments extracted from the patterns.
+
+The component uses the [FlatBuffers serialization
+library](https://google.github.io/flatbuffers/) to represent the rules and the
+index. The key advantage of the format is that it does not require
+deserialization. Once built, the data structure can be stored on disk or
+transferred, then copied/loaded/memory-mapped and used directly.
+
+# Detailed design
+
+## `UrlPattern`s
+
+The component is built around an underlying concept of a URL pattern, defined in
+the class `UrlPattern`. These patterns are largely inspired by patterns in
+[EasyList / Adblock Plus filters](https://adblockplus.org/filter-cheatsheet) and
+are documented in more detail in the [declarativeNetRequest
+documentation](https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/#type-RuleCondition).
+
+## Building the index
+
+The underlying goal of the index format is to efficiently check to see if URLs
+match any URL patterns contained in the index. The data structure used here is
+an N-gram filter. An N-gram is a string consisting of N (up to 8) bytes. Currently,
+the component has chosen to use [`kNGramSize = 5`](https://source.chromium.org/chromium/chromium/src/+/main:components/url_pattern_index/url_pattern_index.h;drc=e89a43f45befc5c8e549d765018524d2f81c8765;l=54).
+
+The strategy used in this component is to build a data structure which maps
+`NGram -> vector<UrlRule>`, by finding all N-grams associated with a given URL
+pattern, and picking one of them (the most distinctive one, see
+`UrlPatternIndexBuilder::GetMostDistinctiveNGram`). The URL pattern is then
+inserted into the map associated with that N-gram.
+
+Note: URL patterns have special characters like `*` and `^` which implement
+special wildcard matching. N-grams are built only _between_ these special
+characters.
+
+For example, the URL pattern `foo.com/*abc*` will generate the following 5-grams:
+```
+foo.c
+oo.co
+o.com
+.com/
+```
+
+See
+[url_pattern_index.fbs](https://source.chromium.org/chromium/chromium/src/+/main:components/url_pattern_index/flat/url_pattern_index.fbs)
+for the raw underlying Flatbuffers format which builds the N-gram filter using a
+[custom hash table](https://source.chromium.org/chromium/chromium/src/+/main:components/url_pattern_index/closed_hash_map.h)
+implementation.
+
+## Querying the index
+
+Querying a built index is very similar to building the index in the first place.
+Given a URL, it is broken into all of it's component N-grams, just like the URL
+pattern was above. For example, the URL `https://foo.com/?q=abcdef` would
+generate the following 5-grams:
+```
+https
+ttps:
+tps:/
+ps://
+s://f
+://fo
+//foo
+/foo.
+foo.c
+oo.co
+o.com
+.com/
+com/?
+om/?q
+m/?q=
+/?q=a
+?q=ab
+q=abc
+=abcd
+abcde
+bcdef
+```
+With these N-grams extracted, we can just consider all of the `UrlPattern`s
+which are associated with those N-grams. See `FindMatchInFlatUrlPatternIndex`
+and `FindMatchAmongCandidates` for this logic.
+
+Many of these N-grams match ones that are also present in the `foo.com/*abc*`
+example above , so we can be sure that that URL pattern will be considered
+during pattern evaluation.
+
+## Fallback rules
+You might be thinking "what about URLs whose length is less than N, or
+patterns that generate no N-grams?" We will make sure to put all rules like that
+into a special list called the `fallback_rules` which are applied to every URL
+unconditionally.
+
+## Checking an individual `UrlPattern`
+
+This logic is encapsulated in `UrlPattern::MatchesUrl`. This essentially
+consists of splitting a URL pattern by the `*` wildcard, and considering each
+subpattern in between the `*`s.
+
+There is some complexity here to deal with:
+- `^` separator matching, which matches any ASCII symbol except letters, digits,
+  and the following: `'_', '-', '.', '%'`. See
+  [fuzzy_pattern_matching](https://source.chromium.org/chromium/chromium/src/+/main:components/url_pattern_index/fuzzy_pattern_matching.h).
+- `|` Left/right anchors, which specifies the beginning or end of a URL.
+- `||` Domain anchors, which specifies the start of a (sub-)domain of a URL.
+
+After all this complexity is dealt with, the bulk of the subpattern logic is
+simply `StringPiece::find / std::search`! This component used to use something
+much more complicated ([Knuth-Morris-Pratt
+algorithm](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm)),
+but benchmarking on real URLs proved the simple solution was more optimal (and
+removed the need for a preprocessing step at indexing time), so it was
+[removed](https://codereview.chromium.org/2793993002/).
+
+For example, in checking if `https://foo.com/?q=abcdef` matches `foo.com/*abc*`,
+the component will:
+
+- Split the URL pattern into two pieces: `foo.com/` and `abc`.
+- Try to find `foo.com/` in `https://foo.com/?q=abcdef`, which is a match!
+- Remove the matching prefix
+- Try to find `abc` in `?q=abcdef`, which is a match! This is the last pattern,
+  so return true
\ No newline at end of file
diff --git a/components/user_notes/browser/BUILD.gn b/components/user_notes/browser/BUILD.gn
index 4dfb0a9..42c75d5 100644
--- a/components/user_notes/browser/BUILD.gn
+++ b/components/user_notes/browser/BUILD.gn
@@ -33,6 +33,7 @@
     ":browser",
     "//base/test:test_support",
     "//components/user_notes:features",
+    "//components/user_notes/model:unit_tests",
     "//content/public/browser",
     "//testing/gtest",
   ]
diff --git a/components/user_notes/browser/user_note_service_unittest.cc b/components/user_notes/browser/user_note_service_unittest.cc
index fe233091..cac6cb48 100644
--- a/components/user_notes/browser/user_note_service_unittest.cc
+++ b/components/user_notes/browser/user_note_service_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/test/scoped_feature_list.h"
 #include "components/user_notes/browser/user_notes_manager.h"
+#include "components/user_notes/model/user_note_model_test_utils.h"
 #include "components/user_notes/user_notes_features.h"
 #include "content/public/browser/page.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -53,8 +54,12 @@
     scoped_feature_list_.InitAndEnableFeature(user_notes::kUserNotes);
     note_service_ = std::make_unique<UserNoteService>(
         std::make_unique<UserNoteServiceDelegateMockImpl>());
-    auto note1 = std::make_unique<UserNote>(kNoteId1);
-    auto note2 = std::make_unique<UserNote>(kNoteId2);
+    auto note1 = std::make_unique<UserNote>(kNoteId1, GetTestUserNoteMetadata(),
+                                            GetTestUserNoteBody(),
+                                            GetTestUserNotePageTarget());
+    auto note2 = std::make_unique<UserNote>(kNoteId2, GetTestUserNoteMetadata(),
+                                            GetTestUserNoteBody(),
+                                            GetTestUserNotePageTarget());
     UserNoteService::ModelMapEntry entry1(std::move(note1));
     UserNoteService::ModelMapEntry entry2(std::move(note2));
     note_service_->model_map_.emplace(kNoteId1, std::move(entry1));
diff --git a/components/user_notes/browser/user_notes_manager_unittest.cc b/components/user_notes/browser/user_notes_manager_unittest.cc
index 260ae90..4701f26 100644
--- a/components/user_notes/browser/user_notes_manager_unittest.cc
+++ b/components/user_notes/browser/user_notes_manager_unittest.cc
@@ -8,6 +8,7 @@
 
 #include "base/test/scoped_feature_list.h"
 #include "components/user_notes/browser/user_note_service.h"
+#include "components/user_notes/model/user_note_model_test_utils.h"
 #include "components/user_notes/user_notes_features.h"
 #include "content/public/browser/page.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -54,9 +55,15 @@
     scoped_feature_list_.InitAndEnableFeature(user_notes::kUserNotes);
     note_service_ = std::make_unique<UserNoteService>(
         std::make_unique<UserNoteServiceDelegateMockImpl>());
-    UserNoteService::ModelMapEntry entry1(std::make_unique<UserNote>(kNoteId1));
-    UserNoteService::ModelMapEntry entry2(std::make_unique<UserNote>(kNoteId2));
-    UserNoteService::ModelMapEntry entry3(std::make_unique<UserNote>(kNoteId3));
+    UserNoteService::ModelMapEntry entry1(std::make_unique<UserNote>(
+        kNoteId1, GetTestUserNoteMetadata(), GetTestUserNoteBody(),
+        GetTestUserNotePageTarget()));
+    UserNoteService::ModelMapEntry entry2(std::make_unique<UserNote>(
+        kNoteId2, GetTestUserNoteMetadata(), GetTestUserNoteBody(),
+        GetTestUserNotePageTarget()));
+    UserNoteService::ModelMapEntry entry3(std::make_unique<UserNote>(
+        kNoteId3, GetTestUserNoteMetadata(), GetTestUserNoteBody(),
+        GetTestUserNotePageTarget()));
     note_service_->model_map_.emplace(kNoteId1, std::move(entry1));
     note_service_->model_map_.emplace(kNoteId2, std::move(entry2));
     note_service_->model_map_.emplace(kNoteId3, std::move(entry3));
diff --git a/components/user_notes/model/BUILD.gn b/components/user_notes/model/BUILD.gn
index 9593d43..5a413f5 100644
--- a/components/user_notes/model/BUILD.gn
+++ b/components/user_notes/model/BUILD.gn
@@ -6,9 +6,29 @@
   sources = [
     "user_note.cc",
     "user_note.h",
+    "user_note_body.cc",
+    "user_note_body.h",
     "user_note_metadata.cc",
     "user_note_metadata.h",
+    "user_note_target.cc",
+    "user_note_target.h",
   ]
 
-  deps = [ "//base" ]
+  deps = [
+    "//base",
+    "//url",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "user_note_model_test_utils.cc",
+    "user_note_model_test_utils.h",
+  ]
+
+  deps = [
+    ":model",
+    "//base",
+  ]
 }
diff --git a/components/user_notes/model/user_note.cc b/components/user_notes/model/user_note.cc
index 9c07dbdf..e542ba9 100644
--- a/components/user_notes/model/user_note.cc
+++ b/components/user_notes/model/user_note.cc
@@ -6,7 +6,11 @@
 
 namespace user_notes {
 
-UserNote::UserNote(const std::string& guid) : guid_(guid) {}
+UserNote::UserNote(const std::string& guid,
+                   std::unique_ptr<UserNoteMetadata> metadata,
+                   std::unique_ptr<UserNoteBody> body,
+                   std::unique_ptr<UserNoteTarget> target)
+    : guid_(guid), metadata_(std::move(metadata)), target_(std::move(target)) {}
 
 UserNote::~UserNote() = default;
 
diff --git a/components/user_notes/model/user_note.h b/components/user_notes/model/user_note.h
index 99a799a..667a747f 100644
--- a/components/user_notes/model/user_note.h
+++ b/components/user_notes/model/user_note.h
@@ -9,13 +9,19 @@
 
 #include "base/memory/safe_ref.h"
 #include "base/memory/weak_ptr.h"
+#include "components/user_notes/model/user_note_body.h"
+#include "components/user_notes/model/user_note_metadata.h"
+#include "components/user_notes/model/user_note_target.h"
 
 namespace user_notes {
 
 // Model class for a note.
 class UserNote {
  public:
-  explicit UserNote(const std::string& guid);
+  explicit UserNote(const std::string& guid,
+                    std::unique_ptr<UserNoteMetadata> metadata,
+                    std::unique_ptr<UserNoteBody> body,
+                    std::unique_ptr<UserNoteTarget> target);
   ~UserNote();
   UserNote(const UserNote&) = delete;
   UserNote& operator=(const UserNote&) = delete;
@@ -23,11 +29,18 @@
   base::SafeRef<UserNote> GetSafeRef();
 
   const std::string& guid() const { return guid_; }
+  const UserNoteMetadata& metadata() const { return *metadata_; }
+  const UserNoteBody& body() const { return *body_; }
+  const UserNoteTarget& target() const { return *target_; }
 
  private:
   // The unique (among the user's notes) ID for this note.
   std::string guid_;
 
+  std::unique_ptr<UserNoteMetadata> metadata_;
+  std::unique_ptr<UserNoteBody> body_;
+  std::unique_ptr<UserNoteTarget> target_;
+
   base::WeakPtrFactory<UserNote> weak_ptr_factory_{this};
 };
 
diff --git a/components/user_notes/model/user_note_body.cc b/components/user_notes/model/user_note_body.cc
new file mode 100644
index 0000000..d0d8a5d3
--- /dev/null
+++ b/components/user_notes/model/user_note_body.cc
@@ -0,0 +1,14 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/user_notes/model/user_note_body.h"
+
+namespace user_notes {
+
+UserNoteBody::UserNoteBody(const std::string& plain_text_value)
+    : plain_text_value_(plain_text_value) {}
+
+UserNoteBody::~UserNoteBody() = default;
+
+}  // namespace user_notes
diff --git a/components/user_notes/model/user_note_body.h b/components/user_notes/model/user_note_body.h
new file mode 100644
index 0000000..b80acae
--- /dev/null
+++ b/components/user_notes/model/user_note_body.h
@@ -0,0 +1,36 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_USER_NOTES_MODEL_USER_NOTE_BODY_H_
+#define COMPONENTS_USER_NOTES_MODEL_USER_NOTE_BODY_H_
+
+#include <string>
+
+namespace user_notes {
+
+// Model class for a note body.
+class UserNoteBody {
+ public:
+  enum BodyType { PLAIN_TEXT = 0, RICH_TEXT, IMAGE };
+
+  explicit UserNoteBody(const std::string& plain_text_value);
+  ~UserNoteBody();
+  UserNoteBody(const UserNoteBody&) = delete;
+  UserNoteBody& operator=(const UserNoteBody&) = delete;
+
+  BodyType type() const { return type_; }
+
+  const std::string& plain_text_value() const { return plain_text_value_; }
+
+ private:
+  // The type of body this note has. Currently only plain text is supported.
+  BodyType type_ = BodyType::PLAIN_TEXT;
+
+  // The note body in plain text
+  std::string plain_text_value_;
+};
+
+}  // namespace user_notes
+
+#endif  // COMPONENTS_USER_NOTES_MODEL_USER_NOTE_BODY_H_
diff --git a/components/user_notes/model/user_note_metadata.cc b/components/user_notes/model/user_note_metadata.cc
index fc1a60f..2697253 100644
--- a/components/user_notes/model/user_note_metadata.cc
+++ b/components/user_notes/model/user_note_metadata.cc
@@ -6,7 +6,12 @@
 
 namespace user_notes {
 
-UserNoteMetadata::UserNoteMetadata() = default;
+UserNoteMetadata::UserNoteMetadata(base::Time creation_date,
+                                   base::Time modification_date,
+                                   int min_note_version)
+    : creation_date_(creation_date),
+      modification_date_(modification_date),
+      min_note_version_(min_note_version) {}
 
 UserNoteMetadata::~UserNoteMetadata() = default;
 
diff --git a/components/user_notes/model/user_note_metadata.h b/components/user_notes/model/user_note_metadata.h
index 5a4f7bf..0801c21a 100644
--- a/components/user_notes/model/user_note_metadata.h
+++ b/components/user_notes/model/user_note_metadata.h
@@ -5,15 +5,33 @@
 #ifndef COMPONENTS_USER_NOTES_MODEL_USER_NOTE_METADATA_H_
 #define COMPONENTS_USER_NOTES_MODEL_USER_NOTE_METADATA_H_
 
+#include "base/time/time.h"
+
 namespace user_notes {
 
 // Model class for a note.
 class UserNoteMetadata {
  public:
-  explicit UserNoteMetadata();
+  explicit UserNoteMetadata(base::Time creation_date,
+                            base::Time modification_date,
+                            int min_note_version);
   ~UserNoteMetadata();
   UserNoteMetadata(const UserNoteMetadata&) = delete;
   UserNoteMetadata& operator=(const UserNoteMetadata&) = delete;
+
+  base::Time creation_date() const { return creation_date_; }
+  base::Time modification_date() const { return modification_date_; }
+  int min_note_version() const { return min_note_version_; }
+
+ private:
+  // The date and time (stored in seconds UTC) when the note was created.
+  base::Time creation_date_;
+
+  // The date and time (stored in seconds UTC) when the note was last modified.
+  base::Time modification_date_;
+
+  // The minimum User Note version required to support this note.
+  int min_note_version_;
 };
 
 }  // namespace user_notes
diff --git a/components/user_notes/model/user_note_model_test_utils.cc b/components/user_notes/model/user_note_model_test_utils.cc
new file mode 100644
index 0000000..61ed258
--- /dev/null
+++ b/components/user_notes/model/user_note_model_test_utils.cc
@@ -0,0 +1,26 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/user_notes/model/user_note_model_test_utils.h"
+
+#include "base/time/time.h"
+
+namespace user_notes {
+
+std::unique_ptr<UserNoteMetadata> GetTestUserNoteMetadata() {
+  base::Time now = base::Time::Now();
+  int note_version = 1;
+  return std::make_unique<UserNoteMetadata>(now, now, note_version);
+}
+
+std::unique_ptr<UserNoteBody> GetTestUserNoteBody() {
+  return std::make_unique<UserNoteBody>("test note");
+}
+
+std::unique_ptr<UserNoteTarget> GetTestUserNotePageTarget() {
+  return std::make_unique<UserNoteTarget>(UserNoteTarget::TargetType::PAGE, "",
+                                          GURL("www.exmaple.com"), "");
+}
+
+}  // namespace user_notes
diff --git a/components/user_notes/model/user_note_model_test_utils.h b/components/user_notes/model/user_note_model_test_utils.h
new file mode 100644
index 0000000..acef1b6
--- /dev/null
+++ b/components/user_notes/model/user_note_model_test_utils.h
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_USER_NOTES_MODEL_USER_NOTE_MODEL_TEST_UTILS_H_
+#define COMPONENTS_USER_NOTES_MODEL_USER_NOTE_MODEL_TEST_UTILS_H_
+
+#include "base/time/time.h"
+#include "components/user_notes/model/user_note_body.h"
+#include "components/user_notes/model/user_note_metadata.h"
+#include "components/user_notes/model/user_note_target.h"
+
+namespace user_notes {
+
+extern std::unique_ptr<UserNoteMetadata> GetTestUserNoteMetadata();
+
+extern std::unique_ptr<UserNoteBody> GetTestUserNoteBody();
+
+extern std::unique_ptr<UserNoteTarget> GetTestUserNotePageTarget();
+
+}  // namespace user_notes
+
+#endif  // COMPONENTS_USER_NOTES_MODEL_USER_NOTE_MODEL_TEST_UTILS_H_
\ No newline at end of file
diff --git a/components/user_notes/model/user_note_target.cc b/components/user_notes/model/user_note_target.cc
new file mode 100644
index 0000000..1630d62b
--- /dev/null
+++ b/components/user_notes/model/user_note_target.cc
@@ -0,0 +1,20 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/user_notes/model/user_note_target.h"
+
+namespace user_notes {
+
+UserNoteTarget::UserNoteTarget(TargetType type,
+                               const std::string& original_text,
+                               GURL target_page,
+                               const std::string& selector)
+    : type_(type),
+      original_text_(original_text),
+      target_page_(target_page),
+      selector_(selector) {}
+
+UserNoteTarget::~UserNoteTarget() = default;
+
+}  // namespace user_notes
diff --git a/components/user_notes/model/user_note_target.h b/components/user_notes/model/user_note_target.h
new file mode 100644
index 0000000..670a5fa
--- /dev/null
+++ b/components/user_notes/model/user_note_target.h
@@ -0,0 +1,50 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_USER_NOTES_MODEL_USER_NOTE_TARGET_H_
+#define COMPONENTS_USER_NOTES_MODEL_USER_NOTE_TARGET_H_
+
+#include <string>
+
+#include "url/gurl.h"
+
+namespace user_notes {
+
+// Model class for a note target.
+class UserNoteTarget {
+ public:
+  enum TargetType { PAGE = 0, PAGE_TEXT };
+
+  explicit UserNoteTarget(TargetType type,
+                          const std::string& original_text,
+                          GURL target_page,
+                          const std::string& selector);
+  ~UserNoteTarget();
+  UserNoteTarget(const UserNoteTarget&) = delete;
+  UserNoteTarget& operator=(const UserNoteTarget&) = delete;
+
+  TargetType type() const { return type_; }
+  const std::string& original_text() const { return original_text_; }
+  const GURL& target_page() const { return target_page_; }
+  const std::string& selector() const { return selector_; }
+
+ private:
+  // The type of target. Currently only page and page text is supported.
+  TargetType type_;
+
+  // The original text to which the note was attached. Useful if the page
+  // changes. Empty for `TargetType::PAGE`.
+  std::string original_text_;
+
+  // The URL of the page the note is attached to.
+  GURL target_page_;
+
+  // The text fragment selector that identifies the `original_text_`.
+  // Empty for `TargetType::PAGE`.
+  std::string selector_;
+};
+
+}  // namespace user_notes
+
+#endif  // COMPONENTS_USER_NOTES_MODEL_USER_NOTE_TARGET_H_
diff --git a/components/viz/common/quads/render_pass_io.cc b/components/viz/common/quads/render_pass_io.cc
index 929e2cfd..b8432acaf 100644
--- a/components/viz/common/quads/render_pass_io.cc
+++ b/components/viz/common/quads/render_pass_io.cc
@@ -330,6 +330,28 @@
   return true;
 }
 
+base::Value MaskFilterInfoToDict(const gfx::MaskFilterInfo& mask_filter_info) {
+  base::Value dict(base::Value::Type::DICTIONARY);
+  dict.SetKey("rounded_corner_bounds",
+              RRectFToDict(mask_filter_info.rounded_corner_bounds()));
+  return dict;
+}
+
+bool MaskFilterInfoFromDict(const base::Value& dict, gfx::MaskFilterInfo* out) {
+  DCHECK(out);
+  if (!dict.is_dict())
+    return false;
+  const base::Value* rounded_corner_bounds =
+      dict.FindDictKey("rounded_corner_bounds");
+  if (!rounded_corner_bounds)
+    return false;
+  gfx::RRectF t_rounded_corner_bounds;
+  if (!RRectFFromDict(*rounded_corner_bounds, &t_rounded_corner_bounds))
+    return false;
+  *out = gfx::MaskFilterInfo(t_rounded_corner_bounds);
+  return true;
+}
+
 base::Value TransformToList(const gfx::Transform& transform) {
   base::Value list(base::Value::Type::LIST);
   float data[16];
@@ -1653,8 +1675,7 @@
   dict.SetKey("quad_layer_rect", RectToDict(sqs.quad_layer_rect));
   dict.SetKey("visible_quad_layer_rect",
               RectToDict(sqs.visible_quad_layer_rect));
-  dict.SetKey("rounded_corner_bounds",
-              RRectFToDict(sqs.mask_filter_info.rounded_corner_bounds()));
+  dict.SetKey("mask_filter_info", MaskFilterInfoToDict(sqs.mask_filter_info));
   if (sqs.clip_rect) {
     dict.SetKey("clip_rect", RectToDict(*sqs.clip_rect));
   }
@@ -1713,8 +1734,7 @@
   const base::Value* quad_layer_rect = dict.FindDictKey("quad_layer_rect");
   const base::Value* visible_quad_layer_rect =
       dict.FindDictKey("visible_quad_layer_rect");
-  const base::Value* rounded_corner_bounds =
-      dict.FindDictKey("rounded_corner_bounds");
+  const base::Value* mask_filter_info = dict.FindDictKey("mask_filter_info");
   const base::Value* clip_rect = dict.FindDictKey("clip_rect");
   absl::optional<bool> is_clipped = dict.FindBoolKey("is_clipped");
   absl::optional<bool> are_contents_opaque =
@@ -1729,19 +1749,19 @@
       dict.FindDoubleKey("de_jelly_delta_y");
 
   if (!quad_to_target_transform || !quad_layer_rect ||
-      !visible_quad_layer_rect || !rounded_corner_bounds ||
-      !are_contents_opaque || !opacity || !blend_mode || !sorting_context_id ||
+      !visible_quad_layer_rect || !mask_filter_info || !are_contents_opaque ||
+      !opacity || !blend_mode || !sorting_context_id ||
       !is_fast_rounded_corner || !de_jelly_delta_y) {
     return false;
   }
   gfx::Transform t_quad_to_target_transform;
   gfx::Rect t_quad_layer_rect, t_visible_quad_layer_rect, t_clip_rect;
-  gfx::RRectF t_rounded_corner_bounds;
+  gfx::MaskFilterInfo t_mask_filter_info;
   if (!TransformFromList(*quad_to_target_transform,
                          &t_quad_to_target_transform) ||
       !RectFromDict(*quad_layer_rect, &t_quad_layer_rect) ||
       !RectFromDict(*visible_quad_layer_rect, &t_visible_quad_layer_rect) ||
-      !RRectFFromDict(*rounded_corner_bounds, &t_rounded_corner_bounds) ||
+      !MaskFilterInfoFromDict(*mask_filter_info, &t_mask_filter_info) ||
       (clip_rect && !RectFromDict(*clip_rect, &t_clip_rect))) {
     return false;
   }
@@ -1761,9 +1781,8 @@
   if (blend_mode_index < 0)
     return false;
   SkBlendMode t_blend_mode = static_cast<SkBlendMode>(blend_mode_index);
-  gfx::MaskFilterInfo mask_filter_info(t_rounded_corner_bounds);
   sqs->SetAll(t_quad_to_target_transform, t_quad_layer_rect,
-              t_visible_quad_layer_rect, mask_filter_info, clip_rect_opt,
+              t_visible_quad_layer_rect, t_mask_filter_info, clip_rect_opt,
               are_contents_opaque.value(), static_cast<float>(opacity.value()),
               t_blend_mode, sorting_context_id.value());
   sqs->is_fast_rounded_corner = is_fast_rounded_corner.value();
diff --git a/components/viz/common/quads/shared_quad_state.h b/components/viz/common/quads/shared_quad_state.h
index 1771abc7..81290b1 100644
--- a/components/viz/common/quads/shared_quad_state.h
+++ b/components/viz/common/quads/shared_quad_state.h
@@ -55,7 +55,8 @@
   // of the quad rects.
   gfx::Rect visible_quad_layer_rect;
   // This mask filter's coordinates is in the target content space. It defines
-  // the corner radius to clip the quads with.
+  // the corner radius to clip the quads with, and the gradient mask applied to
+  // the clip rect given by the Rect part of |roudned_corner_bounds|.
   gfx::MaskFilterInfo mask_filter_info;
   // This rect lives in the target content space.
   absl::optional<gfx::Rect> clip_rect;
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc
index 5de72ac..72e19f32 100644
--- a/components/viz/service/display/overlay_unittest.cc
+++ b/components/viz/service/display/overlay_unittest.cc
@@ -2864,7 +2864,8 @@
   sqs->overlay_damage_index = 0;
   surface_damage_rect_list.emplace_back(damage_rect_);
   sqs->mask_filter_info =
-      gfx::MaskFilterInfo(gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f));
+      gfx::MaskFilterInfo(gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f),
+                          gfx::LinearGradient::GetEmpty());
   CreateFullscreenCandidateQuad(resource_provider_.get(),
                                 child_resource_provider_.get(),
                                 child_provider_.get(), sqs, pass.get());
@@ -3104,8 +3105,9 @@
     sqs->overlay_damage_index = 0;
     surface_damage_rect_list.emplace_back(damage_rect_);
     if (kHasMaskFilter[i]) {
-      sqs->mask_filter_info = gfx::MaskFilterInfo(gfx::RectF(kOverlayRect),
-                                                  gfx::RoundedCornersF(1.f));
+      sqs->mask_filter_info = gfx::MaskFilterInfo(
+          gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f),
+          gfx::LinearGradient::GetEmpty());
     }
     CreateCandidateQuadAt(resource_provider_.get(),
                           child_resource_provider_.get(), child_provider_.get(),
@@ -3890,7 +3892,8 @@
   sqs->overlay_damage_index = 0;
   surface_damage_rect_list.emplace_back(damage_rect_);
   sqs->mask_filter_info =
-      gfx::MaskFilterInfo(gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f));
+      gfx::MaskFilterInfo(gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f),
+                          gfx::LinearGradient::GetEmpty());
   CreateVideoHoleDrawQuadAt(sqs, pass.get(), kOverlayRect);
 
   OverlayCandidateList candidate_list;
@@ -5068,8 +5071,9 @@
       // Create a candidate in the bottom left that won't be promoted.
       auto* sqs = pass->CreateAndAppendSharedQuadState();
       if (mask_filter) {
-        sqs->mask_filter_info = gfx::MaskFilterInfo(gfx::RectF(kOverlayRect),
-                                                    gfx::RoundedCornersF(1.f));
+        sqs->mask_filter_info = gfx::MaskFilterInfo(
+            gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f),
+            gfx::LinearGradient::GetEmpty());
       }
       sqs->overlay_damage_index = surface_damage_rect_list.size();
       surface_damage_rect_list.emplace_back(kBottomLeft);
@@ -5082,8 +5086,9 @@
       // Create an underlay candidate in the top right.
       auto* sqs = pass->CreateAndAppendSharedQuadState();
       if (mask_filter) {
-        sqs->mask_filter_info = gfx::MaskFilterInfo(gfx::RectF(kOverlayRect),
-                                                    gfx::RoundedCornersF(1.f));
+        sqs->mask_filter_info = gfx::MaskFilterInfo(
+            gfx::RectF(kOverlayRect), gfx::RoundedCornersF(1.f),
+            gfx::LinearGradient::GetEmpty());
       }
       sqs->overlay_damage_index = surface_damage_rect_list.size();
       surface_damage_rect_list.emplace_back(kTopRight);
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc
index 4ccc732..1016312 100644
--- a/components/viz/service/display/renderer_pixeltest.cc
+++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -55,7 +55,7 @@
 #include "third_party/skia/include/core/SkSurface.h"
 #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
 #include "ui/gfx/color_transform.h"
-#include "ui/gfx/geometry/rect_conversions.h"
+#include "ui/gfx/geometry/mask_filter_info.h"
 #include "ui/gfx/test/icc_profiles.h"
 
 using gpu::gles2::GLES2Interface;
@@ -150,12 +150,11 @@
     gfx::Transform quad_to_target_transform,
     const gfx::Rect& rect,
     AggregatedRenderPass* render_pass,
-    const gfx::RRectF& rrect) {
+    const gfx::MaskFilterInfo& mask_filter_info) {
   const gfx::Rect layer_rect = rect;
   const gfx::Rect visible_layer_rect = rect;
   const bool are_contents_opaque = false;
   const float opacity = 1.0f;
-  const gfx::MaskFilterInfo mask_filter_info(rrect);
   const SkBlendMode blend_mode = SkBlendMode::kSrcOver;
   int sorting_context_id = 0;
   SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState();
@@ -868,8 +867,9 @@
   front_quad_to_target_transform.Translate(50, 50);
   front_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
                                        0.5f + 1.0f / (rect.height() * 2.0f));
-  SharedQuadState* front_shared_state = CreateTestSharedQuadState(
-      front_quad_to_target_transform, rect, pass, gfx::RRectF());
+  SharedQuadState* front_shared_state =
+      CreateTestSharedQuadState(front_quad_to_target_transform, rect, pass,
+                                gfx::MaskFilterInfo());
 
   auto* front = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   front->SetAll(front_shared_state, rect, rect, needs_blending, front_color,
@@ -878,8 +878,9 @@
   gfx::Transform back_quad_to_target_transform;
   back_quad_to_target_transform.Translate(25.5f, 25.5f);
   back_quad_to_target_transform.Scale(0.5f, 0.5f);
-  SharedQuadState* back_shared_state = CreateTestSharedQuadState(
-      back_quad_to_target_transform, rect, pass, gfx::RRectF());
+  SharedQuadState* back_shared_state =
+      CreateTestSharedQuadState(back_quad_to_target_transform, rect, pass,
+                                gfx::MaskFilterInfo());
 
   auto* back = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   back->SetAll(back_shared_state, rect, rect, needs_blending, back_color,
@@ -932,7 +933,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(shared_state, rect, rect, SK_ColorGREEN, false);
@@ -953,8 +954,9 @@
   auto child_pass =
       CreateTestRenderPass(child_id, small_rect, gfx::Transform());
 
-  SharedQuadState* child_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), small_rect, child_pass.get(), gfx::RRectF());
+  SharedQuadState* child_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), small_rect, child_pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* color_quad = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false);
@@ -962,8 +964,9 @@
   AggregatedRenderPassId root_id{1};
   auto root_pass = CreateTestRenderPass(root_id, rect, gfx::Transform());
 
-  SharedQuadState* root_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* root_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
 
   CreateTestRenderPassDrawQuad(root_shared_state, small_rect, child_id,
                                root_pass.get());
@@ -987,7 +990,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -1016,7 +1019,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   texture_quad_state->opacity = 0.8f;
 
   CreateTestTextureDrawQuad(
@@ -1029,7 +1032,7 @@
       this->child_context_provider_, pass.get());
 
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1048,7 +1051,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTwoColoredTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -1063,7 +1066,7 @@
       this->child_context_provider_, pass.get());
   pass->quad_list.front()->visible_rect.Inset(30, 50, 0, 0);
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1085,7 +1088,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTwoColoredTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -1106,7 +1109,7 @@
   quad->uv_bottom_right.SetPoint(.4, .7);
   quad->nearest_neighbor = true;  // To avoid bilinear filter differences.
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1126,7 +1129,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTwoColoredTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -1141,7 +1144,7 @@
       this->child_context_provider_, pass.get());
   pass->quad_list.front()->visible_rect.Inset(0, 0, 40, 60);
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1161,7 +1164,7 @@
   pass->has_transparent_background = false;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   shared_state->opacity = 1 - 16.0f / 255;
   shared_state->blend_mode = SkBlendMode::kDstOut;
 
@@ -1169,7 +1172,7 @@
   color_quad->SetNew(shared_state, rect, rect, SK_ColorRED, false);
 
   SharedQuadState* shared_state_background = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   SkColor background_color = SkColorSetRGB(0xff, 0xff * 14 / 16, 0xff);
   auto* color_quad_background =
@@ -1193,7 +1196,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(shared_state, rect, rect, SK_ColorYELLOW, false);
@@ -1234,8 +1237,9 @@
       gfx::Transform(), cc::FilterOperations());
   cc::AddQuad(root_pass, root_rect, SK_ColorYELLOW);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass, gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), viewport_rect, root_pass,
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, viewport_rect, child_pass_id,
                                root_pass);
 
@@ -1261,7 +1265,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   texture_quad_state->opacity = 0.8f;
 
   float vertex_opacity[4] = {1.f, 1.f, 0.f, 0.f};
@@ -1276,7 +1280,7 @@
       this->child_context_provider_, pass.get());
 
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1312,7 +1316,7 @@
     trans.RotateAboutZAxis(45.0);
     trans.RotateAboutYAxis(45.0);
     front_quad_state_ = CreateTestSharedQuadState(
-        trans, viewport_rect_, render_pass_.get(), gfx::RRectF());
+        trans, viewport_rect_, render_pass_.get(), gfx::MaskFilterInfo());
     // Make sure they end up in a 3d sorting context.
     front_quad_state_->sorting_context_id = 1;
 
@@ -1321,14 +1325,16 @@
     trans = gfx::Transform();
     trans.Translate3d(0, 0, -0.707 * this->device_viewport_size_.width() / 2.0);
     trans.RotateAboutYAxis(-45.0);
-    back_quad_state_ = CreateTestSharedQuadState(
-        trans, viewport_rect_, render_pass_.get(), gfx::RRectF());
+    back_quad_state_ =
+        CreateTestSharedQuadState(trans, viewport_rect_, render_pass_.get(),
+                                  gfx::MaskFilterInfo());
     back_quad_state_->sorting_context_id = 1;
   }
   void AppendBackgroundAndRunTest(const cc::PixelComparator& comparator,
                                   const base::FilePath::CharType* ref_file) {
-    SharedQuadState* background_quad_state = CreateTestSharedQuadState(
-        gfx::Transform(), viewport_rect_, render_pass_.get(), gfx::RRectF());
+    SharedQuadState* background_quad_state =
+        CreateTestSharedQuadState(gfx::Transform(), viewport_rect_,
+                                  render_pass_.get(), gfx::MaskFilterInfo());
     auto* background_quad =
         render_pass_->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
     background_quad->SetNew(background_quad_state, viewport_rect_,
@@ -1552,11 +1558,11 @@
   auto child_pass1 =
       CreateTestRenderPass(child_pass_id1, this->quad_rect_, gfx::Transform());
   SharedQuadState* child1_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), this->quad_rect_, child_pass1.get(), gfx::RRectF());
+      gfx::Transform(), this->quad_rect_, child_pass1.get(), gfx::MaskFilterInfo());
   auto child_pass2 =
       CreateTestRenderPass(child_pass_id2, this->quad_rect_, gfx::Transform());
   SharedQuadState* child2_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), this->quad_rect_, child_pass2.get(), gfx::RRectF());
+      gfx::Transform(), this->quad_rect_, child_pass2.get(), gfx::MaskFilterInfo());
   CreateTestTwoColoredTextureDrawQuad(
       !is_software_renderer(), this->quad_rect_, SkColorSetARGB(255, 0, 0, 0),
       SkColorSetARGB(255, 0, 0, 255), SK_ColorTRANSPARENT,
@@ -1650,7 +1656,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -1680,7 +1686,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* texture_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   texture_quad_state->opacity = 0.8f;
 
   CreateTestTextureDrawQuad(
@@ -1693,7 +1699,7 @@
       this->child_context_provider_, pass.get());
 
   SharedQuadState* color_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
 
@@ -1728,8 +1734,9 @@
     gfx::Transform scale_by_2;
     scale_by_2.Scale(2.f, 2.f);
     gfx::Rect half_rect(100, 100);
-    SharedQuadState* shared_state = CreateTestSharedQuadState(
-        scale_by_2, half_rect, pass.get(), gfx::RRectF());
+    SharedQuadState* shared_state =
+        CreateTestSharedQuadState(scale_by_2, half_rect, pass.get(),
+                                  gfx::MaskFilterInfo());
 
     gfx::Size background_size(200, 200);
     gfx::Rect green_rect(16, 20, 100, 100);
@@ -1803,7 +1810,7 @@
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestYUVVideoDrawQuad_Striped(
       shared_state, media::PIXEL_FORMAT_I420, gfx::ColorSpace::CreateREC601(),
@@ -1830,8 +1837,9 @@
   // Set the output color space to match the input primaries and transfer.
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   CreateTestYUVVideoDrawQuad_Striped(
       shared_state, media::PIXEL_FORMAT_I420, gfx::ColorSpace::CreateREC601(),
@@ -1874,7 +1882,7 @@
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // Intentionally sets frame format to I420 for testing coverage.
   CreateTestYUVVideoDrawQuad_Striped(
@@ -1901,7 +1909,7 @@
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // In MPEG color range YUV values of (15,128,128) should produce black.
   CreateTestYUVVideoDrawQuad_Solid(
@@ -1928,7 +1936,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // YUV of (149,43,21) should be green (0,255,0) in RGB.
   CreateTestYUVVideoDrawQuad_Solid(
@@ -1953,7 +1961,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // YUV of (225,0,148) should be yellow (255,255,0) in RGB.
   CreateTestYUVVideoDrawQuad_Solid(
@@ -1984,7 +1992,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // YUV of (149,43,21) should be green (0,255,0) in RGB.
   CreateTestYUVVideoDrawQuad_NV12(
@@ -2031,7 +2039,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // Dark grey in JPEG color range (in MPEG, this is black).
   CreateTestYUVVideoDrawQuad_Solid(
@@ -2058,7 +2066,7 @@
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestYUVVideoDrawQuad_Striped(
       shared_state, media::PIXEL_FORMAT_I420A, gfx::ColorSpace::CreateREC601(),
@@ -2087,7 +2095,7 @@
   this->display_color_spaces_ = kRec601DisplayColorSpaces;
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestYUVVideoDrawQuad_Striped(
       shared_state, media::PIXEL_FORMAT_I420A, gfx::ColorSpace::CreateREC601(),
@@ -2114,7 +2122,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   gfx::Rect upper_rect(rect.x(), rect.y(), rect.width(), rect.height() / 2);
   CreateTestY16TextureDrawQuad_TwoColor(
@@ -2168,7 +2176,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
   shared_state->opacity = 0.5f;
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
@@ -2182,14 +2190,15 @@
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
   SharedQuadState* blank_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(blank_state, viewport_rect, viewport_rect, SK_ColorWHITE,
                 false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* render_pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
@@ -2227,7 +2236,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
   shared_state->opacity = 0.5f;
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
@@ -2241,14 +2250,15 @@
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
   SharedQuadState* blank_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(blank_state, viewport_rect, viewport_rect, SK_ColorWHITE,
                 false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* render_pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
@@ -2287,7 +2297,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
   shared_state->opacity = 0.5f;
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
@@ -2301,14 +2311,15 @@
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
   SharedQuadState* blank_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(blank_state, viewport_rect, viewport_rect, SK_ColorWHITE,
                 false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* render_pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
@@ -2368,7 +2379,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
   shared_state->opacity = 0.5f;
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
@@ -2382,14 +2393,15 @@
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
   SharedQuadState* blank_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(blank_state, viewport_rect, viewport_rect, SK_ColorWHITE,
                 false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* render_pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
@@ -2425,7 +2437,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
                       this->device_viewport_size_.height() / 2);
@@ -2437,8 +2449,9 @@
   auto* yellow = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
@@ -2467,7 +2480,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
                       this->device_viewport_size_.height() / 2);
@@ -2482,13 +2495,14 @@
   gfx::Transform aa_transform;
   aa_transform.Translate(0.5, 0.0);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      aa_transform, pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(aa_transform, pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
   SharedQuadState* root_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
   auto* background = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   background->SetNew(root_shared_state, gfx::Rect(this->device_viewport_size_),
                      gfx::Rect(this->device_viewport_size_), SK_ColorWHITE,
@@ -2514,14 +2528,14 @@
   AggregatedRenderPassId root_pass_id{1};
   auto root_pass = CreateTestRootRenderPass(root_pass_id, viewport_rect);
   SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   AggregatedRenderPassId child_pass_id{2};
   gfx::Transform transform_to_root;
   auto child_pass =
       CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
   SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   // The child render pass is just a green box.
   static const SkColor kCSSGreen = 0xff008000;
@@ -2611,14 +2625,14 @@
   AggregatedRenderPassId root_pass_id{1};
   auto root_pass = CreateTestRootRenderPass(root_pass_id, viewport_rect);
   SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   AggregatedRenderPassId child_pass_id{2};
   gfx::Transform transform_to_root;
   auto child_pass =
       CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
   SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   // The child render pass is just a green box.
   static const SkColor kCSSGreen = 0xff008000;
@@ -2708,14 +2722,14 @@
   AggregatedRenderPassId root_pass_id{1};
   auto root_pass = CreateTestRootRenderPass(root_pass_id, viewport_rect);
   SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   AggregatedRenderPassId child_pass_id{2};
   gfx::Transform transform_to_root;
   auto child_pass =
       CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
   SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   // The child render pass is just a blue box.
   auto* blue = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -2802,14 +2816,14 @@
   AggregatedRenderPassId root_pass_id{1};
   auto root_pass = CreateTestRootRenderPass(root_pass_id, viewport_rect);
   SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   AggregatedRenderPassId child_pass_id{2};
   gfx::Transform transform_to_root;
   auto child_pass =
       CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
   SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   // The child render pass is half a blue box and other half yellow box.
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
@@ -2912,7 +2926,7 @@
     {
       SharedQuadState* shared_state = CreateTestSharedQuadState(
           identity_quad_to_target_transform, filter_pass_layer_rect_,
-          filter_pass.get(), gfx::RRectF());
+          filter_pass.get(), gfx::MaskFilterInfo());
       auto* color_quad =
           filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
       color_quad->SetNew(shared_state, filter_pass_layer_rect_,
@@ -2977,7 +2991,7 @@
     {
       SharedQuadState* shared_state = CreateTestSharedQuadState(
           filter_pass_to_target_transform_, filter_pass_layer_rect_,
-          filter_pass.get(), gfx::RRectF());
+          filter_pass.get(), gfx::MaskFilterInfo());
       auto* filter_pass_quad =
           root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
       filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_,
@@ -2995,9 +3009,9 @@
 
     gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20);
     while (left_rect.y() < device_viewport_rect.height()) {
-      SharedQuadState* shared_state =
-          CreateTestSharedQuadState(identity_quad_to_target_transform,
-                                    left_rect, root_pass.get(), gfx::RRectF());
+      SharedQuadState* shared_state = CreateTestSharedQuadState(
+          identity_quad_to_target_transform, left_rect, root_pass.get(),
+          gfx::MaskFilterInfo());
       auto* color_quad =
           root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
       color_quad->SetNew(shared_state, left_rect, left_rect, SK_ColorGREEN,
@@ -3009,7 +3023,7 @@
     while (middle_rect.y() < device_viewport_rect.height()) {
       SharedQuadState* shared_state = CreateTestSharedQuadState(
           identity_quad_to_target_transform, middle_rect, root_pass.get(),
-          gfx::RRectF());
+          gfx::MaskFilterInfo());
       auto* color_quad =
           root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
       color_quad->SetNew(shared_state, middle_rect, middle_rect, SK_ColorRED,
@@ -3020,9 +3034,9 @@
     gfx::Rect right_rect =
         gfx::Rect((kColumnWidth + 1) * 2, 0, kColumnWidth, 20);
     while (right_rect.y() < device_viewport_rect.height()) {
-      SharedQuadState* shared_state =
-          CreateTestSharedQuadState(identity_quad_to_target_transform,
-                                    right_rect, root_pass.get(), gfx::RRectF());
+      SharedQuadState* shared_state = CreateTestSharedQuadState(
+          identity_quad_to_target_transform, right_rect, root_pass.get(),
+          gfx::MaskFilterInfo());
       auto* color_quad =
           root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
       color_quad->SetNew(shared_state, right_rect, right_rect, SK_ColorBLUE,
@@ -3032,7 +3046,7 @@
 
     SharedQuadState* shared_state = CreateTestSharedQuadState(
         identity_quad_to_target_transform, device_viewport_rect,
-        root_pass.get(), gfx::RRectF());
+        root_pass.get(), gfx::MaskFilterInfo());
     auto* background_quad =
         root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
     background_quad->SetNew(shared_state, device_viewport_rect,
@@ -3118,7 +3132,7 @@
     {
       SharedQuadState* shared_state = CreateTestSharedQuadState(
           identity_quad_to_target_transform, filter_pass_layer_rect_,
-          filter_pass.get(), gfx::RRectF());
+          filter_pass.get(), gfx::MaskFilterInfo());
       auto* color_quad =
           filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
       color_quad->SetNew(shared_state, filter_pass_layer_rect_,
@@ -3128,7 +3142,7 @@
     {
       SharedQuadState* shared_state = CreateTestSharedQuadState(
           filter_pass_to_target_transform_, filter_pass_layer_rect_,
-          filter_pass.get(), gfx::RRectF());
+          filter_pass.get(), gfx::MaskFilterInfo());
       auto* filter_pass_quad =
           root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
       filter_pass_quad->SetAll(
@@ -3148,25 +3162,25 @@
     gfx::Rect left_rect =
         gfx::Rect(kGridWidth / 2, kGridHeight, kGridWidth, kGridHeight);
 
-    SharedQuadState* shared_state =
-        CreateTestSharedQuadState(identity_quad_to_target_transform, left_rect,
-                                  root_pass.get(), gfx::RRectF());
+    SharedQuadState* shared_state = CreateTestSharedQuadState(
+        identity_quad_to_target_transform, left_rect, root_pass.get(),
+        gfx::MaskFilterInfo());
     auto* color_quad = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
     color_quad->SetNew(shared_state, left_rect, left_rect, SK_ColorGREEN,
                        false);
 
     gfx::Rect right_rect =
         gfx::Rect(kGridWidth * 3 / 2, kGridHeight, kGridWidth, kGridHeight);
-    shared_state =
-        CreateTestSharedQuadState(identity_quad_to_target_transform, right_rect,
-                                  root_pass.get(), gfx::RRectF());
+    shared_state = CreateTestSharedQuadState(
+        identity_quad_to_target_transform, right_rect, root_pass.get(),
+        gfx::MaskFilterInfo());
     color_quad = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
     color_quad->SetNew(shared_state, right_rect, right_rect, SK_ColorRED,
                        false);
 
-    shared_state = CreateTestSharedQuadState(identity_quad_to_target_transform,
-                                             device_viewport_rect,
-                                             root_pass.get(), gfx::RRectF());
+    shared_state = CreateTestSharedQuadState(
+        identity_quad_to_target_transform, device_viewport_rect,
+        root_pass.get(), gfx::MaskFilterInfo());
     auto* background_quad =
         root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
     background_quad->SetNew(shared_state, device_viewport_rect,
@@ -3264,8 +3278,9 @@
 
   gfx::Transform red_quad_to_target_transform;
   red_quad_to_target_transform.Rotate(10);
-  SharedQuadState* red_shared_state = CreateTestSharedQuadState(
-      red_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* red_shared_state =
+      CreateTestSharedQuadState(red_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false);
@@ -3273,14 +3288,15 @@
   gfx::Transform yellow_quad_to_target_transform;
   yellow_quad_to_target_transform.Rotate(5);
   SharedQuadState* yellow_shared_state = CreateTestSharedQuadState(
-      yellow_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+      yellow_quad_to_target_transform, rect, pass.get(), gfx::MaskFilterInfo());
 
   auto* yellow = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   yellow->SetNew(yellow_shared_state, rect, rect, SK_ColorYELLOW, false);
 
   gfx::Transform blue_quad_to_target_transform;
-  SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
-      blue_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* blue_shared_state =
+      CreateTestSharedQuadState(blue_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* blue = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
@@ -3306,19 +3322,20 @@
       1.0f, 2.4520f, 10.6206f, 19.0f, 0.0f, 0.3528f, 5.9737f, 9.5f, 0.0f,
       -0.2250f, -0.9744f, 0.0f, 0.0f, 0.0225f, 0.0974f, 1.0f);
   SharedQuadState* red_shared_state = CreateTestSharedQuadState(
-      red_quad_to_target_transform, red_rect, pass.get(), gfx::RRectF());
+      red_quad_to_target_transform, red_rect, pass.get(), gfx::MaskFilterInfo());
   auto* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   red->SetNew(red_shared_state, red_rect, red_rect, SK_ColorRED, false);
 
   gfx::Rect green_rect(19, 7, 180, 10);
-  SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), green_rect, pass.get(), gfx::RRectF());
+  SharedQuadState* green_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), green_rect, pass.get(),
+                                gfx::MaskFilterInfo());
   auto* green = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   green->SetNew(green_shared_state, green_rect, green_rect, SK_ColorGREEN,
                 false);
 
   SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* blue = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
 
@@ -3345,8 +3362,9 @@
                              pass.get());
 
   gfx::Transform blue_quad_to_target_transform;
-  SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
-      blue_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* blue_shared_state =
+      CreateTestSharedQuadState(blue_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* blue = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
@@ -3374,15 +3392,16 @@
   hole_quad_to_target_transform.Translate(50, 50);
   hole_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
                                       0.5f + 1.0f / (rect.height() * 2.0f));
-  SharedQuadState* hole_shared_state = CreateTestSharedQuadState(
-      hole_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* hole_shared_state =
+      CreateTestSharedQuadState(hole_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* hole = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   hole->SetAll(hole_shared_state, rect, rect, false, SK_ColorTRANSPARENT, true);
 
   gfx::Transform green_quad_to_target_transform;
   SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      green_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+      green_quad_to_target_transform, rect, pass.get(), gfx::MaskFilterInfo());
 
   auto* green = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   green->SetNew(green_shared_state, rect, rect, SK_ColorGREEN, false);
@@ -3413,7 +3432,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* hole_shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, rect, child_pass.get(), gfx::MaskFilterInfo());
   SolidColorDrawQuad* hole =
       child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   hole->SetAll(hole_shared_state, rect, rect, false, SK_ColorTRANSPARENT,
@@ -3428,7 +3447,7 @@
   hole_pass_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
                                       0.5f + 1.0f / (rect.height() * 2.0f));
   SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      hole_pass_to_target_transform, rect, root_pass.get(), gfx::RRectF());
+      hole_pass_to_target_transform, rect, root_pass.get(), gfx::MaskFilterInfo());
   AggregatedRenderPassDrawQuad* pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
   pass_quad->SetAll(pass_shared_state, rect, rect, needs_blending,
@@ -3439,7 +3458,7 @@
 
   gfx::Transform green_quad_to_target_transform;
   SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      green_quad_to_target_transform, rect, root_pass.get(), gfx::RRectF());
+      green_quad_to_target_transform, rect, root_pass.get(), gfx::MaskFilterInfo());
 
   SolidColorDrawQuad* green =
       root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -3497,8 +3516,9 @@
   hole_quad_to_target_transform.Translate(50, 50);
   hole_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
                                       0.5f + 1.0f / (rect.height() * 2.0f));
-  SharedQuadState* hole_shared_state = CreateTestSharedQuadState(
-      hole_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* hole_shared_state =
+      CreateTestSharedQuadState(hole_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
   TileDrawQuad* hole = pass->CreateAndAppendDrawQuad<TileDrawQuad>();
   hole->SetNew(hole_shared_state, rect, rect, needs_blending, mapped_resource,
                gfx::RectF(gfx::Rect(tile_size)), tile_size,
@@ -3507,7 +3527,7 @@
 
   gfx::Transform green_quad_to_target_transform;
   SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      green_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+      green_quad_to_target_transform, rect, pass.get(), gfx::MaskFilterInfo());
 
   SolidColorDrawQuad* green =
       pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -3537,7 +3557,7 @@
                              pass.get());
 
   SharedQuadState* background_quad_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
   auto* background_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   background_quad->SetNew(background_quad_state, rect, rect, SK_ColorBLACK,
                           false);
@@ -3573,13 +3593,14 @@
   // Small enough red rect that linear filtering will miss it but large enough
   // that it makes a meaningful contribution when using trilinear filtering.
   red_rect.ClampToCenteredSize(gfx::Size(2, child_pass_rect.height()));
-  SharedQuadState* red_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), red_rect, child_pass.get(), gfx::RRectF());
+  SharedQuadState* red_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), red_rect, child_pass.get(),
+                                gfx::MaskFilterInfo());
   auto* red = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   red->SetNew(red_shared_state, red_rect, red_rect, SK_ColorRED, false);
 
   SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), child_pass_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), child_pass_rect, child_pass.get(), gfx::MaskFilterInfo());
   auto* blue = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(blue_shared_state, child_pass_rect, child_pass_rect,
                SK_ColorBLUE, false);
@@ -3587,7 +3608,7 @@
   gfx::Transform child_to_root_transform(SkMatrix::RectToRect(
       RectToSkRect(child_pass_rect), RectToSkRect(viewport_rect)));
   SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
-      child_to_root_transform, child_pass_rect, root_pass.get(), gfx::RRectF());
+      child_to_root_transform, child_pass_rect, root_pass.get(), gfx::MaskFilterInfo());
   auto* child_pass_quad =
       root_pass->CreateAndAppendDrawQuad<AggregatedRenderPassDrawQuad>();
   child_pass_quad->SetNew(
@@ -3678,7 +3699,7 @@
 
   gfx::Transform green_quad_to_target_transform;
   SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      green_quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+      green_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo());
 
   auto* green_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   green_quad->SetNew(green_shared_state, viewport, viewport, needs_blending,
@@ -3718,7 +3739,7 @@
 
   gfx::Transform green_quad_to_target_transform;
   SharedQuadState* green_shared_state = CreateTestSharedQuadState(
-      green_quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+      green_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo());
   green_shared_state->opacity = 0.5f;
 
   auto* green_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
@@ -3739,7 +3760,7 @@
 
   gfx::Transform white_quad_to_target_transform;
   SharedQuadState* white_shared_state = CreateTestSharedQuadState(
-      white_quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+      white_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo());
 
   auto* white_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   white_quad->SetNew(white_shared_state, viewport, viewport, needs_blending,
@@ -3776,9 +3797,8 @@
       transparent_recording->CreateRasterSource();
 
   gfx::Transform transparent_quad_to_target_transform;
-  SharedQuadState* transparent_shared_state =
-      CreateTestSharedQuadState(transparent_quad_to_target_transform, viewport,
-                                pass.get(), gfx::RRectF());
+  SharedQuadState* transparent_shared_state = CreateTestSharedQuadState(
+      transparent_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo());
   transparent_shared_state->opacity = 0.5f;
 
   auto* transparent_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
@@ -3799,7 +3819,7 @@
 
   gfx::Transform white_quad_to_target_transform;
   SharedQuadState* white_shared_state = CreateTestSharedQuadState(
-      white_quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+      white_quad_to_target_transform, viewport, pass.get(), gfx::MaskFilterInfo());
 
   auto* white_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   white_quad->SetNew(white_shared_state, viewport, viewport, needs_blending,
@@ -3851,8 +3871,9 @@
       recording->CreateRasterSource();
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   quad->SetNew(shared_state, viewport, viewport, needs_blending,
@@ -3901,8 +3922,9 @@
       recording->CreateRasterSource();
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   quad->SetNew(shared_state, viewport, viewport, needs_blending,
@@ -3962,8 +3984,9 @@
   auto pass = CreateTestRenderPass(id, viewport, transform_to_root);
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>();
   quad->SetNew(shared_state, viewport, viewport, needs_blending,
@@ -4012,8 +4035,9 @@
   auto pass = CreateTestRenderPass(id, viewport, transform_to_root);
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
   auto* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -4065,8 +4089,9 @@
   auto pass = CreateTestRenderPass(id, viewport, transform_to_root);
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* shared_state =
+      CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get(),
+                                gfx::MaskFilterInfo());
 
   float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
   auto* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -4122,7 +4147,7 @@
 
   SharedQuadState* top_right_green_shared_quad_state =
       CreateTestSharedQuadState(green_quad_to_target_transform, viewport,
-                                pass.get(), gfx::RRectF());
+                                pass.get(), gfx::MaskFilterInfo());
 
   auto* green_quad1 = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   green_quad1->SetNew(
@@ -4194,7 +4219,7 @@
   quad_to_target_transform.Scale(10.0, 10.0);
   gfx::Rect quad_content_rect(gfx::Size(20, 20));
   SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, quad_content_rect, pass.get(), gfx::RRectF());
+      quad_to_target_transform, quad_content_rect, pass.get(), gfx::MaskFilterInfo());
 
   auto* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
   blue_quad->SetNew(blue_shared_state, quad_content_rect, quad_content_rect,
@@ -4206,9 +4231,9 @@
   // Fill left half of viewport with green.
   gfx::Transform half_green_quad_to_target_transform;
   gfx::Rect half_green_rect(gfx::Size(viewport.width() / 2, viewport.height()));
-  SharedQuadState* half_green_shared_state =
-      CreateTestSharedQuadState(half_green_quad_to_target_transform,
-                                half_green_rect, pass.get(), gfx::RRectF());
+  SharedQuadState* half_green_shared_state = CreateTestSharedQuadState(
+      half_green_quad_to_target_transform, half_green_rect, pass.get(),
+      gfx::MaskFilterInfo());
   auto* half_color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   half_color_quad->SetNew(half_green_shared_state, half_green_rect,
                           half_green_rect, SK_ColorGREEN, false);
@@ -4253,7 +4278,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
                       this->device_viewport_size_.height() / 2);
@@ -4265,8 +4290,9 @@
   auto* yellow = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
@@ -4297,7 +4323,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   gfx::Rect blue_rect(0, 0, this->device_viewport_size_.width(),
                       this->device_viewport_size_.height() / 2);
@@ -4309,8 +4335,9 @@
   auto* yellow = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
@@ -4339,7 +4366,7 @@
 
   gfx::Transform quad_to_target_transform;
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, child_pass.get(), gfx::MaskFilterInfo());
 
   // Draw a green quad full-size with a blue quad in the lower-right corner.
   gfx::Rect blue_rect(this->device_viewport_size_.width() * 3 / 4,
@@ -4353,8 +4380,9 @@
   auto* green = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   green->SetNew(shared_state, green_rect, green_rect, SK_ColorGREEN, false);
 
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), gfx::RRectF());
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo());
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
@@ -4385,7 +4413,7 @@
   auto pass = CreateTestRootRenderPass(id, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   // Make a mask.
   gfx::Rect mask_rect = rect;
@@ -4507,16 +4535,18 @@
   // tex coord rect.
   gfx::Transform transform;
   transform.Scale(40, 40);
-  SharedQuadState* quad_shared = CreateTestSharedQuadState(
-      transform, gfx::Rect(layer_size), pass.get(), gfx::RRectF());
+  SharedQuadState* quad_shared =
+      CreateTestSharedQuadState(transform, gfx::Rect(layer_size), pass.get(),
+                                gfx::MaskFilterInfo());
   auto* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>();
   quad->SetNew(quad_shared, gfx::Rect(layer_size), gfx::Rect(layer_size),
                needs_blending, mapped_resource, tex_coord_rect, tile_size,
                contents_premultiplied, nearest_neighbor, use_aa);
 
   // Green background.
-  SharedQuadState* background_shared = CreateTestSharedQuadState(
-      gfx::Transform(), viewport, pass.get(), gfx::RRectF());
+  SharedQuadState* background_shared =
+      CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get(),
+                                gfx::MaskFilterInfo());
   auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(background_shared, viewport, viewport, SK_ColorGREEN,
                      false);
@@ -4544,15 +4574,15 @@
   blue_rect.Inset(kInset, kInset);
 
   gfx::RRectF rounded_corner_rrect(gfx::RectF(blue_rect), kCornerRadius);
-  SharedQuadState* shared_state_rounded =
-      CreateTestSharedQuadState(quad_to_target_transform, viewport_rect,
-                                root_pass.get(), rounded_corner_rrect);
+  SharedQuadState* shared_state_rounded = CreateTestSharedQuadState(
+      quad_to_target_transform, viewport_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_rrect, gfx::LinearGradient()));
 
   auto* blue = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(shared_state_rounded, blue_rect, blue_rect, SK_ColorBLUE, false);
 
   SharedQuadState* shared_state_normal = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(shared_state_normal, red_rect, red_rect, SK_ColorWHITE, false);
@@ -4592,9 +4622,9 @@
   blue_rect.Inset(kInset, kInset);
 
   gfx::RRectF rounded_corner_rrect(gfx::RectF(blue_rect), kCornerRadius);
-  SharedQuadState* shared_state_rounded =
-      CreateTestSharedQuadState(quad_to_target_transform, viewport_rect,
-                                root_pass.get(), rounded_corner_rrect);
+  SharedQuadState* shared_state_rounded = CreateTestSharedQuadState(
+      quad_to_target_transform, viewport_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_rrect, gfx::LinearGradient()));
 
   const uint8_t colors[] = {0, 0, 255, 255, 0, 0, 255, 255,
                             0, 0, 255, 255, 0, 0, 255, 255};
@@ -4621,7 +4651,7 @@
                /*secure_output_only=*/false, gfx::ProtectedVideoType::kClear);
 
   SharedQuadState* shared_state_normal = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
 
   auto* white = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(shared_state_normal, red_rect, red_rect, SK_ColorWHITE, false);
@@ -4670,15 +4700,15 @@
   blue_rrect.Offset(blue_offset_from_target);
   gfx::Transform quad_to_target_transform;
   quad_to_target_transform.Translate(blue_offset_from_target);
-  SharedQuadState* shared_state_with_rrect =
-      CreateTestSharedQuadState(quad_to_target_transform, child_pass_local_rect,
-                                child_pass.get(), blue_rrect);
+  SharedQuadState* shared_state_with_rrect = CreateTestSharedQuadState(
+      quad_to_target_transform, child_pass_local_rect, child_pass.get(),
+      gfx::MaskFilterInfo(blue_rrect, gfx::LinearGradient()));
   auto* blue = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(shared_state_with_rrect, blue_rect, blue_rect, SK_ColorBLUE,
                false);
 
   SharedQuadState* shared_state_without_rrect = CreateTestSharedQuadState(
-      gfx::Transform(), child_pass_local_rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), child_pass_local_rect, child_pass.get(), gfx::MaskFilterInfo());
   gfx::Rect yellow_rect = child_pass_local_rect;
   yellow_rect.Offset(30, -60);
   auto* yellow = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -4691,8 +4721,9 @@
                 SK_ColorWHITE, false);
 
   gfx::RRectF rounded_corner_bounds(gfx::RectF(pass_rect), kCornerRadius);
-  SharedQuadState* pass_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), rounded_corner_bounds);
+  SharedQuadState* pass_shared_state =
+      CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get(),
+                                gfx::MaskFilterInfo(rounded_corner_bounds, gfx::LinearGradient()));
   CreateTestRenderPassDrawQuad(pass_shared_state, pass_rect, child_pass_id,
                                root_pass.get());
 
@@ -4721,9 +4752,9 @@
   blue_rect.set_height(blue_rect.height() / 2);
 
   gfx::Transform quad_to_target_transform;
-  SharedQuadState* shared_state_normal =
-      CreateTestSharedQuadState(quad_to_target_transform, pass_rect,
-                                root_pass.get(), rounded_corner_bounds);
+  SharedQuadState* shared_state_normal = CreateTestSharedQuadState(
+      quad_to_target_transform, pass_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_bounds, gfx::LinearGradient()));
   auto* blue = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   blue->SetNew(shared_state_normal, blue_rect, blue_rect, SK_ColorBLUE, false);
 
@@ -4735,7 +4766,7 @@
                  false);
 
   SharedQuadState* sqs_white = CreateTestSharedQuadState(
-      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::RRectF());
+      quad_to_target_transform, viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
   gfx::Rect white_rect = gfx::Rect(this->device_viewport_size_);
   auto* white = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(sqs_white, white_rect, white_rect, SK_ColorWHITE, false);
@@ -4799,16 +4830,23 @@
   ll_rect.set_height(lr_rect.height());
 
   SharedQuadState* shared_state_normal_ul = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), rounded_corner_bounds_ul);
+      gfx::Transform(), pass_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_bounds_ul, gfx::LinearGradient()));
 
   SharedQuadState* shared_state_normal_ur = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), rounded_corner_bounds_ur);
+      gfx::Transform(), pass_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_bounds_ur,
+      gfx::LinearGradient()));
 
   SharedQuadState* shared_state_normal_lr = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), rounded_corner_bounds_lr);
+      gfx::Transform(), pass_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_bounds_lr,
+      gfx::LinearGradient()));
 
   SharedQuadState* shared_state_normal_ll = CreateTestSharedQuadState(
-      gfx::Transform(), pass_rect, root_pass.get(), rounded_corner_bounds_ll);
+      gfx::Transform(), pass_rect, root_pass.get(),
+      gfx::MaskFilterInfo(rounded_corner_bounds_ll,
+      gfx::LinearGradient()));
 
   auto* ul = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   auto* ur = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -4821,7 +4859,7 @@
   ll->SetNew(shared_state_normal_ll, ll_rect, ll_rect, SK_ColorYELLOW, false);
 
   SharedQuadState* sqs_white = CreateTestSharedQuadState(
-      gfx::Transform(), viewport_rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), viewport_rect, root_pass.get(), gfx::MaskFilterInfo());
   gfx::Rect white_rect = gfx::Rect(this->device_viewport_size_);
   auto* white = root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   white->SetNew(sqs_white, white_rect, white_rect, SK_ColorWHITE, false);
@@ -4865,8 +4903,9 @@
                              pass.get());
 
   gfx::Transform bg_quad_to_target_transform;
-  SharedQuadState* bg_shared_state = CreateTestSharedQuadState(
-      bg_quad_to_target_transform, rect, pass.get(), gfx::RRectF());
+  SharedQuadState* bg_shared_state =
+      CreateTestSharedQuadState(bg_quad_to_target_transform, rect, pass.get(),
+                                gfx::MaskFilterInfo());
 
   auto* bg = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   bg->SetNew(bg_shared_state, rect, rect, SK_ColorBLACK, false);
@@ -5010,8 +5049,9 @@
 
     // Append a quad to execute the transform.
     {
-      SharedQuadState* shared_state = CreateTestSharedQuadState(
-          gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      SharedQuadState* shared_state =
+          CreateTestSharedQuadState(gfx::Transform(), rect, pass.get(),
+                                    gfx::MaskFilterInfo());
 
       ResourceId resource = CreateGpuResource(
           this->child_context_provider_, this->child_resource_provider_.get(),
@@ -5162,7 +5202,7 @@
         CreateTestRootRenderPass(id, rect, damage_rect);
 
     SharedQuadState* shared_state = CreateTestSharedQuadState(
-        gfx::Transform(), rect, pass.get(), gfx::RRectF());
+        gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
     SolidColorDrawQuad* color_quad =
         pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
@@ -5337,7 +5377,7 @@
   auto pass = CreateTestRootRenderPass(id, rect, rect);
 
   SharedQuadState* shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, pass.get(), gfx::MaskFilterInfo());
 
   CreateTestTextureDrawQuad(
       !is_software_renderer(), gfx::Rect(this->device_viewport_size_),
@@ -5379,7 +5419,7 @@
   auto child_pass = CreateTestRenderPass(child_id, rect, gfx::Transform());
 
   SharedQuadState* child_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, child_pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, child_pass.get(), gfx::MaskFilterInfo());
 
   auto* color_quad = child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
   color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false);
@@ -5388,7 +5428,7 @@
   auto root_pass = CreateTestRootRenderPass(root_id, rect, rect);
 
   SharedQuadState* root_shared_state = CreateTestSharedQuadState(
-      gfx::Transform(), rect, root_pass.get(), gfx::RRectF());
+      gfx::Transform(), rect, root_pass.get(), gfx::MaskFilterInfo());
 
   CreateTestRenderPassDrawQuad(root_shared_state, rect, child_id,
                                root_pass.get());
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc
index 32a9b6f3..d79eae4d 100644
--- a/components/viz/service/display/skia_renderer.cc
+++ b/components/viz/service/display/skia_renderer.cc
@@ -499,9 +499,12 @@
   // Optional restricted draw geometry, will point to a length 4 SkPoint array
   // with its points in CW order matching Skia's vertex/edge expectations.
   absl::optional<SkDrawRegion> draw_region;
-  // Optional rounded corner clip to apply. If present, it will have been
-  // transformed to device space and ShouldApplyRoundedCorner returns true.
-  absl::optional<gfx::RRectF> rounded_corner_bounds;
+  // Optional mask filter info that may contain rounded corner clip and/or a
+  // gradient mask to apply. If present, rounded corner clip will have been
+  // transformed to device space and ShouldApplyRoundedCorner returns true. If
+  // present, gradient mask will have been transformed to device space and
+  // ShouldApplyGradientMask returns true.
+  absl::optional<gfx::MaskFilterInfo> mask_filter_info;
   // Optional device space clip to apply. If present, it is equal to the current
   // |scissor_rect_| of the renderer.
   absl::optional<gfx::Rect> scissor_rect;
@@ -1057,7 +1060,7 @@
 
 void SkiaRenderer::PrepareCanvas(
     const absl::optional<gfx::Rect>& scissor_rect,
-    const absl::optional<gfx::RRectF>& rounded_corner_bounds,
+    const absl::optional<gfx::MaskFilterInfo>& mask_filter_info,
     const gfx::Transform* cdt) {
   // Scissor is applied in the device space (CTM == I) and since no changes
   // to the canvas persist, CTM should already be the identity
@@ -1067,8 +1070,11 @@
     current_canvas_->clipRect(gfx::RectToSkRect(*scissor_rect));
   }
 
-  if (rounded_corner_bounds.has_value())
-    current_canvas_->clipRRect(SkRRect(*rounded_corner_bounds), true /* AA */);
+  if (mask_filter_info.has_value()) {
+    current_canvas_->clipRRect(
+        static_cast<SkRRect>(mask_filter_info->rounded_corner_bounds()),
+        /*doAntiAlias=*/true);
+  }
 
   if (cdt) {
     SkMatrix m;
@@ -1343,13 +1349,15 @@
     // corner_bounds is not empty and 'to_device' should just be scale+translate
     SkRRect device_bounds;
     if (corner_bounds.transform(to_device, &device_bounds)) {
-      params.rounded_corner_bounds.emplace(device_bounds);
+      params.mask_filter_info.emplace(
+          gfx::MaskFilterInfo(gfx::RRectF(device_bounds)));
     } else {
       // TODO(crbug/1220004): We used to assert transform succeeded, but an
       // unreproduceable fuzzer test case could trip it. To be safe, and to
       // match the most likely scenario that the device transform has scale=0,
       // just force the clip to empty so we don't draw anything.
-      params.rounded_corner_bounds.emplace(SkRRect::MakeEmpty());
+      params.mask_filter_info.emplace(
+          gfx::MaskFilterInfo(gfx::RRectF(SkRRect::MakeEmpty())));
     }
   }
 
@@ -1623,7 +1631,8 @@
 
   // Rounded corner bounds are in device space, which gets tricky when bypassing
   // the device that the RP would have represented
-  DCHECK(!bypass_params.rounded_corner_bounds.has_value());
+  DCHECK(!bypass_params.mask_filter_info.has_value());
+
   return BypassMode::kDrawBypassQuad;
 }
 
@@ -1706,8 +1715,7 @@
     return true;
   }
 
-  if (batched_quad_state_.rounded_corner_bounds !=
-      params.rounded_corner_bounds) {
+  if (batched_quad_state_.mask_filter_info != params.mask_filter_info) {
     return true;
   }
 
@@ -1728,7 +1736,7 @@
   // Configure batch state if it's the first
   if (batched_quads_.empty()) {
     batched_quad_state_.scissor_rect = params->scissor_rect;
-    batched_quad_state_.rounded_corner_bounds = params->rounded_corner_bounds;
+    batched_quad_state_.mask_filter_info = params->mask_filter_info;
     batched_quad_state_.blend_mode = params->blend_mode;
     batched_quad_state_.sampling = params->sampling;
     batched_quad_state_.constraint = constraint;
@@ -1758,7 +1766,7 @@
 
   SkAutoCanvasRestore acr(current_canvas_, true /* do_save */);
   PrepareCanvas(batched_quad_state_.scissor_rect,
-                batched_quad_state_.rounded_corner_bounds, nullptr);
+                batched_quad_state_.mask_filter_info, nullptr);
 
   SkPaint paint;
   sk_sp<SkColorFilter> color_filter = GetContentColorFilter();
@@ -1783,7 +1791,7 @@
   DCHECK(batched_quads_.empty());
 
   SkAutoCanvasRestore acr(current_canvas_, true /* do_save */);
-  PrepareCanvas(params->scissor_rect, params->rounded_corner_bounds,
+  PrepareCanvas(params->scissor_rect, params->mask_filter_info,
                 &params->content_device_transform);
 
   if (rpdq_params) {
@@ -1822,7 +1830,7 @@
   TRACE_EVENT0("viz", "SkiaRenderer::DrawSingleImage");
 
   SkAutoCanvasRestore acr(current_canvas_, true /* do_save */);
-  PrepareCanvas(params->scissor_rect, params->rounded_corner_bounds,
+  PrepareCanvas(params->scissor_rect, params->mask_filter_info,
                 &params->content_device_transform);
 
   int matrix_index = -1;
@@ -1870,7 +1878,7 @@
     FlushBatchedQuads();
 
   SkAutoCanvasRestore auto_canvas_restore(current_canvas_, true /* do_save */);
-  PrepareCanvas(params->scissor_rect, params->rounded_corner_bounds,
+  PrepareCanvas(params->scissor_rect, params->mask_filter_info,
                 &params->content_device_transform);
 
   auto visible_rect = gfx::RectFToSkRect(params->visible_rect);
@@ -1913,7 +1921,7 @@
 
   SkAutoCanvasRestore acr(current_canvas_, true /* do_save */);
   // We need to apply the matrix manually to have pixel-sized stroke width.
-  PrepareCanvas(params->scissor_rect, params->rounded_corner_bounds, nullptr);
+  PrepareCanvas(params->scissor_rect, params->mask_filter_info, nullptr);
   SkMatrix cdt;
   gfx::TransformToFlattenedSkMatrix(params->content_device_transform, &cdt);
 
@@ -1946,7 +1954,8 @@
                                        params->sampling == SkSamplingOptions();
 
   SkAutoCanvasRestore acr(current_canvas_, true /* do_save */);
-  PrepareCanvas(params->scissor_rect, params->rounded_corner_bounds,
+  PrepareCanvas(params->scissor_rect,
+                params->mask_filter_info,
                 &params->content_device_transform);
 
   // Unlike other quads which draw visible_rect or draw_region as their geometry
@@ -3083,9 +3092,8 @@
                                             -filter_bounds.y());
 
   // Also adjust the |rounded_corner_bounds| to the new location.
-  if (params.rounded_corner_bounds) {
-    params.rounded_corner_bounds->Offset(-filter_bounds.x(),
-                                         -filter_bounds.y());
+  if (params.mask_filter_info) {
+    params.mask_filter_info->Transform(params.content_device_transform);
   }
 
   // When Render Pass has a single quad inside we would draw that directly.
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h
index fcb96836..6028029 100644
--- a/components/viz/service/display/skia_renderer.h
+++ b/components/viz/service/display/skia_renderer.h
@@ -116,11 +116,13 @@
   void ClearFramebuffer();
 
   // Callers should init an SkAutoCanvasRestore before calling this function.
-  // |scissor_rect| and |rounded_corner_bounds| should be in device space,
+  // |scissor_rect| and |mask_filter_info| should be in device space,
   // i.e. same space that |cdt| will transform subsequent draws into.
-  void PrepareCanvas(const absl::optional<gfx::Rect>& scissor_rect,
-                     const absl::optional<gfx::RRectF>& rounded_corner_bounds,
-                     const gfx::Transform* cdt);
+  void PrepareCanvas(
+      const absl::optional<gfx::Rect>& scissor_rect,
+      const absl::optional<gfx::MaskFilterInfo>& mask_filter_info,
+      const gfx::Transform* cdt);
+
   // Further modify the canvas as needed to apply the effects represented by
   // |rpdq_params|. Call Prepare[Paint|Color]OrCanvasForRPDQ when possible,
   // in order apply the RPDQ effects into a more efficient format.
@@ -295,7 +297,7 @@
   // captured by this state cannot be batched.
   struct BatchedQuadState {
     absl::optional<gfx::Rect> scissor_rect;
-    absl::optional<gfx::RRectF> rounded_corner_bounds;
+    absl::optional<gfx::MaskFilterInfo> mask_filter_info;
     SkBlendMode blend_mode;
     SkSamplingOptions sampling;
     SkCanvas::SrcRectConstraint constraint;
diff --git a/components/viz/test/data/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json b/components/viz/test/data/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
index 55ca89b..85d65a6 100644
--- a/components/viz/test/data/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
+++ b/components/viz/test/data/render_pass_data/multi_surface_test/youtube_tab_focused/1641.json
@@ -717,8 +717,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 3.0, 1167.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -746,8 +748,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 4.0, 81.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -769,8 +773,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 112.0, 47.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -792,8 +798,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1396,8 +1404,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1124.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1425,8 +1435,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 56.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1454,8 +1466,10 @@
                   "y": -1000
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1483,8 +1497,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1018.0, 57.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1512,8 +1528,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 72.0, 57.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1541,8 +1559,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 72.0, 56.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1570,8 +1590,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 822.0, 960.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1599,8 +1621,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 486.0, 980.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1628,8 +1652,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 150.0, 980.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1657,8 +1683,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 822.0, 666.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1686,8 +1714,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 486.0, 666.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1715,8 +1745,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 150.0, 666.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1744,8 +1776,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -1767,8 +1801,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -2143,8 +2179,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1125.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -2172,8 +2210,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -2201,8 +2241,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 48.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -2230,8 +2272,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3430,8 +3474,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1125.0, 1092.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3453,8 +3499,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1125.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3476,8 +3524,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1092.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3505,8 +3555,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 103.0, 1.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3534,8 +3586,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1057.0, 369.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3563,8 +3617,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 999.0, 369.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3592,8 +3648,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 941.0, 369.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3621,8 +3679,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 883.0, 369.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3650,8 +3710,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 0.699999988079071, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 825.0, 369.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3679,8 +3741,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 546.0, 990.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3708,8 +3772,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 546.0, 946.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3737,8 +3803,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 546.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3766,8 +3834,10 @@
                   "y": -1
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 546.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3795,8 +3865,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 281.0, 990.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3824,8 +3896,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 281.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3853,8 +3927,10 @@
                   "y": -1
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 281.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3882,8 +3958,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 990.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3911,8 +3989,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 0.5328184962272644, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3940,8 +4020,10 @@
                   "y": -1
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 852.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3969,8 +4051,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 626.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -3998,8 +4082,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 584.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4027,8 +4113,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 426.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4056,8 +4144,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 17.0, 426.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4085,8 +4175,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 958.0, 98.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4114,8 +4206,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 78.0, 113.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4143,8 +4237,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 78.0, 113.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4172,8 +4268,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 16.0, 15.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4201,8 +4299,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 915.0, 18.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4230,8 +4330,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 809.0, 457.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4259,8 +4361,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4282,8 +4386,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4401,8 +4507,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -4518,8 +4626,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -5583,8 +5693,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
@@ -5784,8 +5896,10 @@
                   "y": 0
                },
                "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-               "rounded_corner_bounds": {
+               "mask_filter_info": {
+                "rounded_corner_bounds": {
                   "type": "kEmpty"
+                }
                },
                "sorting_context_id": 0,
                "visible_quad_layer_rect": {
diff --git a/components/viz/test/data/render_pass_data/top_real_world_desktop/espn_2018/0463.json b/components/viz/test/data/render_pass_data/top_real_world_desktop/espn_2018/0463.json
index 6b36c76..9897effe 100644
--- a/components/viz/test/data/render_pass_data/top_real_world_desktop/espn_2018/0463.json
+++ b/components/viz/test/data/render_pass_data/top_real_world_desktop/espn_2018/0463.json
@@ -113,22 +113,24 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 161.0, 139.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 298.0,
-               "x": 20.0,
-               "y": 65.0
+              "height": 167.0,
+              "width": 298.0,
+              "x": 20.0,
+              "y": 65.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -156,22 +158,24 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 149.0, 129.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 298.0,
-               "x": 20.0,
-               "y": 65.0
+              "height": 167.0,
+              "width": 298.0,
+              "x": 20.0,
+              "y": 65.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": 1873712234,
          "visible_quad_layer_rect": {
@@ -272,22 +276,24 @@
             "y": 129
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 167.0,
-               "width": 785.0,
-               "x": 20.0,
-               "y": 65.0
+              "height": 167.0,
+              "width": 785.0,
+              "x": 20.0,
+              "y": 65.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -464,8 +470,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 611.0, 433.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -493,8 +501,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 411.0, 433.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -522,8 +532,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 212.0, 433.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -551,8 +563,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 12.0, 433.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -669,22 +683,24 @@
             "y": -6
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 494.0, 579.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 167.0,
-               "x": 418.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 167.0,
+              "x": 418.0,
+              "y": 499.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -712,22 +728,24 @@
             "y": -16
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 481.0, 579.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 167.0,
-               "x": 418.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 167.0,
+              "x": 418.0,
+              "y": 499.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": 1713838396,
          "visible_quad_layer_rect": {
@@ -844,22 +862,24 @@
             "y": -6
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 96.0, 579.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 168.0,
-               "x": 20.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 168.0,
+              "x": 20.0,
+              "y": 499.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -887,22 +907,24 @@
             "y": -16
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 84.0, 579.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 0.0,
             "lower_right.y": 0.0,
             "rect": {
-               "height": 167.0,
-               "width": 168.0,
-               "x": 20.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 168.0,
+              "x": 20.0,
+              "y": 499.0
             },
             "type": "kComplex",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 0.0,
             "upper_right.y": 0.0
+          }
          },
          "sorting_context_id": -1049879514,
          "visible_quad_layer_rect": {
@@ -1047,22 +1069,24 @@
             "y": 563
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 167.0,
-               "width": 387.0,
-               "x": 418.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 387.0,
+              "x": 418.0,
+              "y": 499.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -1090,22 +1114,24 @@
             "y": 563
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 167.0,
-               "width": 388.0,
-               "x": 20.0,
-               "y": 499.0
+              "height": 167.0,
+              "width": 388.0,
+              "x": 20.0,
+              "y": 499.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2628,8 +2654,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2657,8 +2685,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 100.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2686,8 +2716,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1563.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2715,8 +2747,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -0.7815000414848328, -0.1418750137090683, 1.0, -0.0010000000474974513, -88.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": -1804539955,
          "visible_quad_layer_rect": {
@@ -2744,8 +2778,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -0.7815000414848328, -0.1418750137090683, 1.0, -0.0010000000474974513, -26.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": -1804539955,
          "visible_quad_layer_rect": {
@@ -2773,8 +2809,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -0.7815000414848328, -0.1418750137090683, 1.0, -0.0010000000474974513, -1.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": -1804539955,
          "visible_quad_layer_rect": {
@@ -2802,22 +2840,24 @@
             "y": 129
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, 1101.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 252.0,
-               "width": 825.0,
-               "x": 319.0,
-               "y": 1101.0
+              "height": 252.0,
+              "width": 825.0,
+              "x": 319.0,
+              "y": 1101.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2845,8 +2885,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, 1101.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2874,22 +2916,24 @@
             "y": 433
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, 320.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 768.0,
-               "width": 825.0,
-               "x": 319.0,
-               "y": 320.0
+              "height": 768.0,
+              "width": 825.0,
+              "x": 319.0,
+              "y": 320.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2917,8 +2961,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, 320.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2946,22 +2992,24 @@
             "y": 579
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, -424.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "lower_left.x": 12.5,
             "lower_left.y": 12.5,
             "lower_right.x": 12.5,
             "lower_right.y": 12.5,
             "rect": {
-               "height": 731.0,
-               "width": 825.0,
-               "x": 319.0,
-               "y": -424.0
+              "height": 731.0,
+              "width": 825.0,
+              "x": 319.0,
+              "y": -424.0
             },
             "type": "kSingle",
             "upper_left.x": 12.5,
             "upper_left.y": 12.5,
             "upper_right.x": 12.5,
             "upper_right.y": 12.5
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -2989,8 +3037,10 @@
             "y": -579
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 319.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3018,8 +3068,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -3418.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3047,8 +3099,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 155.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3070,8 +3124,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 263.0, 67.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3093,8 +3149,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 135.0, 59.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3116,8 +3174,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 25.0, 23.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
@@ -3139,8 +3199,10 @@
             "y": 0
          },
          "quad_to_target_transform": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
-         "rounded_corner_bounds": {
+         "mask_filter_info": {
+          "rounded_corner_bounds": {
             "type": "kEmpty"
+          }
          },
          "sorting_context_id": 0,
          "visible_quad_layer_rect": {
diff --git a/content/DEPS b/content/DEPS
index f567a63..4315668 100644
--- a/content/DEPS
+++ b/content/DEPS
@@ -27,6 +27,7 @@
 
   "+components/browsing_topics/common",
   "+components/memory_pressure",
+  "+components/ml/mojom",
   "+components/power_scheduler",
   "+components/services/filesystem",
   "+components/services/font/public",
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 610d6906..ba3a6e39 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -73,6 +73,7 @@
     "//components/link_header_util",
     "//components/metrics",
     "//components/metrics:single_sample_metrics",
+    "//components/ml/mojom",
     "//components/network_session_configurator/browser",
     "//components/offline_pages/buildflags",
     "//components/offline_pages/core/request_header",
@@ -404,8 +405,6 @@
     "attribution_reporting/attribution_filter_data.h",
     "attribution_reporting/attribution_host.cc",
     "attribution_reporting/attribution_host.h",
-    "attribution_reporting/attribution_host_utils.cc",
-    "attribution_reporting/attribution_host_utils.h",
     "attribution_reporting/attribution_info.cc",
     "attribution_reporting/attribution_info.h",
     "attribution_reporting/attribution_internals_handler_impl.cc",
@@ -1263,6 +1262,10 @@
     "metrics/histograms_monitor.h",
     "mime_registry_impl.cc",
     "mime_registry_impl.h",
+    "ml/ml_service_factory.cc",
+    "ml/ml_service_factory.h",
+    "ml/ml_service_impl.cc",
+    "ml/ml_service_impl.h",
     "mojo_binder_policy_applier.cc",
     "mojo_binder_policy_applier.h",
     "mojo_binder_policy_map_impl.cc",
@@ -2091,6 +2094,8 @@
     "webauth/client_data_json.h",
     "webauth/webauth_request_security_checker.cc",
     "webauth/webauth_request_security_checker.h",
+    "webid/fake_identity_request_dialog_controller.cc",
+    "webid/fake_identity_request_dialog_controller.h",
     "webid/fedcm_metrics.cc",
     "webid/fedcm_metrics.h",
     "webid/federated_auth_request_impl.cc",
@@ -2396,6 +2401,8 @@
       "lock_screen/lock_screen_service_impl.h",
       "lock_screen/lock_screen_storage_impl.cc",
       "lock_screen/lock_screen_storage_impl.h",
+      "ml/ml_service_impl_cros.cc",
+      "ml/ml_service_impl_cros.h",
     ]
   }
 
diff --git a/content/browser/attribution_reporting/attribution_host.cc b/content/browser/attribution_reporting/attribution_host.cc
index b9820984..ae65d6b 100644
--- a/content/browser/attribution_reporting/attribution_host.cc
+++ b/content/browser/attribution_reporting/attribution_host.cc
@@ -11,15 +11,18 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "content/browser/attribution_reporting/attribution_aggregatable_source.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_trigger.h"
 #include "content/browser/attribution_reporting/attribution_data_host_manager.h"
-#include "content/browser/attribution_reporting/attribution_host_utils.h"
+#include "content/browser/attribution_reporting/attribution_filter_data.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_manager_provider.h"
 #include "content/browser/attribution_reporting/attribution_metrics.h"
 #include "content/browser/attribution_reporting/attribution_page_metrics.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
+#include "content/browser/attribution_reporting/common_source_info.h"
+#include "content/browser/attribution_reporting/storable_source.h"
 #include "content/browser/renderer_host/frame_tree.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
@@ -32,6 +35,7 @@
 #include "mojo/public/cpp/bindings/message.h"
 #include "net/base/schemeful_site.h"
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
+#include "third_party/blink/public/common/navigation/impression.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -201,9 +205,35 @@
     return;
   }
 
-  attribution_host_utils::VerifyAndStoreImpression(
-      AttributionSourceType::kNavigation, impression_origin, impression,
-      *attribution_manager, base::Time::Now());
+  // Convert |impression| into a StorableImpression that can be forwarded to
+  // storage. If a reporting origin was not provided, default to the impression
+  // origin for reporting.
+  const url::Origin& reporting_origin = !impression.reporting_origin
+                                            ? impression_origin
+                                            : *impression.reporting_origin;
+
+  // Conversion measurement is only allowed in secure contexts.
+  if (!network::IsOriginPotentiallyTrustworthy(impression_origin) ||
+      !network::IsOriginPotentiallyTrustworthy(reporting_origin) ||
+      !network::IsOriginPotentiallyTrustworthy(
+          impression.conversion_destination)) {
+    return;
+  }
+
+  const AttributionSourceType source_type = AttributionSourceType::kNavigation;
+  const base::Time impression_time = base::Time::Now();
+
+  StorableSource storable_impression(
+      // Impression data doesn't need to be sanitized.
+      CommonSourceInfo(
+          impression.impression_data, impression_origin,
+          impression.conversion_destination, reporting_origin, impression_time,
+          CommonSourceInfo::GetExpiryTime(impression.expiry, impression_time,
+                                          source_type),
+          source_type, impression.priority, AttributionFilterData(),
+          /*debug_key=*/absl::nullopt, AttributionAggregatableSource()));
+
+  attribution_manager->HandleSource(std::move(storable_impression));
 }
 
 void AttributionHost::MaybeNotifyFailedSourceNavigation(
diff --git a/content/browser/attribution_reporting/attribution_host_utils.cc b/content/browser/attribution_reporting/attribution_host_utils.cc
deleted file mode 100644
index 19123e4b..0000000
--- a/content/browser/attribution_reporting/attribution_host_utils.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/attribution_reporting/attribution_host_utils.h"
-
-#include <utility>
-
-#include "base/time/time.h"
-#include "content/browser/attribution_reporting/attribution_aggregatable_source.h"
-#include "content/browser/attribution_reporting/attribution_filter_data.h"
-#include "content/browser/attribution_reporting/attribution_manager.h"
-#include "content/browser/attribution_reporting/common_source_info.h"
-#include "content/browser/attribution_reporting/storable_source.h"
-#include "services/network/public/cpp/is_potentially_trustworthy.h"
-#include "third_party/blink/public/common/navigation/impression.h"
-#include "url/origin.h"
-
-namespace content {
-
-namespace attribution_host_utils {
-
-void VerifyAndStoreImpression(AttributionSourceType source_type,
-                              const url::Origin& impression_origin,
-                              const blink::Impression& impression,
-                              AttributionManager& attribution_manager,
-                              base::Time impression_time) {
-  // Convert |impression| into a StorableImpression that can be forwarded to
-  // storage. If a reporting origin was not provided, default to the impression
-  // origin for reporting.
-  const url::Origin& reporting_origin = !impression.reporting_origin
-                                            ? impression_origin
-                                            : *impression.reporting_origin;
-
-  // Conversion measurement is only allowed in secure contexts.
-  if (!network::IsOriginPotentiallyTrustworthy(impression_origin) ||
-      !network::IsOriginPotentiallyTrustworthy(reporting_origin) ||
-      !network::IsOriginPotentiallyTrustworthy(
-          impression.conversion_destination)) {
-    return;
-  }
-
-  StorableSource storable_impression(
-      // Impression data doesn't need to be sanitized.
-      CommonSourceInfo(
-          impression.impression_data, impression_origin,
-          impression.conversion_destination, reporting_origin, impression_time,
-          CommonSourceInfo::GetExpiryTime(impression.expiry, impression_time,
-                                          source_type),
-          source_type, impression.priority, AttributionFilterData(),
-          /*debug_key=*/absl::nullopt, AttributionAggregatableSource()));
-
-  attribution_manager.HandleSource(std::move(storable_impression));
-}
-
-}  // namespace attribution_host_utils
-
-}  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_host_utils.h b/content/browser/attribution_reporting/attribution_host_utils.h
deleted file mode 100644
index 7f6e926..0000000
--- a/content/browser/attribution_reporting/attribution_host_utils.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_HOST_UTILS_H_
-#define CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_HOST_UTILS_H_
-
-#include "content/browser/attribution_reporting/attribution_source_type.h"
-
-namespace base {
-class Time;
-}  // namespace base
-
-namespace blink {
-struct Impression;
-}  // namespace blink
-
-namespace url {
-class Origin;
-}  // namespace url
-
-namespace content {
-
-class AttributionManager;
-
-namespace attribution_host_utils {
-
-// Performs required checks on an incoming impression's data (trustworthy
-// origins, etc), and if verified, generates a `StorableSource` and persists
-// it.
-void VerifyAndStoreImpression(AttributionSourceType source_type,
-                              const url::Origin& impression_origin,
-                              const blink::Impression& impression,
-                              AttributionManager& attribution_manager,
-                              base::Time impression_time);
-
-}  // namespace attribution_host_utils
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_ATTRIBUTION_REPORTING_ATTRIBUTION_HOST_UTILS_H_
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index d53a7c8..b9246597 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -33,6 +33,7 @@
 #include "content/browser/media/media_web_contents_observer.h"
 #include "content/browser/media/midi_host.h"
 #include "content/browser/media/session/media_session_service_impl.h"
+#include "content/browser/ml/ml_service_factory.h"
 #include "content/browser/net/reporting_service_proxy.h"
 #include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
 #include "content/browser/prerender/prerender_internals.mojom.h"
@@ -892,6 +893,12 @@
   map->Add<handwriting::mojom::HandwritingRecognitionService>(
       base::BindRepeating(&CreateHandwritingRecognitionService));
 
+  if (base::FeatureList::IsEnabled(
+          features::kEnableMachineLearningModelLoaderWebPlatformApi)) {
+    map->Add<ml::model_loader::mojom::MLService>(
+        base::BindRepeating(&CreateMLService));
+  }
+
   map->Add<blink::mojom::WebBluetoothService>(base::BindRepeating(
       &RenderFrameHostImpl::CreateWebBluetoothService, base::Unretained(host)));
 
@@ -1078,6 +1085,10 @@
       &EmptyBinderForFrame<blink::mojom::AnchorElementMetricsHost>));
   map->Add<blink::mojom::CredentialManager>(base::BindRepeating(
       &EmptyBinderForFrame<blink::mojom::CredentialManager>));
+  if (base::FeatureList::IsEnabled(blink::features::kBrowsingTopics)) {
+    map->Add<blink::mojom::BrowsingTopicsDocumentService>(
+        base::BindRepeating(&BrowsingTopicsDocumentHost::CreateMojoService));
+  }
 #if !BUILDFLAG(IS_ANDROID)
   if (SiteIsolationPolicy::IsApplicationIsolationLevelEnabled()) {
     map->Add<blink::mojom::DirectSocketsService>(
@@ -1091,10 +1102,6 @@
               media::mojom::SpeechRecognitionClientBrowserInterface>));
   map->Add<media::mojom::MediaFoundationRendererNotifier>(base::BindRepeating(
       &EmptyBinderForFrame<media::mojom::MediaFoundationRendererNotifier>));
-  if (base::FeatureList::IsEnabled(blink::features::kBrowsingTopics)) {
-    map->Add<blink::mojom::BrowsingTopicsDocumentService>(
-        base::BindRepeating(&BrowsingTopicsDocumentHost::CreateMojoService));
-  }
   map->Add<media::mojom::MediaPlayerObserverClient>(base::BindRepeating(
       &EmptyBinderForFrame<media::mojom::MediaPlayerObserverClient>));
 #endif
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl.cc b/content/browser/first_party_sets/first_party_sets_handler_impl.cc
index 9b93a4a..c5a9cd1 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl.cc
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl.cc
@@ -78,11 +78,10 @@
 
 FirstPartySetsHandlerImpl::~FirstPartySetsHandlerImpl() = default;
 
-void FirstPartySetsHandlerImpl::ReconfigureAfterNetworkRestart(
-    SetsReadyOnceCallback on_sets_ready) {
+absl::optional<FirstPartySetsHandlerImpl::FlattenedSets>
+FirstPartySetsHandlerImpl::GetSetsIfEnabledAndReady() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (!on_sets_ready.is_null() && ShouldInvokeOnSetsReady())
-    std::move(on_sets_ready).Run(sets_.value());
+  return IsEnabledAndReady() ? sets_ : absl::nullopt;
 }
 
 void FirstPartySetsHandlerImpl::Init(const base::FilePath& user_data_dir,
@@ -194,7 +193,7 @@
 
   // TODO(shuuran@chromium.org): Implement site state clearing.
 
-  if (!on_sets_ready_.is_null() && ShouldInvokeOnSetsReady())
+  if (!on_sets_ready_.is_null() && IsEnabledAndReady())
     std::move(on_sets_ready_).Run(sets_.value());
 
   base::ThreadPool::PostTask(
@@ -204,7 +203,7 @@
           FirstPartySetParser::SerializeFirstPartySets(sets_.value())));
 }
 
-bool FirstPartySetsHandlerImpl::ShouldInvokeOnSetsReady() {
+bool FirstPartySetsHandlerImpl::IsEnabledAndReady() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return IsFirstPartySetsEnabled() && sets_.has_value();
 }
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl.h b/content/browser/first_party_sets/first_party_sets_handler_impl.h
index eb204b6..ecad499f 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl.h
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl.h
@@ -62,9 +62,9 @@
             const std::string& flag_value,
             SetsReadyOnceCallback on_sets_ready);
 
-  // Calls the callback with the current First-Party Sets data, if the data
-  // is ready.
-  void ReconfigureAfterNetworkRestart(SetsReadyOnceCallback on_sets_ready);
+  // Returns the current First-Party Sets data, if the data is ready and the
+  // feature is enabled.
+  absl::optional<FlattenedSets> GetSetsIfEnabledAndReady();
 
   // FirstPartySetsHandler
   void SetPublicFirstPartySets(base::File sets_file) override;
@@ -129,7 +129,7 @@
   // Returns true if:
   // * First-Party Sets are enabled;
   // * `sets_` is ready to be used.
-  bool ShouldInvokeOnSetsReady();
+  bool IsEnabledAndReady();
 
   // Represents the mapping of site -> site, where keys are members of sets, and
   // values are owners of the sets. Owners are explicitly represented as members
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc b/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
index 98e92f2..683bd0c 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
@@ -334,6 +334,26 @@
   EXPECT_EQ(got, "{}");
 }
 
+TEST_F(FirstPartySetsHandlerImplDisabledTest,
+       GetSetsIfEnabledAndReady_AfterSetsReady) {
+  ASSERT_TRUE(base::WriteFile(persisted_sets_path_, "{}"));
+
+  FirstPartySetsHandlerImpl::GetInstance()->Init(
+      scoped_dir_.GetPath(),
+      /*flag_value=*/"",
+      base::BindLambdaForTesting(
+          [](const FirstPartySetsHandlerImpl::FlattenedSets& got) {
+            FAIL();  // Should not be called.
+          }));
+
+  SetPublicFirstPartySetsAndWait(R"({"owner": "https://example.test", )"
+                                 R"("members": ["https://member.test"]})");
+
+  EXPECT_EQ(
+      FirstPartySetsHandlerImpl::GetInstance()->GetSetsIfEnabledAndReady(),
+      absl::nullopt);
+}
+
 class FirstPartySetsHandlerImplEnabledTest
     : public FirstPartySetsHandlerImplTest {
  public:
@@ -441,7 +461,8 @@
               expected_sets);
 }
 
-TEST_F(FirstPartySetsHandlerImplEnabledTest, ReconfigureAfterNetworkRestart) {
+TEST_F(FirstPartySetsHandlerImplEnabledTest,
+       GetSetsIfEnabledAndReady_AfterSetsReady) {
   ASSERT_TRUE(base::WriteFile(persisted_sets_path_, "{}"));
 
   const std::string input = R"({"owner": "https://example.test", )"
@@ -470,25 +491,19 @@
   EXPECT_THAT(FirstPartySetParser::DeserializeFirstPartySets(got),
               expected_sets);
 
-  {
-    base::test::TestFuture<const FirstPartySetsHandlerImpl::FlattenedSets&>
-        future;
-    FirstPartySetsHandlerImpl::GetInstance()->ReconfigureAfterNetworkRestart(
-        future.GetCallback());
-    EXPECT_THAT(future.Get(), expected_sets);
-  }
+  EXPECT_THAT(
+      FirstPartySetsHandlerImpl::GetInstance()->GetSetsIfEnabledAndReady(),
+      testing::Optional(expected_sets));
 }
 
 TEST_F(FirstPartySetsHandlerImplEnabledTest,
-       ReconfigureAfterNetworkRestart_BeforeSetsReady) {
+       GetSetsIfEnabledAndReady_BeforeSetsReady) {
   ASSERT_TRUE(base::WriteFile(persisted_sets_path_, "{}"));
 
-  // Call ReconfigureAfterNetworkRestart before the sets are ready.
-  FirstPartySetsHandlerImpl::GetInstance()->ReconfigureAfterNetworkRestart(
-      base::BindLambdaForTesting(
-          [](const FirstPartySetsHandlerImpl::FlattenedSets& got) {
-            FAIL();  // Should not be called.
-          }));
+  // Call GetSetsIfEnabledAndReady before the sets are ready.
+  EXPECT_EQ(
+      FirstPartySetsHandlerImpl::GetInstance()->GetSetsIfEnabledAndReady(),
+      absl::nullopt);
 
   // Persisted sets are expected to be loaded with the provided path.
   base::test::TestFuture<const FirstPartySetsHandlerImpl::FlattenedSets&>
@@ -507,6 +522,14 @@
                                         SerializesTo("https://example.test")),
                                    Pair(SerializesTo("https://member.test"),
                                         SerializesTo("https://example.test"))));
+
+  EXPECT_THAT(
+      FirstPartySetsHandlerImpl::GetInstance()->GetSetsIfEnabledAndReady(),
+      testing::Optional(
+          UnorderedElementsAre(Pair(SerializesTo("https://example.test"),
+                                    SerializesTo("https://example.test")),
+                               Pair(SerializesTo("https://member.test"),
+                                    SerializesTo("https://example.test")))));
 }
 
 }  // namespace content
\ No newline at end of file
diff --git a/content/browser/interest_group/ad_auction_service_impl_unittest.cc b/content/browser/interest_group/ad_auction_service_impl_unittest.cc
index d9c955f..f0b1e6d6 100644
--- a/content/browser/interest_group/ad_auction_service_impl_unittest.cc
+++ b/content/browser/interest_group/ad_auction_service_impl_unittest.cc
@@ -842,18 +842,22 @@
 // The server JSON updates all fields that can be updated.
 TEST_F(AdAuctionServiceImplTest, UpdateAllUpdatableFields) {
   network_responder_->RegisterUpdateResponse(
-      kDailyUpdateUrlPath,
-      base::StringPrintf(R"({
+      kDailyUpdateUrlPath, base::StringPrintf(R"({
 "priority": 1.59,
 "biddingLogicUrl": "%s/interest_group/new_bidding_logic.js",
+"biddingWasmHelperUrl":"%s/interest_group/new_bidding_wasm_helper_url.wasm",
 "trustedBiddingSignalsUrl":
   "%s/interest_group/new_trusted_bidding_signals_url.json",
 "trustedBiddingSignalsKeys": ["new_key"],
 "ads": [{"renderUrl": "%s/new_ad_render_url",
          "metadata": {"new_a": "b"}
-        }]
+        }],
+"adComponents": [{"renderUrl": "https://example.com/component_url",
+                  "metadata": {"new_c": "d"}
+                 }]
 })",
-                         kOriginStringA, kOriginStringA, kOriginStringA));
+                                              kOriginStringA, kOriginStringA,
+                                              kOriginStringA, kOriginStringA));
 
   blink::InterestGroup interest_group = CreateInterestGroup();
   interest_group.priority = 2.0;
@@ -883,6 +887,11 @@
   EXPECT_EQ(group.bidding_url->spec(),
             base::StringPrintf("%s/interest_group/new_bidding_logic.js",
                                kOriginStringA));
+  ASSERT_TRUE(group.bidding_wasm_helper_url.has_value());
+  EXPECT_EQ(
+      group.bidding_wasm_helper_url->spec(),
+      base::StringPrintf("%s/interest_group/new_bidding_wasm_helper_url.wasm",
+                         kOriginStringA));
   ASSERT_TRUE(group.trusted_bidding_signals_url.has_value());
   EXPECT_EQ(group.trusted_bidding_signals_url->spec(),
             base::StringPrintf(
@@ -896,6 +905,11 @@
   EXPECT_EQ(group.ads.value()[0].render_url.spec(),
             base::StringPrintf("%s/new_ad_render_url", kOriginStringA));
   EXPECT_EQ(group.ads.value()[0].metadata, "{\"new_a\":\"b\"}");
+  ASSERT_TRUE(group.ad_components.has_value());
+  ASSERT_EQ(group.ad_components->size(), 1u);
+  EXPECT_EQ(group.ad_components.value()[0].render_url.spec(),
+            "https://example.com/component_url");
+  EXPECT_EQ(group.ad_components.value()[0].metadata, "{\"new_c\":\"d\"}");
 }
 
 // Only set the ads field -- the other fields shouldn't be changed.
diff --git a/content/browser/interest_group/interest_group_update_manager.cc b/content/browser/interest_group/interest_group_update_manager.cc
index 1f2e1f0..485f18a 100644
--- a/content/browser/interest_group/interest_group_update_manager.cc
+++ b/content/browser/interest_group/interest_group_update_manager.cc
@@ -110,20 +110,16 @@
   return true;
 }
 
-// Copies the `ads` list  JSON field into `interest_group_update`, returns true
-// iff the JSON is valid and the copy completed.
-[[nodiscard]] bool TryToCopyAds(blink::InterestGroup& interest_group_update,
-                                const base::Value& value) {
-  const base::Value* maybe_ads = value.FindListKey("ads");
-  if (!maybe_ads)
-    return true;
+// Helper for TryToCopyAds() and TryToCopyAdComponents().
+[[nodiscard]] absl::optional<std::vector<blink::InterestGroup::Ad>> ExtractAds(
+    const base::Value& ads_list) {
   std::vector<blink::InterestGroup::Ad> ads;
-  for (const base::Value& ads_value : maybe_ads->GetListDeprecated()) {
+  for (const base::Value& ads_value : ads_list.GetListDeprecated()) {
     if (!ads_value.is_dict())
-      return false;
+      return absl::nullopt;
     const std::string* maybe_render_url = ads_value.FindStringKey("renderUrl");
     if (!maybe_render_url)
-      return false;
+      return absl::nullopt;
     blink::InterestGroup::Ad ad;
     ad.render_url = GURL(*maybe_render_url);
     const base::Value* maybe_metadata = ads_value.FindKey("metadata");
@@ -133,13 +129,43 @@
       if (!serializer.Serialize(*maybe_metadata)) {
         // Binary blobs shouldn't be present, but it's possible we exceeded the
         // max JSON depth.
-        return false;
+        return absl::nullopt;
       }
       ad.metadata = std::move(metadata);
     }
     ads.push_back(std::move(ad));
   }
-  interest_group_update.ads = std::move(ads);
+  return ads;
+}
+
+// Copies the `ads` list JSON field into `interest_group_update`, returns true
+// iff the JSON is valid and the copy completed.
+[[nodiscard]] bool TryToCopyAds(blink::InterestGroup& interest_group_update,
+                                const base::Value& value) {
+  const base::Value* maybe_ads = value.FindListKey("ads");
+  if (!maybe_ads)
+    return true;
+  absl::optional<std::vector<blink::InterestGroup::Ad>> maybe_extracted_ads =
+      ExtractAds(*maybe_ads);
+  if (!maybe_extracted_ads)
+    return false;
+  interest_group_update.ads = std::move(*maybe_extracted_ads);
+  return true;
+}
+
+// Copies the `adComponents` list JSON field into `interest_group_update`,
+// returns true iff the JSON is valid and the copy completed.
+[[nodiscard]] bool TryToCopyAdComponents(
+    blink::InterestGroup& interest_group_update,
+    const base::Value& value) {
+  const base::Value* maybe_ads = value.FindListKey("adComponents");
+  if (!maybe_ads)
+    return true;
+  absl::optional<std::vector<blink::InterestGroup::Ad>> maybe_extracted_ads =
+      ExtractAds(*maybe_ads);
+  if (!maybe_extracted_ads)
+    return false;
+  interest_group_update.ad_components = std::move(*maybe_extracted_ads);
   return true;
 }
 
@@ -171,6 +197,12 @@
   const std::string* maybe_bidding_url = value.FindStringKey("biddingLogicUrl");
   if (maybe_bidding_url)
     interest_group_update.bidding_url = GURL(*maybe_bidding_url);
+  const std::string* maybe_bidding_wasm_helper_url =
+      value.FindStringKey("biddingWasmHelperUrl");
+  if (maybe_bidding_wasm_helper_url) {
+    interest_group_update.bidding_wasm_helper_url =
+        GURL(*maybe_bidding_wasm_helper_url);
+  }
   const std::string* maybe_update_trusted_bidding_signals_url =
       value.FindStringKey("trustedBiddingSignalsUrl");
   if (maybe_update_trusted_bidding_signals_url) {
@@ -183,6 +215,9 @@
   if (!TryToCopyAds(interest_group_update, value)) {
     return absl::nullopt;
   }
+  if (!TryToCopyAdComponents(interest_group_update, value)) {
+    return absl::nullopt;
+  }
   if (!interest_group_update.IsValid()) {
     return absl::nullopt;
   }
diff --git a/content/browser/ml/OWNERS b/content/browser/ml/OWNERS
new file mode 100644
index 0000000..383049e
--- /dev/null
+++ b/content/browser/ml/OWNERS
@@ -0,0 +1,2 @@
+file://third_party/blink/renderer/modules/ml/OWNERS
+honglinyu@chromium.org
diff --git a/content/browser/ml/ml_service_factory.cc b/content/browser/ml/ml_service_factory.cc
new file mode 100644
index 0000000..16cab0ec9
--- /dev/null
+++ b/content/browser/ml/ml_service_factory.cc
@@ -0,0 +1,28 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/ml/ml_service_factory.h"
+
+#include <utility>
+
+#include "build/buildflag.h"
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "content/browser/ml/ml_service_impl_cros.h"
+#else
+// The default service which does not have any real backend.
+#include "content/browser/ml/ml_service_impl.h"
+#endif  // IS_CHROMEOS_ASH
+
+namespace content {
+
+void CreateMLService(mojo::PendingReceiver<ml::model_loader::mojom::MLService>
+                         pending_receiver) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+  CrOSMLServiceImpl::Create(std::move(pending_receiver));
+#else
+  MLServiceImpl::Create(std::move(pending_receiver));
+#endif
+}
+
+}  // namespace content
diff --git a/content/browser/ml/ml_service_factory.h b/content/browser/ml/ml_service_factory.h
new file mode 100644
index 0000000..b5ba0894
--- /dev/null
+++ b/content/browser/ml/ml_service_factory.h
@@ -0,0 +1,19 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ML_ML_SERVICE_FACTORY_H_
+#define CONTENT_BROWSER_ML_ML_SERVICE_FACTORY_H_
+
+#include "components/ml/mojom/ml_service.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+
+namespace content {
+
+// A simple API used by browser interface broker. The main motivation is to
+// expose an identical `Create()` interface over different platforms.
+void CreateMLService(mojo::PendingReceiver<ml::model_loader::mojom::MLService>);
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_ML_ML_SERVICE_FACTORY_H_
diff --git a/content/browser/ml/ml_service_impl.cc b/content/browser/ml/ml_service_impl.cc
new file mode 100644
index 0000000..92843e9
--- /dev/null
+++ b/content/browser/ml/ml_service_impl.cc
@@ -0,0 +1,40 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/ml/ml_service_impl.h"
+
+#include "base/memory/ptr_util.h"
+#include "components/ml/mojom/ml_service.mojom.h"
+#include "components/ml/mojom/web_platform_model.mojom.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
+
+namespace content {
+
+namespace {
+
+using ml::model_loader::mojom::CreateModelLoaderOptionsPtr;
+using ml::model_loader::mojom::CreateModelLoaderResult;
+using ml::model_loader::mojom::MLService;
+
+}  // namespace
+
+// static
+void MLServiceImpl::Create(mojo::PendingReceiver<MLService> receiver) {
+  mojo::MakeSelfOwnedReceiver<MLService>(base::WrapUnique(new MLServiceImpl()),
+                                         std::move(receiver));
+}
+
+MLServiceImpl::~MLServiceImpl() = default;
+
+MLServiceImpl::MLServiceImpl() = default;
+
+void MLServiceImpl::CreateModelLoader(CreateModelLoaderOptionsPtr options,
+                                      CreateModelLoaderCallback callback) {
+  // TODO(https://crbug.com/1309672): We should consider supporting this API on
+  // the other platforms in the future.
+  std::move(callback).Run(CreateModelLoaderResult::kNotSupported,
+                          mojo::NullRemote());
+}
+
+}  // namespace content
diff --git a/content/browser/ml/ml_service_impl.h b/content/browser/ml/ml_service_impl.h
new file mode 100644
index 0000000..e1cc500
--- /dev/null
+++ b/content/browser/ml/ml_service_impl.h
@@ -0,0 +1,36 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ML_ML_SERVICE_IMPL_H_
+#define CONTENT_BROWSER_ML_ML_SERVICE_IMPL_H_
+
+#include "components/ml/mojom/ml_service.mojom.h"
+#include "content/common/content_export.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+
+namespace content {
+
+class CONTENT_EXPORT MLServiceImpl : public ml::model_loader::mojom::MLService {
+ public:
+  ~MLServiceImpl() override;
+  // The interface to create an object, called by the ml service factory.
+  static void Create(
+      mojo::PendingReceiver<ml::model_loader::mojom::MLService> receiver);
+  MLServiceImpl(const MLServiceImpl&) = delete;
+  MLServiceImpl& operator=(const MLServiceImpl&) = delete;
+
+ protected:
+  MLServiceImpl();
+
+ private:
+  // ml::model_loader::mojom::MLService
+  void CreateModelLoader(
+      ml::model_loader::mojom::CreateModelLoaderOptionsPtr options,
+      CreateModelLoaderCallback callback) override;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_ML_ML_SERVICE_IMPL_H_
diff --git a/content/browser/ml/ml_service_impl_cros.cc b/content/browser/ml/ml_service_impl_cros.cc
new file mode 100644
index 0000000..5ff969a
--- /dev/null
+++ b/content/browser/ml/ml_service_impl_cros.cc
@@ -0,0 +1,60 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/ml/ml_service_impl_cros.h"
+
+#include "base/memory/ptr_util.h"
+#include "chromeos/services/machine_learning/public/cpp/service_connection.h"
+#include "components/ml/mojom/ml_service.mojom.h"
+#include "components/ml/mojom/web_platform_model.mojom.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/storage_partition.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
+
+namespace content {
+
+namespace {
+
+using ml::model_loader::mojom::CreateModelLoaderOptionsPtr;
+using ml::model_loader::mojom::CreateModelLoaderResult;
+using ml::model_loader::mojom::MLService;
+using ml::model_loader::mojom::ModelLoader;
+
+void OnModelCreated(mojo::PendingRemote<ModelLoader> remote,
+                    MLService::CreateModelLoaderCallback callback,
+                    CreateModelLoaderResult result) {
+  std::move(callback).Run(result, std::move(remote));
+}
+
+}  // namespace
+
+// static
+void CrOSMLServiceImpl::Create(mojo::PendingReceiver<MLService> receiver) {
+  mojo::MakeSelfOwnedReceiver<MLService>(
+      base::WrapUnique(new CrOSMLServiceImpl()), std::move(receiver));
+}
+
+CrOSMLServiceImpl::~CrOSMLServiceImpl() = default;
+
+CrOSMLServiceImpl::CrOSMLServiceImpl() = default;
+
+void CrOSMLServiceImpl::CreateModelLoader(
+    CreateModelLoaderOptionsPtr options,
+    MLService::CreateModelLoaderCallback callback) {
+  // The remote sent to the renderer.
+  mojo::PendingRemote<ModelLoader> blink_remote;
+  // The receiver sent to ml-service.
+  auto cros_receiver = blink_remote.InitWithNewPipeAndPassReceiver();
+
+  // TODO(https://crbug.com/1309814): we should consider restricting the
+  // resource usage of this API.
+  chromeos::machine_learning::ServiceConnection::GetInstance()
+      ->GetMachineLearningService()
+      .CreateWebPlatformModelLoader(
+          std::move(cros_receiver), std::move(options),
+          base::BindOnce(&OnModelCreated, std::move(blink_remote),
+                         std::move(callback)));
+}
+
+}  // namespace content
diff --git a/content/browser/ml/ml_service_impl_cros.h b/content/browser/ml/ml_service_impl_cros.h
new file mode 100644
index 0000000..199c8c5
--- /dev/null
+++ b/content/browser/ml/ml_service_impl_cros.h
@@ -0,0 +1,40 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ML_ML_SERVICE_IMPL_CROS_H_
+#define CONTENT_BROWSER_ML_ML_SERVICE_IMPL_CROS_H_
+
+#include "components/ml/mojom/ml_service.mojom-forward.h"
+#include "content/browser/ml/ml_service_impl.h"
+#include "content/common/content_export.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+
+namespace content {
+
+class CONTENT_EXPORT CrOSMLServiceImpl
+    : public ml::model_loader::mojom::MLService {
+ public:
+  ~CrOSMLServiceImpl() override;
+  // The interface to create an `CrOSMLServiceImpl` object and bind the mojo
+  // receiver, called by the ml service factory.
+  static void Create(
+      mojo::PendingReceiver<ml::model_loader::mojom::MLService> receiver);
+
+  CrOSMLServiceImpl(const CrOSMLServiceImpl&) = delete;
+  MLServiceImpl& operator=(const CrOSMLServiceImpl&) = delete;
+
+ protected:
+  CrOSMLServiceImpl();
+
+ private:
+  // ml::model_loader::mojom::MLService
+  void CreateModelLoader(
+      ml::model_loader::mojom::CreateModelLoaderOptionsPtr options,
+      CreateModelLoaderCallback callback) override;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_ML_ML_SERVICE_IMPL_CROS_H_
diff --git a/content/browser/network_service_instance_impl.cc b/content/browser/network_service_instance_impl.cc
index ce419ec..7788ca3 100644
--- a/content/browser/network_service_instance_impl.cc
+++ b/content/browser/network_service_instance_impl.cc
@@ -578,11 +578,12 @@
         }
       }
 
-      FirstPartySetsHandlerImpl::GetInstance()->ReconfigureAfterNetworkRestart(
-          base::BindOnce([](const base::flat_map<net::SchemefulSite,
-                                                 net::SchemefulSite>& sets) {
-            g_network_service_remote->get()->SetFirstPartySets(sets);
-          }));
+      if (absl::optional<FirstPartySetsHandlerImpl::FlattenedSets> sets =
+              FirstPartySetsHandlerImpl::GetInstance()
+                  ->GetSetsIfEnabledAndReady();
+          sets.has_value()) {
+        g_network_service_remote->get()->SetFirstPartySets(*sets);
+      }
 
       GetContentClient()->browser()->OnNetworkServiceCreated(
           g_network_service_remote->get());
diff --git a/content/browser/renderer_host/media/service_video_capture_device_launcher.cc b/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
index 2ca14625..e10521a 100644
--- a/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
+++ b/content/browser/renderer_host/media/service_video_capture_device_launcher.cc
@@ -147,7 +147,7 @@
   // GpuMemoryBuffer-based VideoCapture buffer works only on the Chrome OS
   // and Windows VideoCaptureDevice implementations.
 #if BUILDFLAG(IS_WIN)
-  if (base::FeatureList::IsEnabled(media::kMediaFoundationD3D11VideoCapture) &&
+  if (media::IsMediaFoundationD3D11VideoCaptureEnabled() &&
       params.requested_format.pixel_format == media::PIXEL_FORMAT_NV12) {
     new_params.buffer_type = media::VideoCaptureBufferType::kGpuMemoryBuffer;
   }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 426dce8..4b78252 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -9186,6 +9186,17 @@
                      weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
+void RenderFrameHostImpl::RequestDistilledAXTree(
+    AXTreeDistillerCallback callback) {
+  // TODO(https://crbug.com/859110): Remove once frame_ can no longer be null.
+  if (!IsRenderFrameCreated())
+    return;
+
+  GetMojomFrameInRenderer()->SnapshotAndDistillAXTree(
+      base::BindOnce(&RenderFrameHostImpl::RequestDistilledAXTreeCallback,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+}
+
 void RenderFrameHostImpl::GetSavableResourceLinksFromRenderer() {
   if (!IsRenderFrameLive())
     return;
@@ -9680,18 +9691,38 @@
 void RenderFrameHostImpl::RequestAXTreeSnapshotCallback(
     AXTreeSnapshotCallback callback,
     const ui::AXTreeUpdate& snapshot) {
+  // Since |snapshot| is const, we need to make a copy in order to modify the
+  // tree data.
   ui::AXTreeUpdate dst_snapshot;
-  dst_snapshot.root_id = snapshot.root_id;
-  dst_snapshot.nodes.resize(snapshot.nodes.size());
+  CopyAXTreeUpdate(snapshot, &dst_snapshot);
+  std::move(callback).Run(dst_snapshot);
+}
+
+void RenderFrameHostImpl::RequestDistilledAXTreeCallback(
+    AXTreeDistillerCallback callback,
+    const ui::AXTreeUpdate& snapshot,
+    const std::vector<ui::AXNodeID>& text_nodes) {
+  // Since |snapshot| is const, we need to make a copy in order to modify the
+  // tree data.
+  ui::AXTreeUpdate dst_snapshot;
+  CopyAXTreeUpdate(snapshot, &dst_snapshot);
+  std::move(callback).Run(dst_snapshot, text_nodes);
+}
+
+void RenderFrameHostImpl::CopyAXTreeUpdate(const ui::AXTreeUpdate& snapshot,
+                                           ui::AXTreeUpdate* snapshot_copy) {
+  snapshot_copy->root_id = snapshot.root_id;
+  snapshot_copy->nodes.resize(snapshot.nodes.size());
   for (size_t i = 0; i < snapshot.nodes.size(); ++i)
-    dst_snapshot.nodes[i] = snapshot.nodes[i];
+    snapshot_copy->nodes[i] = snapshot.nodes[i];
 
   if (snapshot.has_tree_data) {
     ax_tree_data_ = snapshot.tree_data;
-    dst_snapshot.tree_data = GetAXTreeData();
-    dst_snapshot.has_tree_data = true;
+    // Set the AXTreeData to be the last |ax_tree_data_| received from the
+    // render frame.
+    snapshot_copy->tree_data = GetAXTreeData();
+    snapshot_copy->has_tree_data = true;
   }
-  std::move(callback).Run(dst_snapshot);
 }
 
 void RenderFrameHostImpl::CreatePaymentManager(
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index e357de40..3c38b7bec 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -326,6 +326,7 @@
                              bool exclude_offscreen,
                              size_t max_nodes,
                              const base::TimeDelta& timeout) override;
+  void RequestDistilledAXTree(AXTreeDistillerCallback callback) override;
   SiteInstanceImpl* GetSiteInstance() const override;
   RenderProcessHost* GetProcess() const override;
   GlobalRenderFrameHostId GetGlobalId() const override;
@@ -2920,6 +2921,19 @@
                                      const ui::AXTreeUpdate& snapshot);
 
   // Callback that will be called as a response to the call to the method
+  // content::mojom::RenderAccessibility::DistillAXTree(). The |callback| passed
+  // will be invoked after the renderer has responded with a list of text node
+  // ID's as |text_nodes|.
+  void RequestDistilledAXTreeCallback(
+      AXTreeDistillerCallback callback,
+      const ui::AXTreeUpdate& snapshot,
+      const std::vector<ui::AXNodeID>& text_node_ids);
+
+  // Makes a copy of an AXTreeUpdate to send to the destination.
+  void CopyAXTreeUpdate(const ui::AXTreeUpdate& snapshot,
+                        ui::AXTreeUpdate* snapshot_copy);
+
+  // Callback that will be called as a response to the call to the method
   // blink::mojom::LocalFrame::GetSavableResourceLinks(). The |reply| passed
   // will be a nullptr when the url is not the savable URLs or valid.
   void GetSavableResourceLinksCallback(
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index a188b12..6445dba 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -3476,7 +3476,7 @@
   CopyFeatureSwitch(browser_cmd, renderer_cmd, switches::kDisableBlinkFeatures);
 
 #if BUILDFLAG(IS_WIN)
-  if (base::FeatureList::IsEnabled(media::kMediaFoundationD3D11VideoCapture)) {
+  if (media::IsMediaFoundationD3D11VideoCaptureEnabled()) {
     renderer_cmd->AppendSwitch(switches::kVideoCaptureUseGpuMemoryBuffer);
   }
 #endif
diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc
index fb1dccfb..ed3778ac 100644
--- a/content/browser/utility_process_host.cc
+++ b/content/browser/utility_process_host.cc
@@ -316,8 +316,7 @@
       cmd_line->AppendSwitch(extra_switch);
 
 #if BUILDFLAG(IS_WIN)
-    if (base::FeatureList::IsEnabled(
-            media::kMediaFoundationD3D11VideoCapture)) {
+    if (media::IsMediaFoundationD3D11VideoCaptureEnabled()) {
       // MediaFoundationD3D11VideoCapture requires Gpu memory buffers,
       // which are unavailable if the GPU process isn't running.
       if (!GpuDataManagerImpl::GetInstance()->IsGpuCompositingDisabled()) {
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 9b341e54..d9fb954 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2716,12 +2716,6 @@
 
   prefs.pepper_3d_enabled = !command_line.HasSwitch(switches::kDisablePepper3d);
 
-  prefs.flash_3d_enabled = !command_line.HasSwitch(switches::kDisableFlash3d);
-  prefs.flash_stage3d_enabled =
-      !command_line.HasSwitch(switches::kDisableFlashStage3d);
-  prefs.flash_stage3d_baseline_enabled =
-      !command_line.HasSwitch(switches::kDisableFlashStage3d);
-
   prefs.allow_file_access_from_file_urls =
       command_line.HasSwitch(switches::kAllowFileAccessFromFiles);
 
diff --git a/content/browser/webid/fake_identity_request_dialog_controller.cc b/content/browser/webid/fake_identity_request_dialog_controller.cc
new file mode 100644
index 0000000..0fa61a3
--- /dev/null
+++ b/content/browser/webid/fake_identity_request_dialog_controller.cc
@@ -0,0 +1,32 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/webid/fake_identity_request_dialog_controller.h"
+
+namespace content {
+
+FakeIdentityRequestDialogController::FakeIdentityRequestDialogController(
+    absl::optional<std::string> selected_account)
+    : selected_account_(selected_account) {}
+
+FakeIdentityRequestDialogController::~FakeIdentityRequestDialogController() =
+    default;
+
+void FakeIdentityRequestDialogController::ShowAccountsDialog(
+    content::WebContents* rp_web_contents,
+    const GURL& idp_signin_url,
+    base::span<const IdentityRequestAccount> accounts,
+    const IdentityProviderMetadata& idp_metadata,
+    const ClientIdData& client_id_data,
+    IdentityRequestAccount::SignInMode sign_in_mode,
+    AccountSelectionCallback on_selected) {
+  DCHECK_GT(accounts.size(), 0ul);
+  // Use the provided account, if any. Otherwise use the first one.
+  if (selected_account_)
+    std::move(on_selected).Run(*selected_account_, /* is_sign_in= */ true);
+  else
+    std::move(on_selected).Run(accounts[0].id, /* is_sign_in= */ true);
+}
+
+}  // namespace content
diff --git a/content/browser/webid/fake_identity_request_dialog_controller.h b/content/browser/webid/fake_identity_request_dialog_controller.h
new file mode 100644
index 0000000..3dc205b8
--- /dev/null
+++ b/content/browser/webid/fake_identity_request_dialog_controller.h
@@ -0,0 +1,39 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_WEBID_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
+#define CONTENT_BROWSER_WEBID_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
+
+#include <string>
+
+#include "content/public/browser/identity_request_dialog_controller.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+
+namespace content {
+
+// This fakes the request dialogs to always provide user consent.
+// Used by tests and if the --use-fake-ui-for-fedcm command-line
+// flag is provided.
+class CONTENT_EXPORT FakeIdentityRequestDialogController
+    : public IdentityRequestDialogController {
+ public:
+  explicit FakeIdentityRequestDialogController(
+      absl::optional<std::string> selected_account = absl::nullopt);
+  ~FakeIdentityRequestDialogController() override;
+
+  void ShowAccountsDialog(content::WebContents* rp_web_contents,
+                          const GURL& idp_signin_url,
+                          base::span<const IdentityRequestAccount> accounts,
+                          const IdentityProviderMetadata& idp_metadata,
+                          const ClientIdData& client_id_data,
+                          IdentityRequestAccount::SignInMode sign_in_mode,
+                          AccountSelectionCallback on_selected) override;
+
+ private:
+  absl::optional<std::string> selected_account_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_WEBID_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc
index 5a3fa17..1ccc2f2 100644
--- a/content/browser/webid/federated_auth_request_impl.cc
+++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -5,12 +5,14 @@
 #include "content/browser/webid/federated_auth_request_impl.h"
 
 #include "base/callback.h"
+#include "base/command_line.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_piece.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
+#include "content/browser/webid/fake_identity_request_dialog_controller.h"
 #include "content/browser/webid/fedcm_metrics.h"
 #include "content/browser/webid/flags.h"
 #include "content/browser/webid/webid_utils.h"
@@ -23,6 +25,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_client.h"
+#include "content/public/common/content_switches.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom.h"
 #include "ui/accessibility/ax_mode.h"
@@ -1108,6 +1111,17 @@
   if (mock_dialog_controller_)
     return std::move(mock_dialog_controller_);
 
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kUseFakeUIForFedCM)) {
+    std::string selected_account =
+        base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+            switches::kUseFakeUIForFedCM);
+    return std::make_unique<FakeIdentityRequestDialogController>(
+        selected_account.empty()
+            ? absl::nullopt
+            : absl::optional<std::string>(selected_account));
+  }
+
   return GetContentClient()->browser()->CreateIdentityRequestDialogController();
 }
 
diff --git a/content/browser/webid/test/fake_identity_request_dialog_controller.cc b/content/browser/webid/test/fake_identity_request_dialog_controller.cc
deleted file mode 100644
index c66f78bc..0000000
--- a/content/browser/webid/test/fake_identity_request_dialog_controller.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/webid/test/fake_identity_request_dialog_controller.h"
-
-#include "base/bind.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace content {
-
-FakeIdentityRequestDialogController::FakeIdentityRequestDialogController(
-    absl::optional<std::string> dialog_selected_account)
-    : dialog_selected_account_(dialog_selected_account) {}
-
-FakeIdentityRequestDialogController::~FakeIdentityRequestDialogController() =
-    default;
-
-void FakeIdentityRequestDialogController::ShowAccountsDialog(
-    WebContents* rp_web_contents,
-    const GURL& idp_signin_url,
-    base::span<const IdentityRequestAccount> accounts,
-    const IdentityProviderMetadata& idp_metadata,
-    const ClientIdData& client_id_data,
-    IdentityRequestAccount::SignInMode sign_in_mode,
-    AccountSelectionCallback on_selected) {
-  if (dialog_selected_account_) {
-    std::move(on_selected)
-        .Run(*dialog_selected_account_, true /* is_sign_in */);
-  }
-}
-
-}  // namespace content
diff --git a/content/browser/webid/test/fake_identity_request_dialog_controller.h b/content/browser/webid/test/fake_identity_request_dialog_controller.h
deleted file mode 100644
index 342b9b4..0000000
--- a/content/browser/webid/test/fake_identity_request_dialog_controller.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_WEBID_TEST_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
-#define CONTENT_BROWSER_WEBID_TEST_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
-
-#include <string>
-
-#include "content/public/browser/identity_request_dialog_controller.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "url/gurl.h"
-
-namespace content {
-
-class WebContents;
-
-// This fakes the request dialogs to always provide user consent.
-// Tests that need to vary the responses or set test expectations should use
-// MockIdentityRequestDialogController.
-// This also fakes an IdP sign-in page until tests can be set up to
-// verify the FederatedAuthResponse mechanics.
-class FakeIdentityRequestDialogController
-    : public IdentityRequestDialogController {
- public:
-  explicit FakeIdentityRequestDialogController(
-      absl::optional<std::string> dialog_selected_account);
-  ~FakeIdentityRequestDialogController() override;
-
-  FakeIdentityRequestDialogController(
-      const FakeIdentityRequestDialogController&) = delete;
-  FakeIdentityRequestDialogController& operator=(
-      const FakeIdentityRequestDialogController&) = delete;
-
-  void ShowAccountsDialog(WebContents* rp_web_contents,
-                          const GURL& idp_signin_url,
-                          base::span<const IdentityRequestAccount> accounts,
-                          const IdentityProviderMetadata& idp_metadata,
-                          const ClientIdData& client_id_data,
-                          IdentityRequestAccount::SignInMode sign_in_mode,
-                          AccountSelectionCallback on_selected) override;
-
- private:
-  absl::optional<std::string> dialog_selected_account_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_WEBID_TEST_FAKE_IDENTITY_REQUEST_DIALOG_CONTROLLER_H_
diff --git a/content/browser/webid/webid_browsertest.cc b/content/browser/webid/webid_browsertest.cc
index bd45be0..e2cba7a2 100644
--- a/content/browser/webid/webid_browsertest.cc
+++ b/content/browser/webid/webid_browsertest.cc
@@ -13,7 +13,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "components/network_session_configurator/common/network_switches.h"
-#include "content/browser/webid/test/fake_identity_request_dialog_controller.h"
+#include "content/browser/webid/fake_identity_request_dialog_controller.h"
 #include "content/browser/webid/test/webid_test_content_browser_client.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/identity_request_dialog_controller.h"
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index ec594f2..037e4c6 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -469,6 +469,11 @@
   SnapshotAccessibilityTree(SnapshotAccessibilityTreeParams params)
       => (ax.mojom.AXTreeUpdate snapshot);
 
+  // Requests a one-time distillation of the accessibility tree without enabling
+  // accessibility if it wasn't already enabled.
+  SnapshotAndDistillAXTree() => (ax.mojom.AXTreeUpdate snapshot,
+                                 array<int32> text_node_ids);
+
   // Get HTML data by serializing the target frame and replacing all resource
   // links with a path to the local copy passed in the message payload. In order
   // to report progress to the the browser process, a pending remote is passed
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index 81a4a0b3..f867cc24 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -31,6 +31,7 @@
 #include "third_party/blink/public/mojom/page/page_visibility_state.mojom-forward.h"
 #include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom-forward.h"
 #include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
+#include "ui/accessibility/ax_node_id_forward.h"
 #include "ui/gfx/native_widget_types.h"
 
 class GURL;
@@ -191,6 +192,13 @@
                                      size_t max_nodes,
                                      const base::TimeDelta& timeout) = 0;
 
+  using AXTreeDistillerCallback =
+      base::OnceCallback<void(const ui::AXTreeUpdate&,
+                              const std::vector<ui::AXNodeID>& text_node_ids)>;
+  // Requests a one-time snapshot of the accessibility tree with distilled
+  // node IDs identified.
+  virtual void RequestDistilledAXTree(AXTreeDistillerCallback callback) = 0;
+
   // Returns the SiteInstance grouping all RenderFrameHosts that have script
   // access to this RenderFrameHost, and must therefore live in the same
   // process.
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index a4f254e..5a326da 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -293,6 +293,12 @@
 const base::Feature kEnableCanvas2DLayers{"EnableCanvas2DLayers",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables the Machine Learning Model Loader Web Platform API. Explainer:
+// https://github.com/webmachinelearning/model-loader/blob/main/explainer.md
+const base::Feature kEnableMachineLearningModelLoaderWebPlatformApi{
+    "EnableMachineLearningModelLoaderWebPlatformApi",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // If this feature is enabled and device permission is not granted by the user,
 // media-device enumeration will provide at most one device per type and the
 // device IDs will not be available.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 762b159..9e9bf19 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -78,6 +78,8 @@
 CONTENT_EXPORT extern const base::Feature
     kEnableBackForwardCacheForScreenReader;
 CONTENT_EXPORT extern const base::Feature kEnableCanvas2DLayers;
+CONTENT_EXPORT extern const base::Feature
+    kEnableMachineLearningModelLoaderWebPlatformApi;
 CONTENT_EXPORT extern const base::Feature kEnumerateDevicesHideDeviceIDs;
 CONTENT_EXPORT extern const base::Feature kExperimentalAccessibilityLabels;
 CONTENT_EXPORT extern const base::Feature
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index dc96641..d2920e3 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -135,12 +135,6 @@
 // Disable FileSystem API.
 const char kDisableFileSystem[]             = "disable-file-system";
 
-// Disable 3D inside of flapper.
-const char kDisableFlash3d[]                = "disable-flash-3d";
-
-// Disable Stage3D inside of flapper.
-const char kDisableFlashStage3d[]           = "disable-flash-stage3d";
-
 // Disable user gesture requirement for presentation.
 const char kDisableGestureRequirementForPresentation[] =
     "disable-gesture-requirement-for-presentation";
@@ -799,6 +793,11 @@
 const char kUseFakeCodecForPeerConnection[] =
     "use-fake-codec-for-peer-connection";
 
+// Bypass the FedCM account selection dialog. If a value is provided for
+// this switch, that account ID is selected, otherwise the first account
+// is chosen.
+const char kUseFakeUIForFedCM[] = "use-fake-ui-for-fedcm";
+
 // Bypass the media stream infobar by selecting the default device for media
 // streams (e.g. WebRTC). Works with --use-fake-device-for-media-stream.
 const char kUseFakeUIForMediaStream[]     = "use-fake-ui-for-media-stream";
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index 07877047..9876270 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -50,8 +50,6 @@
 CONTENT_EXPORT extern const char kDisableWebGL[];
 CONTENT_EXPORT extern const char kDisableWebGL2[];
 CONTENT_EXPORT extern const char kDisableFileSystem[];
-CONTENT_EXPORT extern const char kDisableFlash3d[];
-CONTENT_EXPORT extern const char kDisableFlashStage3d[];
 CONTENT_EXPORT extern const char kDisableGestureRequirementForPresentation[];
 CONTENT_EXPORT extern const char kDisableGpu[];
 CONTENT_EXPORT extern const char kDisableGpuCompositing[];
@@ -221,6 +219,7 @@
 CONTENT_EXPORT extern const char kTouchEventFeatureDetectionDisabled[];
 CONTENT_EXPORT extern const char kTrustableWebBundleFileUrl[];
 CONTENT_EXPORT extern const char kUseFakeCodecForPeerConnection[];
+CONTENT_EXPORT extern const char kUseFakeUIForFedCM[];
 CONTENT_EXPORT extern const char kUseFakeUIForMediaStream[];
 CONTENT_EXPORT extern const char kVideoImageTextureTarget[];
 CONTENT_EXPORT extern const char kUseMobileUserAgent[];
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index 04663c2..120e333 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -432,7 +432,12 @@
 
       // Mark the channel as blocking.
       int flags = fcntl(socket_fd.get(), F_GETFL);
-      PCHECK(flags != -1) << "Ash is probably not running. Perhaps it crashed?";
+      std::string helper_msg =
+          "On bot, open CAS outputs on test result page(Milo),"
+          "there is a ash_chrome.log file which contains ash log."
+          "For local debugging, pass in --ash-logging-path to test runner.";
+      PCHECK(flags != -1) << "Ash is probably not running. Perhaps it crashed?"
+                          << helper_msg;
       fcntl(socket_fd.get(), F_SETFL, flags & ~O_NONBLOCK);
 
       uint8_t buf[32];
@@ -440,7 +445,7 @@
       auto size = mojo::SocketRecvmsg(socket_fd.get(), buf, sizeof(buf),
                                       &descriptors, true /*block*/);
       if (size < 0)
-        PLOG(ERROR) << "Error receiving message from the socket";
+        PLOG(ERROR) << "Error receiving message from the socket" << helper_msg;
       ASSERT_EQ(1, size);
 
       // TODO(crbug.com/1156033): Clean up when both ash-chrome and
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 6adaa80..7bb9625 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -40,6 +40,8 @@
     "accessibility/ax_image_annotator.h",
     "accessibility/ax_image_stopwords.cc",
     "accessibility/ax_image_stopwords.h",
+    "accessibility/ax_tree_distiller.cc",
+    "accessibility/ax_tree_distiller.h",
     "accessibility/ax_tree_snapshotter_impl.cc",
     "accessibility/ax_tree_snapshotter_impl.h",
     "accessibility/blink_ax_action_target.cc",
diff --git a/content/renderer/accessibility/ax_tree_distiller.cc b/content/renderer/accessibility/ax_tree_distiller.cc
new file mode 100644
index 0000000..de7dd327
--- /dev/null
+++ b/content/renderer/accessibility/ax_tree_distiller.cc
@@ -0,0 +1,120 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/accessibility/ax_tree_distiller.h"
+
+#include <queue>
+#include <vector>
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/renderer/accessibility/ax_tree_snapshotter_impl.h"
+#include "ui/accessibility/ax_node.h"
+#include "ui/accessibility/ax_tree.h"
+
+namespace {
+
+static const ax::mojom::Role kRolesToSkip[]{
+    ax::mojom::Role::kAudio,
+    ax::mojom::Role::kBanner,
+    ax::mojom::Role::kButton,
+    ax::mojom::Role::kComplementary,
+    ax::mojom::Role::kContentInfo,
+    ax::mojom::Role::kFooter,
+    ax::mojom::Role::kFooterAsNonLandmark,
+    ax::mojom::Role::kHeader,
+    ax::mojom::Role::kHeaderAsNonLandmark,
+    ax::mojom::Role::kImage,
+    ax::mojom::Role::kLabelText,
+    ax::mojom::Role::kNavigation,
+};
+static constexpr int kMaxNodes = 5000;
+
+// TODO(crbug.com/1266555): Replace this with a call to
+// OneShotAccessibilityTreeSearch.
+const ui::AXNode* GetArticleNode(const ui::AXNode* node) {
+  std::queue<const ui::AXNode*> queue;
+  queue.push(node);
+
+  while (!queue.empty()) {
+    const ui::AXNode* popped = queue.front();
+    queue.pop();
+    if (popped->GetRole() == ax::mojom::Role::kArticle)
+      return popped;
+    for (auto iter = popped->UnignoredChildrenBegin();
+         iter != popped->UnignoredChildrenEnd(); ++iter) {
+      queue.push(iter.get());
+    }
+  }
+
+  return nullptr;
+}
+
+void AddTextNodesToVector(const ui::AXNode* node,
+                          std::vector<ui::AXNodeID>* text_node_ids) {
+  if (node->GetRole() == ax::mojom::Role::kStaticText) {
+    if (node->HasStringAttribute(ax::mojom::StringAttribute::kName))
+      text_node_ids->emplace_back(node->id());
+    return;
+  }
+
+  for (const auto role : kRolesToSkip) {
+    if (role == node->GetRole())
+      return;
+  }
+  for (auto iter = node->UnignoredChildrenBegin();
+       iter != node->UnignoredChildrenEnd(); ++iter) {
+    AddTextNodesToVector(iter.get(), text_node_ids);
+  }
+}
+
+}  // namespace
+
+namespace content {
+
+AXTreeDistiller::AXTreeDistiller(RenderFrameImpl* render_frame)
+    : render_frame_(render_frame) {}
+
+AXTreeDistiller::~AXTreeDistiller() = default;
+
+void AXTreeDistiller::Distill() {
+  SnapshotAXTree();
+  DistillAXTree();
+}
+
+void AXTreeDistiller::SnapshotAXTree() {
+  // If snapshot_ is already cached, do nothing.
+  if (snapshot_)
+    return;
+  snapshot_ = std::make_unique<ui::AXTreeUpdate>();
+
+  // Get page contents (via snapshot of a11y tree) for reader generation.
+  AXTreeSnapshotterImpl snapshotter(render_frame_, ui::AXMode::kWebContents);
+  snapshotter.Snapshot(
+      /* exclude_offscreen= */ false, kMaxNodes,
+      /* timeout= */ {}, snapshot_.get());
+}
+
+void AXTreeDistiller::DistillAXTree() {
+  // If text_node_ids_ is already cached, do nothing.
+  if (text_node_ids_)
+    return;
+  text_node_ids_ = std::make_unique<std::vector<ui::AXNodeID>>();
+
+  DCHECK(snapshot_);
+  ui::AXTree tree;
+  bool success = tree.Unserialize(*snapshot_);
+  if (!success)
+    return;
+
+  // If this page has an article node, only combine text from that node.
+  const ui::AXNode* reader_root = GetArticleNode(tree.root());
+  if (!reader_root) {
+    reader_root = tree.root();
+  }
+
+  text_node_ids_->reserve(snapshot_->nodes.size());
+  AddTextNodesToVector(reader_root, text_node_ids_.get());
+}
+
+}  // namespace content
diff --git a/content/renderer/accessibility/ax_tree_distiller.h b/content/renderer/accessibility/ax_tree_distiller.h
new file mode 100644
index 0000000..d5e5184e
--- /dev/null
+++ b/content/renderer/accessibility/ax_tree_distiller.h
@@ -0,0 +1,50 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_ACCESSIBILITY_AX_TREE_DISTILLER_H_
+#define CONTENT_RENDERER_ACCESSIBILITY_AX_TREE_DISTILLER_H_
+
+#include <vector>
+
+#include "ui/accessibility/ax_node_id_forward.h"
+#include "ui/accessibility/ax_tree_update_forward.h"
+
+namespace content {
+
+class RenderFrameImpl;
+
+///////////////////////////////////////////////////////////////////////////////
+// AXTreeDistiller
+//
+//  A class that creates and stores a distilled AXTree for a particular render
+//  frame.
+//
+class AXTreeDistiller {
+ public:
+  explicit AXTreeDistiller(RenderFrameImpl* render_frame);
+  ~AXTreeDistiller();
+  AXTreeDistiller(const AXTreeDistiller&) = delete;
+  AXTreeDistiller& operator=(const AXTreeDistiller&) = delete;
+
+  void Distill();
+
+  ui::AXTreeUpdate* GetSnapshot() { return snapshot_.get(); }
+  std::vector<ui::AXNodeID>* GetTextNodeIDs() { return text_node_ids_.get(); }
+
+ private:
+  // Takes a snapshot of an accessibility tree and caches it as |snapshot_|.
+  void SnapshotAXTree();
+
+  // Distills |snapshot_| by identifying main content nodes and caching their
+  // IDs as |text_node_ids_|.
+  void DistillAXTree();
+
+  RenderFrameImpl* render_frame_;
+  std::unique_ptr<ui::AXTreeUpdate> snapshot_;
+  std::unique_ptr<std::vector<ui::AXNodeID>> text_node_ids_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_ACCESSIBILITY_AX_TREE_SNAPSHOTTER_IMPL_H_
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index df66eff..655a3fdc 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -76,6 +76,7 @@
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/renderer/accessibility/aom_content_ax_tree.h"
+#include "content/renderer/accessibility/ax_tree_distiller.h"
 #include "content/renderer/accessibility/ax_tree_snapshotter_impl.h"
 #include "content/renderer/accessibility/render_accessibility_impl.h"
 #include "content/renderer/accessibility/render_accessibility_manager.h"
@@ -2275,6 +2276,15 @@
   std::move(callback).Run(response);
 }
 
+void RenderFrameImpl::SnapshotAndDistillAXTree(
+    SnapshotAndDistillAXTreeCallback callback) {
+  if (!ax_tree_distiller_)
+    ax_tree_distiller_ = std::make_unique<AXTreeDistiller>(this);
+  ax_tree_distiller_->Distill();
+  std::move(callback).Run(*ax_tree_distiller_->GetSnapshot(),
+                          *ax_tree_distiller_->GetTextNodeIDs());
+}
+
 void RenderFrameImpl::GetSerializedHtmlWithLocalLinks(
     const base::flat_map<GURL, base::FilePath>& url_map,
     const base::flat_map<blink::FrameToken, base::FilePath>& frame_token_map,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 7be2fd1e..1dc67c2e 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -108,6 +108,7 @@
 #include "third_party/blink/public/web/web_meaningful_layout.h"
 #include "ui/accessibility/ax_event.h"
 #include "ui/accessibility/ax_mode.h"
+#include "ui/accessibility/ax_node_id_forward.h"
 #include "ui/gfx/range/range.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -150,6 +151,7 @@
 namespace content {
 
 class AgentSchedulingGroup;
+class AXTreeDistiller;
 class BlinkInterfaceRegistryImpl;
 class DocumentState;
 class MediaPermissionDispatcher;
@@ -852,6 +854,8 @@
   void SnapshotAccessibilityTree(
       mojom::SnapshotAccessibilityTreeParamsPtr params,
       SnapshotAccessibilityTreeCallback callback) override;
+  void SnapshotAndDistillAXTree(
+      SnapshotAndDistillAXTreeCallback callback) override;
   void GetSerializedHtmlWithLocalLinks(
       const base::flat_map<GURL, base::FilePath>& url_map,
       const base::flat_map<blink::FrameToken, base::FilePath>& frame_token_map,
@@ -1390,6 +1394,9 @@
   // use inside of Blink.
   std::unique_ptr<blink::WebComputedAXTree> computed_ax_tree_;
 
+  // The AXTreeDistiller for this render frame.
+  std::unique_ptr<AXTreeDistiller> ax_tree_distiller_;
+
   // Used for tracking a frame's main frame document intersection and
   // and replicating it to the browser when it changes.
   absl::optional<gfx::Rect> mainframe_intersection_rect_;
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index cf042eeb..9e6fde15 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -133,8 +133,6 @@
     "browser/shell_download_manager_delegate.h",
     "browser/shell_federated_permission_context.cc",
     "browser/shell_federated_permission_context.h",
-    "browser/shell_identity_dialog_controller.cc",
-    "browser/shell_identity_dialog_controller.h",
     "browser/shell_javascript_dialog.h",
     "browser/shell_javascript_dialog_manager.cc",
     "browser/shell_javascript_dialog_manager.h",
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index 353d55e5..1720e904 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -51,7 +51,6 @@
 #include "content/shell/browser/shell_browser_context.h"
 #include "content/shell/browser/shell_browser_main_parts.h"
 #include "content/shell/browser/shell_devtools_manager_delegate.h"
-#include "content/shell/browser/shell_identity_dialog_controller.h"
 #include "content/shell/browser/shell_paths.h"
 #include "content/shell/browser/shell_quota_permission_context.h"
 #include "content/shell/browser/shell_web_contents_view_delegate_creator.h"
@@ -621,11 +620,6 @@
   return http_status_code >= 400 && http_status_code < 600;
 }
 
-std::unique_ptr<IdentityRequestDialogController>
-ShellContentBrowserClient::CreateIdentityRequestDialogController() {
-  return std::make_unique<ShellIdentityDialogController>();
-}
-
 void ShellContentBrowserClient::CreateFeatureListAndFieldTrials() {
   local_state_ = CreateLocalState();
   SetUpFieldTrials();
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h
index 7d02e93b..9aa5169 100644
--- a/content/shell/browser/shell_content_browser_client.h
+++ b/content/shell/browser/shell_content_browser_client.h
@@ -128,8 +128,6 @@
   void GetHyphenationDictionary(
       base::OnceCallback<void(const base::FilePath&)>) override;
   bool HasErrorPage(int http_status_code) override;
-  std::unique_ptr<IdentityRequestDialogController>
-  CreateIdentityRequestDialogController() override;
   void OnNetworkServiceCreated(
       network::mojom::NetworkService* network_service) override;
 
diff --git a/content/shell/browser/shell_identity_dialog_controller.cc b/content/shell/browser/shell_identity_dialog_controller.cc
deleted file mode 100644
index 2727183..0000000
--- a/content/shell/browser/shell_identity_dialog_controller.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/shell/browser/shell_identity_dialog_controller.h"
-
-namespace content {
-
-void ShellIdentityDialogController::ShowAccountsDialog(
-    content::WebContents* rp_web_contents,
-    const GURL& idp_signin_url,
-    base::span<const IdentityRequestAccount> accounts,
-    const IdentityProviderMetadata& idp_metadata,
-    const ClientIdData& client_id_data,
-    IdentityRequestAccount::SignInMode sign_in_mode,
-    AccountSelectionCallback on_selected) {
-  // Similar in spirit to allowlisted permissions in ShellPermissionManager,
-  // we automatically select the first account here so that tests can pass.
-  DCHECK_GT(accounts.size(), 0ul);
-  std::move(on_selected).Run(accounts[0].id, /* is_sign_in= */ false);
-}
-
-}  // namespace content
diff --git a/content/shell/browser/shell_identity_dialog_controller.h b/content/shell/browser/shell_identity_dialog_controller.h
deleted file mode 100644
index b7eec9c..0000000
--- a/content/shell/browser/shell_identity_dialog_controller.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_SHELL_BROWSER_SHELL_IDENTITY_DIALOG_CONTROLLER_H_
-#define CONTENT_SHELL_BROWSER_SHELL_IDENTITY_DIALOG_CONTROLLER_H_
-
-#include "content/public/browser/identity_request_dialog_controller.h"
-
-namespace content {
-
-class ShellIdentityDialogController : public IdentityRequestDialogController {
- public:
-  void ShowAccountsDialog(content::WebContents* rp_web_contents,
-                          const GURL& idp_signin_url,
-                          base::span<const IdentityRequestAccount> accounts,
-                          const IdentityProviderMetadata& idp_metadata,
-                          const ClientIdData& client_id_data,
-                          IdentityRequestAccount::SignInMode sign_in_mode,
-                          AccountSelectionCallback on_selected) override;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_SHELL_BROWSER_SHELL_IDENTITY_DIALOG_CONTROLLER_H_
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 387482b..6c73cecf 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1357,8 +1357,6 @@
     "../browser/web_package/web_bundle_file_browsertest.cc",
     "../browser/web_package/web_bundle_network_browsertest.cc",
     "../browser/web_package/web_bundle_trustable_file_browsertest.cc",
-    "../browser/webid/test/fake_identity_request_dialog_controller.cc",
-    "../browser/webid/test/fake_identity_request_dialog_controller.h",
     "../browser/webid/test/webid_test_content_browser_client.cc",
     "../browser/webid/test/webid_test_content_browser_client.h",
     "../browser/webid/webid_browsertest.cc",
@@ -2332,8 +2330,6 @@
     "../browser/web_package/web_bundle_utils_unittest.cc",
     "../browser/webid/federated_auth_request_impl_unittest.cc",
     "../browser/webid/idp_network_request_manager_unittest.cc",
-    "../browser/webid/test/fake_identity_request_dialog_controller.cc",
-    "../browser/webid/test/fake_identity_request_dialog_controller.h",
     "../browser/webid/test/mock_active_session_permission_delegate.cc",
     "../browser/webid/test/mock_active_session_permission_delegate.h",
     "../browser/webid/test/mock_api_permission_delegate.cc",
diff --git a/content/test/data/gpu/core_animation_status_api.html b/content/test/data/gpu/core_animation_status_api.html
index 7c9c62a..e937c7f9 100644
--- a/content/test/data/gpu/core_animation_status_api.html
+++ b/content/test/data/gpu/core_animation_status_api.html
@@ -16,6 +16,7 @@
   return pairs;
 })(window.location.search.substr(1).split('&'));
 
+// Command line '--enable-gpu-benchmarking' is required for this test.
 function main() {
   var expectedError = parsedString['error'];
   if (expectedError == undefined)
@@ -23,7 +24,7 @@
 
   const container = document.getElementById('container');
   const icon = document.createElement('icon');
-  icon.style.backgroundColor = "rgba(90, 129, 193, 255)";
+  icon.style.backgroundColor = 'Red';
   icon.style.position = "absolute";
   icon.style.width = '100px';
   icon.style.height = '100px';
@@ -31,9 +32,9 @@
   icon.style.left = '0px';
   container.appendChild(icon);
 
-  // core_animation_status_api.html is tested with a browser command
-  // line '--disable-features=CoreAnimationRenderer' which causes overlay to
-  // fail. gfx::kCALayerFailedOverlayDisabled = 32.
+  // If core_animation_status_api.html is tested with a command line
+  // '--disable-features=CoreAnimationRenderer' which causes overlay to fail.
+  // The error code would be 32 (gfx::kCALayerFailedOverlayDisabled).
   // (See "ui/gfx/ca_layer_result.h" for error code.)
   function errorCodeHandler(errorCode) {
     if (errorCode == expectedError) {
@@ -45,8 +46,15 @@
   }
 
   function animation() {
-    icon.style.left = '200px';
-    chrome.gpuBenchmarking.addCoreAnimationStatusEventListener(errorCodeHandler);
+     if (!chrome.gpuBenchmarking.addCoreAnimationStatusEventListener(errorCodeHandler)) {
+       console.log("addCoreAnimationStatusEventListener failed!");
+       window.domAutomationController.send("FAILED");
+     }
+
+     // if gpuBenchmarking is not supported, the test will not reach here and
+     // the final output shows a red quad instead of a bluish quad.
+     icon.style.left = '200px';
+     icon.style.backgroundColor = "rgba(90, 129, 193, 255)";
   }
 
   window.requestAnimationFrame(animation);
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py
index 9cb3f31..e4d70e6 100644
--- a/content/test/gpu/gpu_tests/pixel_test_pages.py
+++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -725,18 +725,20 @@
 
         # Test GpuBenchmarking::AddCoreAnimationStatusEventListener.
         # Error code is 0 (gfx::kCALayerSuccess) when it succeeds.
+        # --enable-gpu-benchmarking is added by default and it's required to run
+        # this test.
         PixelTestPage('core_animation_status_api.html?error=0',
                       base_name + '_CoreAnimationStatusApiNoError',
-                      test_rect=[0, 0, 300, 300],
-                      browser_args=[cba.ENABLE_GPU_BENCHMARKING]),
+                      test_rect=[0, 0, 300, 300]),
         # Test GpuBenchmarking::AddCoreAnimationStatusEventListener.
         # Error code is 32 (gfx::kCALayerFailedOverlayDisabled) when
         # CoreAnimationRenderer is disabled.
+        # --enable-gpu-benchmarking is added by default and it's required to run
+        # this test.
         PixelTestPage('core_animation_status_api.html?error=32',
                       base_name + '_CoreAnimationStatusApiWithError',
                       test_rect=[0, 0, 300, 300],
-                      browser_args=[cba.ENABLE_GPU_BENCHMARKING] +
-                      no_overlays_args),
+                      browser_args=no_overlays_args),
     ]
 
   # Pages that should be run only on dual-GPU MacBook Pros (at the
diff --git a/content/web_test/browser/web_test_browser_main_runner.cc b/content/web_test/browser/web_test_browser_main_runner.cc
index 107cd00..823bfa0 100644
--- a/content/web_test/browser/web_test_browser_main_runner.cc
+++ b/content/web_test/browser/web_test_browser_main_runner.cc
@@ -211,6 +211,9 @@
   command_line.AppendSwitch(switches::kUseFakeUIForMediaStream);
   command_line.AppendSwitch(switches::kUseFakeDeviceForMediaStream);
 
+  // Always run with fake FedCM UI.
+  command_line.AppendSwitch(switches::kUseFakeUIForFedCM);
+
   // Enable the deprecated WebAuthn Mojo Testing API.
   command_line.AppendSwitch(switches::kEnableWebAuthDeprecatedMojoTestingApi);
 
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
index f1c5a48..1dce4a2 100644
--- a/device/bluetooth/BUILD.gn
+++ b/device/bluetooth/BUILD.gn
@@ -356,6 +356,8 @@
         "bluez/bluetooth_service_record_bluez.h",
         "bluez/bluetooth_socket_bluez.cc",
         "bluez/bluetooth_socket_bluez.h",
+        "bluez/metrics_recorder.cc",
+        "bluez/metrics_recorder.h",
         "dbus/bluetooth_adapter_client.cc",
         "dbus/bluetooth_adapter_client.h",
         "dbus/bluetooth_admin_policy_client.cc",
diff --git a/device/bluetooth/bluez/bluetooth_device_bluez.cc b/device/bluetooth/bluez/bluetooth_device_bluez.cc
index a5f0670c..4ff7c36 100644
--- a/device/bluetooth/bluez/bluetooth_device_bluez.cc
+++ b/device/bluetooth/bluez/bluetooth_device_bluez.cc
@@ -27,6 +27,7 @@
 #include "device/bluetooth/bluez/bluetooth_remote_gatt_service_bluez.h"
 #include "device/bluetooth/bluez/bluetooth_service_record_bluez.h"
 #include "device/bluetooth/bluez/bluetooth_socket_bluez.h"
+#include "device/bluetooth/bluez/metrics_recorder.h"
 #include "device/bluetooth/dbus/bluetooth_adapter_client.h"
 #include "device/bluetooth/dbus/bluetooth_device_client.h"
 #include "device/bluetooth/dbus/bluetooth_gatt_service_client.h"
@@ -735,7 +736,9 @@
                                                   socket_thread_);
   socket->Connect(this, uuid, BluetoothSocketBlueZ::SECURITY_LEVEL_MEDIUM,
                   base::BindOnce(std::move(callback), socket),
-                  std::move(error_callback));
+                  base::BindOnce(&BluetoothDeviceBlueZ::OnConnectToServiceError,
+                                 weak_ptr_factory_.GetWeakPtr(),
+                                 std::move(error_callback)));
 }
 
 void BluetoothDeviceBlueZ::ConnectToServiceInsecurely(
@@ -750,7 +753,9 @@
                                                   socket_thread_);
   socket->Connect(this, uuid, BluetoothSocketBlueZ::SECURITY_LEVEL_LOW,
                   base::BindOnce(std::move(callback), socket),
-                  std::move(error_callback));
+                  base::BindOnce(&BluetoothDeviceBlueZ::OnConnectToServiceError,
+                                 weak_ptr_factory_.GetWeakPtr(),
+                                 std::move(error_callback)));
 }
 
 std::unique_ptr<device::BluetoothGattConnection>
@@ -790,6 +795,28 @@
 }
 #endif
 
+void BluetoothDeviceBlueZ::OnConnectToServiceError(
+    ConnectToServiceErrorCallback error_callback,
+    const std::string& error_message) {
+  BLUETOOTH_LOG(ERROR) << object_path_.value()
+                       << ": Failed to connect to service: " << error_message;
+
+#if BUILDFLAG(IS_CHROMEOS)
+  bluetooth::ConnectToServiceFailureReason reason =
+      bluetooth::ExtractFailureReasonFromErrorString(error_message);
+  bluetooth::RecordConnectToServiceFailureReason(reason);
+
+  // If the connection fails when we are supposedly bonded with the remote
+  // device, record this event specifically. This may indicate that we are in a
+  // "half paired" (or "half bonded") state as described in b/204274786.
+  if (IsBonded()) {
+    bluetooth::RecordBondedConnectToServiceFailureReason(reason);
+  }
+#endif  // BUILDFLAG(IS_CHROMEOS)
+
+  std::move(error_callback).Run(error_message);
+}
+
 void BluetoothDeviceBlueZ::UpdateServiceData() {
   bluez::BluetoothDeviceClient::Properties* properties =
       bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties(
diff --git a/device/bluetooth/bluez/bluetooth_device_bluez.h b/device/bluetooth/bluez/bluetooth_device_bluez.h
index e7e9abf..cd983060 100644
--- a/device/bluetooth/bluez/bluetooth_device_bluez.h
+++ b/device/bluetooth/bluez/bluetooth_device_bluez.h
@@ -119,6 +119,12 @@
                   AbortWriteErrorCallback error_callback) override;
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
 
+  // Invoked after a ConnectToService() or ConnectToServiceInsecurely() error,
+  // to allow us to perform error handling before we invoke the
+  // ConnectToServiceErrorCallback.
+  void OnConnectToServiceError(ConnectToServiceErrorCallback error_callback,
+                               const std::string& error_message);
+
   // Returns the complete list of service records discovered for on this
   // device via SDP. If called before discovery is complete, it may return
   // an incomplete list and/or stale cached records.
@@ -312,7 +318,6 @@
   scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
   scoped_refptr<device::BluetoothSocketThread> socket_thread_;
 
-
   // During pairing this is set to an object that we don't own, but on which
   // we can make method calls to request, display or confirm PIN Codes and
   // Passkeys. Generally it is the object that owns this one.
diff --git a/device/bluetooth/bluez/metrics_recorder.cc b/device/bluetooth/bluez/metrics_recorder.cc
index b1772fdb..ba7c8267 100644
--- a/device/bluetooth/bluez/metrics_recorder.cc
+++ b/device/bluetooth/bluez/metrics_recorder.cc
@@ -26,6 +26,30 @@
 const char kBlueZNotReadyError[] = "org.bluez.Error.NotReady";
 const char kBlueZFailedError[] = "org.bluez.Error.Failed";
 
+// Note: These values are sourced from the "BR/EDR connection failure reasons"
+// in BlueZ's error.h file, and should be kept in sync.
+const char kBlueZConnectionAlreadyConnected[] =
+    "br-connection-already-connected";
+const char kBlueZPageTimeout[] = "br-connection-page-timeout";
+const char kBlueZProfileUnavailable[] = "br-connection-profile-unavailable";
+const char kBlueZSdpSearch[] = "br-connection-sdp-search";
+const char kBlueZCreateSocket[] = "br-connection-create-socket";
+const char kBlueZInvalidArgument[] = "br-connection-invalid-argument";
+const char kBlueZAdapterNotPowered[] = "br-connection-adapter-not-powered";
+const char kBlueZNotSupported[] = "br-connection-not-supported";
+const char kBlueZBadSocket[] = "br-connection-bad-socket";
+const char kBlueZMemoryAllocation[] = "br-connection-memory-allocation";
+const char kBlueZBusy[] = "br-connection-busy";
+const char kBlueZConcurrentConnectionLimit[] =
+    "br-connection-concurrent-connection-limit";
+const char kBlueZTimeout[] = "br-connection-timeout";
+const char kBlueZRefused[] = "br-connection-refused";
+const char kBlueZAbortedByRemote[] = "br-connection-aborted-by-remote";
+const char kBlueZAbortedByLocal[] = "br-connection-aborted-by-local";
+const char kBlueZLmpProtocolError[] = "br-connection-lmp-protocol-error";
+const char kBlueZCanceled[] = "br-connection-canceled";
+const char kBlueZUnknown[] = "br-connection-unknown";
+
 }  // namespace
 
 absl::optional<ConnectToServiceInsecurelyResult> ExtractResultFromErrorString(
@@ -75,10 +99,83 @@
   return absl::nullopt;
 }
 
+ConnectToServiceFailureReason ExtractFailureReasonFromErrorString(
+    const std::string& error_string) {
+  if (base::Contains(error_string, kBlueZConnectionAlreadyConnected))
+    return ConnectToServiceFailureReason::kReasonConnectionAlreadyConnected;
+
+  if (base::Contains(error_string, kBlueZPageTimeout))
+    return ConnectToServiceFailureReason::kReasonPageTimeout;
+
+  if (base::Contains(error_string, kBlueZProfileUnavailable))
+    return ConnectToServiceFailureReason::kReasonProfileUnavailable;
+
+  if (base::Contains(error_string, kBlueZSdpSearch))
+    return ConnectToServiceFailureReason::kReasonSdpSearch;
+
+  if (base::Contains(error_string, kBlueZCreateSocket))
+    return ConnectToServiceFailureReason::kReasonCreateSocket;
+
+  if (base::Contains(error_string, kBlueZInvalidArgument))
+    return ConnectToServiceFailureReason::kReasonInvalidArgument;
+
+  if (base::Contains(error_string, kBlueZAdapterNotPowered))
+    return ConnectToServiceFailureReason::kReasonAdapterNotPowered;
+
+  if (base::Contains(error_string, kBlueZNotSupported))
+    return ConnectToServiceFailureReason::kReasonNotSupported;
+
+  if (base::Contains(error_string, kBlueZBadSocket))
+    return ConnectToServiceFailureReason::kReasonBadSocket;
+
+  if (base::Contains(error_string, kBlueZMemoryAllocation))
+    return ConnectToServiceFailureReason::kReasonMemoryAllocation;
+
+  if (base::Contains(error_string, kBlueZBusy))
+    return ConnectToServiceFailureReason::kReasonBusy;
+
+  if (base::Contains(error_string, kBlueZConcurrentConnectionLimit))
+    return ConnectToServiceFailureReason::kReasonConcurrentConnectionLimit;
+
+  if (base::Contains(error_string, kBlueZTimeout))
+    return ConnectToServiceFailureReason::kReasonTimeout;
+
+  if (base::Contains(error_string, kBlueZRefused))
+    return ConnectToServiceFailureReason::kReasonRefused;
+
+  if (base::Contains(error_string, kBlueZAbortedByRemote))
+    return ConnectToServiceFailureReason::kReasonAbortedByRemote;
+
+  if (base::Contains(error_string, kBlueZAbortedByLocal))
+    return ConnectToServiceFailureReason::kReasonAbortedByLocal;
+
+  if (base::Contains(error_string, kBlueZLmpProtocolError))
+    return ConnectToServiceFailureReason::kReasonLmpProtocolError;
+
+  if (base::Contains(error_string, kBlueZCanceled))
+    return ConnectToServiceFailureReason::kReasonCanceled;
+
+  if (base::Contains(error_string, kBlueZUnknown))
+    return ConnectToServiceFailureReason::kReasonUnknown;
+
+  return ConnectToServiceFailureReason::kReasonUnknown;
+}
+
 void RecordConnectToServiceInsecurelyResult(
     ConnectToServiceInsecurelyResult result) {
   base::UmaHistogramEnumeration(
       "Bluetooth.Linux.ConnectToServiceInsecurelyResult", result);
 }
 
+void RecordConnectToServiceFailureReason(ConnectToServiceFailureReason reason) {
+  base::UmaHistogramEnumeration(
+      "Bluetooth.Linux.ConnectToService.FailureReason", reason);
+}
+
+void RecordBondedConnectToServiceFailureReason(
+    ConnectToServiceFailureReason reason) {
+  base::UmaHistogramEnumeration(
+      "Bluetooth.Linux.ConnectToService.Bonded.FailureReason", reason);
+}
+
 }  // namespace bluetooth
diff --git a/device/bluetooth/bluez/metrics_recorder.h b/device/bluetooth/bluez/metrics_recorder.h
index 4064db1a..b8ca5164 100644
--- a/device/bluetooth/bluez/metrics_recorder.h
+++ b/device/bluetooth/bluez/metrics_recorder.h
@@ -34,14 +34,51 @@
   kMaxValue = kUnknownError
 };
 
+// Failure reasons for connection failures. Numerical values are used for
+// metrics and should not be changed or reused.
+enum class ConnectToServiceFailureReason {
+  kReasonConnectionAlreadyConnected = 0,
+  kReasonPageTimeout = 1,
+  kReasonProfileUnavailable = 2,
+  kReasonSdpSearch = 3,
+  kReasonCreateSocket = 4,
+  kReasonInvalidArgument = 5,
+  kReasonAdapterNotPowered = 6,
+  kReasonNotSupported = 7,
+  kReasonBadSocket = 8,
+  kReasonMemoryAllocation = 9,
+  kReasonBusy = 10,
+  kReasonConcurrentConnectionLimit = 11,
+  kReasonTimeout = 12,
+  kReasonRefused = 13,
+  kReasonAbortedByRemote = 14,
+  kReasonAbortedByLocal = 15,
+  kReasonLmpProtocolError = 16,
+  kReasonCanceled = 17,
+  kReasonUnknown = 18,
+  kMaxValue = kReasonUnknown
+};
+
 // Returns the ConnectToServiceInsecurelyResult type associated with
 // |error_string|, or null if no result could be found.
 absl::optional<ConnectToServiceInsecurelyResult> ExtractResultFromErrorString(
     const std::string& error_string);
 
+// Returns the ConnectToServiceFailureReason type associated with
+// |error_string|. Returns |kReasonUnknown| if the error is not recognized.
+ConnectToServiceFailureReason ExtractFailureReasonFromErrorString(
+    const std::string& error_string);
+
 void RecordConnectToServiceInsecurelyResult(
     ConnectToServiceInsecurelyResult result);
 
+void RecordConnectToServiceFailureReason(ConnectToServiceFailureReason reason);
+
+// Records a specific scenario in which we fail to connect to a remote device
+// that is considered to be bonded.
+void RecordBondedConnectToServiceFailureReason(
+    ConnectToServiceFailureReason reason);
+
 }  // namespace bluetooth
 
 #endif  // DEVICE_BLUETOOTH_BLUEZ_METRICS_RECORDER_H_
diff --git a/fuchsia/cipd/BUILD.gn b/fuchsia/cipd/BUILD.gn
index 8811ec0..568103d 100644
--- a/fuchsia/cipd/BUILD.gn
+++ b/fuchsia/cipd/BUILD.gn
@@ -422,5 +422,5 @@
     ]
   }
   visibility = []  # Required to replace the file default.
-  visibility = [ "//fuchsia:gn_all" ]
+  visibility = [ "//:gn_all" ]
 }
diff --git a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release/properties.json b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release/properties.json
index 9de08acc..5ff6274 100644
--- a/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release/properties.json
+++ b/infra/config/generated/builders/ci/Dawn Win10 x64 ASAN Release/properties.json
@@ -1,9 +1,8 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org",
-    "use_luci_auth": true
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 80,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index 547d48a0..08adf27 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -464,7 +464,7 @@
   * [`//third_party/nearby/README.chromium`](https://cs.chromium.org/search?q=+file:third_party/nearby/README.chromium)
 
 * [android-12-x64-rel](https://ci.chromium.org/p/chromium/builders/try/android-12-x64-rel) ([definition](https://cs.chromium.org/search?q=+file:/try.star$+""android-12-x64-rel"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""android-12-x64-rel""))
-  * Experiment percentage: 80.0
+  * Experiment percentage: 100.0
 
 * [android-pie-arm64-coverage-experimental-rel](https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-coverage-experimental-rel) ([definition](https://cs.chromium.org/search?q=+file:/try.star$+""android-pie-arm64-coverage-experimental-rel"")) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+""android-pie-arm64-coverage-experimental-rel""))
   * Experiment percentage: 3.0
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg
index ad11461..4ab942f2 100644
--- a/infra/config/generated/luci/commit-queue.cfg
+++ b/infra/config/generated/luci/commit-queue.cfg
@@ -286,7 +286,7 @@
       }
       builders {
         name: "chromium/try/android-12-x64-rel"
-        experiment_percentage: 80
+        experiment_percentage: 100
         location_regexp: ".*"
         location_regexp_exclude: ".+/[+]/docs/.+"
         location_regexp_exclude: ".+/[+]/infra/config/.+"
diff --git a/infra/config/subprojects/chromium/ci/chromium.dawn.star b/infra/config/subprojects/chromium/ci/chromium.dawn.star
index 46f80fec..a7bfa15 100644
--- a/infra/config/subprojects/chromium/ci/chromium.dawn.star
+++ b/infra/config/subprojects/chromium/ci/chromium.dawn.star
@@ -187,6 +187,9 @@
         category = "ToT|Windows|ASAN",
         short_name = "x64",
     ),
+    goma_backend = None,
+    reclient_jobs = rbe_jobs.LOW_JOBS_FOR_CI,
+    reclient_instance = rbe_instance.DEFAULT,
 )
 
 ci.gpu.windows_builder(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index b1287ae8..3af27d5 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -47,7 +47,7 @@
     # branch_selector = branches.STANDARD_MILESTONE,
     main_list_view = "try",
     tryjob = try_.job(
-        experiment_percentage = 80,
+        experiment_percentage = 100,
     ),
 )
 
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm b/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm
index cc6cc07..14c9705 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm
+++ b/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm
@@ -29,7 +29,7 @@
   message_text_ = delegate->GetMessageText();
   button_label_text_ =
       delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK);
-  icon_image_ = delegate->GetIcon();
+  icon_image_ = gfx::Image(delegate->GetIcon().Rasterize(nullptr));
   is_high_priority_ = static_cast<InfoBarIOS*>(infobar)->high_priority();
   use_icon_background_tint_ = delegate->UseIconBackgroundTint();
 }
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
index b589d93..7fc293c 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
@@ -58,7 +58,7 @@
   std::u16string GetMessageText() const override;
   int GetButtons() const override;
   std::u16string GetButtonLabel(InfoBarButton button) const override;
-  gfx::Image GetIcon() const override;
+  ui::ImageModel GetIcon() const override;
   bool Accept() override;
   void InfoBarDismissed() override;
 
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
index 0584a32a..d15322f 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
@@ -125,8 +125,8 @@
       IDS_IOS_SYNC_INFOBAR_SIGN_IN_SETTINGS_BUTTON_MOBILE);
 }
 
-gfx::Image ReSignInInfoBarDelegate::GetIcon() const {
-  return icon_;
+ui::ImageModel ReSignInInfoBarDelegate::GetIcon() const {
+  return ui::ImageModel::FromImage(icon_);
 }
 
 bool ReSignInInfoBarDelegate::Accept() {
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
index 727126f..6301731 100644
--- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
+++ b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
@@ -53,7 +53,7 @@
   std::u16string GetMessageText() const override;
   int GetButtons() const override;
   std::u16string GetButtonLabel(InfoBarButton button) const override;
-  gfx::Image GetIcon() const override;
+  ui::ImageModel GetIcon() const override;
   bool UseIconBackgroundTint() const override;
   bool Accept() override;
   bool ShouldExpire(const NavigationDetails& details) const override;
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
index c5d3522..35e43a4 100644
--- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
@@ -100,8 +100,8 @@
   return button_text_;
 }
 
-gfx::Image SigninNotificationInfoBarDelegate::GetIcon() const {
-  return icon_;
+ui::ImageModel SigninNotificationInfoBarDelegate::GetIcon() const {
+  return ui::ImageModel::FromImage(icon_);
 }
 
 bool SigninNotificationInfoBarDelegate::UseIconBackgroundTint() const {
diff --git a/ios/chrome/browser/ui/ntp/feed_header_view_controller.h b/ios/chrome/browser/ui/ntp/feed_header_view_controller.h
index 976d768..548f5ea 100644
--- a/ios/chrome/browser/ui/ntp/feed_header_view_controller.h
+++ b/ios/chrome/browser/ui/ntp/feed_header_view_controller.h
@@ -33,6 +33,10 @@
                          bundle:(NSBundle*)nibBundleOrNil NS_UNAVAILABLE;
 - (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
 
+// Toggles the feed header's background blur. Animates the transition if
+// |animated| is YES.
+- (void)toggleBackgroundBlur:(BOOL)blurred animated:(BOOL)animated;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_NTP_FEED_HEADER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/ntp/feed_header_view_controller.mm b/ios/chrome/browser/ui/ntp/feed_header_view_controller.mm
index 861da8f6d..9ee1cfc 100644
--- a/ios/chrome/browser/ui/ntp/feed_header_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/feed_header_view_controller.mm
@@ -10,6 +10,7 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
+#import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/l10n/l10n_util_mac.h"
@@ -80,6 +81,9 @@
 // The currently selected sorting for the Following feed.
 @property(nonatomic, assign) FollowingFeedSortType followingFeedSortType;
 
+// The blurred background of the feed header.
+@property(nonatomic, strong) UIVisualEffectView* blurBackgroundView;
+
 @end
 
 @implementation FeedHeaderViewController
@@ -101,10 +105,18 @@
 - (void)viewDidLoad {
   [super viewDidLoad];
 
-  self.container = [[UIView alloc] init];
+  // Adds a minor background to the blur so that it doesn't blend too much with
+  // the feed content. If Reduce Trasparency is enabled, then we just use
+  // translucent opacity instead.
+  if (UIAccessibilityIsReduceTransparencyEnabled()) {
+    self.view.backgroundColor =
+        [[UIColor colorNamed:kBackgroundColor] colorWithAlphaComponent:0.95];
+  } else {
+    self.view.backgroundColor =
+        [[UIColor colorNamed:kBackgroundColor] colorWithAlphaComponent:0.1];
+  }
 
-  self.view.backgroundColor =
-      [[UIColor colorNamed:kBackgroundColor] colorWithAlphaComponent:0.95];
+  self.container = [[UIView alloc] init];
 
   self.view.translatesAutoresizingMaskIntoConstraints = NO;
   self.container.translatesAutoresizingMaskIntoConstraints = NO;
@@ -118,6 +130,15 @@
     self.sortButton = [self createSortButton];
     self.sortButton.menu = [self createSortMenu];
     [self.container addSubview:self.sortButton];
+
+    if (!UIAccessibilityIsReduceTransparencyEnabled()) {
+      self.blurBackgroundView = [self createBlurBackground];
+      [self.view addSubview:self.blurBackgroundView];
+      // The blurred background has a tint that is visible when the header is
+      // over the standard NTP background. For this reason, we only add the blur
+      // background when scrolled into the feed.
+      self.blurBackgroundView.hidden = YES;
+    }
   } else {
     self.titleLabel = [self createTitleLabel];
     [self.container addSubview:self.titleLabel];
@@ -128,6 +149,25 @@
   [self applyHeaderConstraints];
 }
 
+- (void)toggleBackgroundBlur:(BOOL)blurred animated:(BOOL)animated {
+  if (UIAccessibilityIsReduceTransparencyEnabled() || !IsWebChannelsEnabled()) {
+    return;
+  }
+  DCHECK(self.blurBackgroundView);
+
+  if (!animated) {
+    self.blurBackgroundView.hidden = !blurred;
+    return;
+  }
+  [UIView transitionWithView:self.blurBackgroundView
+                    duration:0.3
+                     options:UIViewAnimationOptionTransitionCrossDissolve
+                  animations:^{
+                    self.blurBackgroundView.hidden = !blurred;
+                  }
+                  completion:nil];
+}
+
 #pragma mark - Setters
 
 // Sets |titleText| and updates header label if it exists.
@@ -273,6 +313,16 @@
   return segmentedControl;
 }
 
+// Configures and returns the blurred background of the feed header.
+- (UIVisualEffectView*)createBlurBackground {
+  UIBlurEffect* blurEffect =
+      [UIBlurEffect effectWithStyle:UIBlurEffectStyleSystemMaterial];
+  UIVisualEffectView* blurBackgroundView =
+      [[UIVisualEffectView alloc] initWithEffect:blurEffect];
+  blurBackgroundView.translatesAutoresizingMaskIntoConstraints = NO;
+  return blurBackgroundView;
+}
+
 // Applies constraints for the feed header elements' positioning.
 - (void)applyHeaderConstraints {
   // Anchor container and menu button.
@@ -320,6 +370,9 @@
       [self.sortButton.centerYAnchor
           constraintEqualToAnchor:self.container.centerYAnchor],
     ]];
+    if (self.blurBackgroundView) {
+      AddSameConstraints(self.blurBackgroundView, self.view);
+    }
   } else {
     // Anchors title label.
     [NSLayoutConstraint activateConstraints:@[
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
index 0f09819..f3fd9cc 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
@@ -724,9 +724,8 @@
 // omnibox.
 - (void)stickFeedHeaderToTop {
   DCHECK(self.feedHeaderViewController);
-
+  DCHECK(IsWebChannelsEnabled());
   [NSLayoutConstraint deactivateConstraints:self.feedHeaderConstraints];
-
   self.feedHeaderConstraints = @[
     [self.feedHeaderViewController.view.topAnchor
         constraintEqualToAnchor:self.headerController.view.bottomAnchor
@@ -735,12 +734,13 @@
         constraintEqualToAnchor:[self contentSuggestionsViewController]
                                     .view.bottomAnchor],
   ];
-
+  [self.feedHeaderViewController toggleBackgroundBlur:YES animated:YES];
   [NSLayoutConstraint activateConstraints:self.feedHeaderConstraints];
 }
 
 // Sets initial feed header constraints, between content suggestions and feed.
 - (void)setInitialFeedHeaderConstraints {
+  DCHECK(self.feedHeaderViewController);
   [NSLayoutConstraint deactivateConstraints:self.feedHeaderConstraints];
   self.feedHeaderConstraints = @[
     [self.feedHeaderViewController.view.topAnchor
@@ -750,6 +750,7 @@
         constraintEqualToAnchor:self.feedHeaderViewController.view
                                     .bottomAnchor],
   ];
+  [self.feedHeaderViewController toggleBackgroundBlur:NO animated:YES];
   [NSLayoutConstraint activateConstraints:self.feedHeaderConstraints];
 }
 
@@ -1116,6 +1117,10 @@
 - (void)setContentOffset:(CGFloat)offset {
   self.collectionView.contentOffset = CGPointMake(0, offset);
   self.scrolledIntoFeed = offset > -[self offsetWhenScrolledIntoFeed];
+  if (self.feedHeaderViewController) {
+    [self.feedHeaderViewController toggleBackgroundBlur:self.scrolledIntoFeed
+                                               animated:NO];
+  }
 }
 
 @end
diff --git a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
index e6fa7ba..e52b73a 100644
--- a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
+++ b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
@@ -48,7 +48,7 @@
   std::u16string GetMessageText() const override;
   int GetButtons() const override;
   std::u16string GetButtonLabel(InfoBarButton button) const override;
-  gfx::Image GetIcon() const override;
+  ui::ImageModel GetIcon() const override;
   bool UseIconBackgroundTint() const override;
   bool Accept() override;
 
diff --git a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
index 19384415..b0fb685e 100644
--- a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
@@ -94,8 +94,8 @@
   return button_text_;
 }
 
-gfx::Image SyncErrorInfoBarDelegate::GetIcon() const {
-  return icon_;
+ui::ImageModel SyncErrorInfoBarDelegate::GetIcon() const {
+  return ui::ImageModel::FromImage(icon_);
 }
 
 bool SyncErrorInfoBarDelegate::UseIconBackgroundTint() const {
diff --git a/ios/chrome/browser/upgrade/upgrade_center.mm b/ios/chrome/browser/upgrade/upgrade_center.mm
index ab88de0b..164feff 100644
--- a/ios/chrome/browser/upgrade/upgrade_center.mm
+++ b/ios/chrome/browser/upgrade/upgrade_center.mm
@@ -85,11 +85,11 @@
     return false;
   }
 
-  gfx::Image GetIcon() const override {
+  ui::ImageModel GetIcon() const override {
     if (icon_.IsEmpty()) {
       icon_ = gfx::Image([UIImage imageNamed:@"infobar_update"]);
     }
-    return icon_;
+    return ui::ImageModel::FromImage(icon_);
   }
 
   std::u16string GetMessageText() const override {
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index 3eaa7f1f..ea5fe38 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -39,7 +39,6 @@
     "//components/content_settings/core/browser",
     "//components/error_page/common",
     "//components/feature_engagement/public",
-    "//components/infobars/core",
     "//components/pref_registry",
     "//components/resources:components_resources_grit",
     "//components/resources:dev_ui_components_resources_grit",
@@ -75,6 +74,7 @@
     "//ui/base",
     "//url",
   ]
+  public_deps = [ "//components/infobars/core" ]
 }
 
 source_set("delegate") {
diff --git a/ios/chrome/browser/web/blocked_popup_tab_helper.mm b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
index 3606ca53..73246fb 100644
--- a/ios/chrome/browser/web/blocked_popup_tab_helper.mm
+++ b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
@@ -50,11 +50,11 @@
     return POPUP_BLOCKED_INFOBAR_DELEGATE_MOBILE;
   }
 
-  gfx::Image GetIcon() const override {
+  ui::ImageModel GetIcon() const override {
     if (icon_.IsEmpty()) {
       icon_ = gfx::Image([UIImage imageNamed:@"infobar_popup_blocker"]);
     }
-    return icon_;
+    return ui::ImageModel::FromImage(icon_);
   }
 
   std::u16string GetMessageText() const override {
diff --git a/ios/web/text_fragments/resources/text_fragments.js b/ios/web/text_fragments/resources/text_fragments.js
index 39cbca84..24eb21b 100644
--- a/ios/web/text_fragments/resources/text_fragments.js
+++ b/ios/web/text_fragments/resources/text_fragments.js
@@ -136,10 +136,23 @@
     };
 
   const handleClickWithSender = function(event) {
+    const mark = event.currentTarget;
+
+    // Traverse upwards from the mark element to see if it's a child of an <a>.
+    // If so, discard the event to prevent showing a menu while navigation is
+    // in progress.
+    let node = mark.parentNode;
+    while (node != null) {
+      if (node.tagName == 'A') {
+        return;
+      }
+      node = node.parentNode;
+    }
+
     __gCrWeb.common.sendWebKitMessage('textFragments', {
       command: 'textFragments.onClickWithSender',
-      rect: rectFromElement(event.target),
-      text: `"${event.target.innerText}"`,
+      rect: rectFromElement(mark),
+      text: `"${mark.innerText}"`,
       fragments: cachedFragments
     });
   };
@@ -152,5 +165,5 @@
       width: domRect.width,
       height: domRect.height
     };
-  }
+  };
 })();
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 95db4fd..277ece1 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -786,6 +786,8 @@
     "MediaFoundationAV1Encoding", base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enables H.264 CBP encode acceleration for Windows.
+// For feature check of kMediaFoundationH264CbpEncoding at runtime,
+// please use IsMediaFoundationH264CbpEncodingEnabled() instead.
 const base::Feature MEDIA_EXPORT kMediaFoundationH264CbpEncoding{
     "MediaFoundationH264CbpEncoding", base::FEATURE_DISABLED_BY_DEFAULT};
 
@@ -794,6 +796,8 @@
     "MediaFoundationVideoCapture", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables MediaFoundation based video capture with D3D11
+// For feature check of kMediaFoundationD3D11VideoCapture at runtime,
+// please use IsMediaFoundationD3D11VideoCaptureEnabled() instead.
 const base::Feature kMediaFoundationD3D11VideoCapture{
     "MediaFoundationD3D11VideoCapture", base::FEATURE_DISABLED_BY_DEFAULT};
 
@@ -1013,4 +1017,14 @@
 #endif
 }
 
+#if BUILDFLAG(IS_WIN)
+bool IsMediaFoundationH264CbpEncodingEnabled() {
+  return base::FeatureList::IsEnabled(kMediaFoundationH264CbpEncoding);
+}
+
+bool IsMediaFoundationD3D11VideoCaptureEnabled() {
+  return base::FeatureList::IsEnabled(kMediaFoundationD3D11VideoCapture);
+}
+#endif
+
 }  // namespace media
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index 4488c97..2309556 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -246,10 +246,18 @@
 MEDIA_EXPORT extern const base::Feature kDirectShowGetPhotoState;
 MEDIA_EXPORT extern const base::Feature kIncludeIRCamerasInDeviceEnumeration;
 MEDIA_EXPORT extern const base::Feature kMediaFoundationAV1Encoding;
+
+// For feature check of kMediaFoundationH264CbpEncoding at runtime,
+// please use IsMediaFoundationH264CbpEncodingEnabled() instead.
 MEDIA_EXPORT extern const base::Feature kMediaFoundationH264CbpEncoding;
+
 MEDIA_EXPORT extern const base::Feature kMediaFoundationVideoCapture;
 MEDIA_EXPORT extern const base::Feature kMediaFoundationVP8Decoding;
+
+// For feature check of kMediaFoundationD3D11VideoCapture at runtime,
+// please use IsMediaFoundationD3D11VideoCaptureEnabled() instead.
 MEDIA_EXPORT extern const base::Feature kMediaFoundationD3D11VideoCapture;
+
 MEDIA_EXPORT extern const base::Feature kMediaFoundationClearPlayback;
 MEDIA_EXPORT extern const base::Feature kWasapiRawAudioCapture;
 MEDIA_EXPORT extern const base::Feature kD3D11HEVCDecoding;
@@ -273,6 +281,11 @@
 MEDIA_EXPORT bool IsLiveCaptionFeatureEnabled();
 MEDIA_EXPORT bool IsVideoCaptureAcceleratedJpegDecodingEnabled();
 
+#if BUILDFLAG(IS_WIN)
+MEDIA_EXPORT bool IsMediaFoundationH264CbpEncodingEnabled();
+MEDIA_EXPORT bool IsMediaFoundationD3D11VideoCaptureEnabled();
+#endif
+
 enum class kCrosGlobalMediaControlsPinOptions {
   kPin,
   kNotPin,
diff --git a/media/capture/video/win/video_capture_device_factory_win.cc b/media/capture/video/win/video_capture_device_factory_win.cc
index 62f3247..8fb4433 100644
--- a/media/capture/video/win/video_capture_device_factory_win.cc
+++ b/media/capture/video/win/video_capture_device_factory_win.cc
@@ -329,8 +329,7 @@
     : use_media_foundation_(
           base::FeatureList::IsEnabled(media::kMediaFoundationVideoCapture)),
       use_d3d11_with_media_foundation_(
-          base::FeatureList::IsEnabled(
-              media::kMediaFoundationD3D11VideoCapture) &&
+          media::IsMediaFoundationD3D11VideoCaptureEnabled() &&
           switches::IsVideoCaptureUseGpuMemoryBufferEnabled()),
       com_thread_("Windows Video Capture COM Thread") {
   if (use_media_foundation_ && !PlatformSupportsMediaFoundation()) {
diff --git a/media/gpu/chromeos/platform_video_frame_utils.cc b/media/gpu/chromeos/platform_video_frame_utils.cc
index 428c869..9aa74fa 100644
--- a/media/gpu/chromeos/platform_video_frame_utils.cc
+++ b/media/gpu/chromeos/platform_video_frame_utils.cc
@@ -331,6 +331,7 @@
       }
 
       handle.type = gfx::NATIVE_PIXMAP;
+      handle.id = GetNextGpuMemoryBufferId();
       DCHECK_EQ(video_frame->layout().planes().size(), num_planes);
       handle.native_pixmap_handle.modifier = video_frame->layout().modifier();
       for (size_t i = 0; i < num_planes; ++i) {
diff --git a/media/gpu/vaapi/vaapi_image_processor_backend.cc b/media/gpu/vaapi/vaapi_image_processor_backend.cc
index f5a346f..cd69c010 100644
--- a/media/gpu/vaapi/vaapi_image_processor_backend.cc
+++ b/media/gpu/vaapi/vaapi_image_processor_backend.cc
@@ -75,19 +75,15 @@
     return nullptr;
 
   if (!base::Contains(input_config.preferred_storage_types,
-                      VideoFrame::STORAGE_DMABUFS) &&
-      !base::Contains(input_config.preferred_storage_types,
                       VideoFrame::STORAGE_GPU_MEMORY_BUFFER)) {
-    VLOGF(2) << "VaapiImageProcessorBackend supports Dmabuf-backed or "
-                "GpuMemoryBuffer based VideoFrame only for input";
+    VLOGF(2) << "VaapiImageProcessorBackend supports GpuMemoryBuffer based"
+                "VideoFrame only for input";
     return nullptr;
   }
   if (!base::Contains(output_config.preferred_storage_types,
-                      VideoFrame::STORAGE_DMABUFS) &&
-      !base::Contains(output_config.preferred_storage_types,
                       VideoFrame::STORAGE_GPU_MEMORY_BUFFER)) {
-    VLOGF(2) << "VaapiImageProcessorBackend supports Dmabuf-backed or "
-                "GpuMemoryBuffer based VideoFrame only for output";
+    VLOGF(2) << "VaapiImageProcessorBackend supports GpuMemoryBuffer based"
+                "VideoFrame only for output";
     return nullptr;
   }
 
diff --git a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
index 72bb399..7bf3f37 100644
--- a/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
+++ b/media/gpu/windows/media_foundation_video_encode_accelerator_win.cc
@@ -434,7 +434,7 @@
   RETURN_ON_HR_FAILURE(hr, "Failed to create sample", false);
 
   if (config.input_format == PIXEL_FORMAT_NV12 &&
-      base::FeatureList::IsEnabled(kMediaFoundationD3D11VideoCapture)) {
+      media::IsMediaFoundationD3D11VideoCaptureEnabled()) {
     dxgi_device_manager_ = DXGIDeviceManager::Create();
     if (!dxgi_device_manager_) {
       MEDIA_LOG(ERROR, media_log.get()) << "Failed to create DXGIDeviceManager";
diff --git a/net/dns/dns_test_util.cc b/net/dns/dns_test_util.cc
index 4109ba1..5ba78a5 100644
--- a/net/dns/dns_test_util.cc
+++ b/net/dns/dns_test_util.cc
@@ -475,9 +475,13 @@
               result_.response = CreateMalformedResponse(hostname_, qtype_);
               break;
             case MockDnsClientRule::ResultType::kUnexpected:
-              ADD_FAILURE()
-                  << "Unexpected DNS transaction created for hostname "
-                  << hostname_;
+              if (!delayed_) {
+                // Assume a delayed kUnexpected transaction is only an issue if
+                // allowed to complete.
+                ADD_FAILURE()
+                    << "Unexpected DNS transaction created for hostname "
+                    << hostname_;
+              }
               break;
           }
 
diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h
index abfa149..299e808 100644
--- a/net/dns/dns_test_util.h
+++ b/net/dns/dns_test_util.h
@@ -296,7 +296,8 @@
     // "Succeed" but with an unparsable response.
     kMalformed,
     // Immediately records a test failure if queried. Used to catch unexpected
-    // queries.
+    // queries. Alternately, if combined with `MockDnsClientRule::delay`, fails
+    // only if the query is allowed to complete without being cancelled.
     kUnexpected,
 
     // Results in the response in |Result::response| or, if null, results in a
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index a324e5a..b3a509c 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -24,6 +24,7 @@
 #include "base/compiler_specific.h"
 #include "base/containers/circular_deque.h"
 #include "base/containers/contains.h"
+#include "base/containers/cxx20_erase.h"
 #include "base/containers/flat_set.h"
 #include "base/containers/linked_list.h"
 #include "base/debug/debugger.h"
@@ -1237,10 +1238,10 @@
                                    HostCache::Entry results,
                                    bool secure) = 0;
 
-    // Called when a job succeeds and there are more transactions needed.  If
-    // the current completed transaction fails, this is not called.  Also not
-    // called when the DnsTask only needs to run one transaction.
-    virtual void OnIntermediateTransactionComplete() = 0;
+    // Called when one or more transactions complete or get cancelled, but only
+    // if more transactions are needed. If no more transactions are needed,
+    // expect `OnDnsTaskComplete()` to be called instead.
+    virtual void OnIntermediateTransactionsComplete() = 0;
 
     virtual RequestPriority priority() const = 0;
 
@@ -1285,24 +1286,24 @@
   DnsTask(const DnsTask&) = delete;
   DnsTask& operator=(const DnsTask&) = delete;
 
-  // The number of transactions required for the specified query type. Does not
-  // change as transactions are completed.
-  int num_needed_transactions() const { return num_needed_transactions_; }
+  int num_additional_transactions_needed() const {
+    return base::checked_cast<int>(transactions_needed_.size());
+  }
 
-  bool needs_another_transaction() const {
-    return !transactions_needed_.empty();
+  int num_transactions_in_progress() const {
+    return base::checked_cast<int>(transactions_in_progress_.size());
   }
 
   bool secure() const { return secure_; }
 
   void StartNextTransaction() {
-    DCHECK(needs_another_transaction());
+    DCHECK_GE(num_additional_transactions_needed(), 1);
 
-    if (num_needed_transactions_ ==
-        static_cast<int>(transactions_needed_.size())) {
+    if (!any_transaction_started_) {
       net_log_.BeginEvent(NetLogEventType::HOST_RESOLVER_MANAGER_DNS_TASK,
                           [&] { return NetLogDnsTaskCreationParams(); });
     }
+    any_transaction_started_ = true;
 
     TransactionInfo transaction_info = std::move(transactions_needed_.front());
     transactions_needed_.pop_front();
@@ -1373,9 +1374,9 @@
   base::Value NetLogDnsTaskTimeoutParams() {
     base::Value::Dict dict;
 
-    if (!transactions_started_.empty()) {
+    if (!transactions_in_progress_.empty()) {
       base::Value::List list;
-      for (const TransactionInfo& info : transactions_started_) {
+      for (const TransactionInfo& info : transactions_in_progress_) {
         base::Value::Dict transaction_dict;
         transaction_dict.Set("dns_query_type", static_cast<int>(info.type));
         list.Append(std::move(transaction_dict));
@@ -1465,8 +1466,6 @@
         transactions_needed_.emplace_back(remaining_query);
       }
     }
-    num_needed_transactions_ =
-        base::checked_cast<int>(transactions_needed_.size());
   }
 
   void CreateAndStartTransaction(TransactionInfo transaction_info) {
@@ -1493,14 +1492,14 @@
     transaction_info.transaction->SetRequestPriority(delegate_->priority());
 
     auto transaction_info_it =
-        transactions_started_.insert(std::move(transaction_info)).first;
+        transactions_in_progress_.insert(std::move(transaction_info)).first;
 
     // Safe to pass `transaction_info_it` because it is only modified/removed
     // after async completion of this call or by destruction (which cancels the
     // transaction and prevents callback because it owns the `DnsTransaction`
     // object).
     transaction_info_it->transaction->Start(base::BindOnce(
-        &DnsTask::OnTransactionComplete, base::Unretained(this),
+        &DnsTask::OnDnsTransactionComplete, base::Unretained(this),
         tick_clock_->NowTicks(), transaction_info_it, request_port));
   }
 
@@ -1508,7 +1507,7 @@
     net_log_.AddEvent(NetLogEventType::HOST_RESOLVER_MANAGER_DNS_TASK_TIMEOUT,
                       [&] { return NetLogDnsTaskTimeoutParams(); });
 
-    for (const TransactionInfo& transaction : transactions_started_) {
+    for (const TransactionInfo& transaction : transactions_in_progress_) {
       base::TimeDelta elapsed_time = tick_clock_->NowTicks() - task_start_time_;
 
       switch (transaction.type) {
@@ -1544,34 +1543,34 @@
       }
     }
 
-    num_completed_transactions_ += transactions_needed_.size();
     transactions_needed_.clear();
-    num_completed_transactions_ += transactions_started_.size();
-    transactions_started_.clear();
-    DCHECK(num_completed_transactions_ == num_needed_transactions());
+    transactions_in_progress_.clear();
 
-    ProcessResultsOnCompletion();
+    OnTransactionsFinished();
   }
 
-  void OnTransactionComplete(
+  // Called on completion of a `DnsTransaction`, but not necessarily completion
+  // of all work for the individual transaction in this task (see
+  // `OnTransactionsFinished()`).
+  void OnDnsTransactionComplete(
       const base::TimeTicks& start_time,
       std::set<TransactionInfo>::iterator transaction_info_it,
       uint16_t request_port,
       int net_error,
       const DnsResponse* response,
       absl::optional<std::string> doh_provider_id) {
-    DCHECK(transaction_info_it != transactions_started_.end());
-    DCHECK(transactions_started_.find(*transaction_info_it) !=
-           transactions_started_.end());
+    DCHECK(transaction_info_it != transactions_in_progress_.end());
+    DCHECK(transactions_in_progress_.find(*transaction_info_it) !=
+           transactions_in_progress_.end());
 
-    // Pull the TransactionInfo out of `transactions_started_` now, so it and
-    // its underlying DnsTransaction will be deleted on completion of
+    // Pull the TransactionInfo out of `transactions_in_progress_` now, so it
+    // and its underlying DnsTransaction will be deleted on completion of
     // OnTransactionComplete. Note: Once control leaves OnTransactionComplete,
     // there's no further need for the transaction object. On the other hand,
     // since it owns `*response`, it should stay around while
     // OnTransactionComplete executes.
-    TransactionInfo transaction_info =
-        std::move(transactions_started_.extract(transaction_info_it).value());
+    TransactionInfo transaction_info = std::move(
+        transactions_in_progress_.extract(transaction_info_it).value());
 
     base::TimeDelta elapsed_time = tick_clock_->NowTicks() - task_start_time_;
     enum HttpssvcDnsRcode rcode_for_httpssvc = HttpssvcDnsRcode::kNoError;
@@ -1687,8 +1686,13 @@
 
     // Merge results with saved results from previous transactions.
     if (saved_results_) {
-      DCHECK_LE(2, num_needed_transactions());
-      DCHECK_LT(num_completed_transactions_, num_needed_transactions());
+      // If saved result is a deferred failure, try again to complete with that
+      // failure.
+      if (saved_results_is_failure_) {
+        OnFailure(saved_results_.value().error(), /*allow_fallback=*/true,
+                  saved_results_.value().GetOptionalTtl());
+        return;
+      }
 
       switch (transaction_info.type) {
         case DnsQueryType::A:
@@ -1717,21 +1721,7 @@
     }
 
     saved_results_ = std::move(results);
-
-    // If not all transactions are complete, the task cannot yet be completed
-    // and the results so far must be saved to merge with additional results.
-    ++num_completed_transactions_;
-    if (num_completed_transactions_ < num_needed_transactions()) {
-      delegate_->OnIntermediateTransactionComplete();
-      MaybeStartTimeoutTimer();
-      return;
-    }
-
-    // Since all transactions are complete, in particular, all experimental or
-    // supplemental transactions are complete (if any were started).
-    timeout_timer_.Stop();
-
-    ProcessResultsOnCompletion();
+    OnTransactionsFinished();
   }
 
   bool IsFatalTransactionFailure(int transaction_error,
@@ -1784,12 +1774,21 @@
     return error == HttpsTransactionError::kFatalErrorEnabled;
   }
 
-  // Postprocesses the transactions' aggregated results after all
-  // transactions have completed.
-  void ProcessResultsOnCompletion() {
+  // Called on processing for one or more individual transaction being
+  // completed/cancelled. Processes overall results if all transactions are
+  // finished.
+  void OnTransactionsFinished() {
+    if (!transactions_in_progress_.empty() || !transactions_needed_.empty()) {
+      delegate_->OnIntermediateTransactionsComplete();
+      MaybeStartTimeoutTimer();
+      return;
+    }
+
     DCHECK(saved_results_.has_value());
     HostCache::Entry results = std::move(*saved_results_);
 
+    timeout_timer_.Stop();
+
     absl::optional<std::vector<IPEndPoint>> ip_endpoints;
     if (results.legacy_addresses().has_value()) {
       ip_endpoints = results.legacy_addresses().value().endpoints();
@@ -1853,27 +1852,59 @@
     OnSuccess(std::move(results));
   }
 
-  // TODO(crbug.com/1264933): Prevent A/AAAA errors from leading to immediate
-  // fallback if an HTTPS query is still pending that may lead to a fatal HTTPS
-  // error.
+  bool AnyPotentiallyFatalTransactionsRemain() {
+    auto is_fatal_or_empty_error = [](TransactionErrorBehavior behavior) {
+      return behavior == TransactionErrorBehavior::kFatalOrEmpty;
+    };
+
+    return base::ranges::any_of(transactions_needed_, is_fatal_or_empty_error,
+                                &TransactionInfo::error_behavior) ||
+           base::ranges::any_of(transactions_in_progress_,
+                                is_fatal_or_empty_error,
+                                &TransactionInfo::error_behavior);
+  }
+
+  void CancelNonFatalTransactions() {
+    auto has_non_fatal_or_empty_error = [](const TransactionInfo& info) {
+      return info.error_behavior != TransactionErrorBehavior::kFatalOrEmpty;
+    };
+
+    base::EraseIf(transactions_needed_, has_non_fatal_or_empty_error);
+    base::EraseIf(transactions_in_progress_, has_non_fatal_or_empty_error);
+  }
+
   void OnFailure(
       int net_error,
       bool allow_fallback,
       absl::optional<base::TimeDelta> ttl = absl::nullopt,
       absl::optional<DnsQueryType> failed_transaction_type = absl::nullopt) {
-    if (httpssvc_metrics_ && failed_transaction_type &&
+    if (httpssvc_metrics_ && failed_transaction_type.has_value() &&
         IsAddressType(failed_transaction_type.value())) {
       httpssvc_metrics_->SaveAddressQueryFailure();
     }
 
     DCHECK_NE(OK, net_error);
+    HostCache::Entry results(net_error, HostCache::Entry::SOURCE_UNKNOWN, ttl);
+
+    // On non-fatal errors, if any potentially fatal transactions remain, need
+    // to defer ending the task in case any of those remaining transactions end
+    // with a fatal failure.
+    if (allow_fallback && AnyPotentiallyFatalTransactionsRemain()) {
+      saved_results_ = std::move(results);
+      saved_results_is_failure_ = true;
+
+      CancelNonFatalTransactions();
+      OnTransactionsFinished();
+      return;
+    }
 
     net_log_.EndEvent(NetLogEventType::HOST_RESOLVER_MANAGER_DNS_TASK, [&] {
       return NetLogDnsTaskFailedParams(net_error, failed_transaction_type, ttl,
                                        base::OptionalOrNullptr(saved_results_));
     });
 
-    HostCache::Entry results(net_error, HostCache::Entry::SOURCE_UNKNOWN, ttl);
+    // Expect this to result in destroying `this` and thus cancelling any
+    // remaining transactions.
     delegate_->OnDnsTaskComplete(task_start_time_, allow_fallback,
                                  std::move(results), secure_);
   }
@@ -1892,12 +1923,13 @@
       std::initializer_list<DnsQueryType> types) const {
     // Should only be called if some transactions are still running or waiting
     // to run.
-    DCHECK(!transactions_needed_.empty() || !transactions_started_.empty());
+    DCHECK(!transactions_needed_.empty() || !transactions_in_progress_.empty());
 
     // Check running transactions.
-    if (base::ranges::find_first_of(transactions_started_, types, /*pred=*/{},
+    if (base::ranges::find_first_of(transactions_in_progress_, types,
+                                    /*pred=*/{},
                                     /*proj1=*/&TransactionInfo::type) !=
-        transactions_started_.end()) {
+        transactions_in_progress_.end()) {
       return true;
     }
 
@@ -1911,7 +1943,7 @@
   void MaybeStartTimeoutTimer() {
     // Should only be called if some transactions are still running or waiting
     // to run.
-    DCHECK(!transactions_started_.empty() || !transactions_needed_.empty());
+    DCHECK(!transactions_in_progress_.empty() || !transactions_needed_.empty());
 
     // Timer already running.
     if (timeout_timer_.IsRunning())
@@ -2030,17 +2062,15 @@
   raw_ptr<Delegate> delegate_;
   const NetLogWithSource net_log_;
 
+  bool any_transaction_started_ = false;
   base::circular_deque<TransactionInfo> transactions_needed_;
   // Active transactions have iterators pointing to their entry in this set, so
   // individual entries should not be modified or removed until completion or
   // cancellation of the transaction.
-  std::set<TransactionInfo> transactions_started_;
-  int num_needed_transactions_;
-  int num_completed_transactions_ = 0;
+  std::set<TransactionInfo> transactions_in_progress_;
 
-  // Result from previously completed transactions. Only set if a transaction
-  // has completed while others are still in progress.
   absl::optional<HostCache::Entry> saved_results_;
+  bool saved_results_is_failure_ = false;
 
   raw_ptr<const base::TickClock> tick_clock_;
   base::TimeTicks task_start_time_;
@@ -2530,7 +2560,9 @@
         return;
       }
       StartNextDnsTransaction();
-      if (dns_task_->needs_another_transaction()) {
+      DCHECK_EQ(num_occupied_job_slots_,
+                dns_task_->num_transactions_in_progress());
+      if (dns_task_->num_additional_transactions_needed() >= 1) {
         Schedule(true);
       }
       return;
@@ -2627,9 +2659,10 @@
     // Schedule a second transaction, if needed. DoH queries can bypass the
     // dispatcher and start all of their transactions immediately.
     if (secure) {
-      while (dns_task_->needs_another_transaction())
+      while (dns_task_->num_additional_transactions_needed() >= 1)
         dns_task_->StartNextTransaction();
-    } else if (dns_task_->needs_another_transaction()) {
+      DCHECK_EQ(dns_task_->num_additional_transactions_needed(), 0);
+    } else if (dns_task_->num_additional_transactions_needed() >= 1) {
       Schedule(true);
     }
   }
@@ -2637,8 +2670,9 @@
   void StartNextDnsTransaction() {
     DCHECK(dns_task_);
     DCHECK_EQ(dns_task_->secure(), !dispatched_);
-    DCHECK(!dispatched_ || num_occupied_job_slots_ >= 1);
-    DCHECK(dns_task_->needs_another_transaction());
+    DCHECK(!dispatched_ || num_occupied_job_slots_ ==
+                               dns_task_->num_transactions_in_progress() + 1);
+    DCHECK_GE(dns_task_->num_additional_transactions_needed(), 1);
     dns_task_->StartNextTransaction();
   }
 
@@ -2736,26 +2770,33 @@
     CompleteRequests(results, bounded_ttl, true /* allow_cache */, secure);
   }
 
-  void OnIntermediateTransactionComplete() override {
-    DCHECK_LE(2, dns_task_->num_needed_transactions());
-    DCHECK_EQ(dns_task_->needs_another_transaction(), is_queued());
-
+  void OnIntermediateTransactionsComplete() override {
     if (dispatched_) {
-      // We already have a job slot at the dispatcher, so if the next
-      // transaction hasn't started, reuse it now instead of waiting in the
-      // queue for another slot.
-      if (!dns_task_->needs_another_transaction()) {
-        // The DnsTask has no more transactions, so we can relinquish this slot.
-        DCHECK(!is_queued());
-        ReduceByOneJobSlot();
-      } else {
+      DCHECK_GE(num_occupied_job_slots_,
+                dns_task_->num_transactions_in_progress());
+      int unused_slots =
+          num_occupied_job_slots_ - dns_task_->num_transactions_in_progress();
+
+      // Reuse vacated slots for any remaining transactions.
+      while (unused_slots > 0 &&
+             dns_task_->num_additional_transactions_needed() > 0) {
         dns_task_->StartNextTransaction();
-        if (!dns_task_->needs_another_transaction() && is_queued()) {
-          resolver_->dispatcher_->Cancel(handle_);
-          handle_.Reset();
-        }
+        --unused_slots;
       }
-    } else if (dns_task_->needs_another_transaction()) {
+
+      // If all remaining transactions found a slot, no more needed from the
+      // dispatcher.
+      if (is_queued() && dns_task_->num_additional_transactions_needed() == 0) {
+        resolver_->dispatcher_->Cancel(handle_);
+        handle_.Reset();
+      }
+
+      // Relinquish any remaining extra slots.
+      while (unused_slots > 0) {
+        ReduceByOneJobSlot();
+        --unused_slots;
+      }
+    } else if (dns_task_->num_additional_transactions_needed() >= 1) {
       dns_task_->StartNextTransaction();
     }
   }
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index 4741dbc5..f741dd0 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -11232,6 +11232,122 @@
               testing::Pointee(testing::IsEmpty()));
 }
 
+TEST_F(
+    HostResolverManagerDnsTest,
+    FailedHttpsInAddressRequestAfterAddressFailureIsFatalWhenFeatureEnabled) {
+  const char kName[] = "name.test";
+
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeatureWithParameters(
+      features::kUseDnsHttpsSvcb,
+      {{"UseDnsHttpsSvcbEnforceSecureResponse", "true"}});
+
+  MockDnsClientRuleList rules;
+  // Delay HTTPS result to ensure it comes after A failure.
+  rules.emplace_back(
+      kName, dns_protocol::kTypeHttps, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kFail),
+      /*delay=*/true);
+  rules.emplace_back(
+      kName, dns_protocol::kTypeA, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kFail),
+      /*delay=*/false);
+  // Delay AAAA result to ensure it is cancelled after A failure.
+  rules.emplace_back(
+      kName, dns_protocol::kTypeAAAA, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kUnexpected),
+      /*delay=*/true);
+
+  CreateResolver();
+  UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
+  DnsConfigOverrides overrides;
+  overrides.secure_dns_mode = SecureDnsMode::kAutomatic;
+  resolver_->SetDnsConfigOverrides(overrides);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      url::SchemeHostPort(url::kHttpsScheme, kName, 443), NetworkIsolationKey(),
+      NetLogWithSource(), absl::nullopt, resolve_context_.get(),
+      resolve_context_->host_cache()));
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+  dns_client_->CompleteDelayedTransactions();
+
+  EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+  EXPECT_FALSE(response.request()->GetEndpointResults());
+  EXPECT_FALSE(response.request()->GetTextResults());
+  EXPECT_FALSE(response.request()->GetHostnameResults());
+  EXPECT_FALSE(response.request()->GetExperimentalResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
+}
+
+TEST_F(
+    HostResolverManagerDnsTest,
+    FailedHttpsInAddressRequestAfterAddressFailureIgnoredWhenFeatureDisabled) {
+  const char kName[] = "name.test";
+
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeatureWithParameters(
+      features::kUseDnsHttpsSvcb,
+      {{"UseDnsHttpsSvcbEnforceSecureResponse", "false"}});
+
+  MockDnsClientRuleList rules;
+  // Delay HTTPS result to ensure it is cancelled after AAAA failure.
+  rules.emplace_back(
+      kName, dns_protocol::kTypeHttps, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kUnexpected),
+      /*delay=*/true);
+  // Delay A result to ensure it is cancelled after AAAA failure.
+  rules.emplace_back(
+      kName, dns_protocol::kTypeA, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kUnexpected),
+      /*delay=*/true);
+  rules.emplace_back(
+      kName, dns_protocol::kTypeAAAA, /*secure=*/true,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kFail),
+      /*delay=*/false);
+
+  // Expect fall back to insecure due to AAAA failure.
+  rules.emplace_back(
+      kName, dns_protocol::kTypeHttps, /*secure=*/false,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kEmpty),
+      /*delay=*/false);
+  rules.emplace_back(
+      kName, dns_protocol::kTypeA, /*secure=*/false,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kOk),
+      /*delay=*/false);
+  rules.emplace_back(
+      kName, dns_protocol::kTypeAAAA, /*secure=*/false,
+      MockDnsClientRule::Result(MockDnsClientRule::ResultType::kOk),
+      /*delay=*/false);
+
+  CreateResolver();
+  UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
+  DnsConfigOverrides overrides;
+  overrides.secure_dns_mode = SecureDnsMode::kAutomatic;
+  resolver_->SetDnsConfigOverrides(overrides);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      url::SchemeHostPort(url::kHttpsScheme, kName, 443), NetworkIsolationKey(),
+      NetLogWithSource(), absl::nullopt, resolve_context_.get(),
+      resolve_context_->host_cache()));
+
+  base::RunLoop().RunUntilIdle();
+  // Unnecessary to complete delayed transactions because they should be
+  // cancelled after first failure (AAAA).
+  EXPECT_TRUE(response.complete());
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_TRUE(response.request()->GetAddressResults());
+  EXPECT_TRUE(response.request()->GetEndpointResults());
+  EXPECT_FALSE(response.request()->GetTextResults());
+  EXPECT_FALSE(response.request()->GetHostnameResults());
+  EXPECT_FALSE(response.request()->GetExperimentalResultsForTesting());
+}
+
 TEST_F(HostResolverManagerDnsTest, TimeoutHttpsInAddressRequestIsFatal) {
   const char kName[] = "name.test";
 
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index d5f1cf7a..b467c8d 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -924,7 +924,7 @@
     LOG(INFO) << "   #" << display_id << " : " << track.position_x() << ","
               << track.position_y() << " " << track.width() << "x"
               << track.height() << " [" << track.x_dpi() << "," << track.y_dpi()
-              << "], id=" << track.id();
+              << "], screen_id=" << track.screen_id();
     if (dpi_x == 0)
       dpi_x = track.x_dpi();
     if (dpi_y == 0)
@@ -1020,13 +1020,13 @@
     video_track = layout.add_video_track();
     video_track->CopyFrom(display);
     if (multiStreamEnabled) {
-      video_track->set_track_name(StreamNameForId(display.id()));
+      video_track->set_media_stream_id(StreamNameForId(display.screen_id()));
     }
 
     LOG(INFO) << "  Display " << display_id << " = " << display.position_x()
               << "," << display.position_y() << " " << display.width() << "x"
               << display.height() << " [" << display.x_dpi() << ","
-              << display.y_dpi() << "], id=" << display.id();
+              << display.y_dpi() << "], screen_id=" << display.screen_id();
   }
 
   // Set the display index, if this is the first message being processed.
diff --git a/remoting/host/desktop_display_info.cc b/remoting/host/desktop_display_info.cc
index 415676e6..3d01bd3 100644
--- a/remoting/host/desktop_display_info.cc
+++ b/remoting/host/desktop_display_info.cc
@@ -160,7 +160,7 @@
 void DesktopDisplayInfo::AddDisplayFrom(
     const protocol::VideoTrackLayout& track) {
   DisplayGeometry display;
-  display.id = track.id();
+  display.id = track.screen_id();
   display.x = track.position_x();
   display.y = track.position_y();
   display.width = track.width();
diff --git a/remoting/host/desktop_display_info_monitor.cc b/remoting/host/desktop_display_info_monitor.cc
index b8056ad..7e2007d 100644
--- a/remoting/host/desktop_display_info_monitor.cc
+++ b/remoting/host/desktop_display_info_monitor.cc
@@ -82,7 +82,7 @@
     track->set_height(display.height);
     track->set_x_dpi(display.dpi);
     track->set_y_dpi(display.dpi);
-    track->set_id(display.id);
+    track->set_screen_id(display.id);
     HOST_LOG << "   Display: " << display.x << "," << display.y << " "
              << display.width << "x" << display.height << " @ " << display.dpi
              << ", id=" << display.id;
diff --git a/remoting/proto/control.proto b/remoting/proto/control.proto
index 983f620..cb4f129 100644
--- a/remoting/proto/control.proto
+++ b/remoting/proto/control.proto
@@ -87,11 +87,11 @@
 }
 
 message VideoTrackLayout {
-  // Unique display identifier.
-  optional int64 id = 8;
+  // Unique display identifier, from ScreenId in desktop_capture_types.h.
+  optional int64 screen_id = 8;
 
-  // Name of the video track.
-  optional string track_name = 1;
+  // Name of the video stream, from the WebRTC MediaStream.id property.
+  optional string media_stream_id = 1;
 
   // Position of the top left corner of the rectangle covered by the video
   // track in DIPs (device independent pixels).
diff --git a/remoting/proto/event.proto b/remoting/proto/event.proto
index d841ee8..ebc0d2a 100644
--- a/remoting/proto/event.proto
+++ b/remoting/proto/event.proto
@@ -44,6 +44,16 @@
   optional string text = 1;
 }
 
+// Fractional coordinate information. Fractional coordinates define a location
+// as a number in the range [0, 1], interpreted relative to the bounds of a
+// monitor identified by |stream_id| in the most recent VideoLayout message sent
+// by the host.
+message FractionalCoordinate {
+  optional float x = 1;
+  optional float y = 2;
+  optional int64 screen_id = 3;
+}
+
 // Defines a mouse event message on the event channel.
 message MouseEvent {
 
@@ -76,9 +86,14 @@
   optional float wheel_ticks_x = 9;
   optional float wheel_ticks_y = 10;
 
-  // Mouse movement information. Provided only when mouse lock is engaged.
+  // Mouse movement information. Provided only for relative mouse events (i.e.
+  // when mouse lock is engaged).
   optional int32 delta_x = 11;
   optional int32 delta_y = 12;
+
+  // Fractional coordinate information. Provided only for absolute mouse events
+  // (i.e. when mouse lock is *not* engaged).
+  optional FractionalCoordinate fractional_coordinate = 13;
 }
 
 // Defines an event that sends clipboard data between peers.
@@ -112,6 +127,8 @@
   // The pressure of the touch point.
   // The value should be in [0.0, 1.0].
   optional float pressure = 7;
+
+  optional FractionalCoordinate fractional_coordinate = 8;
 }
 
 message TouchEvent {
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
index 9728d0b..7feff3f 100644
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
@@ -261,8 +261,13 @@
 
   const uint64_t kAllowedMask = O_ACCMODE | O_APPEND | O_NONBLOCK | O_SYNC |
                                 kOLargeFileFlag | O_CLOEXEC | O_NOATIME;
-  const uint64_t kAllowedSeals =
-      F_SEAL_SEAL | F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_FUTURE_WRITE;
+#if BUILDFLAG(IS_ANDROID)
+  const uint64_t kOsSpecificSeals = F_SEAL_FUTURE_WRITE;
+#else
+  const uint64_t kOsSpecificSeals = 0;
+#endif
+  const uint64_t kAllowedSeals = F_SEAL_SEAL | F_SEAL_GROW | F_SEAL_SHRINK |
+                                 kOsSpecificSeals;
   // clang-format off
   return Switch(cmd)
       .CASES((F_GETFL,
diff --git a/sandbox/win/src/handle_closer_agent.cc b/sandbox/win/src/handle_closer_agent.cc
index 1aea0ebb..0904a536 100644
--- a/sandbox/win/src/handle_closer_agent.cc
+++ b/sandbox/win/src/handle_closer_agent.cc
@@ -149,10 +149,10 @@
   if (base::win::IsAppVerifierLoaded())
     return true;
   // If the accurate handle enumeration fails then fallback to the old brute
-  // force approach. This should only happen on Windows 7.
+  // force approach. This should only happen on Windows 7 and 8.0.
   absl::optional<ProcessHandleMap> handle_map = GetCurrentProcessHandles();
   if (!handle_map) {
-    DCHECK(base::win::GetVersion() < base::win::Version::WIN8);
+    DCHECK(base::win::GetVersion() < base::win::Version::WIN8_1);
     handle_map = GetCurrentProcessHandlesWin7();
   }
 
diff --git a/testing/buildbot/chromium.dawn.json b/testing/buildbot/chromium.dawn.json
index a999ff6..848c83f 100644
--- a/testing/buildbot/chromium.dawn.json
+++ b/testing/buildbot/chromium.dawn.json
@@ -298,7 +298,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -336,7 +337,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -662,7 +664,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -700,7 +703,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1026,7 +1030,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1064,7 +1069,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1390,7 +1396,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1428,7 +1435,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu --enable-features=UseSkiaRenderer,Vulkan",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1778,7 +1786,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -1819,7 +1828,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2148,7 +2158,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2187,7 +2198,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2546,7 +2558,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2588,7 +2601,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -2976,7 +2990,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3017,7 +3032,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3346,7 +3362,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3385,7 +3402,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3681,7 +3699,8 @@
           "--browser=release_x64",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4006,7 +4025,8 @@
           "--browser=release_x64",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4044,7 +4064,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4362,7 +4383,8 @@
           "--browser=release_x64",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4400,7 +4422,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4718,7 +4741,8 @@
           "--browser=release_x64",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4756,7 +4780,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5074,7 +5099,8 @@
           "--browser=release_x64",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5112,7 +5138,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5430,7 +5457,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5468,7 +5496,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5784,7 +5813,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5822,7 +5852,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -6138,7 +6169,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -6176,7 +6208,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -6492,7 +6525,8 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu"
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -6530,7 +6564,8 @@
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--is-backend-validation",
-          "--override-timeout=30"
+          "--override-timeout=30",
+          "--retry-limit=3"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
diff --git a/testing/buildbot/filters/fuchsia.browser_tests.filter b/testing/buildbot/filters/fuchsia.browser_tests.filter
index b1294ffb8..7e4a02e 100644
--- a/testing/buildbot/filters/fuchsia.browser_tests.filter
+++ b/testing/buildbot/filters/fuchsia.browser_tests.filter
@@ -1,63 +1,386 @@
 -AccessContextAuditBrowserTest.CheckSessionOnly
 -AccessContextAuditBrowserTest.MultipleAccesses
--AccessContextAuditBrowserTest.Remove*
+-AccessContextAuditBrowserTest.RemoveHistory
+-AccessContextAuditBrowserTest.RemoveRecords
 -AccessContextAuditBrowserTest.TabClosed
 -AccessContextAuditSessionRestoreBrowserTest.RestoreSession
 -AccuracyTipBubbleViewBrowserTest.SurveyShownAfterShowingTip
--AccuracyTipBubbleViewDialogBrowserTest.Invoke*
+-AccuracyTipBubbleViewDialogBrowserTest.InvokeUi_default
+-AccuracyTipBubbleViewDialogBrowserTest.InvokeUi_ignore_button
 -ActivityLogApiTest.TriggerEvent
 -AdsPageLoadMetricsObserverBrowserTest.AggregateCpuTriggersCpuUpdateOverSubframeNavigate
 -AdsPageLoadMetricsObserverBrowserTest.FrameRAFTriggersCpuUpdate
 -AdsPageLoadMetricsObserverBrowserTest.SubframeNavigate_CpuTimesCumulative
--All/CastV2PerformanceTest.Performance*
--All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.Cache/0
--All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.Keeps*
--All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.PrefChange/0
--All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.Site*
--All/ChromeMultiProfileStartupBrowserTestBase.Post*
--All/CryptotokenBrowserTest.Sign*
--All/DeclarativeNetRequestBrowserTest.Pac*
--All/DiceWebSigninInterceptionBubblePixelTest.Invoke*
--All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.Invoke*
--All/DownloadReferrerPolicyTest.Alt*
--All/DownloadReferrerPolicyTest.Download*
--All/DownloadReferrerPolicyTest.Save*
--All/DownloadTestWithOptionalSafetyTipsFeature.Safety*
--All/ExtensionURLLoaderThrottleWithSplitCacheBrowserTest.Do*
--All/HostedOrWebAppTest.Ctrl*
--All/LoadingPredictorNetworkIsolationKeyBrowserTest.Loading*
--All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.Check*
--All/ManifestUpdateManagerBrowserTest_UpdateDialog.Check*
+-All/CastV2PerformanceTest.Performance/1
+-All/CastV2PerformanceTest.Performance/2
+-All/CastV2PerformanceTest.Performance/3
+-All/CastV2PerformanceTest.Performance/4
+-All/CastV2PerformanceTest.Performance/5
+-All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.KeepsOtherTabData/0
+-All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.KeepsOtherWindowData/0
+-All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.SiteData/0
+-All/ChromeBrowsingDataLifetimeManagerScheduledRemovalTest.SiteData/1
+-All/ChromeMultiProfileStartupBrowserTestBase.PostProfileInitInvocation/1
+-All/ChromeMultiProfileStartupBrowserTestBase.PostProfileInitInvocation/3
+-All/CryptotokenBrowserTest.SignWithEnterprisePolicyDoesNotShowPrompt/0
+-All/CryptotokenBrowserTest.SignWithEnterprisePolicyDoesNotShowPrompt/1
+-All/CryptotokenBrowserTest.SignWithOriginTrialDoesNotShowPrompt/0
+-All/CryptotokenBrowserTest.SignWithOriginTrialDoesNotShowPrompt/1
+-All/CryptotokenBrowserTest.SignWithOriginTrialInCrossOriginIframeDoesNotShowPrompt/0
+-All/CryptotokenBrowserTest.SignWithOriginTrialInCrossOriginIframeDoesNotShowPrompt/1
+-All/DeclarativeNetRequestBrowserTest.PacRequestsBypassRules/0
+-All/DeclarativeNetRequestBrowserTest.PacRequestsBypassRules/1
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/ConsumerDark
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/ConsumerManagedDevice
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/ConsumerSimple
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/EntepriseManagedDevice
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/EnterpriseManagedIntercepted
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/EnterpriseManagedInterceptedDark
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/EnterpriseSimple
+-All/DiceWebSigninInterceptionBubblePixelTest.InvokeUi_default/ProfileSwitch
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/ConsumerDark
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/ConsumerManagedDevice
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/ConsumerSimple
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/EntepriseManagedDevice
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/EnterpriseManagedIntercepted
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/EnterpriseManagedInterceptedDark
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/EnterpriseSimple
+-All/DiceWebSigninInterceptionBubbleSyncPromoPixelTest.InvokeUi_default/ProfileSwitch
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/0
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/1
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/2
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/3
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/4
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/5
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/6
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/7
+-All/DownloadReferrerPolicyTest.AltClickDownloadReferrerPolicy/8
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/0
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/1
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/2
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/4
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/5
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/6
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/7
+-All/DownloadReferrerPolicyTest.DownloadCrossDomainReferrerPolicy/8
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/0
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/1
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/2
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/3
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/4
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/6
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/7
+-All/DownloadReferrerPolicyTest.SaveLinkAsReferrerPolicy/8
+-All/DownloadTestWithOptionalSafetyTipsFeature.SafetyTips/0
+-All/DownloadTestWithOptionalSafetyTipsFeature.SafetyTips/1
+-All/HostedOrWebAppTest.CtrlClickLink/HostedApp
+-All/HostedOrWebAppTest.CtrlClickLink/WebApp
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveInstallIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveLauncherIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/RemoveUnimportantIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchFromLauncher_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/SwitchToLauncher_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateInstallIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherAndInstallIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateLauncherIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitleAndLauncherIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateTitle_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_DefaultApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForIcon_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_PolicyApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_WebApp_Flags_None_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_WebApp_Flags_PolicyCanUpdate_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_WebApp_Flags_PolicyCanUpdate_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_WebApp_Flags_WithAppIdDlgForIcon_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_AppIdentityParameterized.CheckCombinations/UpdateUnimportantIcon_WebApp_Flags_WithAppIdDlgForName_
+-All/ManifestUpdateManagerBrowserTest_UpdateDialog.CheckFindsIconContentChange/UpdateDialogDisabled
+-All/ManifestUpdateManagerBrowserTest_UpdateDialog.CheckFindsIconContentChange/UpdateDialogEnabled
 -All/ManifestUpdateManagerBrowserTest_UpdateDialog.ScopeChangeWithProductIconChange/UpdateDialogEnabled
--All/ManifestUpdateManagerBrowserTest_UpdateDialog.Shortcut*
--All/MediaEngagementAutoplayBrowserTest.Preloaded*
--All/MediaEngagementAutoplayBrowserTest.Use*
--All/NetworkRequestMetricsBrowserTest.Cancel*
+-All/ManifestUpdateManagerBrowserTest_UpdateDialog.ShortcutIconContentChangeWithProductIconChange/UpdateDialogDisabled
+-All/ManifestUpdateManagerBrowserTest_UpdateDialog.ShortcutIconContentChangeWithProductIconChange/UpdateDialogEnabled
+-All/MediaEngagementAutoplayBrowserTest.PreloadedDataAndHighVisits/0
+-All/MediaEngagementAutoplayBrowserTest.PreloadedDataAndHighVisits/1
+-All/MediaEngagementAutoplayBrowserTest.UsePreloadedData_Allowed/0
+-All/MediaEngagementAutoplayBrowserTest.UsePreloadedData_Allowed/1
+-All/MediaEngagementAutoplayBrowserTest.UsePreloadedData_Denied/0
+-All/MediaEngagementAutoplayBrowserTest.UsePreloadedData_Denied/1
+-All/MediaHistoryBrowserTest.DoNotRecordWatchtime_Background/2
+-All/NetworkRequestMetricsBrowserTest.CancelBeforeHeaders/1
+-All/NetworkRequestMetricsBrowserTest.CancelBeforeHeaders/2
+-All/NetworkRequestMetricsBrowserTest.CancelBeforeHeaders/3
+-All/NetworkRequestMetricsBrowserTest.CancelDuringBody/1
+-All/NetworkRequestMetricsBrowserTest.CancelDuringBody/2
+-All/NetworkRequestMetricsBrowserTest.CancelDuringBody/3
 -All/NetworkRequestMetricsBrowserTest.Download/1
--All/NetworkRequestMetricsBrowserTest.File*
--All/NetworkRequestMetricsBrowserTest.Interrupted*
--All/NetworkRequestMetricsBrowserTest.Net*
--All/NetworkRequestMetricsBrowserTest.Success*
--All/NoStatePrefetchBrowserTestHttpCache_DefaultAndDoubleKeyedHttpCache.Load*
--All/OneTimePermissionPromptBubbleViewBrowserTest.Invoke*
--All/PermissionPromptBubbleViewBrowserTest.Active*
--All/PermissionPromptBubbleViewBrowserTest.Invoke*
--All/PopupBrowserTest.Move*
+-All/NetworkRequestMetricsBrowserTest.FileURLError/1
+-All/NetworkRequestMetricsBrowserTest.FileURLError/2
+-All/NetworkRequestMetricsBrowserTest.FileURLError/3
+-All/NetworkRequestMetricsBrowserTest.FileURLSuccess/0
+-All/NetworkRequestMetricsBrowserTest.FileURLSuccess/1
+-All/NetworkRequestMetricsBrowserTest.FileURLSuccess/3
+-All/NetworkRequestMetricsBrowserTest.InterruptedBeforeHeaders/1
+-All/NetworkRequestMetricsBrowserTest.InterruptedBeforeHeaders/2
+-All/NetworkRequestMetricsBrowserTest.InterruptedBeforeHeaders/3
+-All/NetworkRequestMetricsBrowserTest.InterruptedCancelDuringBody/0
+-All/NetworkRequestMetricsBrowserTest.InterruptedCancelDuringBody/1
+-All/NetworkRequestMetricsBrowserTest.InterruptedCancelDuringBody/2
+-All/NetworkRequestMetricsBrowserTest.InterruptedCancelDuringBody/3
+-All/NetworkRequestMetricsBrowserTest.NetErrorBeforeHeaders/1
+-All/NetworkRequestMetricsBrowserTest.NetErrorBeforeHeaders/2
+-All/NetworkRequestMetricsBrowserTest.NetErrorBeforeHeaders/3
+-All/NetworkRequestMetricsBrowserTest.NetErrorDuringBody/0
+-All/NetworkRequestMetricsBrowserTest.NetErrorDuringBody/1
+-All/NetworkRequestMetricsBrowserTest.NetErrorDuringBody/3
+-All/NetworkRequestMetricsBrowserTest.SuccessWithBody/0
+-All/NetworkRequestMetricsBrowserTest.SuccessWithBody/1
+-All/NetworkRequestMetricsBrowserTest.SuccessWithBody/2
+-All/NetworkRequestMetricsBrowserTest.SuccessWithBody/3
+-All/NetworkRequestMetricsBrowserTest.SuccessWithEmptyBody/0
+-All/NetworkRequestMetricsBrowserTest.SuccessWithEmptyBody/1
+-All/NetworkRequestMetricsBrowserTest.SuccessWithEmptyBody/2
+-All/NetworkRequestMetricsBrowserTest.SuccessWithEmptyBody/3
+-All/OneTimePermissionPromptBubbleViewBrowserTest.InvokeUi_geolocation/0
+-All/OneTimePermissionPromptBubbleViewBrowserTest.InvokeUi_geolocation/1
+-All/PermissionPromptBubbleViewBrowserTest.ActiveTabClosedAfterRendererCrashesWithPendingPermissionRequest/0
+-All/PermissionPromptBubbleViewBrowserTest.ActiveTabClosedAfterRendererCrashesWithPendingPermissionRequest/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_camera/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_camera/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_downloads/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_downloads/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_geolocation/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_geolocation/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_mic/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_mic/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_midi/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_midi/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_multiple/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_multiple/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_notifications/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_notifications/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_protocol_handlers/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_protocol_handlers/1
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_security_key/0
+-All/PermissionPromptBubbleViewBrowserTest.InvokeUi_security_key/1
+-All/PopupBrowserTest.MoveClampedToCurrentDisplay/0
+-All/PopupBrowserTest.MoveClampedToCurrentDisplay/1
 -All/RendererEventInjectionTest.TestRootTransform/0
--All/SearchPrefetchServiceEnabledBrowserTest.Back*
--All/TabCapturePerformanceTest.Performance*
--All/ViewSourceWithSplitCacheEnabledTest.NetworkIsolationKeyReusedForBackNavigation/0
--All/ViewSourceWithSplitCacheTest.Http*
--All/WebAppConfirmViewBrowserTest.Invoke*
+-All/TabCapturePerformanceTest.Performance/0
+-All/TabCapturePerformanceTest.Performance/1
+-All/TabCapturePerformanceTest.Performance/2
+-All/TabCapturePerformanceTest.Performance/3
 -AllForms/FormStructureBrowserTest.DataDrivenHeuristics/153
 -AppInfoDialogBrowserTest.InvokeUi_default
--AppSessionRestoreTest.Restore*
+-AppSessionRestoreTest.RestoreAppMinimized
+-AppSessionRestoreTest.RestoreMaximizedApp
 -AppSettingsAppTest.All
--AppWindowApiTest.On*
+-AppWindowApiTest.OnMaximizedEvent
+-AppWindowApiTest.OnMinimizedEvent
 -AskGoogleForSuggestionsDialogTest.InvokeUi_default
--AuthenticatorDialogTest.Invoke*
--AuthenticatorDialogViewTest.Invoke*
--AutofillErrorDialogViewNativeViewsBrowserTest.Invoke*
+-AuthenticatorDialogTest.InvokeUi_account_select
+-AuthenticatorDialogTest.InvokeUi_activate_usb
+-AuthenticatorDialogTest.InvokeUi_authenticator_removed
+-AuthenticatorDialogTest.InvokeUi_ble_power_on_manual
+-AuthenticatorDialogTest.InvokeUi_cable_activate
+-AuthenticatorDialogTest.InvokeUi_cable_server_link_activate
+-AuthenticatorDialogTest.InvokeUi_cable_v2_activate
+-AuthenticatorDialogTest.InvokeUi_cable_v2_pair
+-AuthenticatorDialogTest.InvokeUi_default
+-AuthenticatorDialogTest.InvokeUi_force_pin_change
+-AuthenticatorDialogTest.InvokeUi_force_pin_change_same_as_current
+-AuthenticatorDialogTest.InvokeUi_get_pin
+-AuthenticatorDialogTest.InvokeUi_get_pin_fallback
+-AuthenticatorDialogTest.InvokeUi_get_pin_one_try_remaining
+-AuthenticatorDialogTest.InvokeUi_get_pin_two_tries_remaining
+-AuthenticatorDialogTest.InvokeUi_hard_block
+-AuthenticatorDialogTest.InvokeUi_inline_bio_enrollment
+-AuthenticatorDialogTest.InvokeUi_internal_unrecognized_error
+-AuthenticatorDialogTest.InvokeUi_key_already_registered
+-AuthenticatorDialogTest.InvokeUi_key_not_registered
+-AuthenticatorDialogTest.InvokeUi_mechanisms
+-AuthenticatorDialogTest.InvokeUi_missing_capability
+-AuthenticatorDialogTest.InvokeUi_no_available_transports
+-AuthenticatorDialogTest.InvokeUi_request_enterprise_attestation_permission
+-AuthenticatorDialogTest.InvokeUi_resident_credential_confirm
+-AuthenticatorDialogTest.InvokeUi_retry_uv
+-AuthenticatorDialogTest.InvokeUi_retry_uv_one_try_remaining
+-AuthenticatorDialogTest.InvokeUi_retry_uv_two_tries_remaining
+-AuthenticatorDialogTest.InvokeUi_second_tap
+-AuthenticatorDialogTest.InvokeUi_set_pin
+-AuthenticatorDialogTest.InvokeUi_soft_block
+-AuthenticatorDialogTest.InvokeUi_storage_full
+-AuthenticatorDialogViewTest.InvokeUi_default
+-AuthenticatorDialogViewTest.InvokeUi_manage_devices
+-AutofillErrorDialogViewNativeViewsBrowserTest.InvokeUi_eligibility
+-AutofillErrorDialogViewNativeViewsBrowserTest.InvokeUi_permanent
+-AutofillErrorDialogViewNativeViewsBrowserTest.InvokeUi_temporary
 -AutofillPopupBaseViewTest.CorrectBoundsTest
 -AutofillProgressDialogViewsBrowserTest.InvokeUi
 -AutomationApiTest.BoundsForRange
@@ -66,11 +389,26 @@
 -AutomationApiTest.Location2
 -AutomationApiTest.SanityCheck
 -BackForwardCacheSiteDetailsBrowserTest.MemoryDetailsForBackForwardCache
--BluetoothApiTest.Device*
--BluetoothApiTest.Discovery*
--BluetoothApiTest.Get*
+-BluetoothApiTest.DeviceEvents
+-BluetoothApiTest.DeviceInfo
+-BluetoothApiTest.DiscoveryCallback
+-BluetoothApiTest.DiscoveryInProgress
+-BluetoothApiTest.GetAdapterState
+-BluetoothApiTest.GetDevice
+-BluetoothApiTest.GetDevices
 -BluetoothApiTest.OnAdapterStateChanged
--BluetoothChooserBrowserTest.Invoke*
+-BluetoothChooserBrowserTest.InvokeUi_ConnectedBubble
+-BluetoothChooserBrowserTest.InvokeUi_ConnectedModal
+-BluetoothChooserBrowserTest.InvokeUi_NoDevicesBubble
+-BluetoothChooserBrowserTest.InvokeUi_NoDevicesModal
+-BluetoothChooserBrowserTest.InvokeUi_PairedBubble
+-BluetoothChooserBrowserTest.InvokeUi_PairedModal
+-BluetoothChooserBrowserTest.InvokeUi_ScanningBubble
+-BluetoothChooserBrowserTest.InvokeUi_ScanningModal
+-BluetoothChooserBrowserTest.InvokeUi_ScanningWithDevicesBubble
+-BluetoothChooserBrowserTest.InvokeUi_ScanningWithDevicesModal
+-BluetoothChooserBrowserTest.InvokeUi_UnavailableBubble
+-BluetoothChooserBrowserTest.InvokeUi_UnavailableModal
 -BluetoothPrivateApiTest.CancelPairing
 -BluetoothPrivateApiTest.Connect
 -BluetoothPrivateApiTest.DisconnectAll
@@ -81,7 +419,8 @@
 -BluetoothPrivateApiTest.PasskeyPairing
 -BluetoothPrivateApiTest.PincodePairing
 -BluetoothPrivateApiTest.SetAdapterState
--BookmarkBubbleViewBrowserTest.Invoke*
+-BookmarkBubbleViewBrowserTest.InvokeUi_bookmark_details
+-BookmarkBubbleViewBrowserTest.InvokeUi_bookmark_details_signed_in
 -BookmarkEditorViewBrowserTest.InvokeUi_all_tabs
 -BookmarksListTest.All
 -BrowserFrameTest.DevToolsHasBoundsOnOpen
@@ -91,30 +430,42 @@
 -BrowserTest.TestPopupBounds
 -BrowserViewTest.DevToolsUpdatesBrowserWindow
 -BrowserViewTest.GetAccessibleTabModalDialogTitle
--CacheCounterTest.AfterDoom
--CacheCounterTest.Empty
--CacheCounterTest.NonEmpty
--CacheCounterTest.PeriodChanged
--CacheCounterTest.PrefChanged
 -CardUnmaskAuthenticationSelectionDialogBrowserTest.InvokeUi_CardUnmaskAuthSelectionDialogDisplays
 -CardUnmaskOtpInputDialogBrowserTest.InvokeUi_CardUnmaskOtpInputDialogDisplays
--CardUnmaskPromptViewBrowserTest.Invoke*
--CastDialogViewBrowserTest.Invoke*
+-CardUnmaskPromptViewBrowserTest.InvokeUi_expired
+-CardUnmaskPromptViewBrowserTest.InvokeUi_valid
+-CardUnmaskPromptViewBrowserTest.InvokeUi_valid_PermanentError
+-CardUnmaskPromptViewBrowserTest.InvokeUi_valid_TemporaryError
+-CastDialogViewBrowserTest.InvokeUi_Available
+-CastDialogViewBrowserTest.InvokeUi_Connected
+-CastDialogViewBrowserTest.InvokeUi_Mixed
+-CastDialogViewBrowserTest.InvokeUi_NoSinks
+-CastDialogViewBrowserTest.InvokeUi_Unavailable
 -CastMirroringServiceHostBrowserTest.CaptureTabVideo
 -CertificateSelectorDialogTest.InvokeUi_default
 -ChromeAcceptHeaderTest.Check
 -ChromeBackForwardCacheBrowserTest.DoNotShowSameSiteSubframeInTaskManager
--ChromeBackForwardCacheBrowserTest.Show*
--ChromeBrowserCloudManagementEnrollmentTest/ChromeBrowserCloudManagementEnrollmentTest.Test*
+-ChromeBackForwardCacheBrowserTest.ShowCrossSiteOOPIFInTaskManager
+-ChromeBackForwardCacheBrowserTest.ShowMainFrameInTaskManager
+-ChromeBrowserCloudManagementEnrollmentTest/ChromeBrowserCloudManagementEnrollmentTest.Test/1
+-ChromeBrowserCloudManagementEnrollmentTest/ChromeBrowserCloudManagementEnrollmentTest.Test/3
 -ChromeLabsUiTest.InvokeUi_default
 -ChromeMimeHandlerViewTest.ActivatePostMessageSupportOnce
 -ChromeMimeHandlerViewTest.BackgroundPage
 -ChromeMimeHandlerViewTest.Basic
--ChromeMimeHandlerViewTest.Before*
+-ChromeMimeHandlerViewTest.BeforeUnloadEnabled_WithUserActivation
+-ChromeMimeHandlerViewTest.BeforeUnloadEnabled_WithoutUserActivation
+-ChromeMimeHandlerViewTest.BeforeUnload_NoDialog
+-ChromeMimeHandlerViewTest.BeforeUnload_ShowDialog
 -ChromeMimeHandlerViewTest.DataUrl
 -ChromeMimeHandlerViewTest.DoNotLoadInSandboxedFrame
--ChromeMimeHandlerViewTest.Embed*
--ChromeMimeHandlerViewTest.Embedded*
+-ChromeMimeHandlerViewTest.EmbedWithInitialCrossOriginFrame
+-ChromeMimeHandlerViewTest.EmbedWithInitialFrameAcceptBeforeUnloadDialog
+-ChromeMimeHandlerViewTest.Embedded
+-ChromeMimeHandlerViewTest.EmbeddedDataUrlEmbed
+-ChromeMimeHandlerViewTest.EmbeddedDataUrlLong
+-ChromeMimeHandlerViewTest.EmbeddedDataUrlObject
+-ChromeMimeHandlerViewTest.EmbeddedThenPrint
 -ChromeMimeHandlerViewTest.EmbedderFrameRemovedNoCrash
 -ChromeMimeHandlerViewTest.Iframe
 -ChromeMimeHandlerViewTest.MimeHandlerViewInDisplayNoneFrameForGoogleApps
@@ -127,110 +478,239 @@
 -ChromeNavigationBrowserTest.CrossSiteRedirectionToPDF
 -ChromeNavigationBrowserTestWithMobileEmulation.CrossSiteRedirectionToPDFWithMobileEmulation
 -ChromeNavigationBrowserTestWithMobileEmulation.NavigateToPDFWithMobileEmulation
--ChromeNetworkServiceMigrationBrowserTest.MigrateData
 -ChromePasswordProtectionServiceSyncBrowserTest.GSuitePasswordAlertMode
 -ChromeSitePerProcessPDFTest.EmbeddedPDFInsideCrossOriginFrame
--ChromeSitePerProcessTest.JSPrintDuringSwap
 -ChromeSitePerProcessTest.PopupWindowFocus
--ChromeTracingDelegateBrowserTestFromCommandLine.IgnoreThrottle
--ChromeTracingDelegateBrowserTestFromCommandLine.ScenarioFromCommandLine
--ChromeURLDataManagerWebUITrustedTypesTest.No*
--ClickModifierTest.Href*
--ClickModifierTest.Window*
--ClientHintsBrowserTest.Switch*
+-ChromeURLDataManagerWebUITrustedTypesTest.NoTrustedTypesViolation/chrome___browser_switch
+-ChromeURLDataManagerWebUITrustedTypesTest.NoTrustedTypesViolation/chrome___nacl
+-ClickModifierTest.HrefBasicClickTest
+-ClickModifierTest.HrefControlShiftClickTest
+-ClickModifierTest.HrefMiddleClickTest
+-ClickModifierTest.HrefShiftClickTest
+-ClickModifierTest.HrefShiftMiddleClickTest
+-ClickModifierTest.WindowOpenBasicClickTest
+-ClickModifierTest.WindowOpenControlClickTest
+-ClickModifierTest.WindowOpenControlShiftClickTest
+-ClickModifierTest.WindowOpenShiftClickTest
+-ClientHintsBrowserTest.SwitchAcceptCHInvalid
+-ClientHintsBrowserTest.SwitchAppliesStorage
+-ClientHintsBrowserTest.SwitchAppliesStorageOneOrigin
+-ClientHintsBrowserTest.SwitchNotJson
+-ClientHintsBrowserTest.SwitchOriginNotSecure
 -CollectedCookiesTest.InvokeUi_default
--CommandServiceTest.Get*
--CommandServiceTest.Remove*
--CommerceHintAddToCartPatternTest.Add*
+-CommandServiceTest.GetExtensionActionCommandQueryActive
+-CommandServiceTest.GetExtensionActionCommandQueryAll
+-CommandServiceTest.GetNamedCommandsQueryAll
+-CommandServiceTest.RemoveKeybindingPrefsShouldBePlatformSpecific
+-CommandServiceTest.RemoveShortcutSurvivesUpdate
+-CommerceHintAddToCartPatternTest.AddToCartByForm
+-CommerceHintAddToCartPatternTest.AddToCartByURL
 -CommerceHintAgentFencedFrameTest.VisitCartInFencedFrame
 -CommerceHintAgentPortalBrowserTest.VisitCartInPortal
--CommerceHintAgentTest.Add*
+-CommerceHintAgentTest.AddToCartByForm
+-CommerceHintAgentTest.AddToCartByForm_WithLink
+-CommerceHintAgentTest.AddToCartByForm_WithWrongLink
+-CommerceHintAgentTest.AddToCartByURL
+-CommerceHintAgentTest.AddToCartByURL_XHR
 -CommerceHintAgentTest.ExtractCart
 -CommerceHintAgentTest.PurchaseByForm
--CommerceHintAgentTest.Visit*
--CommerceHintCacaoTest.Rejected
--CommerceHintCartPatternTest.VisitCart
+-CommerceHintAgentTest.VisitCart
+-CommerceHintAgentTest.VisitCheckout
 -CommerceHintCheckoutPatternTest.VisitCheckout
 -CommerceHintMaxCountTest.ExtractCart
+-CommerceHintOptimizeRendererDisabledTest.Rejected
 -CommerceHintOptimizeRendererTest.CartExtractionSkipped
 -CommerceHintPurchaseURLPatternTest.PurchaseByURL
 -CommerceHintSkippAddToCartTest.AddToCartByForm
 -CommerceHintTimeoutTest.ExtractCart
--ConditionalCacheCountingHelperBrowserTest.Count
 -ConfirmBubbleTest.InvokeUi_default
--ContentAnalysisDelegateBlockingSettingBrowserTest.Block*
--ContentSettingBubbleDialogTest.Invoke*
--ContextMenuBrowserTest.Gif*
+-ContentAnalysisDelegateBlockingSettingBrowserTest.BlockLargeFiles/0
+-ContentAnalysisDelegateBlockingSettingBrowserTest.BlockLargeFiles/1
+-ContentAnalysisDelegateBlockingSettingBrowserTest.BlockLargeFiles/2
+-ContentAnalysisDelegateBlockingSettingBrowserTest.BlockLargeFiles/3
+-ContentSettingBubbleDialogTest.InvokeUi_ads
+-ContentSettingBubbleDialogTest.InvokeUi_automatic_downloads
+-ContentSettingBubbleDialogTest.InvokeUi_cookies
+-ContentSettingBubbleDialogTest.InvokeUi_geolocation
+-ContentSettingBubbleDialogTest.InvokeUi_javascript
+-ContentSettingBubbleDialogTest.InvokeUi_mediastream_camera
+-ContentSettingBubbleDialogTest.InvokeUi_mediastream_mic
+-ContentSettingBubbleDialogTest.InvokeUi_mediastream_mic_and_camera
+-ContentSettingBubbleDialogTest.InvokeUi_midi_sysex
+-ContentSettingBubbleDialogTest.InvokeUi_mixed_script
+-ContentSettingBubbleDialogTest.InvokeUi_notifications_quiet
+-ContentSettingBubbleDialogTest.InvokeUi_notifications_quiet_abusive
+-ContentSettingBubbleDialogTest.InvokeUi_notifications_quiet_abusive_content
+-ContentSettingBubbleDialogTest.InvokeUi_notifications_quiet_crowd_deny
+-ContentSettingBubbleDialogTest.InvokeUi_notifications_quiet_predicted_very_unlikely
+-ContentSettingBubbleDialogTest.InvokeUi_popups
+-ContentSettingBubbleDialogTest.InvokeUi_protocol_handlers
+-ContextMenuBrowserTest.GifImageDownscaleToJpeg
+-ContextMenuBrowserTest.GifImageShare
 -ContextMenuBrowserTest.JpgImageDownscaleToJpg
 -ContextMenuBrowserTest.MenuContentsVerification_Subframe
--ContextMenuBrowserTest.Non*
+-ContextMenuBrowserTest.NonLocatedContextMenuOnAnchorElement
+-ContextMenuBrowserTest.NonLocatedContextMenuOnLargeImageElement
 -ContextMenuBrowserTest.OpenProfileNoneReferrer
--ContextMenuBrowserTest.Png*
+-ContextMenuBrowserTest.PngImageDownscaleToPng
+-ContextMenuBrowserTest.PngImageOriginalDownscaleToPng
 -ContextMenuBrowserTest.RealMenu
 -ContextMenuBrowserTest.RequestPngForGifImage
 -ContextMenuBrowserTest.SuggestedFileName
--ContinueWhereILeftOffTest.SessionCookies
--CookieControlsBubbleViewTest.Invoke*
+-CookieControlsBubbleViewTest.InvokeUi_BlockingDisabled
+-CookieControlsBubbleViewTest.InvokeUi_NotWorkingClicked
 -CookiePolicyBrowserTest.NestedFirstPartyIFrameStorageForFrame
--CorbAndCorsExtensionBrowserTest.Content*
+-CorbAndCorsExtensionBrowserTest.ContentScriptVsHostBlockedByPolicy_AllowedTextResource
+-CorbAndCorsExtensionBrowserTest.ContentScriptVsHostBlockedByPolicy_NoSniffXml
+-CorbAndCorsExtensionBrowserTest.ContentScript_CorsAllowedByServer_NoPermissionToTarget
+-CorbAndCorsExtensionBrowserTest.ContentScript_CorsIgnoredByServer_NoPermissionToTarget
 -CorbAndCorsExtensionBrowserTest.ExtensionWithNoHttpPermissions
--CorbAndCorsExtensionBrowserTest.From*
+-CorbAndCorsExtensionBrowserTest.FromProgrammaticContentScript_AllowedAfterSniffing
+-CorbAndCorsExtensionBrowserTest.FromProgrammaticContentScript_AllowedTextResource
+-CorbAndCorsExtensionBrowserTest.FromProgrammaticContentScript_AllowedTextResource_SubdomainPermissions
+-CorbAndCorsExtensionBrowserTest.FromProgrammaticContentScript_UnloadedExtension
 -CrSettingsPeoplePageTest.All
 -CrSettingsSecurityPageTest.All
 -CreateAppShortcutDialogTest.InvokeUi_default
--CreativeOriginAdsPageLoadMetricsObserverBrowserTest.Creative*
+-CreativeOriginAdsPageLoadMetricsObserverBrowserTest.CreativeOriginStatusCross
+-CreativeOriginAdsPageLoadMetricsObserverBrowserTest.CreativeOriginStatusCrossDoubleNested
+-CreativeOriginAdsPageLoadMetricsObserverBrowserTest.CreativeOriginStatusCrossNested
+-CreativeOriginAdsPageLoadMetricsObserverBrowserTest.CreativeOriginStatusSameNested
+-CrossProfileDebuggerApiTest.Attach
+-CrossProfileDebuggerApiTest.GetTargets
 -DIPSTabHelperBrowserTest.InteractionsRecordedInAncestorFrames
 -DebuggerExtensionApiTest.AttachToPdf
 -DeepScanningFailureModalDialogTest.InvokeUi_default
 -DesktopCaptureApiTest.ChooseDesktopMedia
 -DesktopCaptureApiTest.Delegation
--DesktopMediaPickerViewsBrowserTest.Invoke*
--DestroyProfileOnBrowserClose/ProfileHelperTestWithDestroyProfile.Delete*
--DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.Delete*
--DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.Ephemeral*
+-DesktopMediaPickerViewsBrowserTest.InvokeUi_default
+-DesktopMediaPickerViewsBrowserTest.InvokeUi_tabs
+-DestroyProfileOnBrowserClose/ProfileHelperTestWithDestroyProfile.DeleteInactiveProfile/0
+-DestroyProfileOnBrowserClose/ProfileHelperTestWithDestroyProfile.DeleteInactiveProfile/1
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.DeleteAllProfiles/0
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.DeleteAllProfiles/1
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.DeleteInactiveProfile/0
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.DeleteInactiveProfile/1
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.EphemeralProfile/0
+-DestroyProfileOnBrowserClose/ProfileManagerBrowserTest.EphemeralProfile/1
 -DevToolsProtocolTest.InputDispatchEventsToCorrectTarget
 -DiceManageAccountBrowserTest.ClearManagedProfileOnStartup
 -DiceWebSigninInterceptionBubbleBrowserTest.ProfileKeepAlive
--DiskCachesizeExperiment.ScaledCacheSize
--DownloadDangerPromptBrowserTest.Invoke*
--DownloadExtensionTest.Download*
+-DownloadDangerPromptBrowserTest.InvokeUi_AccountCompromise
+-DownloadDangerPromptBrowserTest.InvokeUi_AccountCompromiseFromApi
+-DownloadDangerPromptBrowserTest.InvokeUi_DangerousFile
+-DownloadDangerPromptBrowserTest.InvokeUi_DangerousFileFromApi
+-DownloadDangerPromptBrowserTest.InvokeUi_DangerousUrl
+-DownloadDangerPromptBrowserTest.InvokeUi_DangerousUrlFromApi
+-DownloadDangerPromptBrowserTest.InvokeUi_PotentiallyUnwanted
+-DownloadDangerPromptBrowserTest.InvokeUi_PotentiallyUnwantedFromApi
+-DownloadDangerPromptBrowserTest.InvokeUi_UncommonContent
+-DownloadDangerPromptBrowserTest.InvokeUi_UncommonContentFromApi
+-DownloadExtensionTest.DownloadExtensionTest_AcceptDanger
+-DownloadExtensionTest.DownloadExtensionTest_Disallowed_Character_In_Filename
+-DownloadExtensionTest.DownloadExtensionTest_Download_AuthBasic
+-DownloadExtensionTest.DownloadExtensionTest_Download_AuthBasic_Fail
+-DownloadExtensionTest.DownloadExtensionTest_Download_DataURL
+-DownloadExtensionTest.DownloadExtensionTest_Download_File
+-DownloadExtensionTest.DownloadExtensionTest_Download_Headers
+-DownloadExtensionTest.DownloadExtensionTest_Download_Headers_Fail
+-DownloadExtensionTest.DownloadExtensionTest_Download_InvalidHeaders
+-DownloadExtensionTest.DownloadExtensionTest_Download_Post
+-DownloadExtensionTest.DownloadExtensionTest_Download_Post_Get
+-DownloadExtensionTest.DownloadExtensionTest_Download_Post_NoBody
+-DownloadExtensionTest.DownloadExtensionTest_Download_Subdirectory
+-DownloadExtensionTest.DownloadExtensionTest_Download_UnsafeHeaders
 -DownloadTest.DownloadErrorReadonlyFolder
--DownloadTest.Save*
--DownloadTestSplitCacheEnabled.Save*
+-DownloadTest.SaveCanvasImage
+-DownloadTest.SaveLinkAsVsCrossOriginResourcePolicy
+-DownloadTestSplitCacheEnabled.SaveMainFramePdfFromContextMenu_IsolationInfo
+-DownloadTestSplitCacheEnabled.SaveSubframePdfFromContextMenu_IsolationInfo
+-DownloadTestSplitCacheEnabled.SaveSubframePdfFromPdfUI_IsolationInfo
 -EditAddressProfileDialogControllerImplTest.InvokeUi_Edit
--EncryptedMediaSupportedTypesClearKeyTest.Video_MP4
--EncryptedMediaSupportedTypesClearKeyTest.Video_WebM
 -EncryptedMediaSupportedTypesExternalClearKeyTest.EncryptionScheme
 -EncryptedMediaSupportedTypesExternalClearKeyTest.Robustness
 -EncryptedMediaSupportedTypesExternalClearKeyTest.SessionType
--EnterpriseStartupDialogViewBrowserTest.Invoke*
+-EnterpriseStartupDialogViewBrowserTest.InvokeUi_Error
+-EnterpriseStartupDialogViewBrowserTest.InvokeUi_Information
+-EnterpriseStartupDialogViewBrowserTest.InvokeUi_Switch
+-ExtensionApiTabTest.UpdateWindowResize
 -ExtensionApiTest.ChromeRuntimeGetPlatformInfo
--ExtensionApiTest.Font*
+-ExtensionApiTest.FontSettings
+-ExtensionApiTest.FontSettingsIncognito
 -ExtensionApiTest.Storage
+-ExtensionApiTest.TemporaryAddressSpoof
 -ExtensionBackForwardCacheBrowserTest.StorageCallbackEvicts
--ExtensionBindingsApiTest.Web*
+-ExtensionBindingsApiTest.WebUserGestureAfterApiCallback
+-ExtensionBindingsApiTest.WebUserGestureAfterMessagingCallback
 -ExtensionDialogTest.TextInputViaKeyEvent
--ExtensionInstallBlockedDialogViewTest.Invoke*
--ExtensionInstallDialogViewInteractiveBrowserTest.Invoke*
+-ExtensionInstallBlockedDialogViewTest.InvokeUi_WithCustomMessage
+-ExtensionInstallBlockedDialogViewTest.InvokeUi_WithLongCustomMessage
+-ExtensionInstallBlockedDialogViewTest.InvokeUi_WithoutCustomMessage
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_AllInfoTypes
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_DetailedPermission
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_External
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_FromWebstore
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_FromWebstoreWithPermission
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_ManyPermissions
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_MultilinePermission
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_ReEnable
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_Simple
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_WithRetainedDevices
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_WithRetainedFiles
+-ExtensionInstallDialogViewInteractiveBrowserTest.InvokeUi_WithWithholdingOption
 -ExtensionInstallFrictionDialogTest.InvokeUi_default
--ExtensionInstalledBubbleViewsBrowserTest.Invoke*
--ExtensionUninstallDialogViewInteractiveBrowserTest.Invoke*
--ExtensionWebRequestApiTest.Web*
+-ExtensionInstalledBubbleViewsBrowserTest.InvokeUi_BrowserAction
+-ExtensionInstalledBubbleViewsBrowserTest.InvokeUi_Omnibox
+-ExtensionInstalledBubbleViewsBrowserTest.InvokeUi_PageAction
+-ExtensionInstalledBubbleViewsBrowserTest.InvokeUi_SignInPromo
+-ExtensionInstalledBubbleViewsBrowserTest.InvokeUi_default
+-ExtensionTabsTest.InvalidUpdateWindowBounds
+-ExtensionTabsTest.InvalidUpdateWindowState
+-ExtensionTabsTest.UpdateDevToolsWindow
+-ExtensionUninstallDialogViewInteractiveBrowserTest.InvokeUi_ManualUninstall
+-ExtensionUninstallDialogViewInteractiveBrowserTest.InvokeUi_ManualUninstallShowReportAbuse
+-ExtensionUninstallDialogViewInteractiveBrowserTest.InvokeUi_UninstallByExtension
+-ExtensionUninstallDialogViewInteractiveBrowserTest.InvokeUi_UninstallByExtensionShowReportAbuse
+-ExtensionWebRequestApiTest.WebRequestNewTab
+-ExtensionWebRequestApiTest.WebRequestPacRequestProtection
+-ExtensionWebRequestApiTest.WebSocketRequestOnWorker
 -ExtensionWebstoreGetWebGLStatusTest.Allowed
 -ExtensionWindowCreateTest.AcceptState
+-ExtensionWindowCreateTest.ValidateCreateWindowBounds
 -ExternalProtocolDialogBrowserTest.InvokeUi_default
 -ExternalProtocolDialogBrowserTest.TestFocus
--FeedbackTest.AnonymousUser
--FeedbackTest.ExtraDiagnostics
--FeedbackTest.Show*
 -FencedFrameSiteDetailsBrowserTest.MemoryDetailsForFencedFrame
--FileSystemAccessPermissionViewTest.Invoke*
+-FileSystemAccessPermissionViewTest.InvokeUi_ExtensionOrigin
+-FileSystemAccessPermissionViewTest.InvokeUi_FileOrigin
+-FileSystemAccessPermissionViewTest.InvokeUi_FileRead
+-FileSystemAccessPermissionViewTest.InvokeUi_FileReadWrite
+-FileSystemAccessPermissionViewTest.InvokeUi_Folder
+-FileSystemAccessPermissionViewTest.InvokeUi_FolderRead
+-FileSystemAccessPermissionViewTest.InvokeUi_FolderReadWrite
+-FileSystemAccessPermissionViewTest.InvokeUi_LongFileName
+-FileSystemAccessPermissionViewTest.InvokeUi_LongOrigin
+-FileSystemAccessPermissionViewTest.InvokeUi_default
 -FileSystemAccessRestrictedDirectoryDialogViewTest.InvokeUi_default
--FileSystemAccessUsageBubbleViewTest.Invoke*
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_LongOrigin
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_MultipleReadableFiles
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_MultipleReadableFolders
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_MultipleWritableFolders
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_ReadableAndWritableFolders
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_ReadableFilesAndFolders
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_SingleReadableFile
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_SingleReadableFolder
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_SingleWritableFolder
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_TwoWritableFiles
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_WritableFilesAndFolders
+-FileSystemAccessUsageBubbleViewTest.InvokeUi_default
 -FindInPageControllerTest.FindMovesWhenObscuring
 -FolderUploadConfirmationViewTest.InitiallyFocusesCancel
 -FolderUploadConfirmationViewTest.InvokeUi_default
--GlobalErrorBubbleTest.Invoke*
+-FullscreenTabSearchBubbleDialogTest.InvokeUi_default
+-GlobalErrorBubbleTest.InvokeUi_ExtensionDisabledGlobalError
+-GlobalErrorBubbleTest.InvokeUi_ExtensionDisabledGlobalErrorRemote
+-GlobalErrorBubbleTest.InvokeUi_ExternalInstallBubbleAlert
+-GlobalErrorBubbleTest.InvokeUi_SigninGlobalError
 -HelpBubbleFactoryViewsBrowsertest.InvokeUi_default
 -HistoryManipulationInterventionBrowserTest.PDFDoNotSkipOnBackForwardDueToUserGesture
 -HistoryManipulationInterventionBrowserTest.PDFSkipOnBackForwardNoUserGesture
@@ -240,23 +720,31 @@
 -IconModuleTest.All
 -ImageAnnotationBrowserTest.ImageUrl
 -ImportLockDialogViewBrowserTest.InvokeUi_default
--InMemoryApp/NetworkContextConfigurationDataPacBrowserTest.Data*
+-InMemoryApp/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-InMemoryApp/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
 -InMemoryApp/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
--InMemoryApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
--InMemoryApp/NetworkContextConfigurationProxySettingsBrowserTest.Max*
+-InMemoryApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-InMemoryApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
+-InMemoryApp/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-InMemoryApp/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -InProcess/ChromeNetworkServiceBrowserTest.EncryptedCookies/0
 -InProcessBrowserTest.RunsScheduledLayoutOnAnchoredBubbles
 -IncognitoBrowsingDataBrowserTest.Database
 -IncognitoBrowsingDataBrowserTest.StorageDoesntWriteToDisk
 -IncognitoBrowsingDataBrowserTest.WebSqlDeletion
 -IncognitoClearBrowsingDataDialogBrowserTest.InvokeUi_default
--IncognitoProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.Data*
--IncognitoProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.Http*
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
 -IncognitoProfileMainNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
--IncognitoProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.Max*
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-IncognitoProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -InfoBarUiTest.InvokeUi_multiple_infobars
 -InlineLoginHelperBrowserTest.InvokeUi_default
--InlineLoginHelperBrowserTest.Signin*
+-InlineLoginHelperBrowserTest.SigninCreatesSyncStarter1
+-InlineLoginHelperBrowserTest.SigninCreatesSyncStarter2
+-InlineLoginHelperBrowserTest.SigninCreatesSyncStarter4
 -InlineLoginHelperBrowserTest.UntrustedSigninDialogCancel
 -InlineLoginHelperBrowserTest.WithAuthCode
 -IntentPickerDialogTest.InvokeUi_default
@@ -264,29 +752,55 @@
 -InterstitialUITest.MalwareInterstitialQuiet
 -InterstitialUITest.PhishingInterstitialQuiet
 -InterstitialUITest.UnwantedSoftwareInterstitialQuiet
+-IsolatedAppTest.SessionStorage
 -LargeStickyAdViolationBrowserTest.LargeStickyAd_AdInterventionTriggered
 -LargeStickyAdViolationBrowserTest.NoLargeStickyAd_AdInterventionNotTriggered
 -LargeStickyAdViolationBrowserTestWithoutEnforcement.LargeStickyAd_NoAdInterventionTriggered
--LoadImageBrowserTest.Load*
--LoadingPredictorBrowserTestWithProxy.Prepare*
+-LoadImageBrowserTest.LoadImage
+-LoadImageBrowserTest.LoadImageWithMap
+-LoadingPredictorBrowserTestWithProxy.PrepareForPageLoadWithPrediction
+-LoadingPredictorBrowserTestWithProxy.PrepareForPageLoadWithoutPrediction
 -LocalCardMigrationBrowserTest.AcceptingDialogAddsLocalCardMigrationStrikes
 -LocalCardMigrationBrowserTest.CardIdentifierString
--LocalCardMigrationBrowserTest.Clicking*
--LocalCardMigrationBrowserTest.Closed*
--LocalCardMigrationBrowserTest.Closing*
+-LocalCardMigrationBrowserTest.ClickingCancelClosesDialog
+-LocalCardMigrationBrowserTest.ClickingCloseClosesBubble
+-LocalCardMigrationBrowserTest.ClickingContinueOpensDialog
+-LocalCardMigrationBrowserTest.ClickingOmniboxIconReshowsBubble
+-LocalCardMigrationBrowserTest.ClickingSaveClosesDialog
+-LocalCardMigrationBrowserTest.ClosedReason_BubbleAccepted
+-LocalCardMigrationBrowserTest.ClosedReason_BubbleClosed
+-LocalCardMigrationBrowserTest.ClosedReason_BubbleLostFocus
+-LocalCardMigrationBrowserTest.ClosedReason_BubbleNotInteracted
+-LocalCardMigrationBrowserTest.ClosingBubbleAddsLocalCardMigrationStrikes
+-LocalCardMigrationBrowserTest.ClosingBubbleAgainAddsLocalCardMigrationStrikes
 -LocalCardMigrationBrowserTest.CreditCardIconShownInLocationBar
 -LocalCardMigrationBrowserTest.DialogContainsAllValidMigratableCard
 -LocalCardMigrationBrowserTest.IntermediateMigrationOfferDoesNotShowWhenPaymentsDeclines
 -LocalCardMigrationBrowserTest.RejectingDialogAddsLocalCardMigrationStrikes
 -LocalCardMigrationBrowserTest.ReshowingBubbleDoesNotAddStrikes
--LocalCardMigrationBrowserTest.Reusing*
+-LocalCardMigrationBrowserTest.ReusingLocalCardDoesNotShowIntermediateMigrationOffer
+-LocalCardMigrationBrowserTest.ReusingLocalCardShowsIntermediateMigrationOffer
+-LocalCardMigrationBrowserTest.ReusingServerCardDoesNotShowIntermediateMigrationOffer
+-LocalCardMigrationBrowserTest.ReusingServerCardWithMigratableLocalCardShowIntermediateMigrationOffer
 -LocalCardMigrationBrowserTest.UsingNewCardDoesNotShowIntermediateMigrationOffer
 -LocalCardMigrationBrowserTestForStatusChip.ActivateFirstInactiveBubbleForAccessibility
 -LocalCardMigrationBrowserTestForStatusChip.ClickingOmniboxIconReshowsBubble
 -LocalCardMigrationBrowserTestForStatusChip.CreditCardIconShownInStatusChip
 -LocalCardMigrationBrowserTestForStatusChip.IconAndBubbleVisibilityAfterTabSwitching
 -ManifestUpdateManagerAppIdentityBrowserTest.TestUpgradeDuringShutdownForAppIdentity
--ManifestUpdateManagerBrowserTest.Check*
+-ManifestUpdateManagerBrowserTest.CheckDoesApplyIconURLChangeForDefaultApps
+-ManifestUpdateManagerBrowserTest.CheckDoesFindIconUrlChangeForDefaultApps
+-ManifestUpdateManagerBrowserTest.CheckDoesNotFindIconContentChange
+-ManifestUpdateManagerBrowserTest.CheckDoesNotFindIconUrlChange
+-ManifestUpdateManagerBrowserTest.CheckFindsDeletedDisplayOverride
+-ManifestUpdateManagerBrowserTest.CheckFindsDisplayChange
+-ManifestUpdateManagerBrowserTest.CheckFindsDisplayOverrideChange
+-ManifestUpdateManagerBrowserTest.CheckFindsInvalidDisplayOverride
+-ManifestUpdateManagerBrowserTest.CheckFindsNewDisplayOverride
+-ManifestUpdateManagerBrowserTest.CheckFindsScopeChange
+-ManifestUpdateManagerBrowserTest.CheckFindsThemeColorChange
+-ManifestUpdateManagerBrowserTest.CheckKeepsSameName
+-ManifestUpdateManagerBrowserTest.CheckUpdatedPolicyAppsNotUninstallable
 -ManifestUpdateManagerCaptureLinksBrowserTest.CheckFindsCaptureLinksChange
 -ManifestUpdateManagerHandleLinksBrowserTest.CheckFindsHandleLinksChange
 -ManifestUpdateManagerIconUpdatingBrowserTest.CheckFindsIconUrlChange
@@ -296,54 +810,100 @@
 -MyIpAddressProxyScriptBrowserTest.Verify
 -NavigationPredictorBrowserTest.ClickAnchorElement
 -NavigationPredictorBrowserTest.MultipleNavigations
--NavigationPredictorBrowserTest.Page*
+-NavigationPredictorBrowserTest.PageWithCrossOriginIframe
+-NavigationPredictorBrowserTest.PageWithIframe
 -NavigationPredictorBrowserTest.Pipeline
--NavigationPredictorBrowserTest.Single*
+-NavigationPredictorBrowserTest.SingleObserver
+-NavigationPredictorBrowserTest.SingleObserverPastViewport
 -NavigationPredictorBrowserTest.TwoObservers
 -NavigationPredictorBrowserTest.ViewportOnlyAndUrlIncrementByOne
 -NavigationPredictorFencedFrameBrowserTest.EnsureFencedFrameDoesNotCreateNavigationPredictor
 -NavigationPredictorPrerenderBrowserTest.PrerenderingDontCreatePredictor
--NetworkQualityEstimatorPrefsBrowserTest.ReadPrefsAtStartupCustomPrefFile
--NetworkingPrivateServiceClientApiTest.On*
+-NetworkingPrivateServiceClientApiTest.OnNetworkListChangedEvent
+-NetworkingPrivateServiceClientApiTest.OnNetworksChangedEventConnect
+-NetworkingPrivateServiceClientApiTest.OnNetworksChangedEventDisconnect
 -NetworkingPrivateServiceClientApiTest.RequestNetworkScan
 -NewTabPageLogoTest.All
 -NewTabPageModulesModuleWrapperTest.All
--NoSessionRestoreTest.CookiesClearedOnExit
--NoSessionRestoreTestWithStartupDeletionDisabled.CookiesClearedOnStartup
--NoStatePrefetchBrowserTest.PrefetchCookieCrossDomainSameSiteStrict
 -OmniboxPopupContentsViewTest.ClickOmnibox
 -OmniboxPopupContentsViewTest.PopupMatchesLocationBarBackground
 -OmniboxSuggestionButtonRowBrowserTest.InvokeUi
--OnDiskApp/NetworkContextConfigurationBrowserTest.Cache/0
--OnDiskApp/NetworkContextConfigurationBrowserTest.Cookies*
+-OnDiskApp/NetworkContextConfigurationBrowserTest.CacheIsolation/1
 -OnDiskApp/NetworkContextConfigurationBrowserTest.DiskCache/0
--OnDiskApp/NetworkContextConfigurationDataPacBrowserTest.Data*
+-OnDiskApp/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-OnDiskApp/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
 -OnDiskApp/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
--OnDiskApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
--OnDiskApp/NetworkContextConfigurationProxySettingsBrowserTest.Max*
--OnDiskApp/NetworkContextConfigurationReportingAndNelBrowserTest.Persist*
--OnDiskAppWithIncognitoProfile/NetworkContextConfigurationDataPacBrowserTest.Data*
--OnDiskAppWithIncognitoProfile/NetworkContextConfigurationHttpPacBrowserTest.Http*
--OnDiskAppWithIncognitoProfile/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
--OnDiskAppWithIncognitoProfile/NetworkContextConfigurationProxySettingsBrowserTest.Max*
+-OnDiskApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-OnDiskApp/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
+-OnDiskApp/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-OnDiskApp/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-OnDiskAppWithIncognitoProfile/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -OutOfMemoryReporterPrerenderBrowserTest.NotReportedOnPrerenderPage
 -OutOfProcess/ChromeNetworkServiceBrowserTest.EncryptedCookies/0
--OutdatedUpgradeBubbleTest.Invoke*
+-OutdatedUpgradeBubbleTest.InvokeUi_NoAutoUpdate
+-OutdatedUpgradeBubbleTest.InvokeUi_Outdated
 -OverlayPopupAdViolationBrowserTest.NoOverlayPopupAd_AdInterventionNotTriggered
 -OverlayPopupAdViolationBrowserTest.OverlayPopupAd_AdInterventionTriggered
 -OverlayPopupAdViolationBrowserTestWithoutEnforcement.OverlayPopupAd_NoAdInterventionTriggered
--PageInfoBubbleViewAboutThisSiteDialogBrowserTest.Invoke*
--PageInfoBubbleViewDialogBrowserTest.Invoke*
+-PKIMetadataComponentUpdater/PKIMetadataComponentUpdaterTest.ReloadsPKIMetadataConfigAfterCrash/1
+-PageInfoBubbleViewAboutThisSiteDialogBrowserTest.InvokeUi_AboutThisSite
+-PageInfoBubbleViewAboutThisSiteDialogBrowserTest.InvokeUi_AboutThisSiteSubpage
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_AllowAllPermissions
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_BlockAllPermissions
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_Deceptive
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_EnterprisePasswordReuse
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_EvSecure
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_EvSecureSubpage
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_File
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_Insecure
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_Internal
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_InternalExtension
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_InternalViewSource
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_Malware
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_MalwareAndBadCert
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_MixedContent
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_MixedContentForm
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_SavedPasswordReuse
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_Secure
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_SecureSubpage
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_SignInNonSyncPasswordReuse
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_SignInSyncPasswordReuse
+-PageInfoBubbleViewDialogBrowserTest.InvokeUi_UnwantedSoftware
 -PageInfoBubbleViewHistoryDialogBrowserTest.InvokeUi_History
--PageInfoBubbleViewPrivacySandboxDialogBrowserTest.Invoke*
--PageLoadMetricsBrowserTest.CachedPage
--PageLoadMetricsBrowserTest.Input*
--PageLoadMetricsBrowserTest.Main*
--PageLoadMetricsBrowserTestWithAnimatedLCPFlag.Page*
+-PageInfoBubbleViewPrivacySandboxDialogBrowserTest.InvokeUi_PrivacySandboxMain
+-PageInfoBubbleViewPrivacySandboxDialogBrowserTest.InvokeUi_PrivacySandboxSubpage
+-PageLoadMetricsBrowserTest.InputEventsForClick
+-PageLoadMetricsBrowserTest.InputEventsForJavaScriptHref
+-PageLoadMetricsBrowserTest.InputEventsForJavaScriptWindowOpen
+-PageLoadMetricsBrowserTest.MainFrameIntersectionCrossOrigin
+-PageLoadMetricsBrowserTest.MainFrameIntersectionCrossOriginScrolled
+-PageLoadMetricsBrowserTest.MainFrameIntersectionSameOrigin
+-PageLoadMetricsBrowserTestWithAnimatedLCPFlag.PageLCPAnimatedImage
+-PageLoadMetricsBrowserTestWithAnimatedLCPFlag.PageLCPNonAnimatedImage
 -PageLoadMetricsBrowserTestWithRuntimeAnimatedLCPFlag.PageLCPAnimatedImageOnlyRuntimeFlag
 -PageTextObserverBrowserTest.OOPIFAMPSubframe
--PasswordBubbleBrowserTest.Invoke*
--PasswordDialogViewTest.Invoke*
+-PaintPreviewCompositorBrowserTest.CompositorCreate
+-PaintPreviewCompositorBrowserTest.KillWithActiveCompositors
+-PaintPreviewCompositorBrowserTest.MultipleCompositorCreate
+-PaintPreviewCompositorBrowserTest.TestInitializationSuccess
+-PasswordBubbleBrowserTest.InvokeUi_AutoSignin
+-PasswordBubbleBrowserTest.InvokeUi_AutomaticPasswordBubble
+-PasswordBubbleBrowserTest.InvokeUi_ManagePasswordBubble
+-PasswordBubbleBrowserTest.InvokeUi_MoreToFixState
+-PasswordBubbleBrowserTest.InvokeUi_MoveToAccountStoreBubble
+-PasswordBubbleBrowserTest.InvokeUi_PendingPasswordBubble
+-PasswordDialogViewTest.InvokeUi_AutoSigninFirstRun
+-PasswordDialogViewTest.InvokeUi_CredentialLeak
+-PasswordDialogViewTest.InvokeUi_PopupAccountChooserWithMultipleCredentialClickSignIn
+-PasswordDialogViewTest.InvokeUi_PopupAccountChooserWithSingleCredentialClickSignIn
+-PasswordDialogViewTest.InvokeUi_PopupAutoSigninPrompt
 -PasswordGenerationPopupViewTest.CloseWebContentsWithVisiblePopup
 -PasswordGenerationPopupViewTest.MouseMovementInEditingPopup
 -PasswordManagerBrowserTest.DeleteCredentialsUpdateDropdown
@@ -355,96 +915,177 @@
 -PaymentRequestCvcUnmaskViewControllerVisualTest.InvokeUi_default
 -PaymentsRequestVisualTest.InvokeUi_NoShipping
 -PaymentsRequestVisualWithBasicCardDisabledTest.InvokeUi_NoShipping
--PersistentBackground/ExtensionApiCaptureTest.Capture*
+-PersistentBackground/ExtensionApiCaptureTest.CaptureVisibleDisabled/0
+-PersistentBackground/ExtensionApiCaptureTest.CaptureVisibleFile/0
+-PersistentBackground/ExtensionApiCaptureTest.CaptureVisibleTabJpeg/0
+-PersistentBackground/ExtensionApiCaptureTest.CaptureVisibleTabPng/0
 -PersistentBackground/RuntimeApiTest.GetPlatformInfo/0
 -PersistentBackground/WebNavigationApiTestWithContextType.RequestOpenTab/0
--PersistentBackground/WebNavigationApiTestWithContextType.Target*
+-PersistentBackground/WebNavigationApiTestWithContextType.TargetBlank/0
+-PersistentBackground/WebNavigationApiTestWithContextType.TargetBlankIncognito/0
 -PictureInPicturePixelComparisonBrowserTest.PlayAndPauseControls
 -PictureInPicturePixelComparisonBrowserTest.VideoPlay
--PolicyAppParameterizedTest/ManifestUpdateManagerBrowserTest_PolicyAppsCanUpdate.Check*
+-PolicyAppParameterizedTest/ManifestUpdateManagerBrowserTest_PolicyAppsCanUpdate.CheckDoesApplyIconURLChangeForPolicyAppsWithFlag/0
+-PolicyAppParameterizedTest/ManifestUpdateManagerBrowserTest_PolicyAppsCanUpdate.CheckDoesApplyIconURLChangeForPolicyAppsWithFlag/1
 -PolicyPrefsTestCoverageTest.AllPoliciesHaveATestCase
--PolicyTest.DefaultCookiesSetting
--PolicyTest.WebsiteCookiesSetting
--PolicyTestWindowOpener.CheckWindowOpenerNonNull
--PrefetchBrowserTest.Prefetch*
 -PrerenderSiteDetailsBrowserTest.MemoryDetailsForPrerender
 -PresentationReceiverWindowViewBrowserTest.LocationBarViewShown
 -PresentationReceiverWindowViewBrowserTest.ShowPageInfoDialog
 -PreservedWindowPlacement.Test
 -PrivacyBudgetFieldtrialConfigTest.LoadsSettingsFromFieldTrialConfig
--PrivacySandboxDialogTest.All
--PrivateNetworkAccessWithFeatureEnabledBrowserTest.CachedResourcesAllowed
+-PrivacySandboxDialogViewBrowserTest.InvokeUi_Notice
 -PrivateNetworkAccessWithFeatureEnabledBrowserTest.RecordsAddressSpaceFeatureForBlockedRequests
--ProcessMemoryMetricsEmitterTest.Fetch*
+-ProcessManagementTest.ProcessOverflow
+-ProcessMemoryMetricsEmitterTest.FetchAndEmitMetricsWithExtensions
+-ProcessMemoryMetricsEmitterTest.FetchDuringTrace
 -ProcessMemoryMetricsEmitterTest.ForegroundAndBackgroundPages
 -ProfileCustomizationBubbleBrowserTest.IPH
 -ProfileCustomizationBubbleBrowserTest.InvokeUi_default
 -ProfileHelperTest.OpenNewWindowForProfile
--ProfileMainNetworkContext/NetworkContextConfigurationBrowserTest.Cache/0
--ProfileMainNetworkContext/NetworkContextConfigurationBrowserTest.Cookies*
+-ProfileMainNetworkContext/NetworkContextConfigurationBrowserTest.CacheIsolation/0
+-ProfileMainNetworkContext/NetworkContextConfigurationBrowserTest.CacheIsolation/1
 -ProfileMainNetworkContext/NetworkContextConfigurationBrowserTest.DiskCache/0
--ProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.Data*
--ProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.Http*
--ProfileMainNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
--ProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.Max*
--ProfileMainNetworkContext/NetworkContextConfigurationReportingAndNelBrowserTest.Persist*
--ProfileMenuClickTest_WithUnconsentedPrimaryAccount.ProfileMenuClickTest_WithUnconsentedPrimaryAccount/1
+-ProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-ProfileMainNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
+-ProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
+-ProfileMainNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
+-ProfileMainNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-ProfileMainNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
+-ProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-ProfileMainNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -ProfileMenuViewExtensionsTest.CloseIPH
--ProfileNetworkContextServiceBrowsertest.DefaultCacheSize
 -ProfileNetworkContextServiceDiskCacheBrowsertest.DiskCacheLocation
 -ProfileWindowBrowserTest.OpenBrowserWindowForProfileWithSigninRequired
 -PromptForScanningModalDialogTest.InvokeUi_default
 -ProxyBrowserTest.BasicAuthWSConnect
 -ProxyBrowserTest.ProxyAuthHTTPS
 -ProxySettingsApiTest.ProxyEventsParseError
--QRCodeGeneratorBubbleBrowserTest.Invoke*
+-QRCodeGeneratorBubbleBrowserTest.InvokeUi_bottom_error
+-QRCodeGeneratorBubbleBrowserTest.InvokeUi_default
+-QRCodeGeneratorBubbleBrowserTest.InvokeUi_top_error
 -ReadLaterButtonBrowserTest.InvokeUi_default
--RecordLanguagesMetricsBrowserTest.Content*
--RecordLanguagesMetricsBrowserTest.Iframe*
+-RecordLanguagesMetricsBrowserTest.ContentLanguageEmpty
+-RecordLanguagesMetricsBrowserTest.ContentLanguageMatchTopMostAcceptLanguage
+-RecordLanguagesMetricsBrowserTest.ContentLanguageMatchesAnyAcceptLanguage
+-RecordLanguagesMetricsBrowserTest.IframeBothParentAndChildContentLanguageIsEmpty
+-RecordLanguagesMetricsBrowserTest.IframeContentLanguageChildDifferFromParent
+-RecordLanguagesMetricsBrowserTest.IframeParentAndChildContentLanguageAreStar
+-RecordLanguagesMetricsBrowserTest.IframeParentAndChildContentLanguageHasSameValue
+-RecordLanguagesMetricsBrowserTest.IframeParentContentLanguageIsEmptyAndChildContentLanguageHasValue
+-RecordLanguagesMetricsBrowserTest.IframeParentContentLanuageIsStarAndChildContentLanguageHasValue
+-RecordLanguagesMetricsBrowserTest.IframeParentHasConentLanguageAndChildContentLanguageIsEmpty
 -RedirectTest.ClientCancelled
--ReferrerPolicyCapReferrerToOriginOnCrossOriginTest.Honors*
+-ReferrerPolicyCapReferrerToOriginOnCrossOriginTest.HonorsMoreRestrictivePolicyOnNavigation
+-ReferrerPolicyCapReferrerToOriginOnCrossOriginTest.HonorsMoreRestrictivePolicyOnRedirect
 -ReferrerPolicyCapReferrerToOriginOnCrossOriginTest.RespectsNoReferrerPref
--ReferrerPolicyTest.Context*
+-ReferrerPolicyTest.ContextMenuOrigin
+-ReferrerPolicyTest.ContextMenuRedirect
 -ReferrerPolicyTest.History
--ReferrerPolicyTest.Http*
--ReferrerPolicyTest.Https*
--ReferrerPolicyTest.Left*
--ReferrerPolicyTest.Middle*
+-ReferrerPolicyTest.HttpLeftClickHTTPRedirectToHTTPSameOrigin
+-ReferrerPolicyTest.HttpLeftClickHTTPRedirectToHTTPStrictOrigin
+-ReferrerPolicyTest.HttpLeftClickHTTPSRedirectToHTTPOriginWhenCrossOrigin
+-ReferrerPolicyTest.HttpLeftClickHTTPSRedirectToHTTPStrictOrigin
+-ReferrerPolicyTest.HttpLeftClickRedirectToHTTPOriginWhenCrossOrigin
+-ReferrerPolicyTest.HttpLeftClickRedirectToHTTPSOriginWhenCrossOrigin
+-ReferrerPolicyTest.HttpsContextMenuOrigin
+-ReferrerPolicyTest.HttpsContextMenuRedirect
+-ReferrerPolicyTest.HttpsLeftClickOrigin
+-ReferrerPolicyTest.HttpsLeftClickRedirect
+-ReferrerPolicyTest.HttpsMiddleClickOrigin
+-ReferrerPolicyTest.HttpsMiddleClickRedirect
+-ReferrerPolicyTest.HttpsMiddleClickTargetBlankOrigin
+-ReferrerPolicyTest.HttpsMiddleClickTargetBlankRedirect
+-ReferrerPolicyTest.HttpsTargetBlankOrigin
+-ReferrerPolicyTest.HttpsTargetBlankRedirect
+-ReferrerPolicyTest.LeftClickOrigin
+-ReferrerPolicyTest.LeftClickRedirect
+-ReferrerPolicyTest.MiddleClickOrigin
+-ReferrerPolicyTest.MiddleClickRedirect
+-ReferrerPolicyTest.MiddleClickTargetBlankOrigin
+-ReferrerPolicyTest.MiddleClickTargetBlankRedirect
 -ReferrerPolicyTest.RequestTabletSite
--ReferrerPolicyTest.Target*
+-ReferrerPolicyTest.TargetBlankOrigin
+-ReferrerPolicyTest.TargetBlankRedirect
 -RelaunchRecommendedBubbleViewDialogTest.InvokeUi_default
 -RelaunchRequiredDialogViewDialogTest.InvokeUi_default
 -RemoteCopyBrowserTest.ImageUrl
--RemoteCopyBrowserTest.Text*
+-RemoteCopyBrowserTest.Text
+-RemoteCopyBrowserTest.TextThenImageUrl
 -RepostFormWarningTest.InvokeUi_TestRepostWarning
--RestartTest.CookiesClearedOnExit
--RestartTest.SessionCookies
--RestoreOnStartupPolicyTestInstance/RestoreOnStartupPolicyTest.Run*
--RssLinksFetcherTest.Fetch*
--SafeBrowsingNetworkContext/NetworkContextConfigurationBrowserTest.CookiesEnabled/1
--SafeBrowsingNetworkContext/NetworkContextConfigurationDataPacBrowserTest.Data*
--SafeBrowsingNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.Http*
--SafeBrowsingNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
+-RestoreOnStartupPolicyTestInstance/RestoreOnStartupPolicyTest.RunTest/0
+-RestoreOnStartupPolicyTestInstance/RestoreOnStartupPolicyTest.RunTest/2
+-RestoreOnStartupPolicyTestInstance/RestoreOnStartupPolicyTest.RunTest/3
+-RestoreOnStartupPolicyTestInstance/RestoreOnStartupPolicyTest.RunTest/4
+-RssLinksFetcherTest.FetchSuccessfulFromBody
+-RssLinksFetcherTest.FetchSuccessfulFromHead
+-SafeBrowsingNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-SafeBrowsingNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
+-SafeBrowsingNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
+-SafeBrowsingNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
+-SafeBrowsingNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-SafeBrowsingNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -SafeBrowsingNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
 -SafeBrowsingNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/1
--SafetyTipPageInfoBubbleViewDialogTest.Invoke*
--SaveCardBubbleControllerImplTest.Invoke*
+-SafetyTipPageInfoBubbleViewDialogTest.InvokeUi_BadReputation
+-SafetyTipPageInfoBubbleViewDialogTest.InvokeUi_Lookalike
+-SaveCardBubbleControllerImplTest.InvokeUi_Failure
+-SaveCardBubbleControllerImplTest.InvokeUi_Local
+-SaveCardBubbleControllerImplTest.InvokeUi_Manage
+-SaveCardBubbleControllerImplTest.InvokeUi_Server
+-SaveCardBubbleControllerImplTest.InvokeUi_Server_WithCardExpirationDateDropDownBox
+-SaveCardBubbleControllerImplTest.InvokeUi_Server_WithCardholderNameTextfield
 -SaveCardBubbleViewsFullFormBrowserTest.AlertAccessibleEvent
 -SaveCardBubbleViewsFullFormBrowserTest.Local_ClickingNoThanksClosesBubble
 -SaveCardBubbleViewsFullFormBrowserTest.StrikeDatabase_Local_AddStrikeIfBubbleDeclined
--SaveCardBubbleViewsFullFormBrowserTestForManageCard.Local*
+-SaveCardBubbleViewsFullFormBrowserTestForManageCard.Local_ClickingIconShowsManageCards
+-SaveCardBubbleViewsFullFormBrowserTestForManageCard.Local_ClickingSaveClosesBubble
+-SaveCardBubbleViewsFullFormBrowserTestForManageCard.Local_ManageCardsDoneButtonClosesBubble
 -SaveCardBubbleViewsFullFormBrowserTestForStatusChip.ActivateFirstInactiveBubbleForAccessibility
 -SaveCardBubbleViewsFullFormBrowserTestForStatusChip.ClickingOnCreditCardIconInStatusChipReshowsBubble
 -SaveCardBubbleViewsFullFormBrowserTestForStatusChip.CreditCardIconShownInStatusChip
--SaveCardBubbleViewsFullFormBrowserTestForStatusChip.Feedback*
+-SaveCardBubbleViewsFullFormBrowserTestForStatusChip.Feedback_Failure
+-SaveCardBubbleViewsFullFormBrowserTestForStatusChip.Feedback_Success
 -SaveCardBubbleViewsFullFormBrowserTestForStatusChip.IconAndBubbleVisibilityAfterTabSwitching
 -SaveCardBubbleViewsFullFormBrowserTestSettings.Local_ManageCardsButtonRedirects
--SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Local*
--SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic*
--SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Strike*
--SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload*
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.LocalCardHasNickname
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.LocalCardHasNoNickname
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_CanOfferToSaveDynamicForm
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_CanOfferToSaveEvenIfNothingFoundIfPaymentsAccepts
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldAttemptToOfferToSaveIfAddressNotFound
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldAttemptToOfferToSaveIfCvcNotFound
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldAttemptToOfferToSaveIfInvalidCvcFound
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldAttemptToOfferToSaveIfNameNotFound
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldAttemptToOfferToSaveIfNamesConflict
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldNotOfferToSaveIfNothingFoundAndPaymentsDeclines
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldOfferLocalSaveIfPaymentsDeclines
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Logic_ShouldOfferLocalSaveIfPaymentsFails
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.StrikeDatabase_Upload_AddStrikeIfBubbleDeclined
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.StrikeDatabase_Upload_FullFlowTest
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_CardholderNameRequested_SubmittingChangedValueLogsEditedMetric
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_CardholderNameRequested_SubmittingPrefilledValueLogsUneditedMetric
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_ClickingCloseClosesBubble
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_ClickingNoThanksClosesBubble
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_ClickingSaveClosesBubble
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_DecliningUploadDoesNotLogUserAcceptedCardOriginUMA
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_EnteringCardholderNameAndClickingSaveClosesBubbleIfCardholderNameRequested
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_NotTransportMode_InfoTextIconDoesNotExist
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_RequestedCardholderNameTextfieldIsNotPrefilledWithFocusNameIfMissing
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_RequestedCardholderNameTextfieldIsPrefilledWithFocusName
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SaveButtonIsDisabledIfExpiredExpirationDateAndExpirationDateRequested
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SaveButtonIsDisabledIfNoCardholderNameAndCardholderNameRequested
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_ShouldNotRequestCardholderNameInHappyPath
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_ShouldNotRequestExpirationDateInHappyPath
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithExpirationDateMonthAndCurrentYear
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithExpirationDateMonthAndWithYearIsOutOfRange
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithExpiredExpirationDateRequestsExpirationDate
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithMissingExpirationDateMonthAndWithValidYear
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithMissingExpirationDateRequestsExpirationDate
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithMissingExpirationDateYearAndWithMonth
+-SaveCardBubbleViewsFullFormBrowserTestWithAutofillUpstream.Upload_SubmittingFormWithMissingNamesRequestsCardholderNameIfExpOn
 -SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Local_TransportMode_InfoTextIconDoesNotExist
--SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Upload*
+-SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Upload_TransportMode_ClickingSaveClosesBubble
+-SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Upload_TransportMode_InfoTextIconExists
+-SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Upload_TransportMode_RequestedCardholderNameTextfieldIsPrefilledWithFocusName
 -SavePackageDeepScanningBrowserTest.Allowed
 -SavePackageDeepScanningBrowserTest.Blocked
 -SavePackageDeepScanningBrowserTest.DiscardAfterWarning
@@ -452,40 +1093,105 @@
 -SavePackageDeepScanningBrowserTest.OpenNow
 -SaveUPIBubbleControllerImplTest.InvokeUi
 -SaveUpdateAddressProfileBubbleControllerImplTest.CloseTabWhileBubbleIsOpen
--SaveUpdateAddressProfileBubbleControllerImplTest.Invoke*
+-SaveUpdateAddressProfileBubbleControllerImplTest.InvokeUi_Save
+-SaveUpdateAddressProfileBubbleControllerImplTest.InvokeUi_SaveCloseThenReopen
+-SaveUpdateAddressProfileBubbleControllerImplTest.InvokeUi_Update
 -ScriptingAPITest.NestedWebContents
 -SearchByImageBrowserTest.ImageSearchWithValidImage
 -SearchByImageBrowserTest.LensImageSearchWithValidImage
 -SecurePaymentConfirmationDialogViewTest.InvokeUi_default
 -SendTabToSelfBubbleTest.InvokeUi_default
--ServiceWorker/ExtensionApiCaptureTest.Capture*
+-ServiceWorker/ExtensionApiCaptureTest.CaptureVisibleDisabled/0
+-ServiceWorker/ExtensionApiCaptureTest.CaptureVisibleFile/0
+-ServiceWorker/ExtensionApiCaptureTest.CaptureVisibleTabJpeg/0
+-ServiceWorker/ExtensionApiCaptureTest.CaptureVisibleTabPng/0
 -ServiceWorker/RuntimeApiTest.GetPlatformInfo/0
 -ServiceWorker/WebNavigationApiTestWithContextType.RequestOpenTab/0
--ServiceWorker/WebNavigationApiTestWithContextType.Target*
+-ServiceWorker/WebNavigationApiTestWithContextType.TargetBlank/0
+-ServiceWorker/WebNavigationApiTestWithContextType.TargetBlankIncognito/0
 -ServiceWorkerBasedBackgroundTest.WindowsBasic
 -ServiceWorkerTest.MimeHandlerView
--SessionCrashedBubbleViewTest.Invoke*
+-SessionCrashedBubbleViewTest.InvokeUi_SessionCrashedBubble
+-SessionCrashedBubbleViewTest.InvokeUi_SessionCrashedBubbleOfferUma
 -SessionRestoreTest.NormalAndPopup
 -SessionRestoreTest.RestoreAfterClosingTabbedBrowserWithAppAndLaunching
--SettingsA11yEditDictionaryV3.Edit*
--SettingsOverriddenDialogViewBrowserTest.Invoke*
--SharedClipboardBrowserTest.Context*
+-SettingsA11yEditDictionaryV3.EditDictionary_accesskeys
+-SettingsA11yEditDictionaryV3.EditDictionary_area_alt
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_allowed_attr
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_hidden_body
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_required_attr
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_required_children
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_roles
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_valid_attr
+-SettingsA11yEditDictionaryV3.EditDictionary_aria_valid_attr_value
+-SettingsA11yEditDictionaryV3.EditDictionary_blink
+-SettingsA11yEditDictionaryV3.EditDictionary_button_name
+-SettingsA11yEditDictionaryV3.EditDictionary_bypass
+-SettingsA11yEditDictionaryV3.EditDictionary_checkboxgroup
+-SettingsA11yEditDictionaryV3.EditDictionary_definition_list
+-SettingsA11yEditDictionaryV3.EditDictionary_dlitem
+-SettingsA11yEditDictionaryV3.EditDictionary_document_title
+-SettingsA11yEditDictionaryV3.EditDictionary_duplicate_id
+-SettingsA11yEditDictionaryV3.EditDictionary_empty_heading
+-SettingsA11yEditDictionaryV3.EditDictionary_frame_title
+-SettingsA11yEditDictionaryV3.EditDictionary_frame_title_unique
+-SettingsA11yEditDictionaryV3.EditDictionary_heading_order
+-SettingsA11yEditDictionaryV3.EditDictionary_hidden_content
+-SettingsA11yEditDictionaryV3.EditDictionary_html_lang_valid
+-SettingsA11yEditDictionaryV3.EditDictionary_image_alt
+-SettingsA11yEditDictionaryV3.EditDictionary_image_redundant_alt
+-SettingsA11yEditDictionaryV3.EditDictionary_input_image_alt
+-SettingsA11yEditDictionaryV3.EditDictionary_label
+-SettingsA11yEditDictionaryV3.EditDictionary_label_title_only
+-SettingsA11yEditDictionaryV3.EditDictionary_layout_table
+-SettingsA11yEditDictionaryV3.EditDictionary_link_name
+-SettingsA11yEditDictionaryV3.EditDictionary_listitem
+-SettingsA11yEditDictionaryV3.EditDictionary_marquee
+-SettingsA11yEditDictionaryV3.EditDictionary_meta_refresh
+-SettingsA11yEditDictionaryV3.EditDictionary_meta_viewport
+-SettingsA11yEditDictionaryV3.EditDictionary_meta_viewport_large
+-SettingsA11yEditDictionaryV3.EditDictionary_object_alt
+-SettingsA11yEditDictionaryV3.EditDictionary_p_as_heading
+-SettingsA11yEditDictionaryV3.EditDictionary_radiogroup
+-SettingsA11yEditDictionaryV3.EditDictionary_scope_attr_valid
+-SettingsA11yEditDictionaryV3.EditDictionary_server_side_image_map
+-SettingsA11yEditDictionaryV3.EditDictionary_tabindex
+-SettingsA11yEditDictionaryV3.EditDictionary_table_duplicate_name
+-SettingsA11yEditDictionaryV3.EditDictionary_td_has_header
+-SettingsA11yEditDictionaryV3.EditDictionary_td_headers_attr
+-SettingsA11yEditDictionaryV3.EditDictionary_th_has_data_cells
+-SettingsA11yEditDictionaryV3.EditDictionary_valid_lang
+-SettingsA11yEditDictionaryV3.EditDictionary_video_caption
+-SettingsA11yEditDictionaryV3.EditDictionary_video_description
+-SettingsOverriddenDialogViewBrowserTest.InvokeUi_NtpOverriddenDialog_BackToDefault
+-SettingsOverriddenDialogViewBrowserTest.InvokeUi_NtpOverriddenDialog_Generic
+-SettingsOverriddenDialogViewBrowserTest.InvokeUi_SimpleDialogWithIcon
+-SharedClipboardBrowserTest.ContextMenu_MultipleDevices
+-SharedClipboardBrowserTest.ContextMenu_SingleDevice
 -SharedClipboardUIFeatureDisabledBrowserTest.ContextMenu_UIFeatureDisabled
--SigninInterceptFirstRunExperienceDialogBrowserTest.Accept*
--SigninInterceptFirstRunExperienceDialogBrowserTest.Forced*
+-SigninInterceptFirstRunExperienceDialogBrowserTest.AcceptSync
+-SigninInterceptFirstRunExperienceDialogBrowserTest.AcceptSync_ExtensionTheme
+-SigninInterceptFirstRunExperienceDialogBrowserTest.AcceptSync_SyncPassphrase
+-SigninInterceptFirstRunExperienceDialogBrowserTest.ForcedIntercept
+-SigninInterceptFirstRunExperienceDialogBrowserTest.ForcedIntercept_ProfileColorPolicy
 -SigninInterceptFirstRunExperienceDialogBrowserTest.ProfileColorPolicy
--SigninInterceptFirstRunExperienceDialogBrowserTest.Sync*
+-SigninInterceptFirstRunExperienceDialogBrowserTest.SyncDisabled
+-SigninInterceptFirstRunExperienceDialogBrowserTest.SyncSettings
 -SigninViewControllerDelegateViewsBrowserTest.InvokeUi_SyncConfirmation
--SigninViewControllerDelegateViewsBrowserTest.Resize*
+-SigninViewControllerDelegateViewsBrowserTest.ResizeAfterDisplay
+-SigninViewControllerDelegateViewsBrowserTest.ResizeBeforeDisplay
 -SpellcheckServiceBrowserTest.DeleteCorruptedBDICT
 -StartupMetricsTest.ReportsValues
 -SubAppsServiceImplBrowserTest.EndToEndAdd
 -SyncAwareCounterTest.AutofillCounter
 -SyncAwareCounterTest.HistoryCounter
 -SyncAwareCounterTest.PasswordCounter
--SystemNetworkContext/NetworkContextConfigurationDataPacBrowserTest.Data*
--SystemNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.Http*
--SystemNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.Max*
+-SystemNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/0
+-SystemNetworkContext/NetworkContextConfigurationDataPacBrowserTest.DataPac/1
+-SystemNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/0
+-SystemNetworkContext/NetworkContextConfigurationHttpPacBrowserTest.HttpPac/1
+-SystemNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/0
+-SystemNetworkContext/NetworkContextConfigurationManagedProxySettingsBrowserTest.MaxConnectionsPerProxy/1
 -SystemNetworkContext/NetworkContextConfigurationProxySettingsBrowserTest.MaxConnectionsPerProxy/0
 -TabCaptureApiTest.ActiveTabPermission
 -TabCaptureApiTest.ApiTests
@@ -495,70 +1201,114 @@
 -TabCaptureApiTest.TabIndicator
 -TabGroupEditorBubbleViewDialogBrowserTest.InvokeUi_default
 -TabHoverCardBubbleViewBrowserTest.InvokeUi_tab_hover_card
--TabHoverCardBubbleViewBrowserTest.Widget*
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnKeyPressAfterTabFocus
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnTabCloseButtonFocusAfterTabFocus
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnTabFocus
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnTabFocusFromKeyboardAccelerator
 -TabSearchButtonBrowserUITest.InvokeUi_default
 -TabStatsTrackerBrowserTest.TabStatsObserverBasics
 -TaskManagerBrowserTest.IdleWakeups
 -TaskManagerViewTest.RestoreBounds
--ThirdPartyMetricsObserverBrowserTest.OneThirdPartyFrame_OneTimingRecorded
 -ThirdPartyMetricsObserverBrowserTest.ThreeThirdPartyFrames_ThreeTimingsRecorded
 -TipMarqueeViewBrowserTest.TipStartsExpanded
--TranslateBubbleVisualTest.Invoke*
--TrustSafetySentimentServiceBrowserTest.Page*
+-TranslateBubbleVisualTest.InvokeUi_advanced
+-TranslateBubbleVisualTest.InvokeUi_error
+-TrustSafetySentimentServiceBrowserTest.PageInfoTriggersSurvey_Interaction
+-TrustSafetySentimentServiceBrowserTest.PageInfoTriggersSurvey_NoInteraction
 -UkmBrowserTest.ConsentAddedButNoSyncCheck
 -UkmBrowserTest.HistoryDeleteCheck
 -UkmBrowserTest.IncognitoPlusRegularCheck
 -UkmBrowserTest.LogProtoData
--UkmBrowserTest.Metrics*
--UkmBrowserTest.Multi*
+-UkmBrowserTest.MetricsConsentCheck
+-UkmBrowserTest.MetricsReportingCheck
+-UkmBrowserTest.MultiDisableExtensionsSyncCheck
+-UkmBrowserTest.MultiSyncSignoutCheck
 -UkmBrowserTest.NetworkProviderPopulatesSystemProfile
 -UkmBrowserTest.OpenNonSyncCheck
--UkmBrowserTest.Regular*
+-UkmBrowserTest.RegularPlusGuestCheck
+-UkmBrowserTest.RegularPlusIncognitoCheck
 -UkmBrowserTest.ServiceListenerInitFailedCheck
 -UkmBrowserTest.SingleDisableExtensionsSyncCheck
 -UkmBrowserTestWithSyncTransport.NotEnabledForSecondaryAccountSync
--UkmConsentParamBrowserTests/UkmConsentParamBrowserTest.Group*
+-UkmConsentParamBrowserTests/UkmConsentParamBrowserTest.GroupPolicyConsentCheck/0
+-UkmConsentParamBrowserTests/UkmConsentParamBrowserTest.GroupPolicyConsentCheck/1
 -UnloadTest.BrowserCloseTabWhenOtherTabHasListener
 -UpdateRecommendedDialogTest.InvokeUi_default
--UsbChooserBrowserTest.Invoke*
+-UsbChooserBrowserTest.InvokeUi_NoDevicesBubble
+-UsbChooserBrowserTest.InvokeUi_NoDevicesModal
+-UsbChooserBrowserTest.InvokeUi_WithDevicesBubble
+-UsbChooserBrowserTest.InvokeUi_WithDevicesModal
 -UsbInternalsTest.WebUIValueRenderTest
 -VariationsSafeModeEndToEndBrowserTest.ExtendedSafeModeEndToEnd
 -VideoPictureInPictureWindowControllerBrowserTest.ControlsVisibility
--ViewSourceTest.HttpPostInMainframe
 -VirtualCardSelectionDialogBrowserTest.InvokeUi_OneCard
 -WebAppBrowserTest.InScopePWAPopupsHaveCorrectSize
 -WebAppBrowserTest.OffScopePWAPopupsHaveCorrectSize
 -WebAppBrowserTest.PWASizeIsCorrectlyRestored
 -WebAppDeclarativeLinkCapturingBrowserTest.InAppScopeNavigationIgnored
 -WebAppFileHandlingBrowserTest_FeatureSwitchesOn.OsIntegrationIsAdded
--WebAppFrameToolbarBrowserTest_WindowControlsOverlay.DraggableRegionNotResetByFencedFrameNavigation
--WebAppFrameToolbarBrowserTest_WindowControlsOverlay.PopupFromWcoAppToItself
--WebAppIdentityUpdateConfirmationViewBrowserTest.CloseAppIdUpdateDialogOnUninstall
--WebAppIdentityUpdateConfirmationViewBrowserTest.InvokeUi_default
--WebAppIntegrationBrowserTest.Launch*
--WebAppIntegrationBrowserTest.Manifest*
--WebAppIntegrationBrowserTest.OpenInChrome
--WebAppIntegrationBrowserTest.Web*
--WebAppProtocolHandlerIntentPickerDialogInteractiveBrowserTest.InvokeUi_CloseDialog
 -WebAppUninstallDialogViewInteractiveBrowserTest.InvokeUi_ManualUninstall
--WebAudioBrowserTest.VerifyDynamicsCompressorFingerprint
--WebViewAccessibilityTest.FocusAccessibility
--WebViewDPITest.Shim*
--WebViewScrollBubbling/WebViewGuestScrollTest.Scroll*
--WebViewScrollBubbling/WebViewGuestScrollTest.TestGuestWheelScrollsBubble/0
--WebViewScrollBubbling/WebViewGuestScrollTouchTest.Test*
--WebViewSizeTest.AutoSize
--WebViewSizeTest.Shim*
--WebViewTest.AudibilityStatePropagates
--WebViewTest.AudioStateJavascriptAPI
--WebViewTest.DownloadCookieIsolation_CrossSession
--WebViewTest.Geolocation*
--WebViewTest.NoPrerenderer
--WebViewTest.Permissions*
--WebViewTest.ReloadAfterCrash
--WebViewTest.TouchpadPinchSyntheticWheelEvents
--WebViewWithZoomForDSFTest.Shim*
--WebauthnDialogBrowserTest.Invoke*
+-WebViewScrollBubbling/WebViewGuestScrollTest.ScrollLatchingPreservedInGuests/SiteIsolationForGuestsDisabled_ScrollDisabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.ScrollLatchingPreservedInGuests/SiteIsolationForGuestsDisabled_ScrollEnabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.ScrollLatchingPreservedInGuests/SiteIsolationForGuestsEnabled_ScrollDisabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.ScrollLatchingPreservedInGuests/SiteIsolationForGuestsEnabled_ScrollEnabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.TestGuestWheelScrollsBubble/SiteIsolationForGuestsDisabled_ScrollDisabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.TestGuestWheelScrollsBubble/SiteIsolationForGuestsEnabled_ScrollDisabled
+-WebViewScrollBubbling/WebViewGuestScrollTest.TestGuestWheelScrollsBubble/SiteIsolationForGuestsEnabled_ScrollEnabled
+-WebViewScrollBubbling/WebViewGuestScrollTouchTest.TestGuestGestureScrollsBubble/SiteIsolationForGuestsDisabled_ScrollDisabled
+-WebViewScrollBubbling/WebViewGuestScrollTouchTest.TestGuestGestureScrollsBubble/SiteIsolationForGuestsDisabled_ScrollEnabled
+-WebViewScrollBubbling/WebViewGuestScrollTouchTest.TestGuestGestureScrollsBubble/SiteIsolationForGuestsEnabled_ScrollEnabled
+-WebViewTests/WebViewAccessibilityTest.FocusAccessibility/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewAccessibilityTest.FocusAccessibility/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeBeforeNavigation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeBeforeNavigation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeHeight/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeHeight/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeRemoveAttributes/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewDPITest.Shim_TestAutosizeRemoveAttributes/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.AutoSize/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.AutoSize/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeAfterNavigation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeAfterNavigation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeBeforeNavigation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeBeforeNavigation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeHeight/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeRemoveAttributes/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestAutosizeRemoveAttributes/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestResizeEvents/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestResizeEvents/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestResizeWebviewResizesContent/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewSizeTest.Shim_TestResizeWebviewResizesContent/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewSizeTest.Shim_TestResizeWebviewWithDisplayNoneResizesContent/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.AudibilityStatePropagates/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.AudibilityStatePropagates/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.AudioStateJavascriptAPI/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.AudioStateJavascriptAPI/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.DownloadCookieIsolation_CrossSession/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.DownloadCookieIsolation_CrossSession/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessAllow/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessAllow/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessDeny/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessDeny/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessMultipleBridgeIdAllow/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasAccessMultipleBridgeIdAllow/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasNoAccessAllow/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.GeolocationAPIEmbedderHasNoAccessDeny/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.NoPrerenderer/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasAccessAllowGeolocation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasAccessAllowGeolocation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasAccessDenyGeolocation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasAccessDenyGeolocation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasNoAccessAllowGeolocation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasNoAccessAllowGeolocation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasNoAccessDenyGeolocation/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.PermissionsAPIEmbedderHasNoAccessDenyGeolocation/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.ReloadAfterCrash/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.ReloadAfterCrash/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewTest.TouchpadPinchSyntheticWheelEvents/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewTest.TouchpadPinchSyntheticWheelEvents/SiteIsolationForGuestsEnabled
+-WebauthnDialogBrowserTest.InvokeUi_Offer
+-WebauthnDialogBrowserTest.InvokeUi_Verify
 -WindowOpenApiTest.WindowOpenSized
 -WorkerDevToolsTest.PauseInSharedWorkerInitialization
 -ZoomBubbleDialogTest.InvokeUi_default
@@ -573,13 +1323,18 @@
 -PdfPluginContextMenuBrowserTest.FullPagePdfHasPageItems
 -PdfPluginContextMenuBrowserTest.IframedPdfHasNoPageItems
 -PdfPluginContextMenuBrowserTest.Rotate
--PdfToPwgRasterBrowserTest.Test*
+-PdfToPwgRasterBrowserTest.TestSuccessColor
+-PdfToPwgRasterBrowserTest.TestSuccessLongDuplex
+-PdfToPwgRasterBrowserTest.TestSuccessMono
 -PortalBrowserTest.PdfViewerLoadsInPortal
--PrintBackendPrintBrowserTestService.Start*
+-PrintBackendPrintBrowserTestService.StartPrinting
+-PrintBackendPrintBrowserTestService.StartPrintingAccessDenied
+-PrintBackendPrintBrowserTestService.StartPrintingRepeatedAccessDenied
 -PrintBrowserTest.LazyLoadedIframeFetched
 -PrintBrowserTest.LazyLoadedImagesFetched
 -PrintBrowserTest.LegacyLayoutEngineFallback
 -PrintBrowserTest.MultipagePrint
+-PrintBrowserTest.NoScrolling
 -PrintBrowserTest.NoScrollingVerticalRl
 -PrintBrowserTest.PDFPluginNotKeyboardFocusable
 -PrintBrowserTest.PrintNup
@@ -590,9 +1345,14 @@
 -PrintPreviewDestinationDialogTest.PrinterList
 -PrintPreviewDestinationDialogTest.UserAccounts
 -SitePerProcessPrintBrowserTest.BasicPrint
+-SitePerProcessPrintBrowserTest.MultipagePrint
 -SitePerProcessPrintBrowserTest.PrintNup
 -SitePerProcessPrintBrowserTest.SubframeUnavailableBeforePrint
 -SitePerProcessPrintBrowserTest.SubframeUnavailableDuringPrint
 -SitePerProcessPrintExtensionBrowserTest.PrintOptionPage
--WebViewPdfTest.ContextMenuNavigationInMimeHandlerView
--WebViewPdfTest.Shim_TestDialogInPdf
+-WebViewTests/WebViewPdfTest.ContextMenuNavigationInMimeHandlerView/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewPdfTest.ContextMenuNavigationInMimeHandlerView/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewPdfTest.NestedGuestContainerBounds/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewPdfTest.NestedGuestContainerBounds/SiteIsolationForGuestsEnabled
+-WebViewTests/WebViewPdfTest.Shim_TestDialogInPdf/SiteIsolationForGuestsDisabled
+-WebViewTests/WebViewPdfTest.Shim_TestDialogInPdf/SiteIsolationForGuestsEnabled
diff --git a/testing/buildbot/filters/fuchsia.content_browsertests.filter b/testing/buildbot/filters/fuchsia.content_browsertests.filter
index efba574..7db43d99 100644
--- a/testing/buildbot/filters/fuchsia.content_browsertests.filter
+++ b/testing/buildbot/filters/fuchsia.content_browsertests.filter
@@ -14,16 +14,6 @@
 -DohHttpsProtocolUpgradeBrowserTest.HttpsProtocolUpgrade
 -DohHttpsProtocolUpgradeBrowserTest.NoProtocolUpgrade
 -MojoSandboxTest.NotIsProcessSandboxed
--NetworkServiceDataMigrationBrowserTest.LegacyDataDir
--NetworkServiceDataMigrationBrowserTest.MigrateThenNoMigrate
--NetworkServiceDataMigrationBrowserTest.MigratedPreviouslyAndMigrateAgain
--NetworkServiceDataMigrationBrowserTest.NewDataDirWithMigrationTest
--NetworkServiceDataMigrationBrowserTest.NewDataDirWithNoMigrationTest
--OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/0
--OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/1
--OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/2
--OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/3
--OutOfProcess/NetworkServiceDataMigrationBrowserTestWithFailures.MigrateDataTest/4
 -PrerenderBrowserTest.AbandonIfRendererProcessCrashes
 -SitePerProcessDelegatedInkBrowserTest.MetadataAndPointGoThroughOOPIF
 -SnapshotBrowserTest.AsyncMultiWindowTest
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index ce07072..5857405 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -2728,6 +2728,7 @@
       'webgpu_cts': {
         'args': [
           '--extra-browser-args=--force_high_performance_gpu',
+          '--retry-limit=3',
         ],
         'linux_args': [
           '--extra-browser-args=--enable-features=UseSkiaRenderer,Vulkan',
@@ -2750,6 +2751,7 @@
           '--extra-browser-args=--force_high_performance_gpu',
           '--is-backend-validation',
           '--override-timeout=30',
+          '--retry-limit=3',
         ],
         'linux_args': [
           '--extra-browser-args=--enable-features=UseSkiaRenderer,Vulkan',
@@ -2773,6 +2775,7 @@
           '--extra-browser-args=--force_high_performance_gpu',
           '--is-backend-validation',
           '--override-timeout=30',
+          '--retry-limit=3',
         ],
         'linux_args': [
           '--extra-browser-args=--enable-features=UseSkiaRenderer,Vulkan',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 9fc9a0af..77077f2 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -4986,6 +4986,50 @@
             ]
         }
     ],
+    "PageEntitiesModelBypassFilters": [
+        {
+            "platforms": [
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled_20220330",
+                    "enable_features": [
+                        "PageEntitiesModelBypassFilters"
+                    ]
+                }
+            ]
+        },
+        {
+            "platforms": [
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "PageContentAnnotationsWithVisibility_JourneysWithOmniboxAction_20211202",
+                    "params": {
+                        "annotate_title_instead_of_page_content": "true",
+                        "bag_of_words_entities": "false",
+                        "content_clustering_enabled": "false",
+                        "extract_related_searches": "true",
+                        "min_page_topics_model_version_for_visibility": "2110051800",
+                        "models_to_execute_v2": "OPTIMIZATION_TARGET_PAGE_TOPICS:en",
+                        "write_to_history_service": "true"
+                    },
+                    "enable_features": [
+                        "PageContentAnnotations",
+                        "PageEntitiesPageContentAnnotations"
+                    ]
+                }
+            ]
+        }
+    ],
     "PageInfoAboutThisSite": [
         {
             "platforms": [
diff --git a/third_party/blink/common/web_preferences/web_preferences.cc b/third_party/blink/common/web_preferences/web_preferences.cc
index effc186..a422f507 100644
--- a/third_party/blink/common/web_preferences/web_preferences.cc
+++ b/third_party/blink/common/web_preferences/web_preferences.cc
@@ -69,9 +69,6 @@
       webgl1_enabled(true),
       webgl2_enabled(true),
       pepper_3d_enabled(false),
-      flash_3d_enabled(true),
-      flash_stage3d_enabled(false),
-      flash_stage3d_baseline_enabled(false),
       privileged_webgl_extensions_enabled(false),
       webgl_errors_to_console_enabled(true),
       hide_scrollbars(false),
diff --git a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc
index a62792e..e37be09 100644
--- a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc
+++ b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc
@@ -86,9 +86,6 @@
   out->webgl1_enabled = data.webgl1_enabled();
   out->webgl2_enabled = data.webgl2_enabled();
   out->pepper_3d_enabled = data.pepper_3d_enabled();
-  out->flash_3d_enabled = data.flash_3d_enabled();
-  out->flash_stage3d_enabled = data.flash_stage3d_enabled();
-  out->flash_stage3d_baseline_enabled = data.flash_stage3d_baseline_enabled();
   out->privileged_webgl_extensions_enabled =
       data.privileged_webgl_extensions_enabled();
   out->webgl_errors_to_console_enabled = data.webgl_errors_to_console_enabled();
diff --git a/third_party/blink/public/common/interest_group/interest_group.h b/third_party/blink/public/common/interest_group/interest_group.h
index a87883a..049470b 100644
--- a/third_party/blink/public/common/interest_group/interest_group.h
+++ b/third_party/blink/public/common/interest_group/interest_group.h
@@ -90,6 +90,32 @@
   absl::optional<std::vector<std::string>> trusted_bidding_signals_keys;
   absl::optional<std::string> user_bidding_signals;
   absl::optional<std::vector<InterestGroup::Ad>> ads, ad_components;
+
+  static_assert(__LINE__ == 94, R"(
+If modifying InterestGroup fields, make sure to also modify:
+
+* IsValid(), EstimateSize(), and IsEqualForTesting() in this class
+* auction_ad_interest_group.idl
+* navigator_auction.cc
+* interest_group_types.mojom
+* validate_blink_interest_group.cc
+* validate_blink_interest_group_test.cc
+* interest_group_mojom_traits[.h/.cc/.test].
+* bidder_worklet.cc (to pass the InterestGroup to generateBid()).
+
+In interest_group_storage.cc, add the new field and any respective indices,
+and also add a new database version and migration, and migration test.
+
+If the new field is to be updatable via dailyUpdateUrl, also update *all* of
+these:
+
+* InterestGroupStorage::DoStoreInterestGroupUpdate()
+* ParseUpdateJson in interest_group_update_manager.cc
+* Update AdAuctionServiceImplTest.UpdateAllUpdatableFields
+
+See crrev.com/c/3517534 for an example (adding the priority field), and also
+remember to update bidder_worklet.cc too.
+)");
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h
index 27d0bcc0..d682f3b 100644
--- a/third_party/blink/public/common/web_preferences/web_preferences.h
+++ b/third_party/blink/public/common/web_preferences/web_preferences.h
@@ -88,9 +88,6 @@
   bool webgl1_enabled;
   bool webgl2_enabled;
   bool pepper_3d_enabled;
-  bool flash_3d_enabled;
-  bool flash_stage3d_enabled;
-  bool flash_stage3d_baseline_enabled;
   bool privileged_webgl_extensions_enabled;
   bool webgl_errors_to_console_enabled;
   bool hide_scrollbars;
diff --git a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
index 0f5ed102..d09fed37 100644
--- a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
+++ b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
@@ -186,19 +186,6 @@
     return r.pepper_3d_enabled;
   }
 
-  static bool flash_3d_enabled(const blink::web_pref::WebPreferences& r) {
-    return r.flash_3d_enabled;
-  }
-
-  static bool flash_stage3d_enabled(const blink::web_pref::WebPreferences& r) {
-    return r.flash_stage3d_enabled;
-  }
-
-  static bool flash_stage3d_baseline_enabled(
-      const blink::web_pref::WebPreferences& r) {
-    return r.flash_stage3d_baseline_enabled;
-  }
-
   static bool privileged_webgl_extensions_enabled(
       const blink::web_pref::WebPreferences& r) {
     return r.privileged_webgl_extensions_enabled;
diff --git a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
index 4feef40..90b34813 100644
--- a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
+++ b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom
@@ -144,9 +144,6 @@
   bool webgl1_enabled;
   bool webgl2_enabled;
   bool pepper_3d_enabled;
-  bool flash_3d_enabled;
-  bool flash_stage3d_enabled;
-  bool flash_stage3d_baseline_enabled;
   bool privileged_webgl_extensions_enabled;
   bool webgl_errors_to_console_enabled;
   bool hide_scrollbars;
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index 4520eb7..514ed887 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -91,6 +91,7 @@
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_filter_dictionary.idl",
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.idl",
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.idl",
+          "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.idl",
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.idl",
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.idl",
           "//third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.idl",
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
index ca94084..afdf0e5 100755
--- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py
+++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -57,6 +57,10 @@
                 ][0]
                 assert subprop['supports_incremental_style'], \
                     '%s must be incrementally applicable when its shorthand %s is' % (subprop_name, name)
+    assert not prop['valid_for_canvas_formatted_text'] or prop['is_longhand'], \
+        'Only longhands can be valid_for_canvas_formatted_text [%s]' % name
+    assert not prop['valid_for_canvas_formatted_text_run'] or prop['is_longhand'], \
+        'Only longhands can be valid_for_canvas_formatted_text_run [%s]' % name
 
 
 def validate_alias(alias):
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl b/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
index 982e6257..15033a9 100644
--- a/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
+++ b/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
@@ -47,6 +47,8 @@
   (property.valid_for_first_line and 'kValidForFirstLine' or ''),
   (property.valid_for_cue and 'kValidForCue' or ''),
   (property.valid_for_marker and 'kValidForMarker' or ''),
+  (property.valid_for_canvas_formatted_text and 'kValidForCanvasFormattedText' or ''),
+  (property.valid_for_canvas_formatted_text_run and 'kValidForCanvasFormattedTextRun' or ''),
   (is_surrogate and 'kSurrogate' or ''),
   (property.font and 'kAffectsFont' or ''),
   (property.is_background and 'kBackground' or ''),
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 05604b8..5709944 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -582,7 +582,27 @@
     idempotent: {
       default: true,
       valid_type: "bool",
-    }
+    },
+
+    // - valid_for_canvas_formatted_text: true
+    //
+    // Whether the property can be used to style the top-level container
+    // (similar to display:block, but supporting fewer properties), in the
+    // experimental API to bring multiline text rendering to HTML canvas.
+    // https://github.com/WICG/canvas-formatted-text/
+    valid_for_canvas_formatted_text: {
+      default: false,
+      valid_type: "bool",
+    },
+
+    // - valid_for_canvas_formatted_text_run: true
+    //
+    // Whether the property can be used to style individual text runs, in the
+    // experimental API to bring multiline text rendering to HTML canvas.
+    valid_for_canvas_formatted_text_run: {
+      default: false,
+      valid_type: "bool",
+    },
   },
 
   // Members in the data objects should appear in the same order as in the
@@ -817,6 +837,8 @@
       valid_for_cue: true,
       valid_for_marker: true,
       valid_for_highlight: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
       is_highlight_colors: true,
     },
     {
@@ -833,6 +855,8 @@
       style_builder_custom_functions: ["value"],
       priority: "High",
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-family",
@@ -850,6 +874,8 @@
       valid_for_cue: true,
       valid_for_marker: true,
       tree_scoped_value: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-kerning",
@@ -864,6 +890,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-optical-sizing",
@@ -910,6 +938,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-size-adjust",
@@ -946,6 +976,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-style",
@@ -962,6 +994,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-variant-ligatures",
@@ -982,6 +1016,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-variant-caps",
@@ -999,6 +1035,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-variant-east-asian",
@@ -1016,6 +1054,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-variant-numeric",
@@ -1034,6 +1074,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-weight",
@@ -1051,6 +1093,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-synthesis-weight",
@@ -1112,6 +1156,8 @@
       valid_for_first_line: true,
       valid_for_marker: true,
       computable: false,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "font-variation-settings",
@@ -1129,6 +1175,8 @@
       valid_for_cue: true,
       valid_for_marker: true,
       computable: false,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "-webkit-font-smoothing",
@@ -1187,6 +1235,7 @@
       style_builder_custom_functions: ["initial", "inherit", "value"],
       priority: "High",
       computable: false,
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "-webkit-text-orientation",
@@ -1209,6 +1258,7 @@
       type_name: "WritingMode",
       style_builder_custom_functions: ["initial", "inherit", "value"],
       priority: "High",
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "-webkit-writing-mode",
@@ -2681,6 +2731,7 @@
         resolver: "vertical",
       },
       supports_incremental_style: true,
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "hyphens",
@@ -4281,6 +4332,7 @@
       default_value: "start",
       getter: "GetTextAlign",
       style_builder_custom_functions: ["value"],
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "text-align-last",
@@ -4314,6 +4366,7 @@
       name_for_methods: "TextCombine",
       valid_for_marker: true,
       computable: false,
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "text-decoration-color",
@@ -4334,6 +4387,8 @@
       valid_for_cue: true,
       valid_for_highlight: true,
       supports_incremental_style: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-decoration-line",
@@ -4349,6 +4404,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_highlight: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-decoration-skip-ink",
@@ -4364,6 +4421,8 @@
       valid_for_cue: true,
       valid_for_marker: true,
       valid_for_highlight: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-decoration-style",
@@ -4377,6 +4436,8 @@
       valid_for_first_line: true,
       valid_for_cue: true,
       valid_for_highlight: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-decoration-thickness",
@@ -4395,6 +4456,8 @@
       valid_for_first_line: true,
       valid_for_highlight: true,
       computable: false,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-indent",
@@ -4422,6 +4485,7 @@
       typedom_types: ["Keyword"],
       valid_for_first_letter: true,
       valid_for_first_line: true,
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "text-overflow",
@@ -4431,6 +4495,7 @@
       keywords: ["clip", "ellipsis"],
       typedom_types: ["Keyword"],
       default_value: "clip",
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "text-shadow",
@@ -4451,6 +4516,8 @@
       valid_for_cue: true,
       valid_for_marker: true,
       valid_for_highlight: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-size-adjust",
@@ -4479,6 +4546,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-underline-offset",
@@ -4495,6 +4564,8 @@
       valid_for_first_letter: true,
       valid_for_first_line: true,
       computable: false,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "text-underline-position",
@@ -4511,6 +4582,8 @@
       typedom_types: ["Keyword"],
       valid_for_first_letter: true,
       valid_for_first_line: true,
+      valid_for_canvas_formatted_text: true,
+      valid_for_canvas_formatted_text_run: true,
     },
     {
       name: "top",
@@ -4979,6 +5052,7 @@
       keywords: ["auto", "loose", "normal", "strict", "after-white-space", "anywhere"],
       default_value: "auto",
       type_name: "LineBreak",
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "line-break",
@@ -4988,6 +5062,7 @@
       keywords: ["auto", "loose", "normal", "strict", "anywhere"],
       typedom_types: ["Keyword"],
       valid_for_marker: true,
+      valid_for_canvas_formatted_text: true,
     },
     // An Apple extension.
     {
@@ -5370,6 +5445,7 @@
         resolver: "horizontal",
       },
       supports_incremental_style: true,
+      valid_for_canvas_formatted_text: true,
     },
     {
       name: "will-change",
diff --git a/third_party/blink/renderer/core/css/properties/css_property.h b/third_party/blink/renderer/core/css/properties/css_property.h
index 660bd3e..656266e4 100644
--- a/third_party/blink/renderer/core/css/properties/css_property.h
+++ b/third_party/blink/renderer/core/css/properties/css_property.h
@@ -64,6 +64,12 @@
   bool IsValidForCue() const { return flags_ & kValidForCue; }
   bool IsValidForMarker() const { return flags_ & kValidForMarker; }
   bool IsValidForHighlight() const { return flags_ & kValidForHighlight; }
+  bool IsValidForCanvasFormattedText() const {
+    return flags_ & kValidForCanvasFormattedText;
+  }
+  bool IsValidForCanvasFormattedTextRun() const {
+    return flags_ & kValidForCanvasFormattedTextRun;
+  }
   bool IsSurrogate() const { return flags_ & kSurrogate; }
   bool AffectsFont() const { return flags_ & kAffectsFont; }
   bool IsBackground() const { return flags_ & kBackground; }
@@ -170,6 +176,11 @@
     kSupportsIncrementalStyle = 1 << 23,
     // See idempotent in css_properties.json5.
     kIdempotent = 1 << 24,
+    // Set if the css property can apply to the experiemental canvas
+    // formatted text API to render multiline text in canvas.
+    // https://github.com/WICG/canvas-formatted-text
+    kValidForCanvasFormattedText = 1 << 25,
+    kValidForCanvasFormattedTextRun = 1 << 26,
   };
 
   constexpr CSSProperty(CSSPropertyID property_id,
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 1d9d8eb6..97aeb07 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -2070,6 +2070,7 @@
   visitor->Trace(selector_filter_);
   visitor->Trace(document_);
   visitor->Trace(tracker_);
+  visitor->Trace(canvas_formatted_text_element_);
 }
 
 bool StyleResolver::IsForcedColorsModeEnabled() const {
@@ -2357,4 +2358,68 @@
 #undef PROPAGATE_VALUE
 #undef PROPAGATE_FROM
 
+scoped_refptr<const ComputedStyle> StyleResolver::StyleForCanvasFormattedText(
+    bool is_text_run,
+    const FontDescription& default_font,
+    const CSSPropertyValueSet* css_property_value_set) {
+  return StyleForCanvasFormattedText(is_text_run, &default_font,
+                                     /*parent_style*/ nullptr,
+                                     css_property_value_set);
+}
+
+scoped_refptr<const ComputedStyle> StyleResolver::StyleForCanvasFormattedText(
+    bool is_text_run,
+    const ComputedStyle& parent_style,
+    const CSSPropertyValueSet* css_property_value_set) {
+  return StyleForCanvasFormattedText(is_text_run, /*default_font*/ nullptr,
+                                     &parent_style, css_property_value_set);
+}
+
+scoped_refptr<const ComputedStyle> StyleResolver::StyleForCanvasFormattedText(
+    bool is_text_run,
+    const FontDescription* default_font,
+    const ComputedStyle* parent_style,
+    const CSSPropertyValueSet* css_property_value_set) {
+  DCHECK_NE(!!parent_style, !!default_font)
+      << "only one of `default_font` or `parent_style` should be specified";
+
+  // Set up our initial style properties based on either the `default_font` or
+  // `parent_style`.
+  scoped_refptr<ComputedStyle> style = CreateComputedStyle();
+  if (default_font)
+    style->SetFontDescription(*default_font);
+  else  // parent_style
+    style->InheritFrom(*parent_style);
+  style->SetDisplay(is_text_run ? EDisplay::kInline : EDisplay::kBlock);
+
+  // Apply any properties in the `css_property_value_set`.
+  if (css_property_value_set) {
+    // Use a dummy/disconnected element when resolving the styles so that we
+    // don't inherit anything from existing elements.
+    StyleResolverState state(
+        GetDocument(), EnsureElementForCanvasFormattedText(),
+        StyleRecalcContext{},
+        StyleRequest{parent_style ? parent_style : &InitialStyle()});
+    state.SetStyle(style);
+
+    // Use StyleCascade to apply inheritance in the correct order.
+    STACK_UNINITIALIZED StyleCascade cascade(state);
+    cascade.MutableMatchResult().AddMatchedProperties(
+        css_property_value_set,
+        AddMatchedPropertiesOptions::Builder().SetIsInlineStyle(true).Build());
+    cascade.Apply();
+
+    StyleAdjuster::AdjustComputedStyle(state, nullptr);
+  }
+
+  return style;
+}
+
+Element& StyleResolver::EnsureElementForCanvasFormattedText() {
+  if (!canvas_formatted_text_element_)
+    canvas_formatted_text_element_ =
+        MakeGarbageCollected<Element>(html_names::kSpanTag, &GetDocument());
+  return *canvas_formatted_text_element_;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.h b/third_party/blink/renderer/core/css/resolver/style_resolver.h
index 8a89bab..8e0670c 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.h
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.h
@@ -96,6 +96,14 @@
       const AtomicString& page_name);
   scoped_refptr<const ComputedStyle> StyleForText(Text*);
   scoped_refptr<ComputedStyle> StyleForViewport();
+  scoped_refptr<const ComputedStyle> StyleForCanvasFormattedText(
+      bool is_text_run,
+      const ComputedStyle& parent_style,
+      const CSSPropertyValueSet* css_property_value_set);
+  scoped_refptr<const ComputedStyle> StyleForCanvasFormattedText(
+      bool is_text_run,
+      const FontDescription& default_font,
+      const CSSPropertyValueSet* css_property_value_set);
 
   // Propagate computed values from the root or body element to the viewport
   // when specified to do so.
@@ -306,12 +314,23 @@
 
   Member<StyleRuleUsageTracker> tracker_;
 
+  // This is a dummy/disconnected element that we use for CanvasFormattedText
+  // style computations; see `EnsureElementForCanvasFormattedText`.
+  Member<Element> canvas_formatted_text_element_;
+
   bool print_media_type_ = false;
   bool was_viewport_resized_ = false;
 
   FRIEND_TEST_ALL_PREFIXES(ComputedStyleTest, ApplyInternalLightDarkColor);
   friend class StyleResolverTest;
   FRIEND_TEST_ALL_PREFIXES(StyleResolverTest, TreeScopedReferences);
+
+  Element& EnsureElementForCanvasFormattedText();
+  scoped_refptr<const ComputedStyle> StyleForCanvasFormattedText(
+      bool is_text_run,
+      const FontDescription* default_font,
+      const ComputedStyle* parent_style,
+      const CSSPropertyValueSet* css_property_value_set);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/style_property_serializer.h b/third_party/blink/renderer/core/css/style_property_serializer.h
index f494e6e..36c6f67 100644
--- a/third_party/blink/renderer/core/css/style_property_serializer.h
+++ b/third_party/blink/renderer/core/css/style_property_serializer.h
@@ -34,7 +34,7 @@
 class CSSPropertyValueSet;
 class StylePropertyShorthand;
 
-class StylePropertySerializer {
+class CORE_EXPORT StylePropertySerializer {
   STACK_ALLOCATED();
 
  public:
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_utilities.cc b/third_party/blink/renderer/core/display_lock/display_lock_utilities.cc
index 028f6d7..98ebbe0 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_utilities.cc
+++ b/third_party/blink/renderer/core/display_lock/display_lock_utilities.cc
@@ -817,7 +817,7 @@
   // elements to open and then open them all.
   HeapVector<Member<HTMLElement>> elements_to_reveal;
 
-  for (Node& parent : FlatTreeTraversal::AncestorsOf(node)) {
+  for (Node& parent : FlatTreeTraversal::InclusiveAncestorsOf(node)) {
     if (HTMLElement* element = DynamicTo<HTMLElement>(parent)) {
       if (EqualIgnoringASCIICase(
               element->FastGetAttribute(html_names::kHiddenAttr),
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc
index 6ac6dcb..93b32a8 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc
@@ -350,7 +350,7 @@
     DCHECK(enclosing_block);
     frame_->GetDocument()->EnqueueAnimationFrameTask(
         WTF::Bind(&TextFragmentAnchor::FireBeforeMatchEvent,
-                  WrapPersistent(this), WrapWeakPersistent(enclosing_block)));
+                  WrapPersistent(this), WrapPersistent(&range)));
     beforematch_state_ = kEventQueued;
     return;
   }
@@ -360,53 +360,15 @@
   // the beforematch event here and write tests for it once we decide on a
   // behavior here: https://github.com/WICG/display-locking/issues/150
 
-  bool needs_style_and_layout = false;
-
   // Apply :target to the first match
   if (!did_find_match_) {
     ApplyTargetToCommonAncestor(range.ToEphemeralRange());
-    needs_style_and_layout = true;
-  }
-
-  // TODO(crbug.com/1252872): Only |first_node| is considered for the below
-  // ancestor expanding code, but we should be considering the entire |range|
-  // for ancestor unlocking as well.
-  Node& first_node = *range.ToEphemeralRange().Nodes().begin();
-
-  // Activate any find-in-page activatable display-locks in the ancestor
-  // chain.
-  if (DisplayLockUtilities::ActivateFindInPageMatchRangeIfNeeded(
-          range.ToEphemeralRange())) {
-    // Since activating a lock dirties layout, we need to make sure it's clean
-    // before computing the text rect below.
-    needs_style_and_layout = true;
-    // TODO(crbug.com/1041942): It is possible and likely that activation
-    // signal causes script to resize something on the page. This code here
-    // should really yield until the next frame to give script an opportunity
-    // to run.
-  }
-
-  // If the active match is hidden inside a <details> element, then we should
-  // expand it so we can scroll to it.
-  if (RuntimeEnabledFeatures::AutoExpandDetailsElementEnabled() &&
-      HTMLDetailsElement::ExpandDetailsAncestors(first_node)) {
-    needs_style_and_layout = true;
-    UseCounter::Count(first_node.GetDocument(),
-                      WebFeature::kAutoExpandedDetailsForScrollToTextFragment);
-  }
-
-  // If the active match is hidden inside a hidden=until-found element, then we
-  // should reveal it so we can scroll to it.
-  needs_style_and_layout |=
-      RuntimeEnabledFeatures::BeforeMatchEventEnabled(
-          first_node.GetExecutionContext()) &&
-      DisplayLockUtilities::RevealHiddenUntilFoundAncestors(first_node);
-
-  if (needs_style_and_layout) {
     frame_->GetDocument()->UpdateStyleAndLayout(
         DocumentUpdateReason::kFindInPage);
   }
 
+  Node& first_node = *range.ToEphemeralRange().Nodes().begin();
+
   metrics_->DidFindMatch(match_metrics);
   did_find_match_ = true;
 
@@ -522,12 +484,31 @@
   }
 }
 
-void TextFragmentAnchor::FireBeforeMatchEvent(Element* element) {
-  if (RuntimeEnabledFeatures::BeforeMatchEventEnabled(
-          frame_->GetDocument()->GetExecutionContext())) {
-    element->DispatchEvent(
-        *Event::CreateBubble(event_type_names::kBeforematch));
+void TextFragmentAnchor::FireBeforeMatchEvent(const RangeInFlatTree* range) {
+  // TODO(crbug.com/1252872): Only |first_node| is considered for the below
+  // ancestor expanding code, but we should be considering the entire range
+  // of selected text for ancestor unlocking as well.
+  Node& first_node = *range->ToEphemeralRange().Nodes().begin();
+
+  // Activate content-visibility:auto subtrees if needed.
+  DisplayLockUtilities::ActivateFindInPageMatchRangeIfNeeded(
+      range->ToEphemeralRange());
+
+  // If the active match is hidden inside a <details> element, then we should
+  // expand it so we can scroll to it.
+  if (RuntimeEnabledFeatures::AutoExpandDetailsElementEnabled() &&
+      HTMLDetailsElement::ExpandDetailsAncestors(first_node)) {
+    UseCounter::Count(first_node.GetDocument(),
+                      WebFeature::kAutoExpandedDetailsForScrollToTextFragment);
   }
+
+  // If the active match is hidden inside a hidden=until-found element, then we
+  // should reveal it so we can scroll to it.
+  if (RuntimeEnabledFeatures::BeforeMatchEventEnabled(
+          first_node.GetExecutionContext())) {
+    DisplayLockUtilities::RevealHiddenUntilFoundAncestors(first_node);
+  }
+
   beforematch_state_ = kFiredEvent;
 }
 
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h
index bfbd732..8c6dd2c 100644
--- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h
+++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h
@@ -91,7 +91,7 @@
 
   void ApplyTargetToCommonAncestor(const EphemeralRangeInFlatTree& range);
 
-  void FireBeforeMatchEvent(Element* element);
+  void FireBeforeMatchEvent(const RangeInFlatTree* range);
 
   bool HasSearchEngineSource();
 
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc
index 2964a26..1af8a4e 100644
--- a/third_party/blink/renderer/core/frame/history.cc
+++ b/third_party/blink/renderer/core/frame/history.cc
@@ -310,10 +310,11 @@
   }
 
   if (auto* navigation_api = NavigationApi::navigation(*DomWindow())) {
-    if (navigation_api->DispatchNavigateEvent(
-            full_url, nullptr, NavigateEventType::kHistoryApi, type,
-            UserNavigationInvolvement::kNone, data.get(),
-            nullptr) != NavigationApi::DispatchResult::kContinue) {
+    NavigationApi::DispatchParams params(full_url,
+                                         NavigateEventType::kHistoryApi, type);
+    params.state_object = data.get();
+    if (navigation_api->DispatchNavigateEvent(params) !=
+        NavigationApi::DispatchResult::kContinue) {
       return;
     }
   }
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
index 3160ae98..f550a04 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -464,14 +464,14 @@
     }
 
     if (auto* navigation_api = NavigationApi::navigation(*window)) {
-      UserNavigationInvolvement involvement =
-          event.isTrusted() ? UserNavigationInvolvement::kActivation
-                            : UserNavigationInvolvement::kNone;
-      if (navigation_api->DispatchNavigateEvent(
-              completed_url, nullptr, NavigateEventType::kCrossDocument,
-              WebFrameLoadType::kStandard, involvement, nullptr, nullptr, false,
-              true,
-              download_attr) != NavigationApi::DispatchResult::kContinue) {
+      NavigationApi::DispatchParams params(completed_url,
+                                           NavigateEventType::kCrossDocument,
+                                           WebFrameLoadType::kStandard);
+      if (event.isTrusted())
+        params.involvement = UserNavigationInvolvement::kActivation;
+      params.download_filename = download_attr;
+      if (navigation_api->DispatchNavigateEvent(params) !=
+          NavigationApi::DispatchResult::kContinue) {
         return;
       }
       // A download will never notify blink about its completion. Tell the
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc
index 7093dbc..8955a54a 100644
--- a/third_party/blink/renderer/core/layout/layout_text.cc
+++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -212,7 +212,7 @@
   return text;
 }
 
-LayoutText* LayoutText::CreateAnonymous(
+LayoutText* LayoutText::CreateAnonymousForFormattedText(
     Document& doc,
     scoped_refptr<const ComputedStyle> style,
     scoped_refptr<StringImpl> text,
@@ -220,7 +220,7 @@
   LayoutText* layout_text =
       LayoutObjectFactory::CreateText(nullptr, std::move(text), legacy);
   layout_text->SetDocumentForAnonymous(&doc);
-  layout_text->SetStyle(std::move(style));
+  layout_text->SetStyleInternal(std::move(style));
   return layout_text;
 }
 
diff --git a/third_party/blink/renderer/core/layout/layout_text.h b/third_party/blink/renderer/core/layout/layout_text.h
index 7a3fca2..0f4ee0a 100644
--- a/third_party/blink/renderer/core/layout/layout_text.h
+++ b/third_party/blink/renderer/core/layout/layout_text.h
@@ -90,10 +90,11 @@
                                           scoped_refptr<const ComputedStyle>,
                                           LegacyLayout);
 
-  static LayoutText* CreateAnonymous(Document&,
-                                     scoped_refptr<const ComputedStyle>,
-                                     scoped_refptr<StringImpl>,
-                                     LegacyLayout legacy);
+  static LayoutText* CreateAnonymousForFormattedText(
+      Document&,
+      scoped_refptr<const ComputedStyle>,
+      scoped_refptr<StringImpl>,
+      LegacyLayout legacy);
 
   const char* GetName() const override {
     NOT_DESTROYED();
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
index 3a32313..86852fd 100644
--- a/third_party/blink/renderer/core/loader/document_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -1339,17 +1339,19 @@
   mojom::blink::SameDocumentNavigationType same_document_navigation_type =
       mojom::blink::SameDocumentNavigationType::kFragment;
   if (auto* navigation_api = NavigationApi::navigation(*frame_->DomWindow())) {
-    UserNavigationInvolvement involvement = UserNavigationInvolvement::kNone;
+    NavigationApi::DispatchParams params(url, NavigateEventType::kFragment,
+                                         frame_load_type);
     if (is_browser_initiated) {
-      involvement = UserNavigationInvolvement::kBrowserUI;
+      params.involvement = UserNavigationInvolvement::kBrowserUI;
     } else if (triggering_event_info ==
                mojom::blink::TriggeringEventInfo::kFromTrustedEvent) {
-      involvement = UserNavigationInvolvement::kActivation;
+      params.involvement = UserNavigationInvolvement::kActivation;
     }
-    auto dispatch_result = navigation_api->DispatchNavigateEvent(
-        url, nullptr, NavigateEventType::kFragment, frame_load_type,
-        involvement, nullptr, history_item, is_browser_initiated,
-        is_synchronously_committed);
+    params.destination_item = history_item;
+    params.is_browser_initiated = is_browser_initiated;
+    params.is_synchronously_committed_same_document =
+        is_synchronously_committed;
+    auto dispatch_result = navigation_api->DispatchNavigateEvent(params);
     if (dispatch_result == NavigationApi::DispatchResult::kAbort)
       return mojom::blink::CommitResult::Aborted;
     if (dispatch_result == NavigationApi::DispatchResult::kTransitionWhile)
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 13f0e20..1e7bb6c 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -775,14 +775,15 @@
     if (request.GetNavigationPolicy() == kNavigationPolicyCurrentTab &&
         (!origin_window || origin_window->GetSecurityOrigin()->CanAccess(
                                frame_->DomWindow()->GetSecurityOrigin()))) {
-      if (navigation_api->DispatchNavigateEvent(
-              url, request.Form(), NavigateEventType::kCrossDocument,
-              frame_load_type,
-              request.GetTriggeringEventInfo() ==
-                      mojom::blink::TriggeringEventInfo::kFromTrustedEvent
-                  ? UserNavigationInvolvement::kActivation
-                  : UserNavigationInvolvement::kNone,
-              nullptr, nullptr) != NavigationApi::DispatchResult::kContinue) {
+      NavigationApi::DispatchParams params(
+          url, NavigateEventType::kCrossDocument, frame_load_type);
+      params.form = request.Form();
+      if (request.GetTriggeringEventInfo() ==
+          mojom::blink::TriggeringEventInfo::kFromTrustedEvent) {
+        params.involvement = UserNavigationInvolvement::kActivation;
+      }
+      if (navigation_api->DispatchNavigateEvent(params) !=
+          NavigationApi::DispatchResult::kContinue) {
         return;
       }
     }
@@ -1018,13 +1019,13 @@
 
   if (auto* navigation_api = NavigationApi::navigation(*frame_->DomWindow())) {
     if (navigation_params->frame_load_type == WebFrameLoadType::kBackForward) {
-      auto result = navigation_api->DispatchNavigateEvent(
-          navigation_params->url, nullptr, NavigateEventType::kCrossDocument,
-          WebFrameLoadType::kBackForward,
-          navigation_params->is_browser_initiated
-              ? UserNavigationInvolvement::kBrowserUI
-              : UserNavigationInvolvement::kNone,
-          nullptr, navigation_params->history_item);
+      NavigationApi::DispatchParams params(navigation_params->url,
+                                           NavigateEventType::kCrossDocument,
+                                           WebFrameLoadType::kBackForward);
+      if (navigation_params->is_browser_initiated)
+        params.involvement = UserNavigationInvolvement::kBrowserUI;
+      params.destination_item = navigation_params->history_item;
+      auto result = navigation_api->DispatchNavigateEvent(params);
       DCHECK_EQ(result, NavigationApi::DispatchResult::kContinue);
       if (!document_loader_)
         return;
diff --git a/third_party/blink/renderer/core/navigation_api/navigation_api.cc b/third_party/blink/renderer/core/navigation_api/navigation_api.cc
index 47f8ee2..9e8a598 100644
--- a/third_party/blink/renderer/core/navigation_api/navigation_api.cc
+++ b/third_party/blink/renderer/core/navigation_api/navigation_api.cc
@@ -682,16 +682,7 @@
 }
 
 NavigationApi::DispatchResult NavigationApi::DispatchNavigateEvent(
-    const KURL& url,
-    HTMLFormElement* form,
-    NavigateEventType event_type,
-    WebFrameLoadType type,
-    UserNavigationInvolvement involvement,
-    SerializedScriptValue* state_object,
-    HistoryItem* destination_item,
-    bool is_browser_initiated,
-    bool is_synchronously_committed,
-    const String& download_filename) {
+    const DispatchParams& params) {
   // TODO(japhet): The draft spec says to cancel any ongoing navigate event
   // before invoking DispatchNavigateEvent(), because not all navigations will
   // fire a navigate event, but all should abort an ongoing navigate event.
@@ -700,8 +691,9 @@
   InformAboutCanceledNavigation();
 
   const KURL& current_url = GetSupplementable()->Url();
-  const String& key =
-      destination_item ? destination_item->GetNavigationApiKey() : String();
+  const String& key = params.destination_item
+                          ? params.destination_item->GetNavigationApiKey()
+                          : String();
   PromoteUpcomingNavigationToOngoing(key);
 
   if (HasEntriesAndEventsDisabled()) {
@@ -718,8 +710,8 @@
       ToScriptStateForMainWorld(GetSupplementable()->GetFrame());
   ScriptState::Scope scope(script_state);
 
-  if (type == WebFrameLoadType::kBackForward &&
-      event_type == NavigateEventType::kFragment &&
+  if (params.frame_load_type == WebFrameLoadType::kBackForward &&
+      params.event_type == NavigateEventType::kFragment &&
       !keys_to_indices_.Contains(key)) {
     // This same document history traversal was preempted by another navigation
     // that removed this entry from the back/forward list. Proceeding will leave
@@ -729,48 +721,50 @@
   }
 
   auto* init = NavigateEventInit::Create();
-  const String& navigation_type = DetermineNavigationType(type);
+  const String& navigation_type =
+      DetermineNavigationType(params.frame_load_type);
   init->setNavigationType(navigation_type);
 
   SerializedScriptValue* destination_state = nullptr;
-  if (destination_item)
-    destination_state = destination_item->GetNavigationApiState();
+  if (params.destination_item)
+    destination_state = params.destination_item->GetNavigationApiState();
   else if (ongoing_navigation_)
     destination_state = ongoing_navigation_->GetSerializedState();
   NavigationDestination* destination =
       MakeGarbageCollected<NavigationDestination>(
-          url, event_type != NavigateEventType::kCrossDocument,
+          params.url, params.event_type != NavigateEventType::kCrossDocument,
           destination_state);
-  if (type == WebFrameLoadType::kBackForward) {
+  if (params.frame_load_type == WebFrameLoadType::kBackForward) {
     auto iter = keys_to_indices_.find(key);
     int index = iter == keys_to_indices_.end() ? 0 : iter->value;
     destination->SetTraverseProperties(
-        key, destination_item->GetNavigationApiId(), index);
+        key, params.destination_item->GetNavigationApiId(), index);
   }
   init->setDestination(destination);
 
-  init->setCancelable(type != WebFrameLoadType::kBackForward);
+  init->setCancelable(params.frame_load_type != WebFrameLoadType::kBackForward);
   init->setCanTransition(
-      CanChangeToUrlForHistoryApi(url, GetSupplementable()->GetSecurityOrigin(),
-                                  current_url) &&
-      (event_type != NavigateEventType::kCrossDocument ||
-       type != WebFrameLoadType::kBackForward));
-  init->setHashChange(event_type == NavigateEventType::kFragment &&
-                      url != current_url &&
-                      EqualIgnoringFragmentIdentifier(url, current_url));
+      CanChangeToUrlForHistoryApi(
+          params.url, GetSupplementable()->GetSecurityOrigin(), current_url) &&
+      (params.event_type != NavigateEventType::kCrossDocument ||
+       params.frame_load_type != WebFrameLoadType::kBackForward));
+  init->setHashChange(params.event_type == NavigateEventType::kFragment &&
+                      params.url != current_url &&
+                      EqualIgnoringFragmentIdentifier(params.url, current_url));
 
-  init->setUserInitiated(involvement != UserNavigationInvolvement::kNone);
-  if (form && form->Method() == FormSubmission::kPostMethod) {
-    init->setFormData(FormData::Create(form, ASSERT_NO_EXCEPTION));
+  init->setUserInitiated(params.involvement !=
+                         UserNavigationInvolvement::kNone);
+  if (params.form && params.form->Method() == FormSubmission::kPostMethod) {
+    init->setFormData(FormData::Create(params.form, ASSERT_NO_EXCEPTION));
   }
   if (ongoing_navigation_)
     init->setInfo(ongoing_navigation_->GetInfo());
   init->setSignal(MakeGarbageCollected<AbortSignal>(GetSupplementable()));
-  init->setDownloadRequest(download_filename);
+  init->setDownloadRequest(params.download_filename);
   auto* navigate_event = NavigateEvent::Create(
       GetSupplementable(), event_type_names::kNavigate, init);
-  navigate_event->SetUrl(url);
-  navigate_event->SaveStateFromDestinationItem(destination_item);
+  navigate_event->SetUrl(params.url);
+  navigate_event->SaveStateFromDestinationItem(params.destination_item);
 
   DCHECK(!ongoing_navigate_event_);
   DCHECK(!ongoing_navigation_signal_);
@@ -795,13 +789,15 @@
     // |type| being a reload type makes it do none of the spec-relevant
     // steps. Instead it does stuff like the loading spinner and use counters.
     GetSupplementable()->document()->Loader()->RunURLAndHistoryUpdateSteps(
-        url, destination_item,
+        params.url, params.destination_item,
         mojom::blink::SameDocumentNavigationType::kNavigationApiTransitionWhile,
-        state_object, type, is_browser_initiated, is_synchronously_committed);
+        params.state_object, params.frame_load_type,
+        params.is_browser_initiated,
+        params.is_synchronously_committed_same_document);
   }
 
   if (!promise_list.IsEmpty() ||
-      event_type != NavigateEventType::kCrossDocument) {
+      params.event_type != NavigateEventType::kCrossDocument) {
     NavigateReaction::ReactType react_type =
         promise_list.IsEmpty() ? NavigateReaction::ReactType::kImmediate
                                : NavigateReaction::ReactType::kTransitionWhile;
diff --git a/third_party/blink/renderer/core/navigation_api/navigation_api.h b/third_party/blink/renderer/core/navigation_api/navigation_api.h
index 2e8b2f1..bece4458 100644
--- a/third_party/blink/renderer/core/navigation_api/navigation_api.h
+++ b/third_party/blink/renderer/core/navigation_api/navigation_api.h
@@ -111,17 +111,29 @@
   DEFINE_ATTRIBUTE_EVENT_LISTENER(currententrychange, kCurrententrychange)
 
   enum class DispatchResult { kContinue, kAbort, kTransitionWhile };
-  DispatchResult DispatchNavigateEvent(
-      const KURL& url,
-      HTMLFormElement* form,
-      NavigateEventType,
-      WebFrameLoadType,
-      UserNavigationInvolvement,
-      SerializedScriptValue*,
-      HistoryItem* destination_item,
-      bool is_browser_initiated = false,
-      bool is_synchronously_committed = true,
-      const String& download_filename = String());
+  struct DispatchParams {
+    STACK_ALLOCATED();
+
+   public:
+    DispatchParams(const KURL& url_in,
+                   NavigateEventType event_type_in,
+                   WebFrameLoadType frame_load_type_in)
+        : url(url_in),
+          event_type(event_type_in),
+          frame_load_type(frame_load_type_in) {}
+
+    const KURL url;
+    const NavigateEventType event_type;
+    const WebFrameLoadType frame_load_type;
+    UserNavigationInvolvement involvement = UserNavigationInvolvement::kNone;
+    HTMLFormElement* form = nullptr;
+    SerializedScriptValue* state_object = nullptr;
+    HistoryItem* destination_item = nullptr;
+    bool is_browser_initiated = false;
+    bool is_synchronously_committed_same_document = true;
+    String download_filename;
+  };
+  DispatchResult DispatchNavigateEvent(const DispatchParams&);
 
   // In the spec, we are only informed about canceled navigations. But in the
   // implementation we need to handle other cases:
diff --git a/third_party/blink/renderer/core/page/drag_image.cc b/third_party/blink/renderer/core/page/drag_image.cc
index d8d40b6..a03a0c9 100644
--- a/third_party/blink/renderer/core/page/drag_image.cc
+++ b/third_party/blink/renderer/core/page/drag_image.cc
@@ -115,7 +115,8 @@
 
   SkBitmap bm;
   paint_image = Image::ResizeAndOrientImage(
-      paint_image, orientation, image_scale, opacity, interpolation_quality);
+      paint_image, orientation, image_scale, opacity, interpolation_quality,
+      SkColorSpace::MakeSRGB());
   if (!paint_image || !paint_image.GetSwSkImage()->asLegacyBitmap(&bm))
     return nullptr;
 
diff --git a/third_party/blink/renderer/core/page/scrolling/element_fragment_anchor.cc b/third_party/blink/renderer/core/page/scrolling/element_fragment_anchor.cc
index 25a2865..a5bacdb 100644
--- a/third_party/blink/renderer/core/page/scrolling/element_fragment_anchor.cc
+++ b/third_party/blink/renderer/core/page/scrolling/element_fragment_anchor.cc
@@ -7,13 +7,14 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_scroll_into_view_options.h"
 #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
 #include "third_party/blink/renderer/core/display_lock/display_lock_context.h"
+#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
 #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/events/event.h"
 #include "third_party/blink/renderer/core/dom/node.h"
 #include "third_party/blink/renderer/core/editing/frame_selection.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/html/html_details_element.h"
 #include "third_party/blink/renderer/core/svg/svg_svg_element.h"
 #include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
@@ -77,10 +78,13 @@
   if (!should_scroll)
     return nullptr;
 
+  if (RuntimeEnabledFeatures::AutoExpandDetailsElementEnabled()) {
+    HTMLDetailsElement::ExpandDetailsAncestors(*anchor_node);
+  }
+
   if (RuntimeEnabledFeatures::BeforeMatchEventEnabled(
           frame.GetDocument()->GetExecutionContext())) {
-    anchor_node->DispatchEvent(
-        *Event::CreateBubble(event_type_names::kBeforematch));
+    DisplayLockUtilities::RevealHiddenUntilFoundAncestors(*anchor_node);
   }
 
   return MakeGarbageCollected<ElementFragmentAnchor>(*anchor_node, frame);
diff --git a/third_party/blink/renderer/core/page/scrolling/fragment_anchor.cc b/third_party/blink/renderer/core/page/scrolling/fragment_anchor.cc
index beed6ae7..abf2b1e 100644
--- a/third_party/blink/renderer/core/page/scrolling/fragment_anchor.cc
+++ b/third_party/blink/renderer/core/page/scrolling/fragment_anchor.cc
@@ -6,16 +6,15 @@
 
 #include "base/metrics/histogram_macros.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/fragment_directive/css_selector_fragment_anchor.h"
 #include "third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/web_feature.h"
-#include "third_party/blink/renderer/core/html/html_details_element.h"
 #include "third_party/blink/renderer/core/html/html_document.h"
 #include "third_party/blink/renderer/core/page/scrolling/element_fragment_anchor.h"
+#include "third_party/blink/renderer/core/scroll/scroll_alignment.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
@@ -65,27 +64,6 @@
 void FragmentAnchor::ScrollElementIntoViewWithOptions(
     Element* element_to_scroll,
     ScrollIntoViewOptions* options) {
-  // Expand <details> elements so we can make |element_to_scroll| visible.
-  bool needs_style_and_layout =
-      RuntimeEnabledFeatures::AutoExpandDetailsElementEnabled() &&
-      HTMLDetailsElement::ExpandDetailsAncestors(*element_to_scroll);
-
-  // Reveal hidden=until-found ancestors so we can make |element_to_scroll|
-  // visible.
-  needs_style_and_layout |=
-      RuntimeEnabledFeatures::BeforeMatchEventEnabled(
-          element_to_scroll->GetExecutionContext()) &&
-      DisplayLockUtilities::RevealHiddenUntilFoundAncestors(*element_to_scroll);
-
-  if (needs_style_and_layout) {
-    // If we opened any details elements, we need to update style and layout
-    // to account for the new content to render inside the now-expanded
-    // details element before we scroll to it. The added open attribute may
-    // also affect style.
-    frame_->GetDocument()->UpdateStyleAndLayoutForNode(
-        element_to_scroll, DocumentUpdateReason::kFindInPage);
-  }
-
   if (element_to_scroll->GetLayoutObject()) {
     DCHECK(element_to_scroll->GetComputedStyle());
     mojom::blink::ScrollIntoViewParamsPtr params =
diff --git a/third_party/blink/renderer/modules/canvas/BUILD.gn b/third_party/blink/renderer/modules/canvas/BUILD.gn
index ca6c394c..d66aaafe 100644
--- a/third_party/blink/renderer/modules/canvas/BUILD.gn
+++ b/third_party/blink/renderer/modules/canvas/BUILD.gn
@@ -17,6 +17,8 @@
     "canvas2d/canvas_formatted_text.h",
     "canvas2d/canvas_formatted_text_run.cc",
     "canvas2d/canvas_formatted_text_run.h",
+    "canvas2d/canvas_formatted_text_style.cc",
+    "canvas2d/canvas_formatted_text_style.h",
     "canvas2d/canvas_gradient.cc",
     "canvas2d/canvas_gradient.h",
     "canvas2d/canvas_image_source_util.cc",
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.cc
index b4469b5..bb48b39 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.cc
@@ -24,6 +24,7 @@
   visitor->Trace(text_runs_);
   visitor->Trace(block_);
   ScriptWrappable::Trace(visitor);
+  CanvasFormattedTextStyle::Trace(visitor);
 }
 
 CanvasFormattedText* CanvasFormattedText::Create(
@@ -38,7 +39,8 @@
   return canvas_formatted_text;
 }
 
-CanvasFormattedText::CanvasFormattedText(ExecutionContext* execution_context) {
+CanvasFormattedText::CanvasFormattedText(ExecutionContext* execution_context)
+    : CanvasFormattedTextStyle(/* is_text_run */ false) {
   // Refrain from extending the use of document, apart from creating layout
   // block flow. In the future we should handle execution_context's from worker
   // threads that do not have a document.
@@ -63,15 +65,23 @@
     block_->Destroy();
 }
 
-LayoutBlockFlow* CanvasFormattedText::GetLayoutBlock(
+void CanvasFormattedText::SetNeedsStyleRecalc() {
+  needs_style_recalc_ = true;
+}
+
+void CanvasFormattedText::UpdateComputedStylesIfNeeded(
     Document& document,
     const FontDescription& defaultFont) {
-  scoped_refptr<ComputedStyle> style =
-      document.GetStyleResolver().CreateComputedStyle();
-  style->SetDisplay(EDisplay::kBlock);
-  style->SetFontDescription(defaultFont);
-  block_->SetStyle(style);
-  return block_;
+  if (needs_style_recalc_ || current_default_font_ != defaultFont) {
+    auto style = document.GetStyleResolver().StyleForCanvasFormattedText(
+        /*is_text_run*/ false, defaultFont, GetCssPropertySet());
+    block_->SetStyle(style, LayoutObject::ApplyStyleChanges::kNo);
+    block_->SetHorizontalWritingMode(style->IsHorizontalWritingMode());
+    for (auto& text_run : text_runs_)
+      text_run->UpdateStyle(document, /*parent_style*/ *style);
+    needs_style_recalc_ = false;
+    current_default_font_ = defaultFont;
+  }
 }
 
 CanvasFormattedTextRun* CanvasFormattedText::appendRun(
@@ -81,6 +91,8 @@
     return nullptr;
   text_runs_.push_back(run);
   block_->AddChild(run->GetLayoutObject());
+  run->SetParent(this);
+  SetNeedsStyleRecalc();
   return run;
 }
 
@@ -91,10 +103,13 @@
   if (!CheckRunsIndexBound(index, &exception_state) ||
       !CheckRunIsNotParented(run, &exception_state))
     return nullptr;
+  run->SetParent(this);
   block_->AddChild(run->GetLayoutObject(),
                    text_runs_[index]->GetLayoutObject());
+  text_runs_[index]->SetParent(nullptr);
   block_->RemoveChild(text_runs_[index]->GetLayoutObject());
   text_runs_[index] = run;
+  SetNeedsStyleRecalc();
   return text_runs_[index];
 }
 
@@ -111,6 +126,8 @@
   block_->AddChild(run->GetLayoutObject(),
                    text_runs_[index]->GetLayoutObject());
   text_runs_.insert(index, run);
+  run->SetParent(this);
+  SetNeedsStyleRecalc();
   return text_runs_[index];
 }
 
@@ -130,6 +147,7 @@
   }
 
   for (wtf_size_t i = index; i < index + length; i++) {
+    text_runs_[i]->SetParent(nullptr);
     block_->RemoveChild(text_runs_[i]->GetLayoutObject());
   }
   block_->SetNeedsLayoutAndIntrinsicWidthsRecalcAndFullPaintInvalidation(
@@ -144,26 +162,26 @@
     double x,
     double y,
     double wrap_width,
+    double wrap_height,
     gfx::RectF& bounds) {
-  LayoutBlockFlow* block = GetLayoutBlock(document, font);
-  NGBlockNode block_node(block);
-  NGInlineNode node(block);
+  UpdateComputedStylesIfNeeded(document, font);
+  NGBlockNode block_node(block_);
 
-  // TODO(sushraja) Once we add support for writing mode on the canvas formatted
-  // text, fix this to be not hardcoded horizontal top to bottom.
   NGConstraintSpaceBuilder builder(
       WritingMode::kHorizontalTb,
-      {WritingMode::kHorizontalTb, TextDirection::kLtr},
+      {block_->StyleRef().GetWritingMode(), block_->StyleRef().Direction()},
       /* is_new_fc */ true);
-  LayoutUnit available_logical_width(wrap_width);
-  LogicalSize available_size = {available_logical_width, kIndefiniteSize};
+  LayoutUnit available_logical_width(std::max(wrap_width, 0.0));
+  LayoutUnit available_logical_height(std::max(wrap_height, 0.0));
+  LogicalSize available_size = {available_logical_width,
+                                available_logical_height};
   builder.SetAvailableSize(available_size);
   NGConstraintSpace space = builder.ToConstraintSpace();
   const NGLayoutResult* block_results = block_node.Layout(space, nullptr);
   const auto& fragment =
       To<NGPhysicalBoxFragment>(block_results->PhysicalFragment());
-  block->RecalcFragmentsVisualOverflow();
-  bounds = gfx::RectF(block->PhysicalVisualOverflowRect());
+  block_->RecalcFragmentsVisualOverflow();
+  bounds = gfx::RectF{block_->PhysicalVisualOverflowRect()};
   auto* paint_record_builder = MakeGarbageCollected<PaintRecordBuilder>();
   PaintInfo paint_info(paint_record_builder->Context(), CullRect::Infinite(),
                        PaintPhase::kForeground);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.h
index 41acc43..6ca067d 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.h
@@ -25,7 +25,9 @@
 class FontDescription;
 class LayoutBlockFlow;
 
-class MODULES_EXPORT CanvasFormattedText final : public ScriptWrappable {
+class MODULES_EXPORT CanvasFormattedText final
+    : public ScriptWrappable,
+      public CanvasFormattedTextStyle {
   DEFINE_WRAPPERTYPEINFO();
   USING_PRE_FINALIZER(CanvasFormattedText, Dispose);
 
@@ -108,21 +110,27 @@
                  unsigned length,
                  ExceptionState& exception_state);
 
-  LayoutBlockFlow* GetLayoutBlock(Document& document,
-                                  const FontDescription& defaultFont);
-
   sk_sp<PaintRecord> PaintFormattedText(Document& document,
                                         const FontDescription& font,
                                         double x,
                                         double y,
                                         double wrap_width,
+                                        double wrap_height,
                                         gfx::RectF& bounds);
 
   void Dispose();
 
+  void SetNeedsStyleRecalc() override;
+
+ private:
+  void UpdateComputedStylesIfNeeded(Document& document,
+                                    const FontDescription& defaultFont);
+
  private:
   HeapVector<Member<CanvasFormattedTextRun>> text_runs_;
   Member<LayoutBlockFlow> block_;
+  FontDescription current_default_font_;
+  bool needs_style_recalc_ = true;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.idl b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.idl
index 0e3b846..a53d44d3 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.idl
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.idl
@@ -21,4 +21,6 @@
   [RaisesException] void deleteRun(unsigned long index, unsigned long length); 
 
   readonly attribute unsigned long length;
-};
\ No newline at end of file
+};
+
+CanvasFormattedText includes CanvasFormattedTextStyle;
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.cc
index c3b8bc1..8cd79b4 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.cc
@@ -3,15 +3,15 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.h"
-
 #include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
+#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text.h"
 
 namespace blink {
 
 CanvasFormattedTextRun::CanvasFormattedTextRun(
     ExecutionContext* execution_context,
     const String text)
-    : text_(text) {
+    : CanvasFormattedTextStyle(/* is_text_run */ true), text_(text) {
   // Refrain from extending the use of document, apart from creating layout
   // text. In the future we should handle execution_context's from worker
   // threads that do not have a document.
@@ -19,11 +19,18 @@
   scoped_refptr<ComputedStyle> style =
       document->GetStyleResolver().CreateComputedStyle();
   style->SetDisplay(EDisplay::kInline);
-  layout_text_ = LayoutText::CreateAnonymous(*document, std::move(style),
-                                             text.Impl(), LegacyLayout::kAuto);
+  layout_text_ = LayoutText::CreateAnonymousForFormattedText(
+      *document, std::move(style), text.Impl(), LegacyLayout::kAuto);
   layout_text_->SetIsLayoutNGObjectForCanvasFormattedText(true);
 }
 
+void CanvasFormattedTextRun::UpdateStyle(Document& document,
+                                         const ComputedStyle& parent_style) {
+  auto style = document.GetStyleResolver().StyleForCanvasFormattedText(
+      /*is_text_run*/ true, parent_style, GetCssPropertySet());
+  layout_text_->SetStyle(style, LayoutObject::ApplyStyleChanges::kNo);
+}
+
 void CanvasFormattedTextRun::Dispose() {
   AllowDestroyingLayoutObjectInFinalizerScope scope;
   if (layout_text_)
@@ -32,7 +39,14 @@
 
 void CanvasFormattedTextRun::Trace(Visitor* visitor) const {
   visitor->Trace(layout_text_);
+  visitor->Trace(parent_);
   ScriptWrappable::Trace(visitor);
+  CanvasFormattedTextStyle::Trace(visitor);
+}
+
+void CanvasFormattedTextRun::SetNeedsStyleRecalc() {
+  if (parent_ != nullptr)
+    parent_->SetNeedsStyleRecalc();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.h
index ea294f87..20abb958 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.h
@@ -7,6 +7,7 @@
 
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/layout/layout_text.h"
+#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/prefinalizer.h"
@@ -14,7 +15,11 @@
 
 namespace blink {
 
-class MODULES_EXPORT CanvasFormattedTextRun final : public ScriptWrappable {
+class CanvasFormattedText;
+
+class MODULES_EXPORT CanvasFormattedTextRun final
+    : public ScriptWrappable,
+      public CanvasFormattedTextStyle {
   DEFINE_WRAPPERTYPEINFO();
   USING_PRE_FINALIZER(CanvasFormattedTextRun, Dispose);
 
@@ -35,14 +40,25 @@
   unsigned length() const { return text_.length(); }
 
   LayoutText* GetLayoutObject() { return layout_text_; }
+  void UpdateStyle(Document& document, const ComputedStyle& parent_style);
+
+  void SetParent(CanvasFormattedText* canvas_formatted_text) {
+    parent_ = canvas_formatted_text;
+  }
 
   void Trace(Visitor* visitor) const override;
 
   void Dispose();
 
+  // Style dirtiness is tracked only at the level of a canvas formatted text
+  // and all run styles are recomputed when a canvas formatted text has its
+  // style recomputed. This can be improved by adding additional granularity
+  // of dirtiness tracking.
+  void SetNeedsStyleRecalc() override;
+
  private:
   String text_;
-
+  WeakMember<CanvasFormattedText> parent_;
   Member<LayoutText> layout_text_;
 };
 
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.idl b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.idl
index 7e1ea4f..d8d1932 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.idl
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_run.idl
@@ -9,4 +9,6 @@
   [CallWith = ExecutionContext] constructor(DOMString text);
 
   attribute DOMString text;
-};
\ No newline at end of file
+};
+
+CanvasFormattedTextRun includes CanvasFormattedTextStyle;
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.cc
new file mode 100644
index 0000000..5c982100
--- /dev/null
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.cc
@@ -0,0 +1,125 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.h"
+#include "third_party/blink/renderer/core/css/css_font_selector.h"
+#include "third_party/blink/renderer/core/css/css_identifier_value.h"
+#include "third_party/blink/renderer/core/css/css_value_list.h"
+#include "third_party/blink/renderer/core/css/properties/longhand.h"
+#include "third_party/blink/renderer/core/css/resolver/font_style_resolver.h"
+#include "third_party/blink/renderer/core/css/resolver/style_adjuster.h"
+#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
+#include "third_party/blink/renderer/core/css/resolver/style_resolver_state.h"
+#include "third_party/blink/renderer/core/css/style_engine.h"
+#include "third_party/blink/renderer/core/css/style_property_serializer.h"
+#include "third_party/blink/renderer/core/html/html_element.h"
+#include "third_party/blink/renderer/core/style/computed_style.h"
+#include "third_party/blink/renderer/core/style/computed_style_base_constants.h"
+
+namespace blink {
+
+StylePropertyMap* CanvasFormattedTextStyle::styleMap() {
+  if (!style_map_) {
+    style_map_ = MakeGarbageCollected<CanvasFormattedTextStylePropertyMap>(
+        is_text_run_, this);
+  }
+  return style_map_.Get();
+}
+
+const CSSPropertyValueSet* CanvasFormattedTextStyle::GetCssPropertySet() const {
+  return style_map_ ? style_map_->GetCssPropertySet() : nullptr;
+}
+
+void CanvasFormattedTextStyle::Trace(Visitor* visitor) const {
+  visitor->Trace(style_map_);
+}
+
+CanvasFormattedTextStylePropertyMap::CanvasFormattedTextStylePropertyMap(
+    bool is_text_run,
+    CanvasFormattedTextStyle* canvas_formatted_text_style)
+    : is_text_run_(is_text_run) {
+  css_property_value_set_ =
+      MakeGarbageCollected<MutableCSSPropertyValueSet>(kHTMLStandardMode);
+  canvas_formatted_text_style_ = canvas_formatted_text_style;
+}
+
+const CSSValue* CanvasFormattedTextStylePropertyMap::GetProperty(
+    CSSPropertyID property_id) const {
+  return css_property_value_set_->GetPropertyCSSValue(property_id);
+}
+
+const CSSValue* CanvasFormattedTextStylePropertyMap::GetCustomProperty(
+    const AtomicString& property_name) const {
+  // Custom properties or CSS variables are not supported for
+  // CanvasFormattedText at this point.
+  NOTREACHED();
+  return nullptr;
+}
+
+void CanvasFormattedTextStylePropertyMap::ForEachProperty(
+    const IterationCallback& callback) {
+  for (unsigned i = 0; i < css_property_value_set_->PropertyCount(); i++) {
+    const auto& property_reference = css_property_value_set_->PropertyAt(i);
+    callback(property_reference.Name(), property_reference.Value());
+  }
+}
+
+void CanvasFormattedTextStylePropertyMap::SetProperty(
+    CSSPropertyID unresolved_property,
+    const CSSValue& value) {
+  const CSSProperty& prop = CSSProperty::Get(unresolved_property);
+  if ((prop.IsValidForCanvasFormattedText() && !is_text_run_) ||
+      (prop.IsValidForCanvasFormattedTextRun() && is_text_run_)) {
+    css_property_value_set_->SetProperty(unresolved_property, value);
+    if (canvas_formatted_text_style_)
+      canvas_formatted_text_style_->SetNeedsStyleRecalc();
+  }
+}
+
+bool CanvasFormattedTextStylePropertyMap::SetShorthandProperty(
+    CSSPropertyID unresolved_property,
+    const String& string,
+    SecureContextMode secure_context) {
+  MutableCSSPropertyValueSet::SetResult result =
+      css_property_value_set_->SetProperty(unresolved_property, string, false,
+                                           secure_context);
+  if (canvas_formatted_text_style_ &&
+      result != MutableCSSPropertyValueSet::kParseError)
+    canvas_formatted_text_style_->SetNeedsStyleRecalc();
+  return result != MutableCSSPropertyValueSet::kParseError;
+}
+
+void CanvasFormattedTextStylePropertyMap::SetCustomProperty(const AtomicString&,
+                                                            const CSSValue&) {
+  // Custom properties are not supported on CanvasFormattedText
+  NOTREACHED();
+}
+
+void CanvasFormattedTextStylePropertyMap::RemoveProperty(
+    CSSPropertyID property_id) {
+  bool did_change = css_property_value_set_->RemoveProperty(property_id);
+  if (did_change) {
+    canvas_formatted_text_style_->SetNeedsStyleRecalc();
+  }
+}
+
+void CanvasFormattedTextStylePropertyMap::RemoveCustomProperty(
+    const AtomicString&) {
+  // Custom properties are not supported on CanvasFormattedText
+  NOTREACHED();
+}
+
+void CanvasFormattedTextStylePropertyMap::RemoveAllProperties() {
+  css_property_value_set_->Clear();
+  canvas_formatted_text_style_->SetNeedsStyleRecalc();
+}
+
+String CanvasFormattedTextStylePropertyMap::SerializationForShorthand(
+    const CSSProperty& property) const {
+  DCHECK(property.IsShorthand());
+  return StylePropertySerializer(*css_property_value_set_)
+      .SerializeShorthand(property.PropertyID());
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.h
new file mode 100644
index 0000000..87df308
--- /dev/null
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.h
@@ -0,0 +1,80 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_CANVAS_FORMATTED_TEXT_STYLE_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_CANVAS_FORMATTED_TEXT_STYLE_H_
+
+#include "third_party/blink/renderer/core/css/css_property_value_set.h"
+#include "third_party/blink/renderer/core/css/cssom/style_property_map.h"
+
+namespace blink {
+
+class CanvasFormattedTextStylePropertyMap;
+class FontDescription;
+
+class CanvasFormattedTextStyle : public GarbageCollectedMixin {
+  DISALLOW_NEW();
+
+ public:
+  explicit CanvasFormattedTextStyle(bool is_text_run)
+      : is_text_run_(is_text_run) {}
+  StylePropertyMap* styleMap();
+
+  virtual void SetNeedsStyleRecalc() = 0;
+  const CSSPropertyValueSet* GetCssPropertySet() const;
+
+  void Trace(Visitor* visitor) const override;
+
+ private:
+  bool is_text_run_;
+  Member<CanvasFormattedTextStylePropertyMap> style_map_;
+};
+
+class CanvasFormattedTextStylePropertyMap final : public StylePropertyMap {
+ public:
+  explicit CanvasFormattedTextStylePropertyMap(bool is_text_run,
+                                               CanvasFormattedTextStyle*);
+  CanvasFormattedTextStylePropertyMap(
+      const CanvasFormattedTextStylePropertyMap&) = delete;
+  CanvasFormattedTextStylePropertyMap& operator=(
+      const CanvasFormattedTextStylePropertyMap&) = delete;
+
+  void Trace(Visitor* visitor) const override {
+    visitor->Trace(css_property_value_set_);
+    visitor->Trace(canvas_formatted_text_style_);
+    StylePropertyMap::Trace(visitor);
+  }
+
+  unsigned int size() const final {
+    return css_property_value_set_->PropertyCount();
+  }
+
+  const CSSPropertyValueSet* GetCssPropertySet() const {
+    return css_property_value_set_;
+  }
+
+ protected:
+  const CSSValue* GetProperty(CSSPropertyID) const override;
+  const CSSValue* GetCustomProperty(const AtomicString&) const override;
+  void ForEachProperty(const IterationCallback&) override;
+  void SetProperty(CSSPropertyID, const CSSValue&) override;
+  bool SetShorthandProperty(CSSPropertyID,
+                            const String&,
+                            SecureContextMode) override;
+  void SetCustomProperty(const AtomicString&, const CSSValue&) override;
+  void RemoveProperty(CSSPropertyID) override;
+  void RemoveCustomProperty(const AtomicString&) override;
+  void RemoveAllProperties() final;
+
+  String SerializationForShorthand(const CSSProperty&) const final;
+
+ private:
+  Member<MutableCSSPropertyValueSet> css_property_value_set_;
+  WeakMember<CanvasFormattedTextStyle> canvas_formatted_text_style_;
+  bool is_text_run_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_CANVAS_FORMATTED_TEXT_STYLE_H_
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.idl b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.idl
new file mode 100644
index 0000000..8b2f6f55
--- /dev/null
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_formatted_text_style.idl
@@ -0,0 +1,6 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+interface mixin CanvasFormattedTextStyle{
+  [SameObject] readonly attribute StylePropertyMap styleMap;
+};
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
index cc3cbb7..8b1bfba3 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -925,7 +925,8 @@
     CanvasFormattedText* formatted_text,
     double x,
     double y,
-    double wrap_width) {
+    double wrap_width,
+    double height) {
   if (!formatted_text)
     return;
   // TODO(crbug.com/1234113): Instrument new canvas APIs.
@@ -937,7 +938,7 @@
   gfx::RectF bounds;
   sk_sp<PaintRecord> recording = formatted_text->PaintFormattedText(
       canvas()->GetDocument(), GetState().GetFontDescription(), x, y,
-      wrap_width, bounds);
+      wrap_width, height, bounds);
   Draw<OverdrawOp::kNone>(
       [recording](cc::PaintCanvas* c,
                   const cc::PaintFlags* flags)  // draw lambda
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
index 6ae2ce4..89d3eb07 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h
@@ -139,7 +139,8 @@
   void fillFormattedText(CanvasFormattedText* formatted_text,
                          double x,
                          double y,
-                         double wrap_width);
+                         double wrap_width,
+                         double height = kIndefiniteSize);
 
   void drawFocusIfNeeded(Element*);
   void drawFocusIfNeeded(Path2D*, Element*);
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl
index 3e96a86..34e7bba 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.idl
@@ -123,7 +123,7 @@
     TextMetrics measureText(DOMString text);
 
     // Render entire CanvasFormattedText with line wrapping (one-shot)
-    [RuntimeEnabled=CanvasFormattedText] void fillFormattedText(CanvasFormattedText formattedText, double x, double y, double wrapWidth);
+    [RuntimeEnabled=CanvasFormattedText] void fillFormattedText(CanvasFormattedText formattedText, double x, double y, double wrapWidth, optional double height);
 
     // drawing images
     [RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y);
diff --git a/third_party/blink/renderer/platform/graphics/image.cc b/third_party/blink/renderer/platform/graphics/image.cc
index de65afdf..87b6e7e 100644
--- a/third_party/blink/renderer/platform/graphics/image.cc
+++ b/third_party/blink/renderer/platform/graphics/image.cc
@@ -116,7 +116,8 @@
     ImageOrientation orientation,
     gfx::Vector2dF image_scale,
     float opacity,
-    InterpolationQuality interpolation_quality) {
+    InterpolationQuality interpolation_quality,
+    sk_sp<SkColorSpace> color_space) {
   gfx::Size size(image.width(), image.height());
   size = gfx::ScaleToFlooredSize(size, image_scale.x(), image_scale.y());
   AffineTransform transform;
@@ -130,17 +131,24 @@
   if (size.IsEmpty())
     return PaintImage();
 
-  if (transform.IsIdentity() && opacity == 1) {
+  const auto image_color_space = image.GetSkImageInfo().colorSpace()
+                                     ? image.GetSkImageInfo().refColorSpace()
+                                     : SkColorSpace::MakeSRGB();
+  const auto surface_color_space =
+      color_space ? color_space : image_color_space;
+  const bool needs_color_conversion =
+      !SkColorSpace::Equals(image_color_space.get(), surface_color_space.get());
+
+  if (transform.IsIdentity() && opacity == 1 && !needs_color_conversion) {
     // Nothing to adjust, just use the original.
     DCHECK_EQ(image.width(), size.width());
     DCHECK_EQ(image.height(), size.height());
     return image;
   }
 
-  const SkImageInfo info =
-      SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType,
-                           SkColorSpace::MakeSRGB());
-  sk_sp<SkSurface> surface = SkSurface::MakeRaster(info);
+  const SkImageInfo surface_info = SkImageInfo::MakeN32(
+      size.width(), size.height(), kPremul_SkAlphaType, surface_color_space);
+  sk_sp<SkSurface> surface = SkSurface::MakeRaster(surface_info);
   if (!surface)
     return PaintImage();
 
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h
index b3e7b599..7056534 100644
--- a/third_party/blink/renderer/platform/graphics/image.h
+++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -83,12 +83,18 @@
       int resource_id,
       ui::ResourceScaleFactor scale_factor = ui::k100Percent);
 
+  // Resize and reorient the specified PaintImage. The resulting image will have
+  // color type kN32_SkColorType. The resulting image will have the same color
+  // space as the input PaintImage, unless a non-nullptr SkColorSpace is
+  // specified, in which case the resulting image will have the specified color
+  // space.
   static PaintImage ResizeAndOrientImage(
       const PaintImage&,
       ImageOrientation,
       gfx::Vector2dF image_scale = gfx::Vector2dF(1, 1),
       float opacity = 1.0,
-      InterpolationQuality = kInterpolationNone);
+      InterpolationQuality = kInterpolationNone,
+      sk_sp<SkColorSpace> color_space = nullptr);
 
   virtual bool IsSVGImage() const { return false; }
   virtual bool IsSVGImageForContainer() const { return false; }
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
index 57e3a5a..38f0edd 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
@@ -175,8 +175,7 @@
       supported_formats.sdp_formats.push_back(std::move(*format));
 
 #if BUILDFLAG(IS_WIN)
-      if (base::FeatureList::IsEnabled(
-              media::kMediaFoundationH264CbpEncoding) &&
+      if (media::IsMediaFoundationH264CbpEncodingEnabled() &&
           profile.profile == media::VideoCodecProfile::H264PROFILE_BASELINE) {
         supported_formats.profiles.push_back(profile.profile);
         supported_formats.scalability_modes.push_back(
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index e77c1ad..47b308dc 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -358,6 +358,7 @@
     },
     {
       name: "CanvasFormattedText",
+      depends_on: ["LayoutNG"],
       status: "experimental",
     },
     {
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 1b05c41..ecf43e7 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -1529,6 +1529,8 @@
 # CanvasFormattedText is supported only through layout NG
 crbug.com/1176933 fast/canvas/canvas-formattedtext-1.html [ Skip ]
 crbug.com/1176933 fast/canvas/canvas-formattedtext-2.html [ Skip ]
+crbug.com/1176933 fast/canvas-api/canvas-formattedtext.html [ Skip ]
+crbug.com/1176933 wpt_internal/canvas/canvas-formattedtext-style.html [ Skip ]
 crbug.com/1176933 virtual/gpu/fast/canvas/canvas-formattedtext-1.html [ Skip ]
 crbug.com/1176933 virtual/gpu/fast/canvas/canvas-formattedtext-2.html [ Skip ]
 
@@ -1550,7 +1552,6 @@
 crbug.com/591099 external/wpt/css/css-writing-modes/alt-display-vertical-001-manual.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes/tooltip-display-vertical-001-manual.html [ Failure ]
 crbug.com/591099 external/wpt/html/editing/dnd/platform/close-drag-005-manual.html [ Failure ]
-crbug.com/591099 fast/canvas-api/canvas-formattedtext.html [ Crash ]
 crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-flex-item.js [ Failure ]
 
 # Failures accumulated until 2021-5-11
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index e5421802..65d5a3c 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1298,50 +1298,7 @@
 crbug.com/591099 external/wpt/css/css-ui/text-overflow-015.html [ Failure ]
 # Various issues related to the 'appearance' property:
 crbug.com/1284269 external/wpt/css/css-ui/compute-kind-widget-fallback-props-revert-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-position-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-left-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-width-001.html [ Failure ]
 crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-start-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-source-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-right-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-attachment-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-clip-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-image-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-origin-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-size-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-right-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-end-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-outset-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-repeat-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-slice-001.html [ Crash Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-style-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-width-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-end-radius-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-start-radius-001.html [ Failure Timeout ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-color-001.html [ Failure ]
-crbug.com/1284251 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-left-radius-001.html [ Failure ]
 crbug.com/1284270 [ Fuchsia ] external/wpt/css/css-ui/compute-kind-widget-no-fallback-props-001.html [ Failure ]
 crbug.com/1284270 [ Linux ] external/wpt/css/css-ui/compute-kind-widget-no-fallback-props-001.html [ Failure ]
 crbug.com/1284270 [ Mac10.12 ] external/wpt/css/css-ui/compute-kind-widget-no-fallback-props-001.html [ Failure Timeout ]
@@ -3378,6 +3335,62 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-attachment-001.html [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Mac10.12 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Mac10.14 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Mac10.15 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Mac11 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Mac11-arm64 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 [ Win ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-image-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-origin-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-position-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-size-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-left-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-right-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-end-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-start-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-outset-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-repeat-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-slice-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-source-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-style-001.html [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Mac10.12 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Mac10.14 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Mac10.15 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Mac11 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Mac11-arm64 ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 [ Win ] external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-end-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-start-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-color-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-left-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-right-radius-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-style-001.html [ Failure ]
+crbug.com/626703 external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-width-001.html [ Failure ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/fetch/api/basic/request-upload.h2.any.worker.html [ Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/loading/early-hints/coep-early-hints-none-final-require-corp.h2.window.html [ Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/websockets/Close-1000-reason.any.html?wpt_flags=h2 [ Failure Timeout ]
@@ -4471,7 +4484,7 @@
 crbug.com/764235 external/wpt/css/css-grid/alignment/grid-baseline-justify-001.html [ Failure ]
 
 # [css-subgrid]
-crbug.com/618969 external/wpt/css/css-grid/subgrid/abs-pos-002.html [ Failure Crash Timeout ]
+crbug.com/618969 external/wpt/css/css-grid/subgrid/abs-pos-002.html [ Crash Failure Timeout ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/abs-pos-003.html [ Failure ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/abs-pos-004.html [ Failure ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/auto-track-sizing-001.html [ Failure ]
@@ -4515,9 +4528,9 @@
 crbug.com/618969 external/wpt/css/css-grid/subgrid/repeat-auto-fill-007.html [ Failure ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/repeat-auto-fill-008.html [ Failure ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-item-block-size-001.html [ Failure ]
-crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-001.html [ Failure Crash Timeout ]
-crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-002.html [ Failure Crash Timeout ]
-crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-003.html [ Failure Crash Timeout ]
+crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-001.html [ Crash Failure Timeout ]
+crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-002.html [ Crash Failure Timeout ]
+crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-003.html [ Crash Failure Timeout ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-mbp-overflow-004.html [ Failure ]
 crbug.com/618969 external/wpt/css/css-grid/subgrid/subgrid-stretch.html [ Failure ]
 
@@ -7635,10 +7648,10 @@
 # Anonymous iframe > CacheStorage:
 # From two same-origin-different-partition context, the second `cache.put`
 # request hangs indefinitely.
-crbug.com/1285275 external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Timeout Pass ]
-crbug.com/1285275 virtual/fenced-frame-mparch/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Timeout Pass ]
-crbug.com/1285275 virtual/fenced-frame-shadow-dom/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Timeout Pass ]
-crbug.com/1285275 virtual/partitioned-cookies/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Timeout Pass ]
+crbug.com/1285275 external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Pass Timeout ]
+crbug.com/1285275 virtual/fenced-frame-mparch/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Pass Timeout ]
+crbug.com/1285275 virtual/fenced-frame-shadow-dom/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Pass Timeout ]
+crbug.com/1285275 virtual/partitioned-cookies/external/wpt/html/anonymous-iframe/cache-storage.tentative.https.window.html [ Pass Timeout ]
 
 # Sheriff 2022-03-10
 crbug.com/1304956 storage/indexeddb/dont-wedge.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index 6e3bc55b..1c0cc90 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: 1201e135a4caf5eb65dbb4dfc2763b959a45970a
+Version: 8678fd4c89c2efe2440f82a0a172dcafff462ff6
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 3d886d7..d2e8ecd 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
@@ -697,6 +697,13 @@
          {}
         ]
        ],
+       "force-sibling-style-crash.html": [
+        "093a01b809d97b00f797c3be14706cbb4d742ede",
+        [
+         null,
+         {}
+        ]
+       ],
        "grid-in-columns-000-crash.html": [
         "56cf6cfdbbcc43c1403692895cec7c0071f6eea8",
         [
@@ -1340,6 +1347,13 @@
       ]
      ],
      "crashtests": {
+      "chrome-counter-in-multicol-details-crash.html": [
+       "d992f0a1d96ec24d044c6b03894f4621994cbf88",
+       [
+        null,
+        {}
+       ]
+      ],
       "chrome-legacy-propagation-crash.html": [
        "8ec14ce09053946f78a016f1f37190814527e82d",
        [
@@ -3839,6 +3853,13 @@
       {}
      ]
     ],
+    "slot-dir-attach-child-crash.html": [
+     "3da70e3e1408b67d68f024ce97757801ad1cd550",
+     [
+      null,
+      {}
+     ]
+    ],
     "user-agent-shadow-root-crash.html": [
      "bd90b04f290f87eac420eb98457b58701eb31320",
      [
@@ -146018,6 +146039,19 @@
         {}
        ]
       ],
+      "position-sticky-overflow-clip-container.html": [
+       "63356349afecd3f2b25e080186ba509eb3980cab",
+       [
+        null,
+        [
+         [
+          "/css/css-position/sticky/position-sticky-overflow-clip-container-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
       "position-sticky-rendering.html": [
        "a4e03c59d8faba77884e4a290dd188044dcb23a6",
        [
@@ -190612,572 +190646,10296 @@
       ]
      ],
      "compute-kind-widget-generated": {
-      "kind-of-widget-fallback-background-attachment-001.html": [
-       "dfdb30764a05ff43a90c456ee7370a4b44915057",
+      "kind-of-widget-fallback-button-background-attachment-001.html": [
+       "065fc6dca601b2cf889d51b658e79658317afcf1",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-clip-001.html": [
-       "cf6862fa69a0d73a879376d67404436b30b591ac",
+      "kind-of-widget-fallback-button-background-clip-001.html": [
+       "7059583860fc37cae719f2bf3d3052c7fb71526c",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-color-001.html": [
-       "f080bae232ab9bbf8361f3771bf3050be8dc76c8",
+      "kind-of-widget-fallback-button-background-color-001.html": [
+       "bcef8dcd985a1967dffc06769e0a18cb36e559c7",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-image-001.html": [
-       "b5b5231eb165faf451a83e2cd383206b703f55b0",
+      "kind-of-widget-fallback-button-background-image-001.html": [
+       "c2ff3ad6df24d1c04b48439f0d864606c5c56496",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-origin-001.html": [
-       "d826c0b1669196c8ad3f1ecd5f3ca634ee6efb14",
+      "kind-of-widget-fallback-button-background-origin-001.html": [
+       "3e6a287e3fa1367cc9b8ec1d1f1b973ee06bae7f",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-position-001.html": [
-       "290d12356f87551e2f946b51ba1686750f9df806",
+      "kind-of-widget-fallback-button-background-position-001.html": [
+       "8c35eb79fb30074997ea103b562f9ed8ffdaedcd",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-background-size-001.html": [
-       "105a439aa9ff61ec553d29a61dad30ff6c030a16",
+      "kind-of-widget-fallback-button-background-size-001.html": [
+       "a177d5c50b698b00d868885a5f2dc81ebfac6fa3",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-end-color-001.html": [
-       "480a2926cba9f70fa4065f17bbc1fe02195fa0b8",
+      "kind-of-widget-fallback-button-border-block-end-color-001.html": [
+       "bc1220b5662cb858065661dd28e1b67f98e4b286",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-end-style-001.html": [
-       "a6fac1a09821f852cb3ad8abc77eb93efcce43f2",
+      "kind-of-widget-fallback-button-border-block-end-style-001.html": [
+       "326ccec4469709ea4ab8a4070240999b02596b19",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-end-width-001.html": [
-       "a73d5b52d3905f49f2d6c09195b350dc03227a59",
+      "kind-of-widget-fallback-button-border-block-end-width-001.html": [
+       "6d88e2a8e42d309e4650435af0f534259c4c795b",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-start-color-001.html": [
-       "c7be4f45cb06c8790906a54470e731ee0411f41d",
+      "kind-of-widget-fallback-button-border-block-start-color-001.html": [
+       "30f3867c5eec5ebe4da4f56c2d8c70163601586a",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-start-style-001.html": [
-       "6670cb671bebd9f4307b66d84fc3f319fc818de2",
+      "kind-of-widget-fallback-button-border-block-start-style-001.html": [
+       "69f21ffab2f4a1d701f747022a5b3299a8de2874",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-block-start-width-001.html": [
-       "13b932a84855521f5bf6e3de4d5a934e923ef23e",
+      "kind-of-widget-fallback-button-border-block-start-width-001.html": [
+       "05b17053bee2b29f9e64b4a7bf86f33330e29d9d",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-bottom-color-001.html": [
-       "8cb1ed7a985719498f5b7e6aeefa9e1d8752d0c6",
+      "kind-of-widget-fallback-button-border-bottom-color-001.html": [
+       "d18b6a1173877cd38f8e8e339670e5f02c6eda1c",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-bottom-left-radius-001.html": [
-       "6f9af43c4710ab3d2e69b20e3b345abd8ada3c9c",
+      "kind-of-widget-fallback-button-border-bottom-left-radius-001.html": [
+       "1da373a781aa8423277aa4abcd304ac41fe4d4b2",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-bottom-right-radius-001.html": [
-       "356457f3b06de0a51644af7aad6fb1743b9441a3",
+      "kind-of-widget-fallback-button-border-bottom-right-radius-001.html": [
+       "cd2ccf665f563ad7918cfd510cc732cf5505e283",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-bottom-style-001.html": [
-       "0173f0209103e274bdd1379b71eb5e247e35ef31",
+      "kind-of-widget-fallback-button-border-bottom-style-001.html": [
+       "b7aad05558eb07026fae67502a37b615e6f8ece7",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-bottom-width-001.html": [
-       "f8d2f84ff614645f3e41d64399f8df89b060ecec",
+      "kind-of-widget-fallback-button-border-bottom-width-001.html": [
+       "ecdf09ac0d01d6added655eef499384f1f7bf79f",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-end-end-radius-001.html": [
-       "9fa13b481eb12871bf4bf8527ff32446e199df42",
+      "kind-of-widget-fallback-button-border-end-end-radius-001.html": [
+       "b7a4342845b385e5f658e37e891e9dfe58db2f85",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-end-start-radius-001.html": [
-       "7f3667e2852651cf27828e09faafd3ac6aca3c7c",
+      "kind-of-widget-fallback-button-border-end-start-radius-001.html": [
+       "3756b2a201969c7bc98a6b50a5edfdb395a9f651",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-image-outset-001.html": [
-       "dc3c8722400a1da35f0153714d18f298822fd758",
+      "kind-of-widget-fallback-button-border-image-outset-001.html": [
+       "8ad71780de83c9b1c59884bdc50163174ad705de",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-image-repeat-001.html": [
-       "388ad9acd3ff54d591d70ab8f7ff8b4a83a84cbf",
+      "kind-of-widget-fallback-button-border-image-repeat-001.html": [
+       "a212ee7ef39e5c026253a91f231939153c02f045",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-image-slice-001.html": [
-       "971239c7d75d3c92b8f14bdac781630c2ed56286",
+      "kind-of-widget-fallback-button-border-image-slice-001.html": [
+       "d3f87ebe5ab2e9c08889962b0ec190bd165dba08",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-image-source-001.html": [
-       "96795ed435b86b611d82a5b4456e771586991dc1",
+      "kind-of-widget-fallback-button-border-image-source-001.html": [
+       "86ec41a3ff35ca23ff8b8a19c7650db471068a00",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-image-width-001.html": [
-       "ca57002d6ee186cb51c768579935d11d2fcb5c35",
+      "kind-of-widget-fallback-button-border-image-width-001.html": [
+       "53df9ea152664e6d91fbe577aed8c9ebde157118",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-end-color-001.html": [
-       "9ecfdfbeb3b51640a8383e87ba2335c867195505",
+      "kind-of-widget-fallback-button-border-inline-end-color-001.html": [
+       "85079f5c41fecef2379894d4d295d78e783d934c",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-end-style-001.html": [
-       "2a5496ecd5a6d076b81c74ff4f3b5407936a5d03",
+      "kind-of-widget-fallback-button-border-inline-end-style-001.html": [
+       "ce94d07364dfc7806e28be972369d076a6458d16",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-end-width-001.html": [
-       "62694106e484d2cf375cc3d435ebcb997bffb5f3",
+      "kind-of-widget-fallback-button-border-inline-end-width-001.html": [
+       "ea361edbabd44ee389f95129e82402919421c831",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-start-color-001.html": [
-       "eee53b109c907a2bf13d4972f218889971e742ef",
+      "kind-of-widget-fallback-button-border-inline-start-color-001.html": [
+       "7bbbbf97a0c55c1fa1708b442b8818bb9f397da4",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-start-style-001.html": [
-       "b8e980eb18b63ba03e219e3768d00de91c766f66",
+      "kind-of-widget-fallback-button-border-inline-start-style-001.html": [
+       "0ab244c5344de7a851c121f3e3a5623b950c8ca0",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-inline-start-width-001.html": [
-       "999028eecd45bd8763c337e04e354441479ccbd3",
+      "kind-of-widget-fallback-button-border-inline-start-width-001.html": [
+       "a2fe2f5a70a57495e7efcc26bdb6b818fc1e4bf8",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-left-color-001.html": [
-       "9d35d5a67d5342dca7f7e60f9f8165e53895bc4f",
+      "kind-of-widget-fallback-button-border-left-color-001.html": [
+       "ca8e684b4ef22d18543605098c9f3687df542fb3",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-left-style-001.html": [
-       "0c3834ae80a0bdf4a5eef34cadf742006d07d3cf",
+      "kind-of-widget-fallback-button-border-left-style-001.html": [
+       "e44cf3a2b6208c75ff09ac896e9cb810b3a7a11d",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-left-width-001.html": [
-       "b9db35da822b8e7cfe9f3f51d986b5308d4b4107",
+      "kind-of-widget-fallback-button-border-left-width-001.html": [
+       "561c51de03eef78c0099a4c4c0ce962ff2bee2cf",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-right-color-001.html": [
-       "4be6ac5969c5eadd4f119ec01ada771dcfd9e769",
+      "kind-of-widget-fallback-button-border-right-color-001.html": [
+       "1edc31d98db454f0fcdb7a7907125d4b16676cd0",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-right-style-001.html": [
-       "0bb296c65cf93a10fb69d59642870112cd00c988",
+      "kind-of-widget-fallback-button-border-right-style-001.html": [
+       "79a59df4cb4d4242f4c7788ba0be39902248857f",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-right-width-001.html": [
-       "8a0436d2638df615cdfe21b43f73c18fb87c7efe",
+      "kind-of-widget-fallback-button-border-right-width-001.html": [
+       "5125890ff0a58880b5b4c06e2a1c3d5df2ec44a9",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-start-end-radius-001.html": [
-       "27c8a5e33ba516246f800c4d1cbec5b910d0895d",
+      "kind-of-widget-fallback-button-border-start-end-radius-001.html": [
+       "39972ab69e349bb37094fb28b57dba6623f43a29",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-start-start-radius-001.html": [
-       "8f1369d505c5bb9baf7f828943d22e8a840febc1",
+      "kind-of-widget-fallback-button-border-start-start-radius-001.html": [
+       "47e454e4caa4aec5775dcd0565727db8a673f956",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-top-color-001.html": [
-       "b967850562c50a0c69dd7359f32d1d8766f58421",
+      "kind-of-widget-fallback-button-border-top-color-001.html": [
+       "6a331379ae4c6e19bc05634024c91bfc7cc4e60e",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-top-left-radius-001.html": [
-       "937cb0226ad4a3149f1cd10feed24d9f4b5480d9",
+      "kind-of-widget-fallback-button-border-top-left-radius-001.html": [
+       "83d5437b2cda27dc809a1aa82b74a30c065c7338",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-top-right-radius-001.html": [
-       "f2abad91c9d64536d035656020d7df9995647e4f",
+      "kind-of-widget-fallback-button-border-top-right-radius-001.html": [
+       "ad7801693c0fc7c265a84a535191b4384f2b4be3",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-top-style-001.html": [
-       "921933c283e974e46f56076d531b9a236e66180e",
+      "kind-of-widget-fallback-button-border-top-style-001.html": [
+       "41b55bdc10801b2599f254c41ef2862b079446db",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
           "=="
          ]
         ],
         {}
        ]
       ],
-      "kind-of-widget-fallback-border-top-width-001.html": [
-       "ff0fecf6983ae742f5bcb7b71916dec2ec68c9c2",
+      "kind-of-widget-fallback-button-border-top-width-001.html": [
+       "ec22310531282bb0d0c8cd573e7425823fecbceb",
        [
         null,
         [
          [
-          "/css/css-ui/compute-kind-widget-fallback-ref.html",
+          "/css/css-ui/compute-kind-widget-fallback-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-attachment-001.html": [
+       "854146dbeda53e3f3b05a27ccd33fd8d0a1d4670",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-clip-001.html": [
+       "c58d84534dea9a3c19dc734a261a0f63d97a36ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-color-001.html": [
+       "e1d5e7379a7c408da6975f957fb8c37542753e57",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-image-001.html": [
+       "c37517e78f130dbdb787d79e607c68876722f896",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-origin-001.html": [
+       "8a7f9502b0f48afab11a63be7d46502019916d55",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-position-001.html": [
+       "3edc2785edf8f8dbc747ce9c9adfbdb049e069fa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-background-size-001.html": [
+       "94816e45ae5979ae3aac889f256aef418db54a4f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-end-color-001.html": [
+       "fe6e5c970e1f055de756bfcfc9fdf272d44e8685",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-end-style-001.html": [
+       "489c662119bab7b8b58920e84cd1875f50621c83",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-end-width-001.html": [
+       "f257590b5fd576d8bc5e5bfb9da7124ce6f72750",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-start-color-001.html": [
+       "d1b1c63bb208f10733aaa01b80e01e713ab1dc7f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-start-style-001.html": [
+       "6da6d53162bd50300207042bf505304308056a56",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-block-start-width-001.html": [
+       "c18824f102127f6af6cd1fd61432ab429d29a1c0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-bottom-color-001.html": [
+       "d8dde9fa7746e32ed9ae16fb399c6726c5a69274",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-bottom-left-radius-001.html": [
+       "ea8b93a771e6bac9616752d34d74728e66a3f3b2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-bottom-right-radius-001.html": [
+       "4778156079e44f51cccde49f20454c8b129e086e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-bottom-style-001.html": [
+       "f4ccb3ee9cf08efd79f940203fd1a1482cd16942",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-bottom-width-001.html": [
+       "dcc9e39f3301070cbe6a4248ab6362ea62e0a6a1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-end-end-radius-001.html": [
+       "9f220014103e32a73dc6d9fa8b67e9c008fcb16d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-end-start-radius-001.html": [
+       "453d687a8fd5b880a9878358406c9d88de329969",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-image-outset-001.html": [
+       "1102fce1527c84309ae69dbb1f6f8083c8754281",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-image-repeat-001.html": [
+       "7b821272c79a7a89758ec5d995aa0d1ca0fabb59",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-image-slice-001.html": [
+       "d7694d677807f8fba0e1f5f1b0fa048e5096bcdf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-image-source-001.html": [
+       "0e274628f31923f8e24160a78f7a86f97160ef30",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-image-width-001.html": [
+       "c485feab751c31ba4ffaeb9b107162f1fb84e6af",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-end-color-001.html": [
+       "0220ac227cbf87c079a39895468868e4b82dc4f3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-end-style-001.html": [
+       "83f0ee6dc7037b3394e7f5073db410866cb6a392",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-end-width-001.html": [
+       "aca82890edcea255b2d9248ebcaaee194d63ba30",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-start-color-001.html": [
+       "7c3ea0e32cf202a24015df3da7796827cf82bbcd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-start-style-001.html": [
+       "329b717ca08b1bdaadcf29edd7d0f4c0fbd41b43",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-inline-start-width-001.html": [
+       "9d5ca5f95a73de492b29d25a54f26c649abc2d65",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-left-color-001.html": [
+       "00397b9cd30e95d30f8096573dcc512a9d59fe41",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-left-style-001.html": [
+       "415c45d8ae04061a00b8f2686cdaa4f197948bd0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-left-width-001.html": [
+       "0653e960926eacc8bb69c26b948343a89b03464b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-right-color-001.html": [
+       "f17035b651bc5574f16ddf477ba37da958717c64",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-right-style-001.html": [
+       "fd96b80bfaee4caedced7f3351b0f289a9c39c93",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-right-width-001.html": [
+       "9eb0bfd483538b7822cdbba6ad1f04e4a27d1151",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-start-end-radius-001.html": [
+       "c6f7b9c70fba036a3bae2b66dfc333848fae4d0d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-start-start-radius-001.html": [
+       "c3473dff4351a8f364eff18b13741d8cc20b6432",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-top-color-001.html": [
+       "40671ee01ede3f5c41bf87114b283bad92c6c688",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-top-left-radius-001.html": [
+       "bf8cb7150a8e79f098e9a5fea4ea4c95c6ea34a9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-top-right-radius-001.html": [
+       "bbaed9a39120e200ab58f26dfaa43f1315d029ea",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-top-style-001.html": [
+       "bb9b393d5d6656444a704643ef21cb70a45d9432",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-checkbox-input-border-top-width-001.html": [
+       "3260a9b13d4435613d6c017a71593db192ef03e1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-attachment-001.html": [
+       "a62ebcba168ba2b9175357b85663cf076e891e39",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-clip-001.html": [
+       "0da878e3c8341053c8646552e3c129595f01fbb8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-color-001.html": [
+       "3adca19760a87dade5ee34fefe7cca05df958431",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-image-001.html": [
+       "79d16f7a5fead178794431da825e5435086397a8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-origin-001.html": [
+       "30be831c55c7a8ceac6427b11831f8047b55a785",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-position-001.html": [
+       "a72860779ad46f1fb444824faeb1cd70b74aa258",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-background-size-001.html": [
+       "68f34df7686145eecf1bcfbe491ee243b60c2e07",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-end-color-001.html": [
+       "7ab8c50eda66dd80ff7b73c3aab6b665acfd2a65",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-end-style-001.html": [
+       "5fef1705ddeeae2b3d6888e6ded78b61de663c47",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-end-width-001.html": [
+       "de753d9cf571989fe3d350a9f76b9363470277cf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-start-color-001.html": [
+       "639e53697bba722878ff982a299e90352ca88574",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-start-style-001.html": [
+       "66138c595469cd2ca99039e4a2b5a7f0211ae7dc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-block-start-width-001.html": [
+       "7e338d3d27ec262def712d75c100f75110238177",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-bottom-color-001.html": [
+       "33e55cc3b7c7660ce5e205d311b43126602aed42",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-bottom-left-radius-001.html": [
+       "70eec00b9ac1ac94d5e6fa756d6819cd9322661d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-bottom-right-radius-001.html": [
+       "196edd37f019c7bdbc0e6e344346b9d6b63c3d8a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-bottom-style-001.html": [
+       "483a2008f2b16943a499f62d6cb5e8e120ba33ad",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-bottom-width-001.html": [
+       "0f6a26e54763f5aab75ef45a8697e1ecc77335fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-end-end-radius-001.html": [
+       "877568e595fc8d71779c7ca9630af696699bb5e1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-end-start-radius-001.html": [
+       "3b553d16644f24f62865b1a94a28b37a1562286e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-image-outset-001.html": [
+       "9aca0eb08ca5198a6874f2a59cd1c54fd2285d0e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-image-repeat-001.html": [
+       "2195aa4d09f218f8a921a5181a6a3059c5e1c272",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-image-slice-001.html": [
+       "b2d5a707106cae389b053147fd66ba35e19fd54c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-image-source-001.html": [
+       "5a4f6f54edaca989cde064d62ef2037afb8ed4bf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-image-width-001.html": [
+       "394163c402e4e7f7a4e8743646c3a4c7e0f748f1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-end-color-001.html": [
+       "c8beca67c4f3487c824b8ae8ca835d039f3c9a4c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-end-style-001.html": [
+       "2cca2308d3eff236c339b9f508155bddeb4e6821",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-end-width-001.html": [
+       "1e78d303b33f86eb6900738d161ecdfeac7d9871",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-start-color-001.html": [
+       "dc78893a4e072168398646b13b3a899f1bbd3d8d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-start-style-001.html": [
+       "69fc22e3b63a9444f00968de1cbdc6a20accd3cc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-inline-start-width-001.html": [
+       "e726ac45a1069a8d558eb69f46855aea6e606de1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-left-color-001.html": [
+       "06123f7d3fe02e8d1256c8652e64239367bf12a8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-left-style-001.html": [
+       "8a467f2f02fbfa5ea965849df1d5fdcd90917ad9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-left-width-001.html": [
+       "1631967fb4d41c8719872e36834da7e13f2eb1dc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-right-color-001.html": [
+       "3f80a29957c92cc91fabe902be8c3aa2ce688c05",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-right-style-001.html": [
+       "47b974b4a9c34ccfe870a586b989bb68b705eda9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-right-width-001.html": [
+       "7a640d231d5a1f63478de5fd1007bf25c1a1c807",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-start-end-radius-001.html": [
+       "836685bc1abb60a6603e5462b7f56b185f256de0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-start-start-radius-001.html": [
+       "1b8d113fbe29d525ee878fe575d716f9fcde662f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-top-color-001.html": [
+       "3ca939ab7202c5284c141897eff04958722e3ca6",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-top-left-radius-001.html": [
+       "6e789f088f4c0d8ea7611af4446199ffc873840f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-top-right-radius-001.html": [
+       "7f4b9195f84687113022b3fc84bce32a116a3fef",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-top-style-001.html": [
+       "840f69afcc72af732e4675eea15dbe397d4a8b9a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-color-input-border-top-width-001.html": [
+       "886996b710b021243fb57d6dc28f9da622dc8da9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-color-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-attachment-001.html": [
+       "7b112f084adcb290c8b2b7df5c53ae716f4ce8bd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-clip-001.html": [
+       "53f79ab38cd82f210cc095be85bcac010f3cab4a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-color-001.html": [
+       "2209bae6c014c480b60509102f5068fcd1cf875f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-image-001.html": [
+       "e385afe4aff6dd3168aef6a73a421312a409cd19",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-origin-001.html": [
+       "9d3386711fbc4405404e2b40fa170262f6dad1a9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-position-001.html": [
+       "6d70a3f546a439fef25a8f384ba184c356ce95eb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-background-size-001.html": [
+       "fabd5b383cc5fe02e583c7b9931a7d1dbf36bd3c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-end-color-001.html": [
+       "16b07513a561fb97c7a667ccd1ec4033e9eb5b61",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-end-style-001.html": [
+       "c5941567e186cd309326c32516dfdd2585a74ed5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-end-width-001.html": [
+       "c189260b1b18f036ccaa01d8824ffad3e3931b93",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-start-color-001.html": [
+       "f04c3729b766267c7b36238ee3f688a1cc272fe5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-start-style-001.html": [
+       "41ba3b7c27f65de339e4e783a1cd917e186cfddb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-block-start-width-001.html": [
+       "9738cd8528542ddb6bb0c63d160dee3d5d598a4a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-bottom-color-001.html": [
+       "f8d784aeb1bdd23ce279c2997f3318c6e0c4ddba",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-bottom-left-radius-001.html": [
+       "cac8afec0a3abac88906da8e4db22925a221cb13",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-bottom-right-radius-001.html": [
+       "3f64f28497aa4f50ac68532510065289eb9ac383",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-bottom-style-001.html": [
+       "1d45f056611e0ace290e46472a01e6f633f8c0de",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-bottom-width-001.html": [
+       "04065781f73564feb587f4c693fbc1019fa4d1de",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-end-end-radius-001.html": [
+       "8ce8dc3962f8b68f2bb8f50d721d5c255d692d70",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-end-start-radius-001.html": [
+       "8f1acf3c9f84c9cbaeeb1766561232cd2f3a5fd7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-image-outset-001.html": [
+       "7bef87079407928ad61cf892cfe3ed61616d8c20",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-image-repeat-001.html": [
+       "fc3ebd45dd97f47d1d67f9905a812aac896e165e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-image-slice-001.html": [
+       "b6c908f422a34865d267144e3268d408fdaf1eb2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-image-source-001.html": [
+       "44a4fbaa8c1783c4f4ddd3a549031a710101cd7a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-image-width-001.html": [
+       "39d018507ced1337580f52d5b98c61600f32adf1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-end-color-001.html": [
+       "313eab3d7b97776794ce861e386ec1164bc8c1f8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-end-style-001.html": [
+       "ce6cb72d03084e19067e4de90f4f08f905996b48",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-end-width-001.html": [
+       "31e49065313b2b8a9b20bb294b1ac2f8ca90e4a7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-start-color-001.html": [
+       "60f8eeb08d1b7b6a491cf182085bb3710dc75ddb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-start-style-001.html": [
+       "927f0695ff914d3dd1e33656e35155b2b865d29a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-inline-start-width-001.html": [
+       "ebb88b67c5534d11b8bca24c15d490aa37c559da",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-left-color-001.html": [
+       "eaeeddc8bb68a8a6867d0a1a7cc06209b5018c73",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-left-style-001.html": [
+       "171638f60954bf02dd924b1a218702ddb5767f79",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-left-width-001.html": [
+       "07b4ba5cf3e9028a3a1b532dacb0c0f79a943851",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-right-color-001.html": [
+       "ee08a5960471d36b3bc3e028c8a5514f0c8d6e34",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-right-style-001.html": [
+       "622da69d72c25ea8728062196f150ad3f2b636cf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-right-width-001.html": [
+       "cb0368dd053e15ddcb3effbf8e74b61e3d4c0df9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-start-end-radius-001.html": [
+       "ae98634e8cd3000c91a89fe6469f7221a971feb9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-start-start-radius-001.html": [
+       "45f7debe9db62dceb5d2bfdbcbd5aaeee2fa3dfb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-top-color-001.html": [
+       "985b3d528e51345bef902b5c5064befae70b434b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-top-left-radius-001.html": [
+       "5b5636609ccc2031108c6cb0fc17e1895f29c70c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-top-right-radius-001.html": [
+       "f0b7989c73612a6e99ca6da1fda81ab97142ac0d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-top-style-001.html": [
+       "b58218e3daeff693db06e13222c22d43791fd419",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-button-border-top-width-001.html": [
+       "e20e258e8ad71982b2ff51b693f80c855bde6166",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-attachment-001.html": [
+       "a7845bc7dcfba779f600dd457f33777d9554c255",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-clip-001.html": [
+       "5bb8e7d5d2a39048d0c2592fcb4f3dcee46b9916",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-color-001.html": [
+       "1780d56a417cae4e47232909092db89907be4a16",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-image-001.html": [
+       "07527ae7db3d39d8ddc8f50dfd5cfde324028fb0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-origin-001.html": [
+       "4e5b6c68ceb80bf5c56a00bea56191fb9e268110",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-position-001.html": [
+       "199e6465eb7c4af7ed58cf23d17db8ed9a5c2e33",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-background-size-001.html": [
+       "82d54e0c105212067be9dc6ea1a04b30b5dbf4c8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-end-color-001.html": [
+       "41038d2512405f88a46db59959d0e52958299403",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-end-style-001.html": [
+       "9c326f1e4a919150701908d08c764938daed74f9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-end-width-001.html": [
+       "3f2611f0e8e0c79d0c1bdaf3c70f4f80d275bf50",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-start-color-001.html": [
+       "a3252e39e6ac609ae7a4c2cb83125da41fe44d4f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-start-style-001.html": [
+       "6f737814138c85d391f3ad05e98d0539c826d1c0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-block-start-width-001.html": [
+       "1a671be3218db8a17c72c602e68ca2a5e0a5cb4e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-bottom-color-001.html": [
+       "5ac0db7d1edb929b78b9d1e676448d2439f57fca",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-bottom-left-radius-001.html": [
+       "df3608a14ad4b0d3afa7a60c5ed1225854c6d2c5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-bottom-right-radius-001.html": [
+       "3cc95934b42d322edb781d2dfff0fa05e8ca7054",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-bottom-style-001.html": [
+       "b146476a505438d1c1c3c1ec15f36f9c94811468",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-bottom-width-001.html": [
+       "00dfbddbe691670e8b2b4709d52db3c01ffe9136",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-end-end-radius-001.html": [
+       "34eaf07fd72499245a4955b52b8caf2dc4aa58e2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-end-start-radius-001.html": [
+       "42aa29cada2141d67257a2e14c922fbb3b0d22fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-image-outset-001.html": [
+       "368bb3a7c7f157e2ec09df68516d1d234f4519d9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-image-repeat-001.html": [
+       "5f0ba37f9dcc2a0d73c820c697872d80cf910f99",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-image-slice-001.html": [
+       "c611ad59b73578b46376d6635403502f12cafb47",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-image-source-001.html": [
+       "f84fcfc0fcda5107f62fdc4014a4239485aa7b11",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-image-width-001.html": [
+       "1936517741f984b45b327216936a2d5871e5c41c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-end-color-001.html": [
+       "db6e2d64c2a177d4d2d005447b63efb0d2400a57",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-end-style-001.html": [
+       "13502447a90a12ce760b956b157e0eb95f3be160",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-end-width-001.html": [
+       "25121c822a9b81ba5e789650dc2ce48a11b9d450",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-start-color-001.html": [
+       "f01b339b37ce3a323b5ad549c045f8a672a94644",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-start-style-001.html": [
+       "3ac0e472600ab261df6baca0adf0d21ad68a3aea",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-inline-start-width-001.html": [
+       "7e0c23adc7e5dc94d2bd3ccb91146f735432d72d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-left-color-001.html": [
+       "6309f000f33e1fc6b1d8d66dec2092101ac13757",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-left-style-001.html": [
+       "c502e833a6a9f5fc23e5b379b1b9b5e1231ea901",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-left-width-001.html": [
+       "7c8e95dbeae8c5978e680ec73ef66343ce117ed2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-right-color-001.html": [
+       "2bbbcf3584a35d9737f76a27b6bd446ea51f09f7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-right-style-001.html": [
+       "4b1ea450882185fd3ca86af77b249a2611eed7c9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-right-width-001.html": [
+       "02b93b0b7bc59f5e19af25884d624fbeb87b1f5a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-start-end-radius-001.html": [
+       "4beeb88981cddb6ce698a0e9200af24e6a2974c9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-start-start-radius-001.html": [
+       "019b6a52e5a95fba90eb36345ade7e4b7b3382ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-top-color-001.html": [
+       "6facf31f9928abba8f5a93f2de85331e78fb5ec8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-top-left-radius-001.html": [
+       "2ba3e038dd41854060a5f86b65ff82772f294fe4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-top-right-radius-001.html": [
+       "d15f23413b7cf38fa2240e3ac80a1520ce696f8f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-top-style-001.html": [
+       "d5bebef7a34c89fd55bb56c6ce7973e96938cf0b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-reset-border-top-width-001.html": [
+       "e705cd422d1f210da479a48749a868c168a0b3f5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-attachment-001.html": [
+       "cd69159ee9a9c950b013aac5aff1a205f1930263",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-clip-001.html": [
+       "1343ebcf0c870237e71d8a384836c5455e5bc152",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-color-001.html": [
+       "882ca799985d9d4e52c7ecaadd146a3a2ab28600",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-image-001.html": [
+       "769cf45b9f38ba2cae57a43ede2643a727c45aa7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-origin-001.html": [
+       "035cfdf25c3d055353482eb0ba8cb7a6d968a489",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-position-001.html": [
+       "5267fd2c78c2be45c897ccf3c04f93eeccc33e89",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-background-size-001.html": [
+       "73aca9954a553ce1c18433f09cbdf179d5f07674",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-end-color-001.html": [
+       "9d954d5714a36c43ef49c8923bdd97c35deae497",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-end-style-001.html": [
+       "81761e4671e2c62efad8442c2c898373f7f7d98f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-end-width-001.html": [
+       "e6b37c9b78db1dad1945ed2ef1adce58df63b138",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-start-color-001.html": [
+       "7bed3fc399e051e16701edb364d45198a7e39a41",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-start-style-001.html": [
+       "854d6fb98e89fb7298457d2941050afa496e5191",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-block-start-width-001.html": [
+       "9ad91b7ba44cb5ccf66a91c988bf6349c43b320f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-bottom-color-001.html": [
+       "093c18c70356d8c2e2bdeed85f4302c8989a13ec",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-bottom-left-radius-001.html": [
+       "a33640e2a85fe2f73bc3972d96fdc9b5712f8248",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-bottom-right-radius-001.html": [
+       "21ec7d1f872025b36bd1fb8dc29671c62970661b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-bottom-style-001.html": [
+       "26b31f93312c2dc903978e304a1a0eead9fdd7ad",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-bottom-width-001.html": [
+       "677a04ef161f7ae7ec79b2d22511b4af296f16bd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-end-end-radius-001.html": [
+       "426b75464e1eecde3e997b59a0010a268d43f240",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-end-start-radius-001.html": [
+       "58f7487c99d1bc6e529b331bd8e71b0ec19547ea",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-image-outset-001.html": [
+       "fe1d1f0cc2d4d45c8f6ff352f5fb9936574815e8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-image-repeat-001.html": [
+       "611aaadce8674ad86a80ba35552112fa8a681141",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-image-slice-001.html": [
+       "fbd35beef90e63fefec3c194ab0d9834b7ca107b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-image-source-001.html": [
+       "73b90e28b0273b9c2987b87f1ffaacc2f9d90194",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-image-width-001.html": [
+       "53be3f24e18abc5bc97a0eb947bbc8416aa117f4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-end-color-001.html": [
+       "5cef20ff8b0d39f92ed2d8370e6f3257ac804a0c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-end-style-001.html": [
+       "01c62b512081cfe8c8c3b9111e703f125ace1b48",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-end-width-001.html": [
+       "279ea4bd9d377a3ca9c5643220fc62d28018b416",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-start-color-001.html": [
+       "b4e93e5fb00a4d454f79a71975d603ee573de3b2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-start-style-001.html": [
+       "279a809043f8775b54e58f67a2a0e40bc255bac0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-inline-start-width-001.html": [
+       "99694bc67b9b054565aa1930605c953dc8706a8f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-left-color-001.html": [
+       "608d5d2664e0a97e485bcc258af4af09afb9aa42",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-left-style-001.html": [
+       "af85417326c9c1ab9940f646e360e608c6986f1f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-left-width-001.html": [
+       "c1dcc4fb9ede5b5ba0587e20beff2af53746b6b3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-right-color-001.html": [
+       "b2c2200537dbe4d59740a87dcb1a385c8dbd8d3d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-right-style-001.html": [
+       "890770c8721e9b17e43b7b2c8e4e1f073596804e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-right-width-001.html": [
+       "8128bb539fbbf02416dfb5e05a5884f53cd18a76",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-start-end-radius-001.html": [
+       "c9dc8fc0344decc5674a84d03193f9468f140031",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-start-start-radius-001.html": [
+       "fe0f50c862c2c3edff5c39c00daccf023ce52c3b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-top-color-001.html": [
+       "8e191355485fd7d2870cdd16522125c382c4876e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-top-left-radius-001.html": [
+       "00706e8e186474b0b1a0a0bd202b95a1bd3a4e00",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-top-right-radius-001.html": [
+       "d9eff0a7edec55b0a6cb797a2a11e0913e035553",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-top-style-001.html": [
+       "687a15637427f70672ff1119fc936979e6177ec7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-border-top-width-001.html": [
+       "8d21da1745b9ca098ca922661fa77df04842e4f7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-attachment-001.html": [
+       "d686b71ecbe9c535d676d606f09bc0d99c1843d1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-clip-001.html": [
+       "5e5bb98b734ff1976ca0ebf381f08dd2ec47c584",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-color-001.html": [
+       "a9a4f9ce475d7d89cde325598d30df1a43074696",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-image-001.html": [
+       "67ce5d447a7fdcb28a1416469fe6246ae72be69b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-origin-001.html": [
+       "d64ea1c55c2fa6e38c81231cf01ceac2c9b2fda6",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-position-001.html": [
+       "47328fa5506aaafde28eaac9b1c52da4a7aae1ad",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-background-size-001.html": [
+       "801451bc4ae6ece5b07747377ed62aa1cf12fecf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-end-color-001.html": [
+       "35c2b259aa3f2048cc48b94dc0c3cb3cf2e6021e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-end-style-001.html": [
+       "02418ca51adbabffb8a353fc9ecce1c88b42f69c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-end-width-001.html": [
+       "76ba5d545b57fec12a06f18248bd9de59f7a4248",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-start-color-001.html": [
+       "5aa72d0032b152a53030bf1952650e35f3dd4e72",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-start-style-001.html": [
+       "5d6f0deb6401a3c62e5b12f2587b98f28d741bee",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-block-start-width-001.html": [
+       "e1a0fe22c26c0fc6c644173c070c333d5a631d76",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-bottom-color-001.html": [
+       "0429d4cf7b04c69cbfe9d647b629c625db7fd274",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-bottom-left-radius-001.html": [
+       "1ff1f9cf1c5a4a8eae838f2de1488fab7c8378eb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-bottom-right-radius-001.html": [
+       "1a7b7521fd445acc3e5348067577999ee72045ef",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-bottom-style-001.html": [
+       "f33d4b54243cbf77dbfbd440f03e61c1d854f942",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-bottom-width-001.html": [
+       "f60665b61a310801081307ab07f9820613373cf5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-end-end-radius-001.html": [
+       "54109922601cdf3a510aa2ab6ba688312aeb5472",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-end-start-radius-001.html": [
+       "207216e61c15931e06ba04c369526d13fea0c456",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-image-outset-001.html": [
+       "e54d46aeb2020db5eb92581d61ba48057f9a69fa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-image-repeat-001.html": [
+       "c58d2436fdfeb324f9616bde56ad2b7274fb0a20",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-image-slice-001.html": [
+       "3d69aace321e50c8f12f3fbafbf165ce8aede4fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-image-source-001.html": [
+       "0300383427fa9b160866b47f392343c14d638aaf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-image-width-001.html": [
+       "51b084ec8b949bff1d6f9cea2557eb8bca8160da",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-end-color-001.html": [
+       "b002409c935c2eaa21654c57ec09216b3b9af895",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-end-style-001.html": [
+       "6ecfaaeeafd251dab950c93aa30f9af1f29d35a4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-end-width-001.html": [
+       "33d53e4cb524023c6280246a6f190e4878b8657f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-start-color-001.html": [
+       "8a936bb270ca867c7d754e976fd67e1a519c6932",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-start-style-001.html": [
+       "5d43ac916bdc6d57097951861c99bdcfba756130",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-inline-start-width-001.html": [
+       "a086c597625ff4f2d8b799406e89e91f003bc8ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-left-color-001.html": [
+       "647d0c1daaf79a7666dd2f0367d487bb24960e92",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-left-style-001.html": [
+       "8cd58bc9428e975e9dd57c3c91975836597948a7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-left-width-001.html": [
+       "a70ed497c89a07e2f5fc1c486182ae1bf8fc576d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-right-color-001.html": [
+       "9b286548ef8df75bd4a1d5c1407348cf3b61f451",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-right-style-001.html": [
+       "69bc1fae3b936e4ecc37356a0c630e904fae346e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-right-width-001.html": [
+       "6a918db51d575fdb9b0b26e879792b38569e9bcd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-start-end-radius-001.html": [
+       "84cc06a594e171e7bcd18788d112b28d4cdba12e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-start-start-radius-001.html": [
+       "1481a5fcc304ac061c448af63429baedd4b9d3d8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-top-color-001.html": [
+       "d5f2c6781775e04ac22b4d09f47b34be510a20ba",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-top-left-radius-001.html": [
+       "6de4bb323f5bcf6d94801edc7fbf4d79f7d2ed8f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-top-right-radius-001.html": [
+       "6a3055cc095aa5cebee6fd54c2cbfeb4c77ab074",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-top-style-001.html": [
+       "80099b9cef5a32d33db7b685af2fd5162e906760",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-search-text-border-top-width-001.html": [
+       "152a473d57aef6689be8019e594ab315bd43f86d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-attachment-001.html": [
+       "b36f8cf5efad246e0cce0dc9f75e24018375d53e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-clip-001.html": [
+       "88f96485a4b21152362961d650ee64e0a8af2885",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-color-001.html": [
+       "c5ebc0feae67d7425ace71a72afb6a0583f0f6cd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-image-001.html": [
+       "2bee179324998148f504e812ef606b9654609cd7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-origin-001.html": [
+       "f000839d1b052d15b31ba16cd19cbee39cee498c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-position-001.html": [
+       "1aea7465d56403c816f5f839da50c9235913b44a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-background-size-001.html": [
+       "0a92b03012ca8f08c0b0a6f69cb29348e69826cc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-end-color-001.html": [
+       "10c583ff72ddc15d5a62b85e9698835109f462e0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-end-style-001.html": [
+       "009e62337e8861040fff9a38f1e6220d24d57c56",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-end-width-001.html": [
+       "5d4c3e04c23b1a56c2e581369966fb87f1b07124",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-start-color-001.html": [
+       "7b85ed264fb5b00f16a4d6ae280682a27a5d8ad2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-start-style-001.html": [
+       "db23cc0010c844de478ebe121eca33aaf97232a5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-block-start-width-001.html": [
+       "ea8943575a2a94de4c207f81b569a4fd03a837ad",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-bottom-color-001.html": [
+       "a0c6aeabd1d647a5e149cb74bed0c86026c712e9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-bottom-left-radius-001.html": [
+       "27368813f99f07b7efe3042093da14ca8956fdc8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-bottom-right-radius-001.html": [
+       "d876112e060b09e5fc18fbfe226069ae5adfaccb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-bottom-style-001.html": [
+       "c08eacfb62e7bf2018ce1049aec22c3225fb5ac9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-bottom-width-001.html": [
+       "0f98fb5e43c221c5371c7dadb263143fe5f5b771",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-end-end-radius-001.html": [
+       "b7212ef44c7ea38522cd5d6cf55513e53e5bbb80",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-end-start-radius-001.html": [
+       "ca29a8126049b6c6e8ed6b37433029a7211d137b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-image-outset-001.html": [
+       "8505655ea41c7c782045ab5c9080337679f039ee",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-image-repeat-001.html": [
+       "42084e7d8b6dc7d4f8ce42a2fe11eb84088699db",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-image-slice-001.html": [
+       "03721a19fd6a7c315453d22a4f161ebcb71ccef3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-image-source-001.html": [
+       "b768500ae8500387bba2b99af279d7fef487ebaa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-image-width-001.html": [
+       "cd28c59c28f4b7b613cb5184d90c05dbdad2e409",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-end-color-001.html": [
+       "7b1109ed257e24740d0de086d991404ab68cd490",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-end-style-001.html": [
+       "47c7d1f49f3907cb82b20e4df78865d0b95d08fe",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-end-width-001.html": [
+       "2fde013d5bcb9b1db4932812678f24854a1cfcd3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-start-color-001.html": [
+       "debb7792402847289feda971e6aac248789a4edf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-start-style-001.html": [
+       "4e260effb7fb382442dc974c527c1e439f9991ab",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-inline-start-width-001.html": [
+       "9caca2822fe3b1be83b3e10f82efac9da597e581",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-left-color-001.html": [
+       "7c5118375b0e549971a146d42d0f85621d4f9c55",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-left-style-001.html": [
+       "8981d27e6104e87ed3ffd7cf502d08147135164a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-left-width-001.html": [
+       "5b93b5bc3d64354105f499d0951d93cfbfb75a75",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-right-color-001.html": [
+       "243341d21216ee6c8cec6d8c10e0244b5a93c389",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-right-style-001.html": [
+       "be67b5327d1828536ef98bbda470e2f1eb6bed77",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-right-width-001.html": [
+       "bffb7dc6ac343c1d62048e503cf697e988eec9bf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-start-end-radius-001.html": [
+       "ab96454e0b32b65649e965e964c06789e71143ca",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-start-start-radius-001.html": [
+       "0af363c8945b389f32a2665dc034cd6a76083775",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-top-color-001.html": [
+       "9b62a7c5fcaf23672d0d5f7e20600497182b9567",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-top-left-radius-001.html": [
+       "b6a1cd3476019de5f2d0d4cf688f47d05358d2c4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-top-right-radius-001.html": [
+       "48c4a8cbc7ef39618602b650dff67454cff4672d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-top-style-001.html": [
+       "de7b61f4a0d25c4967eab994bea664b195c7f79b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-submit-border-top-width-001.html": [
+       "df2deefd7f31073233c8d9834be1fa0ba2958759",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-attachment-001.html": [
+       "9aa99504877179ac93d1fd9d3c5d6b13e01e2075",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-clip-001.html": [
+       "e90ad46d577354107694b182d19616573c7ed075",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-color-001.html": [
+       "10e5bfcc11d443557eac5d0a323d0ccd0b152dcb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-image-001.html": [
+       "ab612a371371d8adf95c91a9cde2d4896b4f1d74",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-origin-001.html": [
+       "8b447fc78be29f73c553170a4bc018bf2abc482a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-position-001.html": [
+       "e75ae6369c8413bb1f42bbc17b8a9138933a234f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-background-size-001.html": [
+       "6e182151efcd6b3eb5a88fa13a119dca67ef2c48",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-end-color-001.html": [
+       "00536269b176ce3b8dd3fab9f7f21395612c55e1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-end-style-001.html": [
+       "460aab47c63a0d4c3c0bc42f338dbb2882f93bc9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-end-width-001.html": [
+       "bfe0590c9eb25fe9c30850cc05e98c48db344062",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-start-color-001.html": [
+       "a99decb693786062dd76d5e429271a8d9ee74e2f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-start-style-001.html": [
+       "fc3ac1a2fc0c5e43385ef3ea2b9f3d069f65c8de",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-block-start-width-001.html": [
+       "9fa513af7aab47dea158885e5e72634da35d8427",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-bottom-color-001.html": [
+       "2eb97b2d9c7c9a70029200826e91d2e301ee25a0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-bottom-left-radius-001.html": [
+       "34ffa2d2b37f26699450f1fe548eb91aa19d9ff2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-bottom-right-radius-001.html": [
+       "e889656af8f7879527edb6d7af3b8b0306e5e4a0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-bottom-style-001.html": [
+       "1afdb4b4862970da32eda70a536103a3d989978d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-bottom-width-001.html": [
+       "6540d05fa618e4793d7fedf7c136f73bded5b222",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-end-end-radius-001.html": [
+       "98735e9c01f3741a9ceb21cc9d70dd21524915e1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-end-start-radius-001.html": [
+       "6dd419e22d96b01107c95398baec2bcd6eb1d24a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-image-outset-001.html": [
+       "fc46ace6cdeb1b7e4aebe714fa4a3f55362758f7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-image-repeat-001.html": [
+       "709485ffc30cef571fca21c9b7e6e6eae1a637c8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-image-slice-001.html": [
+       "1b391cceec48cccb3ef4be00a60883f19e200db4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-image-source-001.html": [
+       "2523a8261c6c4a601692534accddc4be907d54e8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-image-width-001.html": [
+       "3f22013eee67b2403fee6d344465e80798f40674",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-end-color-001.html": [
+       "294cc707d02d65ceabcf5a0118595c11ce8f6a43",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-end-style-001.html": [
+       "97a9a5dcfc4b586ab51067ce0594cc8cb9ea7b06",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-end-width-001.html": [
+       "e0035f2d79af8fefaa3cecacd5902fc92410759c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-start-color-001.html": [
+       "f4b3974ab4714a29716a07e918b8b9d6cd7c5dfa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-start-style-001.html": [
+       "e2b1ca7c7a177333042593e4ab6dadbe126b9282",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-inline-start-width-001.html": [
+       "dc07a0ed82e4b0ff561006674651f5bfaec42006",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-left-color-001.html": [
+       "65fd37f7e0fac66a653151433766b08df5670408",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-left-style-001.html": [
+       "0c5fd539b612deca857fefe648cc0810bcb4df1a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-left-width-001.html": [
+       "5e8e54ef9e4d1e4ed182c7df8412bbe257140c70",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-right-color-001.html": [
+       "91385eb589cd7aad3a05b34271978a4f66e2d02b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-right-style-001.html": [
+       "8fe090fc33a51d3de1ab5c098445da4f0c1aad81",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-right-width-001.html": [
+       "cb3470e00072a56e83989370a24cc4e79c39a953",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-start-end-radius-001.html": [
+       "d8ca285dfc1455cc0feb227b97bc6b6c30487876",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-start-start-radius-001.html": [
+       "b3c94b3388beaeb4c09ffc06fa17dd988ebd2976",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-top-color-001.html": [
+       "e57dba8c03f48f43210c024f7106fe2924755114",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-top-left-radius-001.html": [
+       "d408d75db398decccdab6d14e2262d1f7fe433fc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-top-right-radius-001.html": [
+       "a39e8fff1fa172fb4a12bd447298b61a08de5a16",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-top-style-001.html": [
+       "cd4fcc4b103801dd0639b2c4c606f5ab80d7fb18",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-input-text-border-top-width-001.html": [
+       "21185f98908cad16c45a83563039181137f0be93",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-input-text-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-attachment-001.html": [
+       "b68f8ee1cce1b3fd52f49f90dce14e38498bccde",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-clip-001.html": [
+       "417f7154144c1372ea4f6236afaa4a3bae109761",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-color-001.html": [
+       "52e07c3f0361cf97ee1c7a77f7898355e9af2882",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-image-001.html": [
+       "27c6a2668fbe431aaa725a454c9afbbe8e07ec39",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-origin-001.html": [
+       "06963ba20d8225f7099106c65b72ee44c59e32fa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-position-001.html": [
+       "e6e1c180bef7141e47ea0faeb9d64cb29a462ac5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-background-size-001.html": [
+       "0fec1738a7a5307e8458f1b4a1b808ab12a28b40",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-end-color-001.html": [
+       "a35424ba40ab8e64886e0b55e328078d2176656a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-end-style-001.html": [
+       "471287ca74590de9163763031bcb1d82277d02a3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-end-width-001.html": [
+       "7010081f1b2f1109dd3b912a5b9e8c2203592bd9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-start-color-001.html": [
+       "c8861b4a7652bac6f65567fdf79d5997264bd031",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-start-style-001.html": [
+       "510214f2eeb19e289649b6e14fe209940d6ba628",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-block-start-width-001.html": [
+       "c9ebdbebccd7585e839ccbb42d600d35031286c2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-bottom-color-001.html": [
+       "8db0902fff0117195bd4ac898faa8fb9df51cd83",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-bottom-left-radius-001.html": [
+       "8bee975ead6f50c048816bb8ea1729e087800c8b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-bottom-right-radius-001.html": [
+       "00ac753675b96b87278b88626c09e2211040a75e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-bottom-style-001.html": [
+       "ac19679451f5fbd599edcb6d5473f5db4c312f6b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-bottom-width-001.html": [
+       "c18b4dcf0aa5169351ff50950aa18639a76154b4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-end-end-radius-001.html": [
+       "bb8fa354bb08cde9bdc3aa5f1135f0c16f144756",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-end-start-radius-001.html": [
+       "1263823068520e972a2096ccdcbe3ba6aaec95fe",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-image-outset-001.html": [
+       "ab9b973ffa24da539de64bd730990e6e9e43e554",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-image-repeat-001.html": [
+       "32eb2a38ffca6be90e8b55df790ee8f83144f967",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-image-slice-001.html": [
+       "1a6486e9d14174e195f52ea5746d40b00060336d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-image-source-001.html": [
+       "2ae8d4d475131e6a56b2c9820055409ef4a242cf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-image-width-001.html": [
+       "f22d5bfa5f8b571291ecc6f2871a516ee9465b03",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-end-color-001.html": [
+       "86c142554b8af9c794d5f6bc04d9a39da286b162",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-end-style-001.html": [
+       "dd0df7f55b26a7aa995f94d475b6f64b92fc8059",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-end-width-001.html": [
+       "31ef531d5a74196c986a1cd770da24f5a5e903e3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-start-color-001.html": [
+       "b721fb521193f233d5cd5db9aabd613df4344f6f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-start-style-001.html": [
+       "a521fa1a91b0bee2bf58c7dadf36f596da3f4fae",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-inline-start-width-001.html": [
+       "d8ad23661ee16e08b001791a0ee0e790980a807c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-left-color-001.html": [
+       "c2ec8d32693dffd5cc790fa91eac6905f6d48980",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-left-style-001.html": [
+       "33c793aed53473ec9439f9824e98a05f30d9a32b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-left-width-001.html": [
+       "f8d2311a08dbe736b47bf9541f3741c7bcff675f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-right-color-001.html": [
+       "6affa83d96046482a115fb40209439de4f08547d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-right-style-001.html": [
+       "4d508dbb30a37468d41edbe28ead3eb25805abbb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-right-width-001.html": [
+       "c32ba83dbf34eb3013f57eb5243712e12834e477",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-start-end-radius-001.html": [
+       "62be943c758efc4c6779e2225463ec49bed0f7ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-start-start-radius-001.html": [
+       "84362f3e8d833750ab12cf021d5032cb456d11eb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-top-color-001.html": [
+       "f41ae3c623465f9244df328e9882c2b94396e8d5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-top-left-radius-001.html": [
+       "ec8ed2996cb8297bdb1397a46287b43803232558",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-top-right-radius-001.html": [
+       "9c29f074f8006952f79023ce74ad85aec8059421",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-top-style-001.html": [
+       "34c6b54a1d8bbb224a4bb07ec3714e3f2ef4fbb7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-link-border-top-width-001.html": [
+       "73b8261ae651ca302d4258c1e0b179eb726f26da",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-link-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-attachment-001.html": [
+       "f9760122e9ff3860070f96871efee320feaa2190",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-clip-001.html": [
+       "dd353eb00ace915322be9c9777276457b8ea4a63",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-color-001.html": [
+       "2d6f903a06beb6d6f0801b0aed0b73306c39d763",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-image-001.html": [
+       "2217eba40951989dfd6b55fd8508dd7a1b2cb61e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-origin-001.html": [
+       "8c2321227deafd074f7117e7cacb158bf244de26",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-position-001.html": [
+       "b82a49811950f914a59a64903dca8090474beefa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-background-size-001.html": [
+       "2e3fa56313c55e405538f30fbd39c29a529f33f5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-end-color-001.html": [
+       "2b0742dec12596fa1a17fecda264a56b8186dfac",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-end-style-001.html": [
+       "cf733efffa1751ecd7c9b42c7be97a3b5ebd2c0b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-end-width-001.html": [
+       "44bcd7d59015f149b9423cb689f364a868c827ca",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-start-color-001.html": [
+       "c03b5eb012415e6dffc2a587bf5fddf2d651af68",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-start-style-001.html": [
+       "5ed90d368425814f98b88cdcee3be5a9330a64a7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-block-start-width-001.html": [
+       "0dae7defc1926ee711e9dea34963206ea61055f9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-bottom-color-001.html": [
+       "bc3d1bb8e7e63c77c4bd56a218f5e92eaeda9455",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-bottom-left-radius-001.html": [
+       "aad197d19232297036fc5e54a7d08858043f928a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-bottom-right-radius-001.html": [
+       "2ea501c5ce3725bbaf488afde7b2cbbe47c25a90",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-bottom-style-001.html": [
+       "887fe56ec67639f92d71721a7527ae6ddb8cde45",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-bottom-width-001.html": [
+       "5af8fffb41782ed227d6bf98d01bf6fe9e084628",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-end-end-radius-001.html": [
+       "bacfb1d979b11f3770636352e87339aa529989e0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-end-start-radius-001.html": [
+       "0a4d9bcd32721fe4d2f9c401c6f758b93092f53e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-image-outset-001.html": [
+       "f89f6c8c105fd712e87e948da3a46fd59b2fc3d7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-image-repeat-001.html": [
+       "c87a7194a782c0fa7c5cd480e098c8f45d49d960",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-image-slice-001.html": [
+       "ebb7d24679894575d8a906069fea1f5f40d84cf6",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-image-source-001.html": [
+       "a823e2281c30e47f49d7e736554beec3392b0b4b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-image-width-001.html": [
+       "c0d4f43d6a6420254c58c869cd50605b8d4ebdf0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-end-color-001.html": [
+       "624c594d416af86a1d6f93ae62107284d86c3fdb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-end-style-001.html": [
+       "233c4f2811f45feb672fd11eefe7b1088b7f4dfd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-end-width-001.html": [
+       "4d25da679a9c0571356f8d01747598ff73953084",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-start-color-001.html": [
+       "49d0c1d9f7b6dfbbe0d01e506d9f82078b5b84ba",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-start-style-001.html": [
+       "0a48844deebddff9e843d76ec46774a878c66d3a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-inline-start-width-001.html": [
+       "ae7382c574ae135acbf594e1f047adb92e37ec58",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-left-color-001.html": [
+       "f5cde670ff111e9337686257db95bc290c416ee1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-left-style-001.html": [
+       "48c1740146860da910e74aed0e6e9d64f96952ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-left-width-001.html": [
+       "0aca1fbaa7c37308c1cea7ac3caed332de8d33a1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-right-color-001.html": [
+       "b7b2360792b739e6dc7cc1ada3d20bb10d3e4cf1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-right-style-001.html": [
+       "24d4b2eecaaff8cb35720dd395acfdefbca9dcb0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-right-width-001.html": [
+       "a3659d56629da9f5bfb52034b746ab87efccaef8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-start-end-radius-001.html": [
+       "ac4ec661e0c3b3c0348c84a6d100434cf07f46c0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-start-start-radius-001.html": [
+       "62d5d57d2b838344bc3663ccf86854e48a6a12f9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-top-color-001.html": [
+       "28210d6f675777046dad6c30df249952788bd1b5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-top-left-radius-001.html": [
+       "cf25cc48944706320f856838ec3bc06333e4335b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-top-right-radius-001.html": [
+       "24f15a54b8175618e5be853e68ecae116f42e74f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-top-style-001.html": [
+       "37ba183f77016192bd600a70106ff7b938f20dc3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-meter-border-top-width-001.html": [
+       "c10fce34f4625e71a9332290c7c5fdd5f93120d3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-meter-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-attachment-001.html": [
+       "b85186c680ebb0cdf48884b2dc6d021edb548dd7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-clip-001.html": [
+       "e3df1f06a2bcd37d3dd77b2d6078ff59a1110de0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-color-001.html": [
+       "8e935212c7545ac3c86b58c6c6b17d32acb445af",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-image-001.html": [
+       "87e895e0439cece23fb7ae0b1a29c406b055e3eb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-origin-001.html": [
+       "a4958abd2405389c9cde2c55384858a359584347",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-position-001.html": [
+       "ed117a9d97789a8870a61008749901ae600f50b0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-background-size-001.html": [
+       "3047ef8414f3ff018f4422098cdb5f0496b4ed87",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-end-color-001.html": [
+       "3f0846230fd6ee8dd528727f7da0d8602c9e38e3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-end-style-001.html": [
+       "1cddf916cc4d734aeca2518c6cfafdb63eb510b9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-end-width-001.html": [
+       "fe21ae809faade94dccaf8d0199d631a24c08878",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-start-color-001.html": [
+       "67b5b8330e2a188c2fafbfc76eda446d207ff658",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-start-style-001.html": [
+       "5359a78b25dd16ec306b869b022ff147548c4cf4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-block-start-width-001.html": [
+       "1019a98b3e737bd0d45fd8966a72b4d8361576e0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-bottom-color-001.html": [
+       "366236c704411975a052dc1ac3c70efce6414991",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-bottom-left-radius-001.html": [
+       "6dce72a618dc7b512930ff84cb62bfd17ad93556",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-bottom-right-radius-001.html": [
+       "86eb1e7e762e9fae7a82066add54a273285073e0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-bottom-style-001.html": [
+       "900c7961bacc5f2530d6d6631d491774ae9155d7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-bottom-width-001.html": [
+       "67e97920d2467a0165a973c57dfac397887f9797",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-end-end-radius-001.html": [
+       "0f78fb7c169d13ced707de7f16e4d9b8880f5336",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-end-start-radius-001.html": [
+       "9f74da94cb2788adceb9433777a33b304bccabf4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-image-outset-001.html": [
+       "306c1611a0aa098d002a5ad9680d7597fb8abe03",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-image-repeat-001.html": [
+       "2ba0e04b0df209274f58eb6b3a0ee354c2ca1f96",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-image-slice-001.html": [
+       "42d6560f9c4fe4f92471e214231fa1144562c664",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-image-source-001.html": [
+       "80e6fdcc2b5d3033b77ed758a8c8aa3c43c68773",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-image-width-001.html": [
+       "5086cbae9217e3444de9bc451a36cd0e544bf52a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-end-color-001.html": [
+       "88427b7892af28b38ddeeb8fe164b9a66e4a8dff",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-end-style-001.html": [
+       "e16bb5a9488717e95466dbb9d935dcd9e7e63b9c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-end-width-001.html": [
+       "88f5615387b5e063f05964f0f5a38b295fde3b8c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-start-color-001.html": [
+       "a94c23d7170209026320f82ee784d2c200f667ad",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-start-style-001.html": [
+       "479a0faa2d32e09c1755d6652695255e5abbda3f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-inline-start-width-001.html": [
+       "480fbc72079e412bba9b962deb30f9a79e2c0143",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-left-color-001.html": [
+       "0f6a3c6fcba9f49fc7cda56b087a691d858387db",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-left-style-001.html": [
+       "aab0719b9b6a6a4db1b1e8a2e31be0e262c20e40",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-left-width-001.html": [
+       "6c24d4e733706194630df51f7b7699ab424c8dc0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-right-color-001.html": [
+       "2f0aa1351cd1c61688678c856ea23f4e3f6aca21",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-right-style-001.html": [
+       "02dfe722a0e405d30dcc4ee81d325724ff8c1039",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-right-width-001.html": [
+       "4f438b53209b044dbe7c7f48074ebde0801e4546",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-start-end-radius-001.html": [
+       "bdab3fd0ec33dbd91fc5b5a92a3b7b93472e6057",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-start-start-radius-001.html": [
+       "5c5f06890fbb38ad0bf702188da4cc41782be6d8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-top-color-001.html": [
+       "62c0d5f2b9f74bd2e7a99011fbe6e67baf1d0fd0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-top-left-radius-001.html": [
+       "7c6b62f8269aec603a7c429a432f0879564408d4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-top-right-radius-001.html": [
+       "f412a90350b96f4e10ddc42140f56e90e4266bf7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-top-style-001.html": [
+       "c8601df503c5526dc56824c1070a69a0f38fcbe9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-progress-border-top-width-001.html": [
+       "ea5c5c49faa8ef00e60f21106803a73bb4e6c9db",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-progress-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-attachment-001.html": [
+       "8c7e8ea16ea0204b9204d8775c075ff7925a9fe5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-clip-001.html": [
+       "cbb6a7ec1010a82a1cab2997536c2b8b88132959",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-color-001.html": [
+       "ce5b79bbe2758db1efdeac9f5981ca09a00d7ed4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-image-001.html": [
+       "e15e9e4c1583dbfebe4df677dcf32bf645da6400",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-origin-001.html": [
+       "0e81e6fe384e29eee639191425f0d18b52149694",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-position-001.html": [
+       "4fa8e7af26eec614544bbc6edff17f7da50ce058",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-background-size-001.html": [
+       "1a989ed6dffc2b3f6b4ee402ada23acdaa871883",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-end-color-001.html": [
+       "d7708ce4cc21c22799fe49bda50d222192b2c922",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-end-style-001.html": [
+       "4707f09aa945472cc1f3fce21f846daf47998e6b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-end-width-001.html": [
+       "a0098cc0ecc48386dbebcf3edaca18040e1529a4",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-start-color-001.html": [
+       "0375cd802f35f8e01b8e82f7b77d62597ec35b7c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-start-style-001.html": [
+       "ec17b48c6bd3b26e65408124cbb397c64df41c8c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-block-start-width-001.html": [
+       "2e3d9443cd26597ae08e982618ec66041493f8dc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-bottom-color-001.html": [
+       "1cbebba1d7209099fcc82b5ddc3a324fee4838a3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-bottom-left-radius-001.html": [
+       "f9c253da89d83754a00a3197a7623ff6cfd2e2cb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-bottom-right-radius-001.html": [
+       "5f1458598c3a4c1475f299d53700d00a785b63cf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-bottom-style-001.html": [
+       "96c893220104d7bf74e616864e0d36d49146546b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-bottom-width-001.html": [
+       "be80a5af60b32a66ca1a8eba0102a59d7e2b4bd2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-end-end-radius-001.html": [
+       "f03b3ffdc2fc94aefd1515e92925a8ef14855b81",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-end-start-radius-001.html": [
+       "954a4ff433e698bb03a5c370033ef96bd8c4a829",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-image-outset-001.html": [
+       "896530685676c2a68919493fc222d599c0476b79",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-image-repeat-001.html": [
+       "662f9ca648b11ec8823a7b468bd869e395618394",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-image-slice-001.html": [
+       "f15ebe31a75d837343b69dae704ad32da0d9447d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-image-source-001.html": [
+       "539ebb7b5d52d476556c99f59e8d6eb9b131988f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-image-width-001.html": [
+       "a17d8475dd6623e6267104d61b219bb507af3294",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-end-color-001.html": [
+       "87720700681f656ded2cc2d76ec5f5b7000c2ada",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-end-style-001.html": [
+       "271f4e37fd71297c5deb883b9c7d2deb87c3d282",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-end-width-001.html": [
+       "7f61c6fb5932de52e9a7f7582e2c13504375c2a2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-start-color-001.html": [
+       "6c25f25d174268dba7f7f2c81e4037175ba4ffa2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-start-style-001.html": [
+       "5ced60d4bab9c593f8e59380414767dc930a1d37",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-inline-start-width-001.html": [
+       "f39286a771fb1fe525bffeb989236ce456d807a3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-left-color-001.html": [
+       "b19deb2c662053202642b1f375815a3b9605ebd0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-left-style-001.html": [
+       "56e7d9ef187e157d96e5a63294c6add509d0097a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-left-width-001.html": [
+       "2ee2531b681a427f7b31bca6bcd0292073de3a38",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-right-color-001.html": [
+       "8fbb9f4115f0ca1b0e4829b5b06faee8c4769bf1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-right-style-001.html": [
+       "df88bff3fc9ed8714407150c77ddb9acd77f3513",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-right-width-001.html": [
+       "22ce6e076fba56ab380bc31872b5c3c0233daaae",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-start-end-radius-001.html": [
+       "360b827151ab0b47b419116f53ec2d6368d38d44",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-start-start-radius-001.html": [
+       "6a6904d0137bb2662c874f04c50fbf77fcfc5a8a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-top-color-001.html": [
+       "08086865d66f4e71a577a54722d40494c78c2dd2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-top-left-radius-001.html": [
+       "426cae160ec59a56f8ccbd848d978dc80a6a1b8b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-top-right-radius-001.html": [
+       "b95427553ea3eb7a833395cc827cbaf00792f812",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-top-style-001.html": [
+       "ead7b86ce6f3f77cb9d63556def82bb1c6749a69",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-radio-input-border-top-width-001.html": [
+       "c2a867421b6c93336d09a67574bf7736d08fa968",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-attachment-001.html": [
+       "72c767a514b70c0b33c4524e5cec917de4bd793e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-clip-001.html": [
+       "790641dd9da6dea91ad1eb1e979ad7153a9ae7be",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-color-001.html": [
+       "b3e18adffa8246663ebffd57ceef44323e833fa5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-image-001.html": [
+       "4043b25fe9acd49a82b79a3708044030136ff770",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-origin-001.html": [
+       "a80b97b2a12bec061583636df49262559ce0a22e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-position-001.html": [
+       "895faa00848db94c97ffd902ce47e42e0acc0bd9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-background-size-001.html": [
+       "a3513799ae14bdaf508024217a03a4ba0e9a50c9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-end-color-001.html": [
+       "557070fe80da61008ec1448aad899a625607ab4b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-end-style-001.html": [
+       "b0748f3f5bc7fa8ff58dcc8101d9621aa44d8e5b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-end-width-001.html": [
+       "f5b075ac170702fe302dda9e8b74de471ac39003",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-start-color-001.html": [
+       "28a37eae6a66ebd4dcf3ea5c2525fc724efcc971",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-start-style-001.html": [
+       "3ff761c72119cad75adc46cfacd9f02025d38d37",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-block-start-width-001.html": [
+       "78458b66081973bd09e842ed0f94077596879f70",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-bottom-color-001.html": [
+       "fabdf0a492c43367f8d38607c693fbc66618ffaf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-bottom-left-radius-001.html": [
+       "4f4b4c6d919d2db15ed2f0a19c8b65eeefa8dfd3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-bottom-right-radius-001.html": [
+       "5a0bdd2902a4d6ad9017ff96dc2ccc971b16bc45",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-bottom-style-001.html": [
+       "2478e65d1fd9128321dc501875bdebf825b41b76",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-bottom-width-001.html": [
+       "924356441be4e222f199e7bda7cd9fad82aacab9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-end-end-radius-001.html": [
+       "96b8ee95c23dafa5c53f91a1d46bad13661e1f14",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-end-start-radius-001.html": [
+       "2c2e4ed67a0cefc802dfb90d84f0d507cf0d1ca7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-image-outset-001.html": [
+       "9890eae400c798cd691317786b663eef139087b3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-image-repeat-001.html": [
+       "a3602ef173399818752b952b66e3b308cd014c2c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-image-slice-001.html": [
+       "0c8ffa168b4fa1105b785d13ec5b8e028ab04789",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-image-source-001.html": [
+       "60fcd035a1dbf3b42cbb5fcfe4d4438fda095c3e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-image-width-001.html": [
+       "59098eec896ecaa33784d47632236491ec2ef5fa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-end-color-001.html": [
+       "16e2c1bd4738468a6a7d8d1f3caddc92ca5afd60",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-end-style-001.html": [
+       "7e664810f31c38dbcfe138b4944cfa5aef77d503",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-end-width-001.html": [
+       "eaff4997e6e61043d70261b73bfd61e65edb7e00",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-start-color-001.html": [
+       "163694169afde092e6b4f0b788f3b29837fdbac9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-start-style-001.html": [
+       "a5b216d1fa4032bb1ad85e76110bf27ebbf08f9b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-inline-start-width-001.html": [
+       "0eb1f6ec6ff361735b21e0975212e1e2541a3efc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-left-color-001.html": [
+       "02135eae2d34afd6fdd84576e8cded488846ad5c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-left-style-001.html": [
+       "edef1998be498313121ed43dd2724a5971c42041",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-left-width-001.html": [
+       "e9d2804bcd58801fe5d8f1cda7a274e8383a8b74",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-right-color-001.html": [
+       "fb20afa6e6ca307b738cd02c542e6a43b7675985",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-right-style-001.html": [
+       "6f4bfe40689b25aa42200a79e005cfdcb266622b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-right-width-001.html": [
+       "03422cd5f3ffb57744bd417d14e2e4409d2e13e8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-start-end-radius-001.html": [
+       "c5d4621893b9293914b46ac54e9adcfa0d32af50",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-start-start-radius-001.html": [
+       "5c4a81f0643b0535e0cc7c1858e79ceb4c91f231",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-top-color-001.html": [
+       "a8b12f51b0b80d6c6cbc7c3fc83fefa105057e6b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-top-left-radius-001.html": [
+       "0eefc064b21990feb4d96f0eaf32f70c8d2b32ae",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-top-right-radius-001.html": [
+       "d43e98ee52ffba5a469994e26c3281acbad2f39d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-top-style-001.html": [
+       "1e8dec3e85c478cf606d973ab8aebfd93dceaa5e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-range-border-top-width-001.html": [
+       "a45f6b142780623addab8d4fda6947288add8f4f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-range-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-attachment-001.html": [
+       "9ba894427444c72a89500f7eb02e13314e763765",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-clip-001.html": [
+       "719bec28ed4048a2c972e28ad55b996c83a181ec",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-color-001.html": [
+       "9092c41bd91cb8890b43daa048b98ef652e525f0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-image-001.html": [
+       "972c343dc845f3f15e69ca98a99fa53204862681",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-origin-001.html": [
+       "abc9acfc41f5d24ec707989910735535573d7448",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-position-001.html": [
+       "999fff4211225d8154766f5e1b33e5bff8723dcd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-background-size-001.html": [
+       "977bc0e835434990d24e804d9f133cd67fe6734c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-end-color-001.html": [
+       "46bdb5b0e4c04bfdf0afc95509e452a86906ec64",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-end-style-001.html": [
+       "aa3788595a35a1db157349111910fba3a3c04097",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-end-width-001.html": [
+       "cebe998f89983d8dbddf62544634a2bec4e13a58",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-start-color-001.html": [
+       "9c238d576090fe0c36fa311795aef7f7f90cdd8b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-start-style-001.html": [
+       "7061a367ba0281f3ad2df9efd72d66c7d82352ce",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-block-start-width-001.html": [
+       "34578a4782c5a33be78b38864181072f572f7e69",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-bottom-color-001.html": [
+       "d1a7a01295b8053d7a18783d955aef9aa135868d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-bottom-left-radius-001.html": [
+       "1c70cd361c7ec50caff095424f1eb506a8aa1592",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-bottom-right-radius-001.html": [
+       "5185032c233e9b2dbc3de6fb8c08858baa1171be",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-bottom-style-001.html": [
+       "ceda4319545515b535e5a5395795f352f22d0d4d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-bottom-width-001.html": [
+       "3c43f47e59499d93377c04ca49c6cd553c467d44",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-end-end-radius-001.html": [
+       "182c527cc53030f6fe5ccdb2a2641508e6649c90",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-end-start-radius-001.html": [
+       "efbd14d7de4eb47b6f3a8c8a8551eb97ef23ca8e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-image-outset-001.html": [
+       "5a0eb9beab1260e913bc3bf5c2b4199e360198d7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-image-repeat-001.html": [
+       "5ad2b2c0f838106495a38e35a4bbf7522e1b1416",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-image-slice-001.html": [
+       "3993331322e5499dbfdeea3bcdfe1504af47485b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-image-source-001.html": [
+       "9c9da2935a6473301c78faf359665db66d6d5448",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-image-width-001.html": [
+       "d03492c583fc2d83351ee53551c7696a5a923d37",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-end-color-001.html": [
+       "b8498148b64d076332f8b58b46235c0fe7aff78f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-end-style-001.html": [
+       "13a75cc5cd60e91e35d5fb04f25da614935a2a40",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-end-width-001.html": [
+       "40d13678cca02a582cabc06d9bb3478a7714676c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-start-color-001.html": [
+       "de4241fdf990ef3eb4dde0c13202b66ca73efc11",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-start-style-001.html": [
+       "9ea8f4dfe54907b818920d06a836ad0576cf033c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-inline-start-width-001.html": [
+       "dedfa6d40e83dfa987078cd399337237aabd5022",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-left-color-001.html": [
+       "5f88004404fd61f33c3188d88d1da85cba889d4d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-left-style-001.html": [
+       "d574ac685053c4969fcf3143331dc21bea1ffe4a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-left-width-001.html": [
+       "0c466b38ea428c898c5aa7cc2b7b30a922b39464",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-right-color-001.html": [
+       "ac2c9b29cf0650585af363adf0419ac37adda254",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-right-style-001.html": [
+       "671dd6fcccd8a2138d0325ef2b784a52989d7d6a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-right-width-001.html": [
+       "2c7baec75288e976d505c070107c2f8d87caea75",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-start-end-radius-001.html": [
+       "43c1b27a7e88dcc01815bde35227067e159227d8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-start-start-radius-001.html": [
+       "f902a43179494c4ac0769b5e30c6afa6dfc31c6c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-top-color-001.html": [
+       "b030e5cd21995f2836dc9eb5203b28c6574e9ea1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-top-left-radius-001.html": [
+       "35d83e296eef2678bea2a7f84f44d1d3506d5bda",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-top-right-radius-001.html": [
+       "922a101bec949dfb98f7648202abb75e544e8dda",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-top-style-001.html": [
+       "dfddc274ebb80a9c5cddc03ec7db195238a0410d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-dropdown-box-border-top-width-001.html": [
+       "30019434dbb24a71514b6de46ea62f60c3f8902c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-attachment-001.html": [
+       "b6f4087456d6517c52c374d758eda3b086702801",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-clip-001.html": [
+       "43f87212d185adeda107350933e81efa13c75b35",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-color-001.html": [
+       "b349902c1bec04fd6738423c17f352ad6e5ddd16",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-image-001.html": [
+       "bf8b706bf15f407a4507fd85416b54e532e9cfe6",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-origin-001.html": [
+       "dfd1a934a8706b4470ac2b295c75a7c10558f99d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-position-001.html": [
+       "41b6a7b81b0c5aca4f9e8ae2600da05f241cc5b9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-background-size-001.html": [
+       "64fe9a0c892fbaea3529aa130079793f4811f465",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-end-color-001.html": [
+       "17a010be36197dac8a226fcc6ba6d14cf08e289b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-end-style-001.html": [
+       "f079e82abceb3a4659c3daf45137a94d19e7f92d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-end-width-001.html": [
+       "8f741e2136aa2da3b6d4b43c97c2339d288d4323",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-start-color-001.html": [
+       "28ff9ee6ae25cf69cf01d09598fb14df2de792b7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-start-style-001.html": [
+       "dc7bcd09520b7d5d6b7fc1a663348fff5f0a1ed5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-block-start-width-001.html": [
+       "0509dde5fb4cd5c9e853468b10f2d09134d70c9b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-bottom-color-001.html": [
+       "af7704d0dd87e1644b7a00da0d98e5230e3a517b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-bottom-left-radius-001.html": [
+       "b38b443531a59ab8a135aaf135e6959e7bf7b5cf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-bottom-right-radius-001.html": [
+       "f797e078f85215bc5f6cb73fb07b64a10939c280",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-bottom-style-001.html": [
+       "6d895bce48c03b5d0c1c7a4b887347d9fcdd6f13",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-bottom-width-001.html": [
+       "14ea0153c5e3d71859aacde49ae91d12df64d88c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-end-end-radius-001.html": [
+       "d10504774786007547afa72446723ed9f9ceb869",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-end-start-radius-001.html": [
+       "0ca58e5d0410872be10550c2a2d4325783f0ddff",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-image-outset-001.html": [
+       "367d1f64e19ae61d8dcfcaaed8ad187a8d839820",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-image-repeat-001.html": [
+       "558ab52000e48ea0574e5f831de271f39ef55172",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-image-slice-001.html": [
+       "736ffd422d1413e700b3b8da844d630e20ddfec6",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-image-source-001.html": [
+       "987ed46626247c5ef7e76fd5be07858abf65de23",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-image-width-001.html": [
+       "e6d824e21bc9d777f4cddcc1f205d97ba70b06fd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-end-color-001.html": [
+       "269805c299c15dde58ff986b57da5a6c308fea07",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-end-style-001.html": [
+       "74f67947104b47863e42383afa3e2f47080c632e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-end-width-001.html": [
+       "bfb561c4b15469783b0f6c801df508428ff7ba02",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-start-color-001.html": [
+       "7403def5f488413d1bcaaaeab2cc61dd1487f01c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-start-style-001.html": [
+       "235436bb4ac61f7fe8a1011dfcd30d656c42838a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-inline-start-width-001.html": [
+       "24f6eb28a96d3d645015952ec443429fc7af9034",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-left-color-001.html": [
+       "107eeec6a20d5e53787647929de653ecb9ae6865",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-left-style-001.html": [
+       "a97d90c5cb8b3dfd6fe142a559b07d7661287dca",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-left-width-001.html": [
+       "894276bb89f328c4d7bb697c618a438c554d6a6e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-right-color-001.html": [
+       "6ebb3df1977411e535b181e7108d73c2c45b8528",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-right-style-001.html": [
+       "4cc83727db01163ec5e7b9de9b02cd56f15c195f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-right-width-001.html": [
+       "029c608827714be344aa39571bf31d6f4ebd4bd9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-start-end-radius-001.html": [
+       "464d7dfd1bbe2a7ea6b2747ff4caf59cf7cc4937",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-start-start-radius-001.html": [
+       "81c7892743bf1621cfb5b8bda1d6280fa7816f01",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-top-color-001.html": [
+       "d7c68ac98d9cb44bad1d3ba962953801f872d622",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-top-left-radius-001.html": [
+       "3b306bb7eb125d2658fc1a3e2f2e624da18c407c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-top-right-radius-001.html": [
+       "ae8091382ba1283b9dfe8e35aff04681411d1f89",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-top-style-001.html": [
+       "8fbbb91e2ed90f265a593e341980c6159b039f2b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-listbox-border-top-width-001.html": [
+       "b80972a50eaa4a95ad283e46f1cf29ae160b343b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-attachment-001.html": [
+       "4378b659c2c1c344c8c5f5964e6983d8b2e47c28",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-clip-001.html": [
+       "d62a086486f15e73886593d0e3a1a48e581c547b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-color-001.html": [
+       "bbf309938c8885399f5f79dd10230e3271e7c93a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-image-001.html": [
+       "12c9fd5c4acf0e237fc8b903fbded5394beec441",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-origin-001.html": [
+       "336fc8623c043468edcfec3b39cef99c07bdc209",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-position-001.html": [
+       "7f4013654ff13db983f53d287dcbd12924926268",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-background-size-001.html": [
+       "bb420ccf7352081807a94e9e9e7bb51894ecd356",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-end-color-001.html": [
+       "1a476acc4658edc4d4926b052a5b39c253c6a988",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-end-style-001.html": [
+       "db784585734fa9fe7600af31fcba2e2e142d6a19",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-end-width-001.html": [
+       "f21984e12c3c19ddf454ca5c39ea1afd104617da",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-start-color-001.html": [
+       "95308ab790f75940e47da85cba4baf19ef51fe43",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-start-style-001.html": [
+       "1fa80c7ecacf4d3ae8d365ec205fa4a969ff3b76",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-block-start-width-001.html": [
+       "57553cd3065db713f17c5144a842662765e246fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-bottom-color-001.html": [
+       "4666747e225a74d6c272672dfcbc6541b9f34f23",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-bottom-left-radius-001.html": [
+       "c58d57f7096b21f3f34b0f4bc8485f7517717764",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-bottom-right-radius-001.html": [
+       "e302b17d5460577c681b447e5c982fa8f4b30a99",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-bottom-style-001.html": [
+       "c0154d1e8316ac24c29c32099b8e0fe8ff2e7c4f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-bottom-width-001.html": [
+       "1dc70272c26a80f6fc2aa66d238e6c577d9aaba7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-end-end-radius-001.html": [
+       "ebedeacd9cd2ccbb4eb3a7c176bf028057c370cb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-end-start-radius-001.html": [
+       "4a023992368de242b99a4f1b4aef8049ed611ed5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-image-outset-001.html": [
+       "015737dca3cef99942639ac27135a7acc3b5fa68",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-image-repeat-001.html": [
+       "cb03b812f03b62d3047a88c404e50775dc53f2e7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-image-slice-001.html": [
+       "799010070b8e894a09259a3c4b6cc74ceadc751f",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-image-source-001.html": [
+       "1b3838ebb4793cd3615a6b0755424d7a6ccda1fc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-image-width-001.html": [
+       "d78b9d9f384d7ca604b51d205edecdfa0833b372",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-end-color-001.html": [
+       "20c896d910984257c628ce76f998e32d991d910e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-end-style-001.html": [
+       "15048d4353f1e5e00a7dfcaf46002a40114c71de",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-end-width-001.html": [
+       "ad7b00ede88de39cef9ac714e95a361452bea6d3",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-start-color-001.html": [
+       "4641bb3e77233bc3becee87c5a29b9d2c9a74973",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-start-style-001.html": [
+       "ab06492b23181c40060c44629690f0b5861853d1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-inline-start-width-001.html": [
+       "0e3fcac797a1ba7816a57a085d1277b9f3aba292",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-left-color-001.html": [
+       "9fa4d380cf3a68305162eecf2cc655400ee41217",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-left-style-001.html": [
+       "d1351ee725d0684ec507a82786296761a213b10b",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-left-width-001.html": [
+       "bfcb9e17847817aed94627f6948fb7b5b6de99e0",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-right-color-001.html": [
+       "71d6758b80e4616624951ef9f12f9915f396d9d2",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-right-style-001.html": [
+       "0927300e74b2b46a5cfd9d3380cbb107835ab5fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-right-width-001.html": [
+       "01928ca8b808e7a15a2ce5835c717bc9bc84f4b5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-start-end-radius-001.html": [
+       "7fb7bcf7f94c7554ca09ba00f2da583a80af3759",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-start-start-radius-001.html": [
+       "35fef879cc3ed282fbe15ec88a852fb45017725a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-top-color-001.html": [
+       "cf1d4f82601ec1cea1e8d58d4394f31e6944faf9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-top-left-radius-001.html": [
+       "8b0eda3d788251b3252562e6d69743547d981bcc",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-top-right-radius-001.html": [
+       "d2ec819ac667c8af71877de77878b5a58e7ccb27",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-top-style-001.html": [
+       "5625d4f13216f18a823b1f5556b81d5a3d44265c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-select-menulist-button-border-top-width-001.html": [
+       "536a7ac8f21451578633eeeb9c503e4338b4e04c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-attachment-001.html": [
+       "ab67317a2088d5de217cc86f5465d088c414db26",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-clip-001.html": [
+       "821cdda2774642696e696b47bc56cfa41b3b06ed",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-color-001.html": [
+       "999bf80ab42945e3f7f80e61afba2172c9ad41d5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-image-001.html": [
+       "30171213b4b496bea19ed66a45abc543cf65890e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-origin-001.html": [
+       "9eaaeabc5054054980677b0783f9e8f4f826d8c5",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-position-001.html": [
+       "42c4f0ad61dd9576fbf6917751b1409cb1725b72",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-background-size-001.html": [
+       "00d57199ada8413d63aa4b34225828ac3ece2a72",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-end-color-001.html": [
+       "c44d7d585eb510f7537039f862c1a912ccbedb0d",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-end-style-001.html": [
+       "61f2f20b7ba265f4a5e16123d4a535bc40f8de92",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-end-width-001.html": [
+       "c18998c5d5f8c9d9289cba1a211c6322421463fb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-start-color-001.html": [
+       "4952f5a7ecc012a3ff2770d4841d3f25e5a845f8",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-start-style-001.html": [
+       "757ace5132d152f45389b9ad505c5b55e4e13837",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-block-start-width-001.html": [
+       "c32109de554dac638b0471f6880e525675599b5a",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-bottom-color-001.html": [
+       "6bbcadcc80d88daacda98d620b65ee80fca6a709",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-bottom-left-radius-001.html": [
+       "8d1e7c4ba865d8414b52fb80c0d0e476080e5837",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-bottom-right-radius-001.html": [
+       "d7efd39f0f741183ace6fe34b989d7f2f0f2ddd1",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-bottom-style-001.html": [
+       "82c24b5f46085930980861fa7eb84f5cf752b857",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-bottom-width-001.html": [
+       "f26aa76e6ab1c42dffc1ccf092be006321d66035",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-end-end-radius-001.html": [
+       "6f75cec2d2e6a9d7d6c5dffd9248f456ff890d93",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-end-start-radius-001.html": [
+       "6820c01f1084a1ced4748c6b9726d3a6c271c0bf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-image-outset-001.html": [
+       "eceb94c0b6ad525d3a4b216785f66d73cc406245",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-image-repeat-001.html": [
+       "c5861b08bd8906921c4414afedd1c4f432108c94",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-image-slice-001.html": [
+       "ffe49fda1077b7579692f63531a65a03927d7706",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-image-source-001.html": [
+       "e8c66dd3b0f338a68ff4428913ba7b5da3e0cc00",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-image-width-001.html": [
+       "62848f6c7d31ad3b3a17cd53a37c9b1a771e6a48",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-end-color-001.html": [
+       "96dfb2cb6e5f1d7538878b673c4d7e6391d11664",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-end-style-001.html": [
+       "854bb92df6c5a086419a9c02c0fefa209d513ccf",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-end-width-001.html": [
+       "146a6725d9a7f9f1123c39d7ca5ab1df5c79b1ac",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-start-color-001.html": [
+       "21250ce8bf050209339e2d79d352f1691ea491eb",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-start-style-001.html": [
+       "95fae5cfcd7291e9be379ea4d1f047f465ac07ab",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-inline-start-width-001.html": [
+       "fa70544fdbd766c2dce773cb06e82a5d917daa1e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-left-color-001.html": [
+       "add41f7ecf6876cc96630dad621a4d8a826909ba",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-left-style-001.html": [
+       "1a5cb56922ef4c5cd7b65f18f35cdb0e17abbcfd",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-left-width-001.html": [
+       "9b76bcef4740f53bf55c1191db5514177fd9e5aa",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-right-color-001.html": [
+       "e5436513b27a8912e1cb24b52c5953c4ad5c3788",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-right-style-001.html": [
+       "d01355a9093ae1d25d16ed6b4bfc3c393747df6c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-right-width-001.html": [
+       "de1fefbaf3d0f0e2ae56f9d2285d67549dec0c9c",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-start-end-radius-001.html": [
+       "2d5d8dcd7520040aeac51343a8661f80f24d6ca9",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-start-start-radius-001.html": [
+       "3c79c908e1131183e43edcc29059a54b2aaa1867",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-top-color-001.html": [
+       "5f79c624f6545226700e1acc0fc91833f513aa7e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-top-left-radius-001.html": [
+       "a0651111933c0b3d1c4c51d1f05662b994de2c8e",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-top-right-radius-001.html": [
+       "786f486e740bc0ce43a75e399f896ba61ca1abb7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-top-style-001.html": [
+       "92e3f96b65a4837d0b781970219045a51cddaf66",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
+          "=="
+         ]
+        ],
+        {}
+       ]
+      ],
+      "kind-of-widget-fallback-textarea-border-top-width-001.html": [
+       "13632609968e21be4c406e322d2da64cd02361c7",
+       [
+        null,
+        [
+         [
+          "/css/css-ui/compute-kind-widget-fallback-textarea-ref.html",
           "=="
          ]
         ],
@@ -262654,7 +272412,7 @@
       ]
      },
      "grid-layout-properties-expected.txt": [
-      "b40da75903ec12198399a8f04f2a72f066360645",
+      "5bf8ac7dfdd6866889d0d958700a887e74a675bc",
       []
      ],
      "grid-model": {
@@ -262941,6 +272699,14 @@
       "grid-columns-rows-get-set-multiple-expected.txt": [
        "512bd0d2222370b0c0e1e9fc675213bc03179962",
        []
+      ],
+      "grid-shorthand-valid-expected.txt": [
+       "0e5f5abad97e786b7eea5f6379195e54fb1357f5",
+       []
+      ],
+      "grid-template-shorthand-valid-expected.txt": [
+       "db160d9fb4793c50af8d16e029c0dca0d5ff26f1",
+       []
       ]
      },
      "reference": {
@@ -267656,6 +277422,10 @@
        "36fabc384514f3e2f2d7a8d7c60bb00044d24f2f",
        []
       ],
+      "position-sticky-overflow-clip-container-ref.html": [
+       "2a29b435a7ee5e53b5294bac40314847aec903ca",
+       []
+      ],
       "position-sticky-rendering-ref.html": [
        "b4411c3bed42e864e12ac4c333625693cf1625a6",
        []
@@ -277279,8 +287049,76 @@
       "b5ea559b9e7c158e254f2a7e047b56487ad8f281",
       []
      ],
-     "compute-kind-widget-fallback-ref.html": [
-      "cc6d1029b51033e8d983cc9c9bb520792b8285c1",
+     "compute-kind-widget-fallback-button-ref.html": [
+      "9007ecb7fb9376a3a61cdeed18190e565c47b677",
+      []
+     ],
+     "compute-kind-widget-fallback-checkbox-input-ref.html": [
+      "d969a759a09c308d8db1ab36fe702f9b26251d2d",
+      []
+     ],
+     "compute-kind-widget-fallback-color-input-ref.html": [
+      "cd6380bc1fb739a2ae91f57eb3165b41d307d5b7",
+      []
+     ],
+     "compute-kind-widget-fallback-input-button-ref.html": [
+      "02380ae7edf8ca1b7afdb23723a4c041755c0b20",
+      []
+     ],
+     "compute-kind-widget-fallback-input-reset-ref.html": [
+      "6899e7102cfd334a897736fe75f4553d328483f6",
+      []
+     ],
+     "compute-kind-widget-fallback-input-search-ref.html": [
+      "5d49037288bb83917e75f229a0cd211b2ce8f49c",
+      []
+     ],
+     "compute-kind-widget-fallback-input-search-text-ref.html": [
+      "5918616f5de47deaea543760607d937ad04c90d2",
+      []
+     ],
+     "compute-kind-widget-fallback-input-submit-ref.html": [
+      "3ceb54959eb74172d3312675567e4f40d25129f3",
+      []
+     ],
+     "compute-kind-widget-fallback-input-text-ref.html": [
+      "ad8dcc2289e9d23170426de7473efed2f7819340",
+      []
+     ],
+     "compute-kind-widget-fallback-link-ref.html": [
+      "6d36dfdce4d05bdcd94eb454e35aa007a727f125",
+      []
+     ],
+     "compute-kind-widget-fallback-meter-ref.html": [
+      "43b5825547e801b19fd0df5dcce3b0200d8a62f5",
+      []
+     ],
+     "compute-kind-widget-fallback-progress-ref.html": [
+      "20bf38150d696671c3cc37c15e2cef224e3f733f",
+      []
+     ],
+     "compute-kind-widget-fallback-radio-input-ref.html": [
+      "3654e6b72f36b978ef470effb156e3fbc7fdf886",
+      []
+     ],
+     "compute-kind-widget-fallback-range-ref.html": [
+      "ea8f2a02793a4790597da5a686e7bbf8fff13577",
+      []
+     ],
+     "compute-kind-widget-fallback-select-dropdown-box-ref.html": [
+      "bb038c8c3da05238009406d263af64b482246ad3",
+      []
+     ],
+     "compute-kind-widget-fallback-select-listbox-ref.html": [
+      "46feae487f3ed087aae49d0f2e4c24500a2877ac",
+      []
+     ],
+     "compute-kind-widget-fallback-select-menulist-button-ref.html": [
+      "6f3ca4f5a1b98c3a8c6944cf256ec6cef31ff698",
+      []
+     ],
+     "compute-kind-widget-fallback-textarea-ref.html": [
+      "863e58a6690c5d41424b168ab59214a2139c49ed",
       []
      ],
      "compute-kind-widget-no-fallback-ref.html": [
@@ -278479,7 +288317,7 @@
        []
       ],
       "build-compute-kind-widget-fallback-props.py": [
-       "a768e4e23aad18eb515acf0fc353fbcc95bd496e",
+       "baede8ee54811924f6300a85fa80f101d164ca93",
        []
       ]
      },
@@ -284145,14 +293983,6 @@
     "direct-sockets-disabled-by-permissions-policy.https.sub.html.headers": [
      "ba6f09f55b393880aadf79a41d9220313ed294c8",
      []
-    ],
-    "open-without-user-gesture.https.html.headers": [
-     "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
-     []
-    ],
-    "remotePort-required.https.html.headers": [
-     "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
-     []
     ]
    },
    "docs": {
@@ -284245,7 +294075,7 @@
      ]
     },
     "commands.json": [
-     "9482d8fb971d8b77262a151085f88937a946c54f",
+     "b908485c43a84e9783f95f6af1cb4441926a10f5",
      []
     ],
     "conf.py": [
@@ -301514,34 +311344,6 @@
       },
       "the-meta-element": {
        "color-scheme": {
-        "meta-color-scheme-attribute-changes-expected.txt": [
-         "21f3d42e2593dfce6c3e5a6e431dd83d4884652d",
-         []
-        ],
-        "meta-color-scheme-first-valid-applies-expected.txt": [
-         "b767ac82badd5e9339d60e5e72910982396ccf61",
-         []
-        ],
-        "meta-color-scheme-insert-expected.txt": [
-         "592bce59f4332db8a50f4b2b7cf58904706b77fb",
-         []
-        ],
-        "meta-color-scheme-remove-expected.txt": [
-         "86717e76f004f36cb701d9babac8b973f11d86c0",
-         []
-        ],
-        "meta-color-scheme-remove-head-expected.txt": [
-         "210a78eaae58e241af05d22a56bac7f1b376904e",
-         []
-        ],
-        "meta-color-scheme-single-value-in-body-expected.txt": [
-         "6f38f15e1c86925179d710b33737d747f6409066",
-         []
-        ],
-        "meta-color-scheme-single-value-in-head-expected.txt": [
-         "b87195f5ce086f7eda33ad37b64ba58e25590044",
-         []
-        ],
         "support": {
          "compute-root-color-scheme.js": [
           "74cbf895ced3d9b7f4783be993d5da274ca081f3",
@@ -302496,7 +312298,7 @@
         []
        ],
        "stash.py": [
-        "231eeb492fcfdd7f4c4ba8ed8a91924bf780b1b6",
+        "240438088100ba20f3e5244984649ccc95d2b8a6",
         []
        ],
        "support": {
@@ -303750,26 +313552,14 @@
        "310b14e48a1e6e2b92c83b309f60a633e849c506",
        []
       ],
-      "popup-initiallyopen-2.tentative-expected.txt": [
-       "47b1fd98bdfe2eaa3ead7e0f3134cf288cd94022",
-       []
-      ],
       "popup-initiallyopen-display-ref.tentative.html": [
        "db1a3f2b044d174781a6c5ba961b7b43c21611ce",
        []
       ],
-      "popup-initiallyopen.tentative-expected.txt": [
-       "aab559f388cd7ada82a4f5082967150bb591276c",
-       []
-      ],
       "popup-inside-display-none-ref.tentative.html": [
        "e7cb73c2b08ddcf80ca867f6ced9403436f649a7",
        []
       ],
-      "popup-invoking-attribute.tentative-expected.txt": [
-       "7e58f9f8e7c24b6f8d3389f30e5fd5956382dbad",
-       []
-      ],
       "popup-light-dismiss-on-scroll.tentative-expected.txt": [
        "5dce35393f343fdef82a963a37ca7b9e396c22d2",
        []
@@ -303786,10 +313576,6 @@
        "bc52cf5455590016bfc09c070dfc83ea6d708ff7",
        []
       ],
-      "popup-removal-2.tentative-expected.txt": [
-       "2bb6ee362888d4d5f31383cf03369165cec89a50",
-       []
-      ],
       "popup-shadow-dom.tentative-expected.txt": [
        "1a87c075fa1feaccdf21a0158ac959e22e80413a",
        []
@@ -309309,7 +319095,7 @@
      []
     ],
     "sub-apps.tentative.idl": [
-     "b1130022e96bdf58bc244faf53423fe6d809c375",
+     "39dcd97a500a7829696e070c1afe46722184516a",
      []
     ],
     "svg-animations.idl": [
@@ -310878,7 +320664,7 @@
       []
      ],
      "operator-dictionary.xsl": [
-      "d00097555a4663f5cecc14fc7183600eedf96bf9",
+      "8c75317672ee32905429e007aa79ec9c94e8eb29",
       []
      ],
      "percentscaledown.py": [
@@ -314401,7 +324187,7 @@
      []
     ],
     "preload-time-to-fetch.https-expected.txt": [
-     "e0e3da535cf45326e0cc9f8b16f33750342a1a74",
+     "496668fb8e85712054e94e4a0c22ae98f4495482",
      []
     ],
     "preload-with-type-expected.txt": [
@@ -316906,7 +326692,7 @@
       []
      ],
      "mock-subapps.js": [
-      "209539004234f63118c3418b0f8a1cb250521b8b",
+      "dd6899a597b154b487fd50304a60a2469dfb7ba5",
       []
      ],
      "mock-textdetection.js": [
@@ -326680,10 +336466,6 @@
      "33cbf4a933bd37553a8595e0692f9717e145ecc9",
      []
     ],
-    "RTCTrackEvent-constructor-expected.txt": [
-     "12377b8e2c64f8c2f26a3fd23d090ca072ba9ed9",
-     []
-    ],
     "RTCTrackEvent-fire-expected.txt": [
      "cb23952f507e98502144fda6b281bbbc55503746",
      []
@@ -366317,7 +376099,7 @@
        ]
       ],
       "at-container-serialization.html": [
-       "758a7c3b2d35b4e39baffe88e5fbfb6a78934f18",
+       "ef31473c8122aacc742aab929f060cc01e03a1ea",
        [
         null,
         {}
@@ -373389,6 +383171,13 @@
         {}
        ]
       ],
+      "grid-shorthand-serialization.html": [
+       "ebc4ad801f2eb5535f1d6fbc7a70836b13ff7f18",
+       [
+        null,
+        {}
+       ]
+      ],
       "grid-shorthand-valid.html": [
        "8d546a8212ed6b45fbe9c6b7ca9741f799154267",
        [
@@ -373544,7 +383333,7 @@
        ]
       ],
       "grid-template-shorthand-valid.html": [
-       "49bf4a895bdc99cdc97d373192ae0e005ad66c22",
+       "d5ae75e74e504c47ac7fe2dca707a1a1ab269644",
        [
         null,
         {}
@@ -393883,7 +403672,7 @@
    },
    "direct-sockets": {
     "direct-sockets-disabled-by-permissions-policy.https.sub.html": [
-     "03760e795027cc2c63257ca56f3256c31c74d637",
+     "5d5533613c96ccd659f62dc9edc0a6596cb49414",
      [
       null,
       {
@@ -393892,27 +403681,11 @@
      ]
     ],
     "open-securecontext.http.html": [
-     "ae403b6b5849eed23431a834ae7e7d0c609676f9",
+     "c3a2a42a25bf186534b3addbc19cdae96ed7f956",
      [
       null,
       {}
      ]
-    ],
-    "open-without-user-gesture.https.html": [
-     "ed9a9e0d2c63428d39d7c2ebbde8fd1d58d9b02b",
-     [
-      null,
-      {}
-     ]
-    ],
-    "remotePort-required.https.html": [
-     "6d738da845ae09b265d1ce4ad93d3ec6528b46b3",
-     [
-      null,
-      {
-       "testdriver": true
-      }
-     ]
     ]
    },
    "document-policy": {
@@ -426608,6 +436381,36 @@
        }
       ]
      ],
+     "cache-storage.tentative.https.window.js": [
+      "8ce6410290a63bd234f3c8a2dd8a0e19c36c3300",
+      [
+       "html/anonymous-iframe/cache-storage.tentative.https.window.html",
+       {
+        "script_metadata": [
+         [
+          "script",
+          "/common/get-host-info.sub.js"
+         ],
+         [
+          "script",
+          "/common/utils.js"
+         ],
+         [
+          "script",
+          "/common/dispatcher/dispatcher.js"
+         ],
+         [
+          "script",
+          "/html/cross-origin-embedder-policy/credentialless/resources/common.js"
+         ],
+         [
+          "script",
+          "./resources/common.js"
+         ]
+        ]
+       }
+      ]
+     ],
      "cookie-store.tentative.https.window.js": [
       "5338c8551f01e1e8d7f472609fb958ad79864b23",
       [
@@ -453437,6 +463240,13 @@
         {}
        ]
       ],
+      "invalid-render-blocking-preload-link.html": [
+       "a640f72e6feaf0288440a15a4ffb42ee50fdf59e",
+       [
+        null,
+        {}
+       ]
+      ],
       "parser-blocking-script.tentative.html": [
        "8d391144b26b04a2c74ba1fdaf1f6ce675a79a76",
        [
@@ -456270,6 +466080,13 @@
           {}
          ]
         ],
+        "meta-color-scheme-normal-descendant-change.html": [
+         "136f4c371b778836698fe4ee52c95a58193f5a4c",
+         [
+          null,
+          {}
+         ]
+        ],
         "meta-color-scheme-remove-head.html": [
          "587e2fa596cf802acd46bbb7d50946e5f563f2f4",
          [
@@ -463534,7 +473351,7 @@
         ]
        ],
        "popup-focus.tentative.html": [
-        "bb8d679a35b3f1b04e7d0e5648548137b1ff5403",
+        "172414e704892a6a04d246780faa1811d8ac467c",
         [
          null,
          {}
@@ -463554,15 +473371,6 @@
          {}
         ]
        ],
-       "popup-invoking-attribute.tentative.html": [
-        "1ff60fd7f9b3ad3d17fa0ef1741a9faeeef4ca27",
-        [
-         null,
-         {
-          "testdriver": true
-         }
-        ]
-       ],
        "popup-light-dismiss-on-scroll.tentative.html": [
         "4f14dd7ae774b38e3677019d9bdea4c28a3d34e8",
         [
@@ -463571,7 +473379,7 @@
         ]
        ],
        "popup-light-dismiss.tentative.html": [
-        "2b37c2d64510efd1e9dcb5bb7c0d877fd450fe36",
+        "50dfe3693fafe96114a5ef3f2aaf1c45b4d179bf",
         [
          null,
          {
@@ -463841,7 +473649,7 @@
        ]
       ],
       "popup-attribute-basic.tentative.html": [
-       "3eb16fe9c3a108d6ebd6338975674be7a859289c",
+       "30df4e5530d25e3a97fff7a4b3a35c5bbd75d2cb",
        [
         null,
         {}
@@ -463869,7 +473677,7 @@
        ]
       ],
       "popup-invoking-attribute.tentative.html": [
-       "e5d1f4be496b8f8a22251352672399872a0828fe",
+       "0eaf2f9f50b2ffc89c1d9b257ebfce840bf7fa41",
        [
         null,
         {
@@ -480256,7 +490064,7 @@
      ]
     ],
     "constructor.tentative.https.html": [
-     "9fdf78ddb3dea4de72e48d1ae5288c0a9f161d68",
+     "cab7b10236210a179a98763866724311eb4716b0",
      [
       null,
       {}
@@ -488569,7 +498377,7 @@
    },
    "payment-method-id": {
     "payment-request-ctor-pmi-handling.https.sub.html": [
-     "a615838f8bcef9837f216ee3467edbc7c9dc4d15",
+     "d6a1be23947f400de750fd5f2a51fa99400692c2",
      [
       null,
       {}
@@ -488707,7 +498515,7 @@
      ]
     ],
     "payment-request-ctor-pmi-handling.https.sub.html": [
-     "a615838f8bcef9837f216ee3467edbc7c9dc4d15",
+     "d6a1be23947f400de750fd5f2a51fa99400692c2",
      [
       null,
       {}
@@ -491967,10 +501775,12 @@
      ]
     ],
     "preload-time-to-fetch.https.html": [
-     "f546682e26406dafa87bfe6fbaec0aeef3438fa9",
+     "774501ef3e6c3ff55966a67a0acde3452d90d756",
      [
       null,
-      {}
+      {
+       "timeout": "long"
+      }
      ]
     ],
     "preload-with-type.html": [
@@ -519066,6 +528876,20 @@
       null,
       {}
      ]
+    ],
+    "remove-error.tentative.https.html": [
+     "6bba4773c726c24bb193500463b2c8fdcf37bb63",
+     [
+      null,
+      {}
+     ]
+    ],
+    "remove-success.tentative.https.html": [
+     "a4148fd869c43d1168da738dfceb76484b20912c",
+     [
+      null,
+      {}
+     ]
     ]
    },
    "subresource-integrity": {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/at-container-serialization.html b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/at-container-serialization.html
index 758a7c3..ef31473 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/at-container-serialization.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-contain/container-queries/at-container-serialization.html
@@ -12,6 +12,18 @@
     }
     #id { color: green }
   }
+  @container (  wiDTh  ) { }
+  @container (width:100px) { }
+  @container (min-width:  100px) { }
+  @container (   MAX-WIDTH:100px  ) { }
+  @container (width > 100px) { }
+  @container (width < 100px) { }
+  @container (widTH >= 100px) { }
+  @container (width <= 100px) { }
+  @container (10px < width < 100px) { }
+  @container (10px <=  width  <=  100px) { }
+  @container (100px>WIDTH>10px) { }
+  @container (  100px >= width >= 10px  ) { }
 </style>
 <script>
   setup(() => assert_implements_container_queries());
@@ -19,7 +31,7 @@
   let rules = testSheet.sheet.cssRules;
 
   test(() => {
-    assert_equals(rules.length, 1);
+    assert_equals(rules.length, 13);
     assert_equals(rules[0].cssRules.length, 2);
 
     assert_equals(rules[0].conditionText, "(width = 100px)");
@@ -34,4 +46,24 @@
     assert_equals(rules[0].cssText, "@container (width = 100px) {\n  @container \\!-name (inline-size > 200px) {\n  #id { color: lime; }\n}\n  #id { color: green; }\n}");
   }, "Serialization of nested @container rule");
 
+  test(() => {
+    assert_equals(rules[1].conditionText, "(width)");
+  }, "Serialization of boolean condition syntax");
+
+  test(() => {
+    assert_equals(rules[2].conditionText, "(width: 100px)");
+    assert_equals(rules[3].conditionText, "(min-width: 100px)");
+    assert_equals(rules[4].conditionText, "(max-width: 100px)");
+  }, "Serialization of colon condition syntax");
+
+  test(() => {
+    assert_equals(rules[5].conditionText, "(width > 100px)");
+    assert_equals(rules[6].conditionText, "(width < 100px)");
+    assert_equals(rules[7].conditionText, "(width >= 100px)");
+    assert_equals(rules[8].conditionText, "(width <= 100px)");
+    assert_equals(rules[9].conditionText, "(10px < width < 100px)");
+    assert_equals(rules[10].conditionText, "(10px <= width <= 100px)");
+    assert_equals(rules[11].conditionText, "(100px > width > 10px)");
+    assert_equals(rules[12].conditionText, "(100px >= width >= 10px)");
+  }, "Serialization of range condition syntax");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container-ref.html b/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container-ref.html
new file mode 100644
index 0000000..2a29b435
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container-ref.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<title>Sticky elements should not consider overflow: clip containers as possible scroll ancestor</title>
+<style>
+body {
+  margin: 0;
+  overflow: hidden; /* hide scrollbars */
+}
+
+#container {
+  height: 300px;
+  overflow-y: scroll;
+}
+
+#overflowClipContainer {
+  overflow: visible;
+  height: 600px;
+}
+
+#sticky {
+  position: sticky;
+  top: 0;
+  height: 50px;
+  background-color: yellow;
+}
+</style>
+<script>
+function doTest()
+{
+  container.scrollTo(0, 50);
+}
+window.addEventListener('load', doTest, false);
+</script>
+<div id="container">
+  <div id="overflowClipContainer">
+    <div id="sticky"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container.html b/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container.html
new file mode 100644
index 0000000..6335634
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-position/sticky/position-sticky-overflow-clip-container.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<title>Sticky elements should not consider overflow: clip containers as possible scroll ancestor</title>
+<link rel="match" href="position-sticky-overflow-clip-container-ref.html" />
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
+<meta name="assert" content="This test checks that sticky elements do not consider overflow:clip containers as possible scroll ancestor"/>
+<style>
+body {
+  margin: 0;
+  overflow: hidden; /* hide scrollbars */
+}
+
+#container {
+  height: 300px;
+  overflow: auto;
+}
+
+#overflowClipContainer {
+  overflow: clip;
+  height: 600px;
+}
+
+#sticky {
+  position: sticky;
+  top: 0;
+  height: 50px;
+  background-color: yellow;
+}
+</style>
+<script>
+function doTest()
+{
+  container.scrollTo(0, 50);
+}
+window.addEventListener('load', doTest, false);
+</script>
+<div id="container">
+  <div id="overflowClipContainer">
+    <div id="sticky"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-button-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-button-ref.html
new file mode 100644
index 0000000..9007ecb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-button-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - button</title>
+<style>
+    #container { width: 500px; }
+    button {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <button>button</button>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html
new file mode 100644
index 0000000..d969a75
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-checkbox-input-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - checkbox-input</title>
+<style>
+    #container { width: 500px; }
+</style>
+<div id="container">
+    <input type="checkbox">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-color-input-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-color-input-ref.html
new file mode 100644
index 0000000..cd6380bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-color-input-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - color-input</title>
+<style>
+    #container { width: 500px; }
+    input[type=color] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="color">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-button-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-button-ref.html
new file mode 100644
index 0000000..02380ae7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-button-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-button</title>
+<style>
+    #container { width: 500px; }
+    input[type=button] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="button" value="input-button">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html
new file mode 100644
index 0000000..6899e71
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-reset-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-reset</title>
+<style>
+    #container { width: 500px; }
+    input[type=reset] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="reset" value="input-reset">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-ref.html
new file mode 100644
index 0000000..5d49037
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-search</title>
+<style>
+    #container { width: 500px; }
+    input[type=search] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="search" value="input-search">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html
new file mode 100644
index 0000000..5918616
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-search-text-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-search-text</title>
+<style>
+    #container { width: 500px; }
+    input[type=search] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html
new file mode 100644
index 0000000..3ceb5495
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-submit-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-submit</title>
+<style>
+    #container { width: 500px; }
+    input[type=submit] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="submit" value="input-submit">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-text-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-text-ref.html
new file mode 100644
index 0000000..ad8dcc2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-input-text-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - input-text</title>
+<style>
+    #container { width: 500px; }
+    input[type=text] {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <input type="text" value="input-text">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-link-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-link-ref.html
new file mode 100644
index 0000000..6d36dfdc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-link-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - link</title>
+<style>
+    #container { width: 500px; }
+</style>
+<div id="container">
+    <a>a</a>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-meter-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-meter-ref.html
new file mode 100644
index 0000000..43b58255
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-meter-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - meter</title>
+<style>
+    #container { width: 500px; }
+    meter {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <meter value=0.5></meter>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-progress-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-progress-ref.html
new file mode 100644
index 0000000..20bf381
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-progress-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback</title>
+<style>
+    #container { width: 500px; }
+    progress {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <progress value=0.5></progress>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html
new file mode 100644
index 0000000..3654e6b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-radio-input-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - radio-input</title>
+<style>
+    #container { width: 500px; }
+</style>
+<div id="container">
+    <input type="radio">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-range-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-range-ref.html
new file mode 100644
index 0000000..ea8f2a0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-range-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - range</title>
+<style>
+    #container { width: 500px; }
+</style>
+<div id="container">
+    <input type="range">
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-ref.html
deleted file mode 100644
index cc6d102..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-ref.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Reference: Compute kind of widget - fallback</title>
-<style>
-    #container { width: 500px; }
-    button,
-    input[type=button],
-    input[type=submit],
-    input[type=reset],
-    input[type=text],
-    input[type=search],
-    textarea,
-    input[type=color],
-    #select-listbox,
-    meter,
-    progress {
-        appearance: none;
-    }
-    #select-dropdown-box,
-    #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-<div id="container">
-    <a>a</a>
-    <button>button</button>
-    <input type="button" value="input-button">
-    <input type="submit" value="input-submit">
-    <input type="reset" value="input-reset">
-
-    <input type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input type="search" value="input-search">
-
-    <input type="range">
-    <input type="checkbox">
-    <input type="radio">
-    <input type="color">
-
-    <textarea>textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter value=0.5></meter>
-    <progress value=0.5></progress>
-</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html
new file mode 100644
index 0000000..bb038c8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-dropdown-box-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - select-dropdown-box</title>
+<style>
+    #container { width: 500px; }
+    #select-dropdown-box { appearance: none; appearance: menulist-button; }
+</style>
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html
new file mode 100644
index 0000000..46feae48
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-listbox-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - select-listbox</title>
+<style>
+    #container { width: 500px; }
+    #select-listbox {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html
new file mode 100644
index 0000000..6f3ca4f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-select-menulist-button-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - select-menulist-button</title>
+<style>
+    #container { width: 500px; }
+    #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-textarea-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-textarea-ref.html
new file mode 100644
index 0000000..863e58a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-fallback-textarea-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference: Compute kind of widget - fallback - textarea</title>
+<style>
+    #container { width: 500px; }
+    textarea {
+        appearance: none;
+    }
+</style>
+<div id="container">
+    <textarea>textarea</textarea>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-attachment-001.html
deleted file mode 100644
index dfdb3076..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-attachment-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-attachment";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-clip-001.html
deleted file mode 100644
index cf6862f..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-clip-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-clip";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-color-001.html
deleted file mode 100644
index f080bae2..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-image-001.html
deleted file mode 100644
index b5b5231..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-image-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-image";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-origin-001.html
deleted file mode 100644
index d826c0b..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-origin-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-origin";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-position-001.html
deleted file mode 100644
index 290d12356..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-position-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-position";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-size-001.html
deleted file mode 100644
index 105a439..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-background-size-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "background-size";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-color-001.html
deleted file mode 100644
index 480a292..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-end-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-style-001.html
deleted file mode 100644
index a6fac1a0..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-end-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-width-001.html
deleted file mode 100644
index a73d5b5..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-end-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-end-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-color-001.html
deleted file mode 100644
index c7be4f45..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-start-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-style-001.html
deleted file mode 100644
index 6670cb6..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-start-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-width-001.html
deleted file mode 100644
index 13b932a..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-block-start-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-block-start-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-color-001.html
deleted file mode 100644
index 8cb1ed7a..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-bottom-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-left-radius-001.html
deleted file mode 100644
index 6f9af43..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-left-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-bottom-left-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-right-radius-001.html
deleted file mode 100644
index 356457f..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-right-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-bottom-right-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-style-001.html
deleted file mode 100644
index 0173f020..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-bottom-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-width-001.html
deleted file mode 100644
index f8d2f84..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-bottom-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-bottom-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-end-radius-001.html
deleted file mode 100644
index 9fa13b4..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-end-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-end-end-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-start-radius-001.html
deleted file mode 100644
index 7f3667e2..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-end-start-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-end-start-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-outset-001.html
deleted file mode 100644
index dc3c872..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-outset-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-image-outset";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-repeat-001.html
deleted file mode 100644
index 388ad9a..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-repeat-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-image-repeat";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-slice-001.html
deleted file mode 100644
index 971239c..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-slice-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-image-slice";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-source-001.html
deleted file mode 100644
index 96795ed..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-source-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-image-source";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-width-001.html
deleted file mode 100644
index ca57002..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-image-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-image-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-color-001.html
deleted file mode 100644
index 9ecfdfbe..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-end-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-style-001.html
deleted file mode 100644
index 2a5496e..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-end-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-width-001.html
deleted file mode 100644
index 6269410..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-end-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-end-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-color-001.html
deleted file mode 100644
index eee53b1..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-start-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-style-001.html
deleted file mode 100644
index b8e980e..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-start-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-width-001.html
deleted file mode 100644
index 999028e..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-inline-start-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-inline-start-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-color-001.html
deleted file mode 100644
index 9d35d5a..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-left-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-style-001.html
deleted file mode 100644
index 0c3834a..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-left-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-width-001.html
deleted file mode 100644
index b9db35d..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-left-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-left-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-color-001.html
deleted file mode 100644
index 4be6ac5..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-right-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-style-001.html
deleted file mode 100644
index 0bb296c..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-right-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-width-001.html
deleted file mode 100644
index 8a0436d2..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-right-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-right-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-end-radius-001.html
deleted file mode 100644
index 27c8a5e3..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-end-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-start-end-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-start-radius-001.html
deleted file mode 100644
index 8f1369d..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-start-start-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-start-start-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-color-001.html
deleted file mode 100644
index b967850..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-color-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-top-color";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-left-radius-001.html
deleted file mode 100644
index 937cb02..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-left-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-top-left-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-right-radius-001.html
deleted file mode 100644
index f2abad9..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-right-radius-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-top-right-radius";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-style-001.html
deleted file mode 100644
index 921933c28..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-style-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-top-style";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-width-001.html
deleted file mode 100644
index ff0fecf..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-border-top-width-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DO NOT EDIT. This file has been generated. Source:
-    ./tools/build-compute-kind-widget-fallback-props.py
--->
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for widgets</title>
-<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
-<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
-<style>
-    #container { width: 500px; }
-    #container > #search-text-input { appearance: textfield; }
-    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
-</style>
-
-<div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
-</div>
-
-<script>
-// Set author-level CSS that matches UA style, but don't use the 'revert' value.
-const elements = document.querySelectorAll('#container > *');
-const prop = "border-top-width";
-for (const el of elements) {
-  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
-}
-</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-attachment-001.html
new file mode 100644
index 0000000..065fc6dc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-clip-001.html
new file mode 100644
index 0000000..70595838
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-color-001.html
new file mode 100644
index 0000000..bcef8dcd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-image-001.html
new file mode 100644
index 0000000..c2ff3ad6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-origin-001.html
new file mode 100644
index 0000000..3e6a287
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-position-001.html
new file mode 100644
index 0000000..8c35eb7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-size-001.html
new file mode 100644
index 0000000..a177d5c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-color-001.html
new file mode 100644
index 0000000..bc1220b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-style-001.html
new file mode 100644
index 0000000..326ccec4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-width-001.html
new file mode 100644
index 0000000..6d88e2a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-color-001.html
new file mode 100644
index 0000000..30f3867
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-style-001.html
new file mode 100644
index 0000000..69f21ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-width-001.html
new file mode 100644
index 0000000..05b17053
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-color-001.html
new file mode 100644
index 0000000..d18b6a11
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..1da373a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..cd2ccf66
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-style-001.html
new file mode 100644
index 0000000..b7aad05
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-width-001.html
new file mode 100644
index 0000000..ecdf09a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-end-radius-001.html
new file mode 100644
index 0000000..b7a43428
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..3756b2a2
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-outset-001.html
new file mode 100644
index 0000000..8ad7178
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-repeat-001.html
new file mode 100644
index 0000000..a212ee7e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-slice-001.html
new file mode 100644
index 0000000..d3f87eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-source-001.html
new file mode 100644
index 0000000..86ec41a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-width-001.html
new file mode 100644
index 0000000..53df9ea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-color-001.html
new file mode 100644
index 0000000..85079f5c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-style-001.html
new file mode 100644
index 0000000..ce94d07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-width-001.html
new file mode 100644
index 0000000..ea361ed
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-start-color-001.html
new file mode 100644
index 0000000..7bbbbf9
--- /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-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-inline-start-style-001.html
new file mode 100644
index 0000000..0ab244c
--- /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-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..a2fe2f5a
--- /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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-color-001.html
new file mode 100644
index 0000000..ca8e684
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-style-001.html
new file mode 100644
index 0000000..e44cf3a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-width-001.html
new file mode 100644
index 0000000..561c51de
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-color-001.html
new file mode 100644
index 0000000..1edc31d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-style-001.html
new file mode 100644
index 0000000..79a59df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-width-001.html
new file mode 100644
index 0000000..5125890
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-end-radius-001.html
new file mode 100644
index 0000000..39972ab6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-start-radius-001.html
new file mode 100644
index 0000000..47e454e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-color-001.html
new file mode 100644
index 0000000..6a33137
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-left-radius-001.html
new file mode 100644
index 0000000..83d5437
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-right-radius-001.html
new file mode 100644
index 0000000..ad780169
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-style-001.html
new file mode 100644
index 0000000..41b55bd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-width-001.html
new file mode 100644
index 0000000..ec22310
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-button-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <button id="button">button</button>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-attachment-001.html
new file mode 100644
index 0000000..854146d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-clip-001.html
new file mode 100644
index 0000000..c58d8453
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-color-001.html
new file mode 100644
index 0000000..e1d5e737
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-image-001.html
new file mode 100644
index 0000000..c37517e7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-origin-001.html
new file mode 100644
index 0000000..8a7f950
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-position-001.html
new file mode 100644
index 0000000..3edc278
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-size-001.html
new file mode 100644
index 0000000..94816e45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-color-001.html
new file mode 100644
index 0000000..fe6e5c97
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-style-001.html
new file mode 100644
index 0000000..489c662
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-width-001.html
new file mode 100644
index 0000000..f257590b5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-color-001.html
new file mode 100644
index 0000000..d1b1c63
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-style-001.html
new file mode 100644
index 0000000..6da6d53
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-width-001.html
new file mode 100644
index 0000000..c18824f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-color-001.html
new file mode 100644
index 0000000..d8dde9fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..ea8b93a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..47781560
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-style-001.html
new file mode 100644
index 0000000..f4ccb3e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-width-001.html
new file mode 100644
index 0000000..dcc9e39
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-end-radius-001.html
new file mode 100644
index 0000000..9f22001
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-start-radius-001.html
new file mode 100644
index 0000000..453d687a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-outset-001.html
new file mode 100644
index 0000000..1102fce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-repeat-001.html
new file mode 100644
index 0000000..7b82127
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-slice-001.html
new file mode 100644
index 0000000..d7694d67
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-source-001.html
new file mode 100644
index 0000000..0e27462
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-width-001.html
new file mode 100644
index 0000000..c485fea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-color-001.html
new file mode 100644
index 0000000..0220ac2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-style-001.html
new file mode 100644
index 0000000..83f0ee6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-width-001.html
new file mode 100644
index 0000000..aca8289
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-color-001.html
new file mode 100644
index 0000000..7c3ea0e3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-style-001.html
new file mode 100644
index 0000000..329b717
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-width-001.html
new file mode 100644
index 0000000..9d5ca5f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-color-001.html
new file mode 100644
index 0000000..00397b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-style-001.html
new file mode 100644
index 0000000..415c45d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-width-001.html
new file mode 100644
index 0000000..0653e96
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-color-001.html
new file mode 100644
index 0000000..f17035b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-style-001.html
new file mode 100644
index 0000000..fd96b80b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-width-001.html
new file mode 100644
index 0000000..9eb0bfd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-end-radius-001.html
new file mode 100644
index 0000000..c6f7b9c7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-start-radius-001.html
new file mode 100644
index 0000000..c3473dff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-color-001.html
new file mode 100644
index 0000000..40671ee0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-left-radius-001.html
new file mode 100644
index 0000000..bf8cb71
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-right-radius-001.html
new file mode 100644
index 0000000..bbaed9a3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-style-001.html
new file mode 100644
index 0000000..bb9b393
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-width-001.html
new file mode 100644
index 0000000..3260a9b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-checkbox-input-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for checkbox-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-checkbox-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="checkbox-input" type="checkbox">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-attachment-001.html
new file mode 100644
index 0000000..a62ebcb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-clip-001.html
new file mode 100644
index 0000000..0da878e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-color-001.html
new file mode 100644
index 0000000..3adca197
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-image-001.html
new file mode 100644
index 0000000..79d16f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-origin-001.html
new file mode 100644
index 0000000..30be831c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-position-001.html
new file mode 100644
index 0000000..a72860779
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-size-001.html
new file mode 100644
index 0000000..68f34df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-color-001.html
new file mode 100644
index 0000000..7ab8c50
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-style-001.html
new file mode 100644
index 0000000..5fef1705
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-width-001.html
new file mode 100644
index 0000000..de753d9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-color-001.html
new file mode 100644
index 0000000..639e536
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-style-001.html
new file mode 100644
index 0000000..66138c5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-width-001.html
new file mode 100644
index 0000000..7e338d3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-color-001.html
new file mode 100644
index 0000000..33e55cc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..70eec00
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..196edd3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-style-001.html
new file mode 100644
index 0000000..483a200
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-width-001.html
new file mode 100644
index 0000000..0f6a26e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-end-radius-001.html
new file mode 100644
index 0000000..877568e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-start-radius-001.html
new file mode 100644
index 0000000..3b553d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-outset-001.html
new file mode 100644
index 0000000..9aca0eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-repeat-001.html
new file mode 100644
index 0000000..2195aa4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-slice-001.html
new file mode 100644
index 0000000..b2d5a707
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-source-001.html
new file mode 100644
index 0000000..5a4f6f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-width-001.html
new file mode 100644
index 0000000..394163c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-color-001.html
new file mode 100644
index 0000000..c8beca6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-style-001.html
new file mode 100644
index 0000000..2cca230
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-width-001.html
new file mode 100644
index 0000000..1e78d303
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-color-001.html
new file mode 100644
index 0000000..dc78893
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-style-001.html
new file mode 100644
index 0000000..69fc22e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-width-001.html
new file mode 100644
index 0000000..e726ac4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-color-001.html
new file mode 100644
index 0000000..06123f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-style-001.html
new file mode 100644
index 0000000..8a467f2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-width-001.html
new file mode 100644
index 0000000..1631967
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-color-001.html
new file mode 100644
index 0000000..3f80a299
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-style-001.html
new file mode 100644
index 0000000..47b974b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-width-001.html
new file mode 100644
index 0000000..7a640d2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-end-radius-001.html
new file mode 100644
index 0000000..836685b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-start-radius-001.html
new file mode 100644
index 0000000..1b8d113
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-color-001.html
new file mode 100644
index 0000000..3ca939ab
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-left-radius-001.html
new file mode 100644
index 0000000..6e789f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-right-radius-001.html
new file mode 100644
index 0000000..7f4b919
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-style-001.html
new file mode 100644
index 0000000..840f69af
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-width-001.html
new file mode 100644
index 0000000..886996b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-color-input-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for color-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-color-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="color-input" type="color">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-attachment-001.html
new file mode 100644
index 0000000..7b112f08
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-clip-001.html
new file mode 100644
index 0000000..53f79ab
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-color-001.html
new file mode 100644
index 0000000..2209bae
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-image-001.html
new file mode 100644
index 0000000..e385afe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-origin-001.html
new file mode 100644
index 0000000..9d33867
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-position-001.html
new file mode 100644
index 0000000..6d70a3f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-size-001.html
new file mode 100644
index 0000000..fabd5b3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-color-001.html
new file mode 100644
index 0000000..16b0751
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-style-001.html
new file mode 100644
index 0000000..c594156
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-width-001.html
new file mode 100644
index 0000000..c189260
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-color-001.html
new file mode 100644
index 0000000..f04c372
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-style-001.html
new file mode 100644
index 0000000..41ba3b7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-width-001.html
new file mode 100644
index 0000000..9738cd8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-color-001.html
new file mode 100644
index 0000000..f8d784ae
--- /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-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..cac8afe
--- /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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..3f64f284
--- /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-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-style-001.html
new file mode 100644
index 0000000..1d45f05
--- /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-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-bottom-width-001.html
new file mode 100644
index 0000000..04065781
--- /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-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-end-radius-001.html
new file mode 100644
index 0000000..8ce8dc3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-start-radius-001.html
new file mode 100644
index 0000000..8f1acf3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-outset-001.html
new file mode 100644
index 0000000..7bef870
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-repeat-001.html
new file mode 100644
index 0000000..fc3ebd45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-slice-001.html
new file mode 100644
index 0000000..b6c908f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-source-001.html
new file mode 100644
index 0000000..44a4fba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-width-001.html
new file mode 100644
index 0000000..39d0185
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-end-color-001.html
new file mode 100644
index 0000000..313eab3
--- /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-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..ce6cb72
--- /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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-end-width-001.html
new file mode 100644
index 0000000..31e4906
--- /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-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-color-001.html
new file mode 100644
index 0000000..60f8eeb
--- /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-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-style-001.html
new file mode 100644
index 0000000..927f069
--- /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-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-inline-start-width-001.html
new file mode 100644
index 0000000..ebb88b6
--- /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-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-color-001.html
new file mode 100644
index 0000000..eaeeddc8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-style-001.html
new file mode 100644
index 0000000..171638f6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-width-001.html
new file mode 100644
index 0000000..07b4ba5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-color-001.html
new file mode 100644
index 0000000..ee08a59
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-style-001.html
new file mode 100644
index 0000000..622da69
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-width-001.html
new file mode 100644
index 0000000..cb0368d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-end-radius-001.html
new file mode 100644
index 0000000..ae98634e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-start-radius-001.html
new file mode 100644
index 0000000..45f7debe9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-color-001.html
new file mode 100644
index 0000000..985b3d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-left-radius-001.html
new file mode 100644
index 0000000..5b56366
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-right-radius-001.html
new file mode 100644
index 0000000..f0b7989
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-style-001.html
new file mode 100644
index 0000000..b58218e3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-width-001.html
new file mode 100644
index 0000000..e20e258e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-button-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="button-input" type="button" value="input-button">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-attachment-001.html
new file mode 100644
index 0000000..a7845bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-clip-001.html
new file mode 100644
index 0000000..5bb8e7d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-color-001.html
new file mode 100644
index 0000000..1780d56a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-image-001.html
new file mode 100644
index 0000000..07527ae
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-origin-001.html
new file mode 100644
index 0000000..4e5b6c6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-position-001.html
new file mode 100644
index 0000000..199e646
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-size-001.html
new file mode 100644
index 0000000..82d54e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-color-001.html
new file mode 100644
index 0000000..41038d2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..9c326f1
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-width-001.html
new file mode 100644
index 0000000..3f2611f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-color-001.html
new file mode 100644
index 0000000..a3252e3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-style-001.html
new file mode 100644
index 0000000..6f73781
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-width-001.html
new file mode 100644
index 0000000..1a671be
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-color-001.html
new file mode 100644
index 0000000..5ac0db7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..df3608a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..3cc9593
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-style-001.html
new file mode 100644
index 0000000..b146476
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-width-001.html
new file mode 100644
index 0000000..00dfbddb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-end-radius-001.html
new file mode 100644
index 0000000..34eaf07f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-start-radius-001.html
new file mode 100644
index 0000000..42aa29c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-outset-001.html
new file mode 100644
index 0000000..368bb3a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-repeat-001.html
new file mode 100644
index 0000000..5f0ba37f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-slice-001.html
new file mode 100644
index 0000000..c611ad59
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-source-001.html
new file mode 100644
index 0000000..f84fcfc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-width-001.html
new file mode 100644
index 0000000..19365177
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-color-001.html
new file mode 100644
index 0000000..db6e2d6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html
new file mode 100644
index 0000000..1350244
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-width-001.html
new file mode 100644
index 0000000..25121c8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-color-001.html
new file mode 100644
index 0000000..f01b339
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-style-001.html
new file mode 100644
index 0000000..3ac0e47
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-width-001.html
new file mode 100644
index 0000000..7e0c23ad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-color-001.html
new file mode 100644
index 0000000..6309f000
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-style-001.html
new file mode 100644
index 0000000..c502e833
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..7c8e95d
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-color-001.html
new file mode 100644
index 0000000..2bbbcf3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-style-001.html
new file mode 100644
index 0000000..4b1ea45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-width-001.html
new file mode 100644
index 0000000..02b93b0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-end-radius-001.html
new file mode 100644
index 0000000..4beeb88
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-start-radius-001.html
new file mode 100644
index 0000000..019b6a5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-color-001.html
new file mode 100644
index 0000000..6facf31
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-left-radius-001.html
new file mode 100644
index 0000000..2ba3e03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-right-radius-001.html
new file mode 100644
index 0000000..d15f2341
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-style-001.html
new file mode 100644
index 0000000..d5bebef7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-width-001.html
new file mode 100644
index 0000000..e705cd4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-reset-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-reset</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-reset-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="reset-input" type="reset" value="input-reset">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-attachment-001.html
new file mode 100644
index 0000000..cd69159e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-clip-001.html
new file mode 100644
index 0000000..1343ebc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-color-001.html
new file mode 100644
index 0000000..882ca79
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-image-001.html
new file mode 100644
index 0000000..769cf45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-origin-001.html
new file mode 100644
index 0000000..035cfdf2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-position-001.html
new file mode 100644
index 0000000..5267fd2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-size-001.html
new file mode 100644
index 0000000..73aca99
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-color-001.html
new file mode 100644
index 0000000..9d954d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..81761e46
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-width-001.html
new file mode 100644
index 0000000..e6b37c9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-color-001.html
new file mode 100644
index 0000000..7bed3fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-style-001.html
new file mode 100644
index 0000000..854d6fb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-width-001.html
new file mode 100644
index 0000000..9ad91b7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-color-001.html
new file mode 100644
index 0000000..093c18c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..a33640e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..21ec7d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-style-001.html
new file mode 100644
index 0000000..26b31f9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-width-001.html
new file mode 100644
index 0000000..677a04e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-end-radius-001.html
new file mode 100644
index 0000000..426b754
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-start-radius-001.html
new file mode 100644
index 0000000..58f7487
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-outset-001.html
new file mode 100644
index 0000000..fe1d1f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-repeat-001.html
new file mode 100644
index 0000000..611aaad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-slice-001.html
new file mode 100644
index 0000000..fbd35bee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-source-001.html
new file mode 100644
index 0000000..73b90e2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-width-001.html
new file mode 100644
index 0000000..53be3f24
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-color-001.html
new file mode 100644
index 0000000..5cef20ff8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-style-001.html
new file mode 100644
index 0000000..01c62b5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-width-001.html
new file mode 100644
index 0000000..279ea4b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-color-001.html
new file mode 100644
index 0000000..b4e93e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-style-001.html
new file mode 100644
index 0000000..279a809
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-width-001.html
new file mode 100644
index 0000000..99694bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-color-001.html
new file mode 100644
index 0000000..608d5d2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-style-001.html
new file mode 100644
index 0000000..af85417
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-width-001.html
new file mode 100644
index 0000000..c1dcc4fb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-color-001.html
new file mode 100644
index 0000000..b2c22005
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-style-001.html
new file mode 100644
index 0000000..890770c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-width-001.html
new file mode 100644
index 0000000..8128bb53
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-end-radius-001.html
new file mode 100644
index 0000000..c9dc8fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-start-radius-001.html
new file mode 100644
index 0000000..fe0f50c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-color-001.html
new file mode 100644
index 0000000..8e19135
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-left-radius-001.html
new file mode 100644
index 0000000..00706e8e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-right-radius-001.html
new file mode 100644
index 0000000..d9eff0a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-style-001.html
new file mode 100644
index 0000000..687a156
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-width-001.html
new file mode 100644
index 0000000..8d21da1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-search</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-input" type="search" value="input-search">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-attachment-001.html
new file mode 100644
index 0000000..d686b71
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-clip-001.html
new file mode 100644
index 0000000..5e5bb98b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-color-001.html
new file mode 100644
index 0000000..a9a4f9ce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-image-001.html
new file mode 100644
index 0000000..67ce5d44
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-origin-001.html
new file mode 100644
index 0000000..d64ea1c5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-position-001.html
new file mode 100644
index 0000000..47328fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html
new file mode 100644
index 0000000..801451b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html 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-color-001.html
new file mode 100644
index 0000000..35c2b259
--- /dev/null
+++ 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-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html 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-style-001.html
new file mode 100644
index 0000000..02418ca5
--- /dev/null
+++ 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-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..76ba5d5
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-color-001.html
new file mode 100644
index 0000000..5aa72d00
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-style-001.html
new file mode 100644
index 0000000..5d6f0de
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-width-001.html
new file mode 100644
index 0000000..e1a0fe2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-color-001.html
new file mode 100644
index 0000000..0429d4c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..1ff1f9c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..1a7b7521
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-style-001.html
new file mode 100644
index 0000000..f33d4b5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-width-001.html
new file mode 100644
index 0000000..f60665b61
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-end-end-radius-001.html
new file mode 100644
index 0000000..5410992
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-end-start-radius-001.html
new file mode 100644
index 0000000..207216e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..e54d46ae
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-repeat-001.html
new file mode 100644
index 0000000..c58d243
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-slice-001.html
new file mode 100644
index 0000000..3d69aace
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-source-001.html
new file mode 100644
index 0000000..0300383
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-width-001.html
new file mode 100644
index 0000000..51b084e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-color-001.html
new file mode 100644
index 0000000..b002409
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-style-001.html
new file mode 100644
index 0000000..6ecfaaee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-width-001.html
new file mode 100644
index 0000000..33d53e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-color-001.html
new file mode 100644
index 0000000..8a936bb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-style-001.html
new file mode 100644
index 0000000..5d43ac9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-width-001.html
new file mode 100644
index 0000000..a086c59
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-color-001.html
new file mode 100644
index 0000000..647d0c1d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-style-001.html
new file mode 100644
index 0000000..8cd58bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..a70ed49
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..9b28654
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-style-001.html
new file mode 100644
index 0000000..69bc1fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-width-001.html
new file mode 100644
index 0000000..6a918db
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-start-end-radius-001.html
new file mode 100644
index 0000000..84cc06a5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-start-start-radius-001.html
new file mode 100644
index 0000000..1481a5f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-color-001.html
new file mode 100644
index 0000000..d5f2c67
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-left-radius-001.html
new file mode 100644
index 0000000..6de4bb3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-right-radius-001.html
new file mode 100644
index 0000000..6a3055cc0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-style-001.html
new file mode 100644
index 0000000..80099b9c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-width-001.html
new file mode 100644
index 0000000..152a473
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-search-text-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-search-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-search-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="search-text-input" type="search" value="input-search-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..b36f8cf
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-clip-001.html
new file mode 100644
index 0000000..88f9648
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-color-001.html
new file mode 100644
index 0000000..c5ebc0f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-image-001.html
new file mode 100644
index 0000000..2bee1793
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-origin-001.html
new file mode 100644
index 0000000..f000839
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-position-001.html
new file mode 100644
index 0000000..1aea7465
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-size-001.html
new file mode 100644
index 0000000..0a92b03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-color-001.html
new file mode 100644
index 0000000..10c583f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-style-001.html
new file mode 100644
index 0000000..009e623
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-width-001.html
new file mode 100644
index 0000000..5d4c3e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-color-001.html
new file mode 100644
index 0000000..7b85ed2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-style-001.html
new file mode 100644
index 0000000..db23cc0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-width-001.html
new file mode 100644
index 0000000..ea89435
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-color-001.html
new file mode 100644
index 0000000..a0c6aeab
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..27368813
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..d876112
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..c08eacf
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-width-001.html
new file mode 100644
index 0000000..0f98fb5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-end-radius-001.html
new file mode 100644
index 0000000..b7212ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-start-radius-001.html
new file mode 100644
index 0000000..ca29a81
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-outset-001.html
new file mode 100644
index 0000000..8505655
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-repeat-001.html
new file mode 100644
index 0000000..42084e7d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-slice-001.html
new file mode 100644
index 0000000..03721a1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-source-001.html
new file mode 100644
index 0000000..b768500
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-width-001.html
new file mode 100644
index 0000000..cd28c59c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-color-001.html
new file mode 100644
index 0000000..7b1109e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-style-001.html
new file mode 100644
index 0000000..47c7d1f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-width-001.html
new file mode 100644
index 0000000..2fde013
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..debb779
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-style-001.html
new file mode 100644
index 0000000..4e260ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-width-001.html
new file mode 100644
index 0000000..9caca28
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-color-001.html
new file mode 100644
index 0000000..7c51183
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html
new file mode 100644
index 0000000..8981d27
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-width-001.html
new file mode 100644
index 0000000..5b93b5bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-color-001.html
new file mode 100644
index 0000000..243341d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-style-001.html
new file mode 100644
index 0000000..be67b53
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-width-001.html
new file mode 100644
index 0000000..bffb7dc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-end-radius-001.html
new file mode 100644
index 0000000..ab96454
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-start-radius-001.html
new file mode 100644
index 0000000..0af363c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-color-001.html
new file mode 100644
index 0000000..9b62a7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-left-radius-001.html
new file mode 100644
index 0000000..b6a1cd3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-right-radius-001.html
new file mode 100644
index 0000000..48c4a8c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-style-001.html
new file mode 100644
index 0000000..de7b61f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-width-001.html
new file mode 100644
index 0000000..df2deef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-submit-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-submit</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-submit-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="submit-input" type="submit" value="input-submit">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-attachment-001.html
new file mode 100644
index 0000000..9aa99504
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-clip-001.html
new file mode 100644
index 0000000..e90ad46d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-color-001.html
new file mode 100644
index 0000000..10e5bfcc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-image-001.html
new file mode 100644
index 0000000..ab612a371
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-origin-001.html
new file mode 100644
index 0000000..8b447fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-position-001.html
new file mode 100644
index 0000000..e75ae63
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-size-001.html
new file mode 100644
index 0000000..6e18215
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-color-001.html
new file mode 100644
index 0000000..00536269
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-style-001.html
new file mode 100644
index 0000000..460aab4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-width-001.html
new file mode 100644
index 0000000..bfe0590
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-color-001.html
new file mode 100644
index 0000000..a99decb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-style-001.html
new file mode 100644
index 0000000..fc3ac1a2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-width-001.html
new file mode 100644
index 0000000..9fa513af
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-color-001.html
new file mode 100644
index 0000000..2eb97b2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..34ffa2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..e889656a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-style-001.html
new file mode 100644
index 0000000..1afdb4b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-width-001.html
new file mode 100644
index 0000000..6540d05
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-end-radius-001.html
new file mode 100644
index 0000000..98735e9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-start-radius-001.html
new file mode 100644
index 0000000..6dd419e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-outset-001.html
new file mode 100644
index 0000000..fc46ace6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-repeat-001.html
new file mode 100644
index 0000000..709485f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-slice-001.html
new file mode 100644
index 0000000..1b391cce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-source-001.html
new file mode 100644
index 0000000..2523a826
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-width-001.html
new file mode 100644
index 0000000..3f22013
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-color-001.html
new file mode 100644
index 0000000..294cc70
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-style-001.html
new file mode 100644
index 0000000..97a9a5dc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-width-001.html
new file mode 100644
index 0000000..e0035f2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-color-001.html
new file mode 100644
index 0000000..f4b3974a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-style-001.html
new file mode 100644
index 0000000..e2b1ca7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-width-001.html
new file mode 100644
index 0000000..dc07a0e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-color-001.html
new file mode 100644
index 0000000..65fd37f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-style-001.html
new file mode 100644
index 0000000..0c5fd539
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-width-001.html
new file mode 100644
index 0000000..5e8e54ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-color-001.html
new file mode 100644
index 0000000..91385eb58
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-style-001.html
new file mode 100644
index 0000000..8fe090fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-width-001.html
new file mode 100644
index 0000000..cb3470e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-end-radius-001.html
new file mode 100644
index 0000000..d8ca285
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-start-radius-001.html
new file mode 100644
index 0000000..b3c94b3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-color-001.html
new file mode 100644
index 0000000..e57dba8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-left-radius-001.html
new file mode 100644
index 0000000..d408d75
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-right-radius-001.html
new file mode 100644
index 0000000..a39e8ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-style-001.html
new file mode 100644
index 0000000..cd4fcc4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-width-001.html
new file mode 100644
index 0000000..21185f9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-input-text-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for input-text</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-input-text-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="text-input" type="text" value="input-text">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-attachment-001.html
new file mode 100644
index 0000000..b68f8ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-clip-001.html
new file mode 100644
index 0000000..417f715
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-color-001.html
new file mode 100644
index 0000000..52e07c3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-image-001.html
new file mode 100644
index 0000000..27c6a26
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-origin-001.html
new file mode 100644
index 0000000..06963ba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-position-001.html
new file mode 100644
index 0000000..e6e1c18
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-size-001.html
new file mode 100644
index 0000000..0fec1738
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-color-001.html
new file mode 100644
index 0000000..a35424ba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-style-001.html
new file mode 100644
index 0000000..471287ca
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-width-001.html
new file mode 100644
index 0000000..7010081
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-color-001.html
new file mode 100644
index 0000000..c8861b4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-style-001.html
new file mode 100644
index 0000000..510214f2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-width-001.html
new file mode 100644
index 0000000..c9ebdbe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-color-001.html
new file mode 100644
index 0000000..8db0902
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..8bee975
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..00ac753
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-style-001.html
new file mode 100644
index 0000000..ac19679
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-width-001.html
new file mode 100644
index 0000000..c18b4dcf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-end-radius-001.html
new file mode 100644
index 0000000..bb8fa354
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-start-radius-001.html
new file mode 100644
index 0000000..12638230
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-outset-001.html
new file mode 100644
index 0000000..ab9b973f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-repeat-001.html
new file mode 100644
index 0000000..32eb2a38
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-slice-001.html
new file mode 100644
index 0000000..1a6486e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-source-001.html
new file mode 100644
index 0000000..2ae8d4d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-width-001.html
new file mode 100644
index 0000000..f22d5bf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-color-001.html
new file mode 100644
index 0000000..86c1425
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-style-001.html
new file mode 100644
index 0000000..dd0df7f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-width-001.html
new file mode 100644
index 0000000..31ef531
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-color-001.html
new file mode 100644
index 0000000..b721fb52
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-style-001.html
new file mode 100644
index 0000000..a521fa1a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-width-001.html
new file mode 100644
index 0000000..d8ad236
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-color-001.html
new file mode 100644
index 0000000..c2ec8d32
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-style-001.html
new file mode 100644
index 0000000..33c793a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-width-001.html
new file mode 100644
index 0000000..f8d2311a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-color-001.html
new file mode 100644
index 0000000..6affa83d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-style-001.html
new file mode 100644
index 0000000..4d508db
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-width-001.html
new file mode 100644
index 0000000..c32ba83d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-end-radius-001.html
new file mode 100644
index 0000000..62be943
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-start-radius-001.html
new file mode 100644
index 0000000..84362f3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-color-001.html
new file mode 100644
index 0000000..f41ae3c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-left-radius-001.html
new file mode 100644
index 0000000..ec8ed299
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-right-radius-001.html
new file mode 100644
index 0000000..9c29f07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-style-001.html
new file mode 100644
index 0000000..34c6b54
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-width-001.html
new file mode 100644
index 0000000..73b8261
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-link-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for link</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-link-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <a id="link">a</a>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-attachment-001.html
new file mode 100644
index 0000000..f9760122
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html
new file mode 100644
index 0000000..dd353eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-color-001.html
new file mode 100644
index 0000000..2d6f903a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-image-001.html
new file mode 100644
index 0000000..2217eba4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-origin-001.html
new file mode 100644
index 0000000..8c232122
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-position-001.html
new file mode 100644
index 0000000..b82a498
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-size-001.html
new file mode 100644
index 0000000..2e3fa563
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-color-001.html
new file mode 100644
index 0000000..2b0742d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-style-001.html
new file mode 100644
index 0000000..cf733ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-width-001.html
new file mode 100644
index 0000000..44bcd7d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-color-001.html
new file mode 100644
index 0000000..c03b5eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-style-001.html
new file mode 100644
index 0000000..5ed90d3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-width-001.html
new file mode 100644
index 0000000..0dae7defc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-color-001.html
new file mode 100644
index 0000000..bc3d1bb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..aad197d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..2ea501c5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-style-001.html
new file mode 100644
index 0000000..887fe56
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-width-001.html
new file mode 100644
index 0000000..5af8fffb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-end-radius-001.html
new file mode 100644
index 0000000..bacfb1d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-start-radius-001.html
new file mode 100644
index 0000000..0a4d9bcd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-outset-001.html
new file mode 100644
index 0000000..f89f6c8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-repeat-001.html
new file mode 100644
index 0000000..c87a7194
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-slice-001.html
new file mode 100644
index 0000000..ebb7d24
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-source-001.html
new file mode 100644
index 0000000..a823e22
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-width-001.html
new file mode 100644
index 0000000..c0d4f43
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-color-001.html
new file mode 100644
index 0000000..624c594
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-style-001.html
new file mode 100644
index 0000000..233c4f2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-width-001.html
new file mode 100644
index 0000000..4d25da6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-color-001.html
new file mode 100644
index 0000000..49d0c1d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-style-001.html
new file mode 100644
index 0000000..0a48844
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-width-001.html
new file mode 100644
index 0000000..ae7382c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-color-001.html
new file mode 100644
index 0000000..f5cde67
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-style-001.html
new file mode 100644
index 0000000..48c17401
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-width-001.html
new file mode 100644
index 0000000..0aca1fba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-color-001.html
new file mode 100644
index 0000000..b7b2360
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-style-001.html
new file mode 100644
index 0000000..24d4b2e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html
new file mode 100644
index 0000000..a3659d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-end-radius-001.html
new file mode 100644
index 0000000..ac4ec66
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-start-radius-001.html
new file mode 100644
index 0000000..62d5d57
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-color-001.html
new file mode 100644
index 0000000..28210d6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-left-radius-001.html
new file mode 100644
index 0000000..cf25cc4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-right-radius-001.html
new file mode 100644
index 0000000..24f15a5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-style-001.html
new file mode 100644
index 0000000..37ba183
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-width-001.html
new file mode 100644
index 0000000..c10fce34
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-meter-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for meter</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-meter-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <meter id="meter" value=0.5></meter>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-attachment-001.html
new file mode 100644
index 0000000..b85186c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-clip-001.html
new file mode 100644
index 0000000..e3df1f06
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-color-001.html
new file mode 100644
index 0000000..8e93521
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-image-001.html
new file mode 100644
index 0000000..87e895e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-origin-001.html
new file mode 100644
index 0000000..a4958abd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-position-001.html
new file mode 100644
index 0000000..ed117a9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-size-001.html
new file mode 100644
index 0000000..3047ef8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-color-001.html
new file mode 100644
index 0000000..3f084623
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-style-001.html
new file mode 100644
index 0000000..1cddf91
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-width-001.html
new file mode 100644
index 0000000..fe21ae8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-color-001.html
new file mode 100644
index 0000000..67b5b83
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-style-001.html
new file mode 100644
index 0000000..5359a78
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-width-001.html
new file mode 100644
index 0000000..1019a98b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-color-001.html
new file mode 100644
index 0000000..366236c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..6dce72a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..86eb1e7e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-style-001.html
new file mode 100644
index 0000000..900c796
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-width-001.html
new file mode 100644
index 0000000..67e9792
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-end-radius-001.html
new file mode 100644
index 0000000..0f78fb7c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-start-radius-001.html
new file mode 100644
index 0000000..9f74da94
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-outset-001.html
new file mode 100644
index 0000000..306c161
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-repeat-001.html
new file mode 100644
index 0000000..2ba0e04
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-slice-001.html
new file mode 100644
index 0000000..42d6560
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-source-001.html
new file mode 100644
index 0000000..80e6fdc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-width-001.html
new file mode 100644
index 0000000..5086cba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-color-001.html
new file mode 100644
index 0000000..88427b78
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-style-001.html
new file mode 100644
index 0000000..e16bb5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-width-001.html
new file mode 100644
index 0000000..88f56153
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-color-001.html
new file mode 100644
index 0000000..a94c23d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-style-001.html
new file mode 100644
index 0000000..479a0faa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-width-001.html
new file mode 100644
index 0000000..480fbc7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-color-001.html
new file mode 100644
index 0000000..0f6a3c6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-style-001.html
new file mode 100644
index 0000000..aab0719b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-width-001.html
new file mode 100644
index 0000000..6c24d4e7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-color-001.html
new file mode 100644
index 0000000..2f0aa135
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-style-001.html
new file mode 100644
index 0000000..02dfe72
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-width-001.html
new file mode 100644
index 0000000..4f438b5320
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-end-radius-001.html
new file mode 100644
index 0000000..bdab3fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-start-radius-001.html
new file mode 100644
index 0000000..5c5f068
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-color-001.html
new file mode 100644
index 0000000..62c0d5f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-left-radius-001.html
new file mode 100644
index 0000000..7c6b62f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-right-radius-001.html
new file mode 100644
index 0000000..f412a90
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-style-001.html
new file mode 100644
index 0000000..c8601df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-width-001.html
new file mode 100644
index 0000000..ea5c5c4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-progress-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for progress</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-progress-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <progress id="progress" value=0.5></progress>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-attachment-001.html
new file mode 100644
index 0000000..8c7e8ea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-clip-001.html
new file mode 100644
index 0000000..cbb6a7e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-color-001.html
new file mode 100644
index 0000000..ce5b79bb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-image-001.html
new file mode 100644
index 0000000..e15e9e4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-origin-001.html
new file mode 100644
index 0000000..0e81e6f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-position-001.html
new file mode 100644
index 0000000..4fa8e7a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-size-001.html
new file mode 100644
index 0000000..1a989ed6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-color-001.html
new file mode 100644
index 0000000..d7708ce4c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-style-001.html
new file mode 100644
index 0000000..4707f09
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-width-001.html
new file mode 100644
index 0000000..a0098cc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-color-001.html
new file mode 100644
index 0000000..0375cd8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-style-001.html
new file mode 100644
index 0000000..ec17b48
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-width-001.html
new file mode 100644
index 0000000..2e3d944
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-color-001.html
new file mode 100644
index 0000000..1cbebba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..f9c253da8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..5f14585
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-style-001.html
new file mode 100644
index 0000000..96c8932
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-width-001.html
new file mode 100644
index 0000000..be80a5af
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-end-radius-001.html
new file mode 100644
index 0000000..f03b3ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-start-radius-001.html
new file mode 100644
index 0000000..954a4ff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-outset-001.html
new file mode 100644
index 0000000..89653068
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-repeat-001.html
new file mode 100644
index 0000000..662f9ca6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-slice-001.html
new file mode 100644
index 0000000..f15ebe3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-source-001.html
new file mode 100644
index 0000000..539ebb7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-width-001.html
new file mode 100644
index 0000000..a17d8475
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-color-001.html
new file mode 100644
index 0000000..877207006
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-style-001.html
new file mode 100644
index 0000000..271f4e3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-width-001.html
new file mode 100644
index 0000000..7f61c6f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-color-001.html
new file mode 100644
index 0000000..6c25f25
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-style-001.html
new file mode 100644
index 0000000..5ced60d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-width-001.html
new file mode 100644
index 0000000..f39286a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-color-001.html
new file mode 100644
index 0000000..b19deb2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-style-001.html
new file mode 100644
index 0000000..56e7d9e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-width-001.html
new file mode 100644
index 0000000..2ee2531b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-color-001.html
new file mode 100644
index 0000000..8fbb9f4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-style-001.html
new file mode 100644
index 0000000..df88bff3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-width-001.html
new file mode 100644
index 0000000..22ce6e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-end-radius-001.html
new file mode 100644
index 0000000..360b827
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-start-radius-001.html
new file mode 100644
index 0000000..6a6904d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-color-001.html
new file mode 100644
index 0000000..0808686
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-left-radius-001.html
new file mode 100644
index 0000000..426cae1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-right-radius-001.html
new file mode 100644
index 0000000..b954275
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-style-001.html
new file mode 100644
index 0000000..ead7b86c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-width-001.html
new file mode 100644
index 0000000..c2a8674
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-radio-input-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for radio-input</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-radio-input-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="radio-input" type="radio">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-attachment-001.html
new file mode 100644
index 0000000..72c767a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-clip-001.html
new file mode 100644
index 0000000..790641d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-color-001.html
new file mode 100644
index 0000000..b3e18ad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-image-001.html
new file mode 100644
index 0000000..4043b25f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-origin-001.html
new file mode 100644
index 0000000..a80b97b2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-position-001.html
new file mode 100644
index 0000000..895faa0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-size-001.html
new file mode 100644
index 0000000..a351379
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-color-001.html
new file mode 100644
index 0000000..557070fe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-style-001.html
new file mode 100644
index 0000000..b0748f3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-width-001.html
new file mode 100644
index 0000000..f5b075a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-color-001.html
new file mode 100644
index 0000000..28a37ea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-style-001.html
new file mode 100644
index 0000000..3ff761c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-width-001.html
new file mode 100644
index 0000000..78458b66
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-color-001.html
new file mode 100644
index 0000000..fabdf0a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..4f4b4c6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..5a0bdd29
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-style-001.html
new file mode 100644
index 0000000..2478e65
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-width-001.html
new file mode 100644
index 0000000..9243564
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-end-radius-001.html
new file mode 100644
index 0000000..96b8ee9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-start-radius-001.html
new file mode 100644
index 0000000..2c2e4ed6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-outset-001.html
new file mode 100644
index 0000000..9890eae
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-repeat-001.html
new file mode 100644
index 0000000..a3602ef
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-slice-001.html
new file mode 100644
index 0000000..0c8ffa1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-source-001.html
new file mode 100644
index 0000000..60fcd03
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-width-001.html
new file mode 100644
index 0000000..59098ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-color-001.html
new file mode 100644
index 0000000..16e2c1b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-style-001.html
new file mode 100644
index 0000000..7e664810
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-width-001.html
new file mode 100644
index 0000000..eaff4997
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-color-001.html
new file mode 100644
index 0000000..1636941
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-style-001.html
new file mode 100644
index 0000000..a5b216d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-width-001.html
new file mode 100644
index 0000000..0eb1f6e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-color-001.html
new file mode 100644
index 0000000..02135ea
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-style-001.html
new file mode 100644
index 0000000..edef1998
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-width-001.html
new file mode 100644
index 0000000..e9d2804b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-color-001.html
new file mode 100644
index 0000000..fb20afa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-style-001.html
new file mode 100644
index 0000000..6f4bfe4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-width-001.html
new file mode 100644
index 0000000..03422cd5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-end-radius-001.html
new file mode 100644
index 0000000..c5d4621
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-start-radius-001.html
new file mode 100644
index 0000000..5c4a81f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-color-001.html
new file mode 100644
index 0000000..a8b12f5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-left-radius-001.html
new file mode 100644
index 0000000..0eefc06
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-right-radius-001.html
new file mode 100644
index 0000000..d43e98ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-style-001.html
new file mode 100644
index 0000000..1e8dec3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-width-001.html
new file mode 100644
index 0000000..a45f6b1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-range-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for range</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-range-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <input id="range-input" type="range">
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-attachment-001.html
new file mode 100644
index 0000000..9ba8944
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-clip-001.html
new file mode 100644
index 0000000..719bec2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-color-001.html
new file mode 100644
index 0000000..9092c41
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-image-001.html
new file mode 100644
index 0000000..972c343
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-origin-001.html
new file mode 100644
index 0000000..abc9acfc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-position-001.html
new file mode 100644
index 0000000..999fff421
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-size-001.html
new file mode 100644
index 0000000..977bc0e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-color-001.html
new file mode 100644
index 0000000..46bdb5b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-style-001.html
new file mode 100644
index 0000000..aa37885
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-width-001.html
new file mode 100644
index 0000000..cebe998f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-color-001.html
new file mode 100644
index 0000000..9c238d5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-style-001.html
new file mode 100644
index 0000000..7061a367
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-width-001.html
new file mode 100644
index 0000000..34578a4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-color-001.html
new file mode 100644
index 0000000..d1a7a01
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..1c70cd361
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..5185032
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-style-001.html
new file mode 100644
index 0000000..ceda4319
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-width-001.html
new file mode 100644
index 0000000..3c43f47
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-end-radius-001.html
new file mode 100644
index 0000000..182c527c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-start-radius-001.html
new file mode 100644
index 0000000..efbd14d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-outset-001.html
new file mode 100644
index 0000000..5a0eb9be
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-repeat-001.html
new file mode 100644
index 0000000..5ad2b2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-slice-001.html
new file mode 100644
index 0000000..3993331
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-source-001.html
new file mode 100644
index 0000000..9c9da293
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-width-001.html
new file mode 100644
index 0000000..d03492c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-color-001.html
new file mode 100644
index 0000000..b849814
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-style-001.html
new file mode 100644
index 0000000..13a75cc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-width-001.html
new file mode 100644
index 0000000..40d13678
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-color-001.html
new file mode 100644
index 0000000..de4241f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-style-001.html
new file mode 100644
index 0000000..9ea8f4df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-width-001.html
new file mode 100644
index 0000000..dedfa6d4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-color-001.html
new file mode 100644
index 0000000..5f88004
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-style-001.html
new file mode 100644
index 0000000..d574ac6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-width-001.html
new file mode 100644
index 0000000..0c466b3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-color-001.html
new file mode 100644
index 0000000..ac2c9b2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-style-001.html
new file mode 100644
index 0000000..671dd6fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-width-001.html
new file mode 100644
index 0000000..2c7baec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-end-radius-001.html
new file mode 100644
index 0000000..43c1b27
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-start-radius-001.html
new file mode 100644
index 0000000..f902a43
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-color-001.html
new file mode 100644
index 0000000..b030e5c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-left-radius-001.html
new file mode 100644
index 0000000..35d83e29
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-right-radius-001.html
new file mode 100644
index 0000000..922a101b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-style-001.html
new file mode 100644
index 0000000..dfddc274
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-width-001.html
new file mode 100644
index 0000000..3001943
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-dropdown-box-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for select-dropdown-box</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-dropdown-box-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-attachment-001.html
new file mode 100644
index 0000000..b6f4087
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-clip-001.html
new file mode 100644
index 0000000..43f8721
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-color-001.html
new file mode 100644
index 0000000..b349902
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-image-001.html
new file mode 100644
index 0000000..bf8b706
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-origin-001.html
new file mode 100644
index 0000000..dfd1a93
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-position-001.html
new file mode 100644
index 0000000..41b6a7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-size-001.html
new file mode 100644
index 0000000..64fe9a0c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-color-001.html
new file mode 100644
index 0000000..17a010b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-style-001.html
new file mode 100644
index 0000000..f079e82
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-width-001.html
new file mode 100644
index 0000000..8f741e2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-color-001.html
new file mode 100644
index 0000000..28ff9ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-style-001.html
new file mode 100644
index 0000000..dc7bcd0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-width-001.html
new file mode 100644
index 0000000..0509dde
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-color-001.html
new file mode 100644
index 0000000..af7704d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..b38b4435
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..f797e07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-style-001.html
new file mode 100644
index 0000000..6d895bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-width-001.html
new file mode 100644
index 0000000..14ea015
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-end-radius-001.html
new file mode 100644
index 0000000..d105047
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-start-radius-001.html
new file mode 100644
index 0000000..0ca58e5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-outset-001.html
new file mode 100644
index 0000000..367d1f6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-repeat-001.html
new file mode 100644
index 0000000..558ab52
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-slice-001.html
new file mode 100644
index 0000000..736ffd42
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-source-001.html
new file mode 100644
index 0000000..987ed46
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-width-001.html
new file mode 100644
index 0000000..e6d824e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-color-001.html
new file mode 100644
index 0000000..269805c2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-style-001.html
new file mode 100644
index 0000000..74f6794
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-width-001.html
new file mode 100644
index 0000000..bfb561c4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-color-001.html
new file mode 100644
index 0000000..7403def
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-style-001.html
new file mode 100644
index 0000000..235436b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-width-001.html
new file mode 100644
index 0000000..24f6eb28
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-color-001.html
new file mode 100644
index 0000000..107eeec6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-style-001.html
new file mode 100644
index 0000000..a97d90c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-width-001.html
new file mode 100644
index 0000000..894276b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-color-001.html
new file mode 100644
index 0000000..6ebb3df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-style-001.html
new file mode 100644
index 0000000..4cc8372
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-width-001.html
new file mode 100644
index 0000000..029c608
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-end-radius-001.html
new file mode 100644
index 0000000..464d7dfd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-start-radius-001.html
new file mode 100644
index 0000000..81c7892
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-color-001.html
new file mode 100644
index 0000000..d7c68ac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-left-radius-001.html
new file mode 100644
index 0000000..3b306bb7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-right-radius-001.html
new file mode 100644
index 0000000..ae809138
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-style-001.html
new file mode 100644
index 0000000..8fbbb91
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-width-001.html
new file mode 100644
index 0000000..b80972a5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-listbox-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for select-listbox</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-listbox-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select multiple id="select-listbox"><option>select-listbox</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-attachment-001.html
new file mode 100644
index 0000000..4378b65
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-clip-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-clip-001.html
new file mode 100644
index 0000000..d62a086
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-color-001.html
new file mode 100644
index 0000000..bbf30993
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-image-001.html
new file mode 100644
index 0000000..12c9fd5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-origin-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-origin-001.html
new file mode 100644
index 0000000..336fc86
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-position-001.html
new file mode 100644
index 0000000..7f40136
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-size-001.html
new file mode 100644
index 0000000..bb420cc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-color-001.html
new file mode 100644
index 0000000..1a476ac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-style-001.html
new file mode 100644
index 0000000..db78458
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-width-001.html
new file mode 100644
index 0000000..f21984e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-color-001.html
new file mode 100644
index 0000000..95308ab
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-style-001.html
new file mode 100644
index 0000000..1fa80c7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-width-001.html
new file mode 100644
index 0000000..57553cd3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-color-001.html
new file mode 100644
index 0000000..4666747
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..c58d57f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..e302b17d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-style-001.html
new file mode 100644
index 0000000..c0154d1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-width-001.html
new file mode 100644
index 0000000..1dc7027
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-end-radius-001.html
new file mode 100644
index 0000000..ebedeac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-start-radius-001.html
new file mode 100644
index 0000000..4a02399
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-outset-001.html
new file mode 100644
index 0000000..015737dc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-repeat-001.html
new file mode 100644
index 0000000..cb03b81
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-slice-001.html
new file mode 100644
index 0000000..79901007
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-source-001.html
new file mode 100644
index 0000000..1b3838e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-width-001.html
new file mode 100644
index 0000000..d78b9d9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-color-001.html
new file mode 100644
index 0000000..20c896d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-style-001.html
new file mode 100644
index 0000000..15048d43
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-width-001.html
new file mode 100644
index 0000000..ad7b00e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-color-001.html
new file mode 100644
index 0000000..4641bb3e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-style-001.html
new file mode 100644
index 0000000..ab06492
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-width-001.html
new file mode 100644
index 0000000..0e3fcac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-color-001.html
new file mode 100644
index 0000000..9fa4d380
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-style-001.html
new file mode 100644
index 0000000..d1351ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-width-001.html
new file mode 100644
index 0000000..bfcb9e1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-color-001.html
new file mode 100644
index 0000000..71d6758b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-style-001.html
new file mode 100644
index 0000000..0927300e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-width-001.html
new file mode 100644
index 0000000..01928ca
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-end-radius-001.html
new file mode 100644
index 0000000..7fb7bcf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-start-radius-001.html
new file mode 100644
index 0000000..35fef87
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-color-001.html
new file mode 100644
index 0000000..cf1d4f8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-left-radius-001.html
new file mode 100644
index 0000000..8b0eda3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-right-radius-001.html
new file mode 100644
index 0000000..d2ec819
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-style-001.html
new file mode 100644
index 0000000..5625d4f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-width-001.html
new file mode 100644
index 0000000..536a7ac
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-select-menulist-button-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for select-menulist-button</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-select-menulist-button-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <select id="select-menulist-button"><option>select-menulist-button</option></select>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-attachment-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-attachment-001.html
new file mode 100644
index 0000000..ab67317a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-attachment-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-attachment disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-attachment.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-attachment";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html
new file mode 100644
index 0000000..821cdda
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-clip-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-clip disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-clip.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-clip";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-color-001.html
new file mode 100644
index 0000000..999bf80a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-image-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-image-001.html
new file mode 100644
index 0000000..3017121
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-image-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-image disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-image.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-image";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html
new file mode 100644
index 0000000..9eaaeabc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-origin-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-origin disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-origin.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-origin";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-position-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-position-001.html
new file mode 100644
index 0000000..42c4f0a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-position-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-position disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-position.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-position";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-size-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-size-001.html
new file mode 100644
index 0000000..00d5719
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-background-size-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: background-size disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes background-size.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "background-size";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-color-001.html
new file mode 100644
index 0000000..c44d7d58
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-style-001.html
new file mode 100644
index 0000000..61f2f20
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..c18998c
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-end-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-color-001.html
new file mode 100644
index 0000000..4952f5a7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-style-001.html
new file mode 100644
index 0000000..757ace51
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-width-001.html
new file mode 100644
index 0000000..c32109d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-block-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-block-start-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-block-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-block-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-color-001.html
new file mode 100644
index 0000000..6bbcadcc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-left-radius-001.html
new file mode 100644
index 0000000..8d1e7c4b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-left-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-right-radius-001.html
new file mode 100644
index 0000000..d7efd39f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-right-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
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 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
new file mode 100644
index 0000000..82c24b5
--- /dev/null
+++ 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
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-width-001.html
new file mode 100644
index 0000000..f26aa76
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-bottom-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-bottom-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-bottom-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-bottom-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-end-radius-001.html
new file mode 100644
index 0000000..6f75cec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-end-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-start-radius-001.html
new file mode 100644
index 0000000..6820c01
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-end-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-end-start-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-end-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-end-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-outset-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-outset-001.html
new file mode 100644
index 0000000..eceb94c0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-outset-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-outset disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-outset.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-outset";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-repeat-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-repeat-001.html
new file mode 100644
index 0000000..c5861b0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-repeat-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-repeat disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-repeat.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-repeat";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-slice-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-slice-001.html
new file mode 100644
index 0000000..ffe49fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-slice-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-slice disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-slice.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-slice";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-source-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-source-001.html
new file mode 100644
index 0000000..e8c66dd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-source-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-source disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-source.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-source";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-width-001.html
new file mode 100644
index 0000000..62848f6c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-image-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-image-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-image-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-image-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-color-001.html
new file mode 100644
index 0000000..96dfb2c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-style-001.html
new file mode 100644
index 0000000..854bb92
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-width-001.html
new file mode 100644
index 0000000..146a672
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-end-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-end-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-end-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-end-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-color-001.html
new file mode 100644
index 0000000..21250ce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-style-001.html
new file mode 100644
index 0000000..95fae5cf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-width-001.html
new file mode 100644
index 0000000..fa70544
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-inline-start-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-inline-start-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-inline-start-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-inline-start-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-color-001.html
new file mode 100644
index 0000000..add41f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-style-001.html
new file mode 100644
index 0000000..1a5cb569
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-width-001.html
new file mode 100644
index 0000000..9b76bce
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-left-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-left-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-left-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-left-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-color-001.html
new file mode 100644
index 0000000..e5436513
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-style-001.html
new file mode 100644
index 0000000..d01355a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-width-001.html
new file mode 100644
index 0000000..de1fefb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-right-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-right-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-right-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-right-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-end-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-end-radius-001.html
new file mode 100644
index 0000000..2d5d8dcd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-end-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-end-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-end-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-end-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-start-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-start-radius-001.html
new file mode 100644
index 0000000..3c79c908
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-start-start-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-start-start-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-start-start-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-start-start-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-color-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-color-001.html
new file mode 100644
index 0000000..5f79c624
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-color-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-color disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-color.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-color";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-left-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-left-radius-001.html
new file mode 100644
index 0000000..a065111
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-left-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-left-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-left-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-left-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-right-radius-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-right-radius-001.html
new file mode 100644
index 0000000..786f486e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-right-radius-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-right-radius disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-right-radius.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-right-radius";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-style-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-style-001.html
new file mode 100644
index 0000000..92e3f96
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-style-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-style disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-style.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-style";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-width-001.html b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-width-001.html
new file mode 100644
index 0000000..1363260
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/compute-kind-widget-generated/kind-of-widget-fallback-textarea-border-top-width-001.html
@@ -0,0 +1,27 @@
+<!-- DO NOT EDIT. This file has been generated. Source:
+    ./tools/build-compute-kind-widget-fallback-props.py
+-->
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: Compute kind of widget: border-top-width disables native appearance for textarea</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
+<meta name="assert" content="appropriate widget is returned when authorProps includes border-top-width.">
+<link rel="match" href="../compute-kind-widget-fallback-textarea-ref.html">
+<style>
+    #container { width: 500px; }
+    #container > #search-text-input { appearance: textfield; }
+    #container > #select-menulist-button { appearance: none; appearance: menulist-button; }
+</style>
+
+<div id="container">
+    <textarea id="textarea">textarea</textarea>
+</div>
+
+<script>
+// Set author-level CSS that matches UA style, but don't use the 'revert' value.
+const elements = document.querySelectorAll('#container > *');
+const prop = "border-top-width";
+for (const el of elements) {
+  el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
+}
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/tools/build-compute-kind-widget-fallback-props.py b/third_party/blink/web_tests/external/wpt/css/css-ui/tools/build-compute-kind-widget-fallback-props.py
index a768e4e2..baede8e 100755
--- a/third_party/blink/web_tests/external/wpt/css/css-ui/tools/build-compute-kind-widget-fallback-props.py
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/tools/build-compute-kind-widget-fallback-props.py
@@ -50,15 +50,36 @@
   u"border-end-end-radius",
 ]
 
+els = [
+  [u'link', u'<a id="link">a</a>'],
+  [u'button', u'<button id="button">button</button>'],
+  [u'input-button', u'<input id="button-input" type="button" value="input-button">'],
+  [u'input-submit', u'<input id="submit-input" type="submit" value="input-submit">'],
+  [u'input-reset', u'<input id="reset-input" type="reset" value="input-reset">'],
+  [u'input-text', u'<input id="text-input" type="text" value="input-text">'],
+  [u'input-search-text', u'<input id="search-text-input" type="search" value="input-search-text">'],
+  [u'input-search', u'<input id="search-input" type="search" value="input-search">'],
+  [u'range', u'<input id="range-input" type="range">'],
+  [u'checkbox-input', u'<input id="checkbox-input" type="checkbox">'],
+  [u'radio-input', u'<input id="radio-input" type="radio">'],
+  [u'color-input', u'<input id="color-input" type="color">'],
+  [u'textarea', u'<textarea id="textarea">textarea</textarea>'],
+  [u'select-listbox', u'<select multiple id="select-listbox"><option>select-listbox</option></select>'],
+  [u'select-dropdown-box', u'<select id="select-dropdown-box"><option>select-dropdown-box</option></select>'],
+  [u'select-menulist-button', u'<select id="select-menulist-button"><option>select-menulist-button</option></select>'],
+  [u'meter', u'<meter id="meter" value=0.5></meter>'],
+  [u'progress', u'<progress id="progress" value=0.5></progress>'],
+]
+
 template = u"""<!-- DO NOT EDIT. This file has been generated. Source:
     ./tools/build-compute-kind-widget-fallback-props.py
 -->
 <!DOCTYPE html>
 <meta charset="utf-8">
-<title>CSS Basic User Interface Test: Compute kind of widget: {prop} disables native appearance for widgets</title>
+<title>CSS Basic User Interface Test: Compute kind of widget: {prop} disables native appearance for {el_id}</title>
 <link rel="help" href="https://drafts.csswg.org/css-ui-4/#computing-kind-widget">
 <meta name="assert" content="appropriate widget is returned when authorProps includes {prop}.">
-<link rel="match" href="../compute-kind-widget-fallback-ref.html">
+<link rel="match" href="../compute-kind-widget-fallback-{el_id}-ref.html">
 <style>
     #container {{ width: 500px; }}
     #container > #search-text-input {{ appearance: textfield; }}
@@ -66,27 +87,7 @@
 </style>
 
 <div id="container">
-    <a>a</a>
-    <button id="button">button</button>
-    <input id="button-input" type="button" value="input-button">
-    <input id="submit-input" type="submit" value="input-submit">
-    <input id="reset-input" type="reset" value="input-reset">
-
-    <input id="text-input" type="text" value="input-text">
-    <input id="search-text-input" type="search" value="input-search-text">
-    <input id="search-input" type="search" value="input-search">
-
-    <input id="range-input" type="range">
-    <input id="checkbox-input" type="checkbox">
-    <input id="radio-input" type="radio">
-    <input id="color-input" type="color">
-
-    <textarea id="textarea">textarea</textarea>
-    <select multiple id="select-listbox"><option>select-listbox</option></select>
-    <select id="select-dropdown-box"><option>select-dropdown-box</option></select>
-    <select id="select-menulist-button"><option>select-menulist-button</option></select>
-    <meter id="meter" value=0.5></meter>
-    <progress id="progress" value=0.5></progress>
+    {el_markup}
 </div>
 
 <script>
@@ -112,9 +113,10 @@
     file.write(content)
     file.close()
 
-def generate_tests(prop):
-    test = template.format(prop=prop)
-    write_file(f"kind-of-widget-fallback-{prop}-001.html", test)
+def generate_tests(prop, el_id, el_markup):
+    test = template.format(prop=prop, el_id=el_id, el_markup=el_markup)
+    write_file(f"kind-of-widget-fallback-{el_id}-{prop}-001.html", test)
 
 for prop in props:
-    generate_tests(prop)
+    for el_id, el_markup in els:
+        generate_tests(prop, el_id, el_markup)
diff --git a/third_party/blink/web_tests/external/wpt/docs/commands.json b/third_party/blink/web_tests/external/wpt/docs/commands.json
index 9482d8f..b908485c 100644
--- a/third_party/blink/web_tests/external/wpt/docs/commands.json
+++ b/third_party/blink/web_tests/external/wpt/docs/commands.json
@@ -6,7 +6,7 @@
     "help": "Build documentation",
     "virtualenv": true,
     "requirements": [
-      "./requirements.txt"
+      "requirements.txt"
     ]
   }
 }
diff --git a/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html b/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html
new file mode 100644
index 0000000..812a55f3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/editing/the-hidden-attribute/beforematch-element-fragment-navigation.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
+<link rel="help" href="https://github.com/WICG/display-locking">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id=parentid>
+  <div id=hiddenid>
+    <div id=childid>hello</div>
+  </div>
+</div>
+
+<div id=spacer style="height:4000px">spacer</div>
+
+<script>
+test(() => {
+  window.location.hash = '';
+  hiddenid.hidden = 'until-found';
+  window.location.hash = '#hiddenid';
+  assert_false(hiddenid.hasAttribute('hidden'));
+}, 'Verifies that fragment navigation reveals hidden=until-found elements.');
+
+test(() => {
+  window.location.hash = '';
+  parentid.hidden = 'until-found';
+  hiddenid.hidden = 'until-found';
+  childid.hidden = 'until-found';
+  window.location.hash = 'childid';
+  assert_false(parentid.hasAttribute('hidden'), 'parentid should not have the hidden attribute.');
+  assert_false(hiddenid.hasAttribute('hidden'), 'hiddenid should not have the hidden attribute.');
+  assert_false(childid.hasAttribute('hidden'), 'childid should not have the hidden attribute.');
+}, 'Verifies that fragment navigation reveals all parent hidden=until-found elements.');
+
+test(() => {
+  window.location.hash = '';
+  hiddenid.hidden = 'until-found';
+  let beforematchFiredOnParent = false;
+  let beforematchFiredOnHidden = false;
+  let beforematchFiredOnChild = false;
+  parentid.onbeforematch = () => beforematchFiredOnParent = true;
+  hiddenid.onbeforematch = () => beforematchFiredOnHidden = true;
+  childid.onbeforematch = () => beforematchFiredOnChild = true;
+
+  window.location.hash = '#childid';
+  assert_true(beforematchFiredOnParent, 'beforematch should have been fired on parentid.');
+  assert_true(beforematchFiredOnHidden, 'beforematch should have been fired on hiddenid.');
+  assert_false(beforematchFiredOnChild, 'beforematch should not have been fired on childid.');
+}, 'Verifies that the beforematch event is fired synchronously and bubbles after fragment navigation.');
+
+test(t => {
+  window.location.hash = '';
+  window.scrollTo(0, 0);
+  assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
+
+  const target = document.createElement('div');
+  target.textContent = 'target';
+  target.id = 'target';
+  target.hidden = 'until-found';
+  document.body.appendChild(target);
+  const spacer = document.createElement('div');
+  spacer.style.height = '4000px';
+  t.add_cleanup(() => {
+    target.remove();
+    spacer.remove();
+  });
+
+  let beforematchCalled = false;
+  target.onbeforematch = () => {
+    assert_equals(window.pageYOffset, 0, 'scrolling should happen after beforematch is fired.');
+    beforematchCalled = true;
+    // Move the target down the page.
+    document.body.appendChild(spacer);
+    target.remove();
+    document.body.appendChild(target);
+  };
+
+  window.location.hash = '#target';
+  assert_true(beforematchCalled, 'The beforematch event should have been fired.');
+
+  const offsetAfterMatch = window.pageYOffset;
+  assert_not_equals(offsetAfterMatch, 0, 'Fragment navigation should have scrolled down the page to the target element.');
+  target.scrollIntoView();
+  assert_equals(offsetAfterMatch, window.pageYOffset, `The scroll after beforematch should be the same as scrolling directly to the element's final destination.`);
+}, 'Verifies that when a beforematch event handler moves a matching element, we scroll to its final location.');
+
+test(t => {
+  window.location.hash = '';
+  const foo = document.createElement('div');
+  foo.textContent = 'foo';
+  foo.id = 'foo';
+  foo.hidden = 'until-found';
+  document.body.appendChild(foo);
+
+  const bar = document.createElement('div');
+  bar.textContent = 'bar';
+  bar.id = 'bar';
+  bar.hidden = 'until-found';
+  document.body.appendChild(bar);
+
+  t.add_cleanup(() => {
+    foo.remove();
+    bar.remove();
+  });
+
+  let beforematchFiredOnFoo = false;
+  foo.onbeforematch = () => beforematchFiredOnFoo = true;
+  let beforematchFiredOnBar = false;
+  bar.onbeforematch = () => beforematchFiredOnBar = true;
+
+  window.location.hash = '#bar';
+
+  assert_false(beforematchFiredOnFoo, 'foo was not navigated to, so it should not get the beforematch event.');
+  assert_true(beforematchFiredOnBar, 'bar was navigated to, so it should get the beforematch event.');
+  assert_true(window.pageYOffset > 0, 'the page should be scrolled down to bar.');
+}, 'Verifies that the beforematch event is fired on the right element when there are multiple hidden=until-found elements.');
+
+test(t => {
+  window.location.hash = '';
+  window.scrollTo(0, 0);
+  assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
+
+  const div = document.createElement('div');
+  div.textContent = 'detach';
+  div.id = 'detach';
+  div.hidden = 'until-found';
+  document.body.appendChild(div);
+  t.add_cleanup(() => div.remove());
+
+  let beforematchCalled = false;
+  div.onbeforematch = () => {
+    div.remove();
+    beforematchCalled = true;
+  };
+
+  window.location.hash = '#detach';
+
+  assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #detach.');
+  assert_true(window.pageYOffset === 0, 'The page should not be scrolled down to where #detach used to be.');
+}, 'Verifies that no scrolling occurs when an element selected by the fragment identifier is detached by the beforematch event handler.');
+
+test(t => {
+  window.location.hash = '';
+  window.scrollTo(0, 0);
+  assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
+
+  const div = document.createElement('div');
+  div.textContent = 'displaynone';
+  div.id = 'displaynone';
+  div.hidden = 'until-found';
+  document.body.appendChild(div);
+  t.add_cleanup(() => div.remove());
+
+  let beforematchCalled = false;
+  div.addEventListener('beforematch', () => {
+    div.style = 'display: none';
+    beforematchCalled = true;
+  });
+
+  window.location.hash = '#displaynone';
+
+  assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #displaynone.');
+  assert_true(window.pageYOffset === 0, 'The page should not be scrolled down to where #displaynone used to be.');
+}, `No scrolling should occur when the beforematch event handler sets the target element's style to display: none.`);
+
+test(t => {
+  window.location.hash = '';
+  window.scrollTo(0, 0);
+  assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
+
+  const div = document.createElement('div');
+  div.textContent = 'visibilityhidden';
+  div.id = 'visibilityhidden';
+  div.hidden = 'until-found';
+  document.body.appendChild(div);
+  t.add_cleanup(() => div.remove());
+
+  let beforematchCalled = false;
+  div.addEventListener('beforematch', () => {
+    div.style = 'visibility: hidden';
+    beforematchCalled = true;
+  });
+
+  window.location.hash = '#visibilityhidden';
+
+  assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #visibilityhidden.');
+  assert_true(window.pageYOffset !== 0, 'The page should be scrolled down to where #visibilityhidden is.');
+}, `Scrolling should still occur when beforematch sets visiblity:hidden on the target element.`);
+
+test(t => {
+  window.location.hash = '';
+  const div = document.createElement('div');
+  div.id = 'target';
+  div.textContent = 'target';
+  document.body.appendChild(div);
+  t.add_cleanup(() => div.remove());
+  div.addEventListener('beforematch', t.unreached_func('beforematch should not be fired without hidden=until-found.'));
+  window.location.hash = '#target';
+}, 'Verifies that the beforematch event is not fired on elements without hidden=until-found.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/stash.py b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/stash.py
index 231eeb4..2404380 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/stash.py
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/the-iframe-element/stash.py
@@ -1,8 +1,3 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
 def main(request, response):
     if request.method == u'POST':
         request.server.stash.put(request.GET[b"id"], request.body)
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl
index d0009755..8c753176 100644
--- a/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl
+++ b/third_party/blink/web_tests/external/wpt/mathml/tools/operator-dictionary.xsl
@@ -1,7 +1,4 @@
 <!-- -*- Mode: nXML; tab-width: 2; indent-tabs-mode: nil; -*- -->
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
   <xsl:strip-space elements="*"/>
diff --git a/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https-expected.txt b/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https-expected.txt
index e0e3da53..496668fb 100644
--- a/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https-expected.txt
@@ -2,7 +2,12 @@
 PASS Changing a preload href should trigger a fetch
 PASS Changing a preload "as" from a previously non-matching destination should trigger a fetch
 PASS Changing a preload "type" (non-matching->matching) should trigger a fetch
+PASS Removing a preload non-matching "type" should trigger a fetch
+FAIL Removing a preload matching "type" should not trigger a fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
 PASS Changing a preload media attribute (non matching->matching) should trigger a fetch
+PASS Changing a preload media attribute (non matching->non matching) should not trigger a fetch
 FAIL Changing a preload media attribute (matching->matching) should not trigger a new fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+FAIL Removing a matching preload media attribute should not trigger a new fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+PASS Removing a non-matching preload media attribute should trigger a new fetch
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https.html b/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https.html
index f546682..774501e 100644
--- a/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https.html
+++ b/third_party/blink/web_tests/external/wpt/preload/preload-time-to-fetch.https.html
@@ -1,4 +1,5 @@
 <!doctype html>
+<meta name="timeout" content="long">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/common/utils.js"></script>
@@ -21,11 +22,14 @@
             link.setAttribute(attr, before[attr]);
         document.head.appendChild(link);
         const result1 = await loadErrorOrTimeout();
-        for (const attr in after)
-            link.setAttribute(attr, after[attr]);
+        for (const attr in after) {
+            if (attr in before && after[attr] === null)
+                link.removeAttribute(attr);
+            else
+                link.setAttribute(attr, after[attr]);
+        }
         const result2 = await loadErrorOrTimeout();
         assert_array_equals([result1, result2], expected);
-        assert_equals(result2, 'load');
     }, label);
 }
 
@@ -48,15 +52,48 @@
     'Changing a preload "type" (non-matching->matching) should trigger a fetch');
 
 test_preload_change(
+    {href: '/common/square.png?4', type: 'text/plain', as: 'image'},
+    {type: null},
+    ['timeout', 'load'],
+    'Removing a preload non-matching "type" should trigger a fetch');
+
+
+test_preload_change(
+    {href: '/common/square.png?4', type: 'image/png', as: 'image'},
+    {type: null},
+    ['load', 'timeout'],
+    'Removing a preload matching "type" should not trigger a fetch');
+
+test_preload_change(
     {href: '/common/square.png?5', as: 'image', media: 'screen and (max-width: 10px)'},
     {media: 'screen and (max-width: 20000px)'},
     ['timeout', 'load'],
     'Changing a preload media attribute (non matching->matching) should trigger a fetch');
 
 test_preload_change(
-    {href: '/common/square.png?5', as: 'image', media: 'screen and (max-width: 100000px)'},
+    {href: '/common/square.png?6', as: 'image', media: 'screen and (max-width: 10px)'},
+    {media: 'screen and (max-width: 20px)'},
+    ['timeout', 'timeout'],
+    'Changing a preload media attribute (non matching->non matching) should not trigger a fetch');
+
+test_preload_change(
+    {href: '/common/square.png?7', as: 'image', media: 'screen and (max-width: 100000px)'},
     {media: 'screen and (max-width: 20000px)'},
     ['load', 'timeout'],
     'Changing a preload media attribute (matching->matching) should not trigger a new fetch');
+
+test_preload_change(
+    {href: '/common/square.png?8', as: 'image', media: 'screen and (max-width: 100000px)'},
+    {media: null},
+    ['load', 'timeout'],
+    'Removing a matching preload media attribute should not trigger a new fetch');
+
+
+test_preload_change(
+    {href: '/common/square.png?9', as: 'image', media: 'screen and (max-width: 10px)'},
+    {media: null},
+    ['timeout', 'load'],
+    'Removing a non-matching preload media attribute should trigger a new fetch');
+
 </script>
 </body>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/preload/preload-time-to-fetch.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/preload/preload-time-to-fetch.https-expected.txt
new file mode 100644
index 0000000..496668fb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/preload/preload-time-to-fetch.https-expected.txt
@@ -0,0 +1,13 @@
+This is a testharness.js-based test.
+PASS Changing a preload href should trigger a fetch
+PASS Changing a preload "as" from a previously non-matching destination should trigger a fetch
+PASS Changing a preload "type" (non-matching->matching) should trigger a fetch
+PASS Removing a preload non-matching "type" should trigger a fetch
+FAIL Removing a preload matching "type" should not trigger a fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+PASS Changing a preload media attribute (non matching->matching) should trigger a fetch
+PASS Changing a preload media attribute (non matching->non matching) should not trigger a fetch
+FAIL Changing a preload media attribute (matching->matching) should not trigger a new fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+FAIL Removing a matching preload media attribute should not trigger a new fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+PASS Removing a non-matching preload media attribute should trigger a new fetch
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/preload/preload-time-to-fetch.https-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/preload/preload-time-to-fetch.https-expected.txt
new file mode 100644
index 0000000..e0e3da53
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/external/wpt/preload/preload-time-to-fetch.https-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+PASS Changing a preload href should trigger a fetch
+PASS Changing a preload "as" from a previously non-matching destination should trigger a fetch
+PASS Changing a preload "type" (non-matching->matching) should trigger a fetch
+PASS Changing a preload media attribute (non matching->matching) should trigger a fetch
+FAIL Changing a preload media attribute (matching->matching) should not trigger a new fetch assert_array_equals: expected property 1 to be "timeout" but got "load" (expected array ["load", "timeout"] got ["load", "load"])
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 381dd32..be8fde7 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1048,6 +1048,7 @@
 interface CanvasFormattedText
     attribute @@toStringTag
     getter length
+    getter styleMap
     method @@iterator
     method appendRun
     method constructor
@@ -1057,6 +1058,7 @@
     method setRun
 interface CanvasFormattedTextRun
     attribute @@toStringTag
+    getter styleMap
     getter text
     method constructor
     setter text
diff --git a/third_party/blink/web_tests/wpt_internal/canvas/canvas-formattedtext-style.html b/third_party/blink/web_tests/wpt_internal/canvas/canvas-formattedtext-style.html
new file mode 100644
index 0000000..8123d89
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/canvas/canvas-formattedtext-style.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<link rel="match" href="references/canvas-formattedtext-style-expected.html">
+<!-- Mac/GPU tests will have slightly different underline/strikethrough rendering -->
+<meta name=fuzzy content="maxDifference=255;totalPixels=12">
+<html>
+<head>
+  <style>
+    h3 {
+      margin: 0px;
+    }
+    canvas {
+      border: 1px solid black;
+      display: block;
+      margin-bottom: 2px;
+    }
+  </style>
+</head>
+<body>
+  <script>
+    function makeContext(id) {
+      var canvas = document.getElementById(id);
+      var context = canvas.getContext("2d", { alpha: true });
+      context.fillStyle = "#000000";
+      context.clearRect(0, 0, canvas.width, canvas.height);
+      context.fillStyle = "#FFFFFF";
+      context.fillRect(0, 0, canvas.width, canvas.height);
+      context.font = "20px Arial";
+      return context;
+    }
+    function makeRun(text, prop, value) {
+      text.appendRun(new CanvasFormattedTextRun(" "));
+      var textRun = new CanvasFormattedTextRun(prop + ":" + value);
+      textRun.styleMap.set(prop, value);
+      text.appendRun(textRun);
+    }
+  </script>
+  <h3>Test Font Related Styles</h3>
+  <canvas width=500 height=100 id="target1"></canvas>
+  <script>
+    function testFontRelatedStyles() {
+      var context = makeContext("target1");
+      var text = new CanvasFormattedText();
+      text.appendRun(new CanvasFormattedTextRun('Hello World !'));
+      makeRun(text, 'color', 'blue')
+      makeRun(text, 'text-decoration', 'underline')
+      makeRun(text, 'text-decoration', 'line-through')
+      makeRun(text, 'font-family', 'Times New Roman')
+      makeRun(text, 'font-kerning', 'none')
+      makeRun(text, 'font-kerning', 'normal')
+      makeRun(text, 'font-size', '10px')
+
+      // Test font-size-dependant lengths
+      text.appendRun(new CanvasFormattedTextRun(" "));
+      var textRun = new CanvasFormattedTextRun("1em");
+      textRun.styleMap.set('text-decoration', 'underline');
+      textRun.styleMap.set('text-decoration-thickness', '1em');
+      textRun.styleMap.set('text-underline-offset', '-12px');
+      textRun.styleMap.set('font-size', '25px');
+      text.appendRun(textRun);
+
+      context.fillFormattedText(text, 0, 0, 500);
+    };
+    testFontRelatedStyles();
+  </script>
+  <canvas width=500 height=30 id="target7"></canvas>
+  <script>
+    function testFontRelatedStyles2() {
+      var context = makeContext("target7");
+      var text = new CanvasFormattedText();
+      makeRun(text, 'font-weight', 'bold')
+      context.fillFormattedText(text, 0, 0, 500);
+    };
+    testFontRelatedStyles2();
+  </script>
+  <canvas width=500 height=30 id="target8"></canvas>
+  <script>
+    function testFontRelatedStyles3() {
+      var context = makeContext("target8");
+      var text = new CanvasFormattedText();
+      makeRun(text, 'font-stretch', 'condensed')
+      makeRun(text, 'font-variant-caps', 'small-caps');
+      context.fillFormattedText(text, 0, 0, 500);
+    };
+    testFontRelatedStyles3();
+  </script>
+  <canvas width=500 height=30 id="target9"></canvas>
+  <script>
+    function testFontRelatedStyles3() {
+      var context = makeContext("target9");
+      var text = new CanvasFormattedText();
+      makeRun(text, 'font-style', 'italic')
+      context.fillFormattedText(text, 0, 0, 500);
+    };
+    testFontRelatedStyles3();
+  </script>
+
+  <h3>Test RTL</h3>
+  <canvas width=500 height=30 id="target2"></canvas>
+  <script>
+    {
+      var context = makeContext("target2");
+      var text = new CanvasFormattedText();
+      var textRun = new CanvasFormattedTextRun('Hello World !');
+      text.appendRun(textRun);
+      text.styleMap.set('direction', 'rtl');
+      text.styleMap.set('width', '500px');
+      context.fillFormattedText(text, 0, 0, 500);
+    }
+  </script>
+
+  <h3>Test align</h3>
+  <canvas width=500 height=50 id="target3"></canvas>
+  <script>
+    {
+      var context = makeContext("target3");
+      var text = new CanvasFormattedText();
+      var textRun = new CanvasFormattedTextRun('Hello World ! Hello World ! Hello World ! Hello World ! Hello World !');
+      text.appendRun(textRun);
+      text.styleMap.set('text-align', 'center');
+      text.styleMap.set('width', '500px');
+      context.fillFormattedText(text, 0, 0, 500);
+    }
+  </script>
+
+  <h3>Test Writing-Mode</h3>
+  <canvas width=100 height=70 id="target4" style="border:1px solid black; display:inline-block;"></canvas>
+  <script>
+    {
+      var context = makeContext("target4");
+      var text = new CanvasFormattedText();
+      var textRun = new CanvasFormattedTextRun('ABC DEF GHI JKL MNO PQR');
+      text.appendRun(textRun);
+      text.styleMap.set('width', '100px');
+      text.styleMap.set('writing-mode', 'vertical-lr');
+      context.fillFormattedText(text, 0, 0, 100, 70);
+    }
+  </script>
+  <canvas width=100 height=70 id="target5" style="border:1px solid black; display:inline-block;"></canvas>
+  <script>
+    {
+      var context = makeContext("target5");
+      var text = new CanvasFormattedText();
+      var textRun = new CanvasFormattedTextRun('ABC DEF GHI JKL MNO PQR');
+      text.appendRun(textRun);
+      text.styleMap.set('width', '100px');
+      text.styleMap.set('writing-mode', 'vertical-rl');
+      context.fillFormattedText(text, 0, 0, 100, 70);
+    }
+  </script>
+  <canvas width=100 height=70 id="target6" style="border:1px solid black; display:inline-block;"></canvas>
+  <script>
+    {
+      var context = makeContext("target6");
+      var text = new CanvasFormattedText();
+      var textRun = new CanvasFormattedTextRun('ABC DEF GHI JKL MNO PQR');
+      text.appendRun(textRun);
+      text.styleMap.set('width', '100px');
+      text.styleMap.set('writing-mode', 'vertical-rl');
+      text.styleMap.set('text-orientation', 'upright');
+      context.fillFormattedText(text, 0, 0, 100, 70);
+    }
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/canvas/references/canvas-formattedtext-style-expected.html b/third_party/blink/web_tests/wpt_internal/canvas/references/canvas-formattedtext-style-expected.html
new file mode 100644
index 0000000..d9b49423
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/canvas/references/canvas-formattedtext-style-expected.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <style>
+    h3 {
+      margin: 0px;
+    }
+    div {
+      width: 500px;
+      height: 100px;
+      border: 1px solid black;
+      font: 20px Arial;
+      vertical-align: top;
+      margin-bottom: 2px;
+    }
+
+    span {
+      vertical-align: top;
+    }
+
+    .ib {
+      width: 100px;
+      height: 70px;
+      display: inline-block;
+      overflow: hidden;
+    }
+  </style>
+</head>
+<body>
+  <h3>Test Font Related Styles</h3>
+  <div id="target1">
+    <span>Hello World !</span>
+  </div>
+  <script>
+    function makeRun(id, prop, value) {
+      document.getElementById(id).innerHTML += " <span style='" + prop + ":"
+        + value + "' >" + prop + ":" + value + "</span>";
+    }
+    function testFontRelatedStyles() {
+      makeRun("target1", 'color', 'blue')
+      makeRun("target1", 'text-decoration', 'underline')
+      makeRun("target1", 'text-decoration', 'line-through')
+      makeRun("target1", 'font-family', 'Times New Roman')
+      makeRun("target1", 'font-kerning', 'none')
+      makeRun("target1", 'font-kerning', 'normal')
+      makeRun("target1", 'font-size', '10px')
+      document.getElementById("target1").innerHTML += " <span style='text-decoration:underline; text-decoration-thickness:1em; text-underline-offset:-12px; font-size:25px;'>1em</span>"
+    };
+    testFontRelatedStyles();
+  </script>
+
+  <div id="target7" style="height:30px;">
+  </div>
+  <script>
+    function testFontRelatedStyles2() {
+      makeRun("target7", 'font-weight', 'bold')
+    };
+    testFontRelatedStyles2();
+  </script>
+
+  <div id="target8" style="height:30px;">
+  </div>
+  <script>
+    function testFontRelatedStyles3() {
+      makeRun("target8", 'font-stretch', 'condensed')
+      makeRun("target8", 'font-variant-caps', 'small-caps');
+    };
+    testFontRelatedStyles3();
+  </script>
+
+  <div id="target9" style="height:30px;">
+  </div>
+  <script>
+    function testFontRelatedStyles4() {
+      makeRun("target9", 'font-style', 'italic')
+    };
+    testFontRelatedStyles4();
+  </script>
+
+  <h3>Test RTL</h3>
+  <DIV style="direction:rtl; height:30px;"><span>Hello World !</span></DIV>
+
+  <h3>Test align</h3>
+  <DIV style="text-align:center; height:50px;">
+    <span>
+      Hello World ! Hello World ! Hello World ! Hello World ! Hello World !
+    </span>
+  </DIV>
+
+  <h3>Test Writing-Mode</h3>
+  <DIV class="ib" style="writing-mode:vertical-lr">
+    ABC DEF GHI JKL MNO PQR
+  </DIV>
+  <DIV class="ib" style="writing-mode:vertical-rl">
+    ABC DEF GHI JKL MNO PQR
+  </DIV>
+  <DIV class="ib" style="writing-mode:vertical-rl; text-orientation: upright;">
+    ABC DEF GHI JKL MNO PQR
+  </DIV>
+</body>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-bubble.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-bubble.html
deleted file mode 100644
index cfa8150..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-bubble.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
-<link rel="help" href="https://github.com/WICG/display-locking">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div id=parentid>
-  <div id=childid>hello</div>
-</div>
-
-<script>
-async_test(t => {
-  parentid.addEventListener('beforematch', t.step_func_done(() => {}));
-  window.location.hash = '#childid';
-}, 'Tests that the beforematch event bubbles');
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-modify-target.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-modify-target.html
deleted file mode 100644
index 6f71b3ac..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-modify-target.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
-<link rel="help" href="https://github.com/WICG/display-locking">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<body>
-  <div style="height: 2000px;">spacer</div>
-
-  <script>
-
-  test(() => {
-    window.scrollTo(0, 0);
-    assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
-
-    const div = document.createElement('div');
-    div.textContent = 'move';
-    div.id = 'move';
-    document.body.appendChild(div);
-
-    let beforematchCalled = false;
-    div.addEventListener('beforematc', () => {
-      // Move the matched element 2000px down the page.
-      const spacer = document.createElement('div');
-      spacer.style.height = '2000px';
-      document.body.appendChild(spacer);
-      div.remove();
-      document.body.appendChild(div);
-      beforematchCalled = true;
-    });
-
-    window.location.hash = '#move';
-
-    const offsetAfterMatch = window.pageYOffset;
-    div.scrollIntoView();
-    assert_equals(offsetAfterMatch, window.pageYOffset, `The scroll after beforematch should be the same as scrolling directly to the element's final destination.`);
-  }, 'Verifies that when a beforematch event handler moves a matching element, we scroll to its final location.');
-
-  test(() => {
-    window.scrollTo(0, 0);
-    assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
-
-    const div = document.createElement('div');
-    div.textContent = 'detach';
-    div.id = 'detach';
-    document.body.appendChild(div);
-
-    let beforematchCalled = false;
-    div.addEventListener('beforematch', () => {
-      div.remove();
-      beforematchCalled = true;
-    });
-
-    window.location.hash = '#detach';
-
-    assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #detach.');
-    assert_true(window.pageYOffset === 0, 'The page should not be scrolled down to where #detach used to be.');
-  }, 'Verifies that no scrolling occurs when an element selected by the fragment identifier is detached by the beforematch event handler.');
-
-  test(() => {
-    window.scrollTo(0, 0);
-    assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
-
-    const div = document.createElement('div');
-    div.textContent = 'displaynone';
-    div.id = 'displaynone';
-    document.body.appendChild(div);
-
-    let beforematchCalled = false;
-    div.addEventListener('beforematch', () => {
-      div.style = 'display: none';
-      beforematchCalled = true;
-    });
-
-    window.location.hash = '#displaynone';
-
-    assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #displaynone.');
-    assert_true(window.pageYOffset === 0, 'The page should not be scrolled down to where #displaynone used to be.');
-  }, `No scrolling should occur when the beforematch event handler sets the target element's style to display: none.`);
-
-  test(() => {
-    window.scrollTo(0, 0);
-    assert_true(window.pageYOffset === 0, 'Scroll should reset at the beginning of the test.');
-
-    const div = document.createElement('div');
-    div.textContent = 'visibilityhidden';
-    div.id = 'visibilityhidden';
-    document.body.appendChild(div);
-
-    let beforematchCalled = false;
-    div.addEventListener('beforematch', () => {
-      div.style = 'visibility: hidden';
-      beforematchCalled = true;
-    });
-
-    window.location.hash = '#visibilityhidden';
-
-    assert_true(beforematchCalled, 'beforematch should be called when window.location.hash is set to #visibilityhidden.');
-    assert_true(window.pageYOffset !== 0, 'The page should be scrolled down to where #visibilityhidden is.');
-  }, `Scrolling should still occur when beforematch sets visiblity: none on the target element.`);
-
-  // TODO(jarhar): Write more tests here once we decide on a behavior here: https://github.com/WICG/display-locking/issues/150
-
-  </script>
-</body>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-reparent.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-reparent.html
deleted file mode 100644
index 355eff1..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id-reparent.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
-<link rel="help" href="https://github.com/WICG/display-locking">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<body>
-  <div style="height: 2000px;">spacer</div>
-  <script>
-  async_test(t => {
-    window.onload = t.step_func_done(() => {
-      const foo = document.createElement('div');
-      foo.textContent = 'foo';
-      foo.id = 'foo';
-      document.body.appendChild(foo);
-      foo.addEventListener('beforematch', () => {
-        // Move the matched element 2000px down the page.
-        const spacer = document.createElement('div');
-        spacer.style.height = '2000px';
-        document.body.appendChild(spacer);
-        foo.remove();
-        document.body.appendChild(foo);
-      });
-
-      window.location.hash = '#foo';
-
-      const offsetAfterMatch = window.pageYOffset;
-      foo.scrollIntoView();
-      assert_equals(offsetAfterMatch, window.pageYOffset, `The scroll after beforematch should be the same as scrolling directly to the element's final destination.`);
-    });
-  }, 'Verifies that when a beforematch event handler moves a matching element, we scroll to its final location.');
-  </script>
-</body>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id.html
deleted file mode 100644
index 297effd..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/beforematch-fragment-id.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
-<link rel="help" href="https://github.com/WICG/display-locking">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<body>
-  <div style="height: 2000px;">spacer</div>
-  <script>
-  async_test(t => {
-    window.onload = t.step_func_done(() => {
-      const foo = document.createElement('div');
-      foo.textContent = 'foo';
-      foo.id = 'foo';
-      document.body.appendChild(foo);
-      window.beforematchFiredOnFoo = false;
-      foo.addEventListener('beforematch', () => {
-        window.beforematchFiredOnFoo = true;
-      });
-
-      const bar = document.createElement('div');
-      bar.textContent = 'bar';
-      bar.id = 'bar';
-      document.body.appendChild(bar);
-      window.beforematchFiredOnBar = false;
-      bar.addEventListener('beforematch', t.step_func(() => {
-        assert_false(window.beforematchFiredOnBar);
-        window.beforematchFiredOnBar = true;
-        assert_equals(window.pageYOffset, 0, 'scrolling should happen after beforematch is fired.');
-      }));
-
-      window.location.hash = '#bar';
-
-      assert_false(window.beforematchFiredOnFoo, 'foo was not searched for, so it should not get the beforematch event.');
-      assert_true(window.beforematchFiredOnBar, 'bar was searched for, so it should get the beforematch event.');
-      assert_true(window.pageYOffset > 0, 'the page should be scrolled down to bar.');
-    });
-  }, 'Verifies that the beforematch event on an element selected by the fragment identifier.');
-  </script>
-</body>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation-nested.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation-nested.html
deleted file mode 100644
index 23fd165..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation-nested.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<link rel=author href="mailto:jarhar@chromium.org">
-<link rel=help href="https://github.com/whatwg/html/issues/6040">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div style="height:2000px">spacer</div>
-
-<div id=wrapper hidden=until-found>
-  <div id=target hidden=until-found>target</div>
-</div>
-
-<script>
-async_test(t => {
-  assert_equals(wrapper.getAttribute('hidden'), 'until-found');
-  assert_equals(window.pageYOffset, 0,
-    `The page should be scrolled to the top at the start of the test.`);
-
-  window.location.hash = '#target';
-
-  requestAnimationFrame(t.step_func_done(() => {
-    assert_false(wrapper.hasAttribute('hidden'),
-      `Fragment navigation should remove the hidden attribute for hidden=until-found.`);
-    assert_not_equals(window.pageYOffset, 0,
-      `The page should be scrolled down to the target element.`);
-  }));
-}, `hidden=until-found content should be revealed in response to fragment navigation with multiple nested hidden=until-found elements.`);
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation.html
deleted file mode 100644
index 0090f8a..0000000
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/hidden-until-found-fragment-navigation.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<link rel=author href="mailto:jarhar@chromium.org">
-<link rel=help href="https://github.com/whatwg/html/issues/6040">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<div style="height:2000px">spacer</div>
-
-<div id=wrapper hidden=until-found>
-  <div id=target>target</div>
-</div>
-
-<script>
-async_test(t => {
-  assert_equals(wrapper.getAttribute('hidden'), 'until-found');
-  assert_equals(window.pageYOffset, 0,
-    `The page should be scrolled to the top at the start of the test.`);
-
-  window.location.hash = '#target';
-
-  requestAnimationFrame(t.step_func_done(() => {
-    assert_false(wrapper.hasAttribute('hidden'),
-      `Fragment navigation should remove the hidden attribute for hidden=until-found.`);
-    assert_not_equals(window.pageYOffset, 0,
-      `The page should be scrolled down to the target element.`);
-  }));
-}, `hidden=until-found content should be revealed in response to fragment navigation.`);
-</script>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-basic.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-basic.html
index 3060120..884e9a6 100644
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-basic.html
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-basic.html
@@ -10,6 +10,7 @@
 
     const foo = document.createElement('div');
     foo.textContent = 'foo';
+    foo.hidden = 'until-found';
     document.body.appendChild(foo);
     window.beforematchFiredOnFoo = false;
     foo.addEventListener('beforematch', () => {
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-bubble.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-bubble.html
index b7fa2e6..abfe8ddd 100644
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-bubble.html
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-bubble.html
@@ -4,7 +4,7 @@
 <!-- This test is navigated to with the fragment #:~:text=foo -->
 
 <div id=parentid>
-  <div id=childid>foo</div>
+  <div id=childid hidden=until-found>foo</div>
 </div>
 
 <script>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-with-anchor.html b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-with-anchor.html
index edc3544b..3506c6e 100644
--- a/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-with-anchor.html
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/beforematch/resources/beforematch-scroll-to-text-fragment-with-anchor.html
@@ -4,8 +4,8 @@
 <!-- This test is navigated to with the fragment #bar:~:text=foo -->
 
 <body>
-  <div id=foo>foo</div>
-  <div id=bar>bar</div>
+  <div id=foo hidden=until-found>foo</div>
+  <div id=bar hidden=until-found>bar</div>
   <script>
     window.beforematchFiredOnFoo = false;
     foo.addEventListener('beforematch', () => {
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium
index 8a71ebb..cf3c20ca 100644
--- a/third_party/libaom/README.chromium
+++ b/third_party/libaom/README.chromium
@@ -3,9 +3,9 @@
 URL: https://aomedia.googlesource.com/aom/
 Version: 3.1.2
 CPEPrefix: cpe:/a:aomedia:aomedia:3.1.2
-Date: Tuesday March 29 2022
+Date: Wednesday March 30 2022
 Branch: main
-Commit: 46e8b1da9e10663ef1bb9868ee20fd24cb175448
+Commit: cc31d8c4b722cf7ecd68ac351bf3d288de07bc68
 License: BSD
 License File: source/libaom/LICENSE
 Security Critical: yes
diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni
index 446bb368..913654d7 100644
--- a/third_party/libaom/libaom_srcs.gni
+++ b/third_party/libaom/libaom_srcs.gni
@@ -1,9 +1,9 @@
 # This file is generated. DO NOT EDIT.
 
 aom_av1_common_intrin_avx2 = [
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_avx2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_avx2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_avx2.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cdef_block_avx2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/cfl_avx2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_avx2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/convolve_avx2.c",
@@ -14,39 +14,39 @@
 ]
 
 aom_av1_common_intrin_neon = [
+  "//third_party/libaom/source/libaom/av1/common/arm/av1_inv_txfm_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/av1_inv_txfm_neon.h",
   "//third_party/libaom/source/libaom/av1/common/arm/av1_txfm_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/blend_a64_hmask_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/blend_a64_vmask_neon.c",
+  "//third_party/libaom/source/libaom/av1/common/arm/cdef_block_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/cfl_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/convolve_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/convolve_neon.h",
+  "//third_party/libaom/source/libaom/av1/common/arm/highbd_inv_txfm_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/jnt_convolve_neon.c",
-  "//third_party/libaom/source/libaom/av1/common/arm/blend_a64_hmask_neon.c",
-  "//third_party/libaom/source/libaom/av1/common/arm/blend_a64_vmask_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/reconinter_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/reconintra_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/resize_neon.c",
   "//third_party/libaom/source/libaom/av1/common/arm/wiener_convolve_neon.c",
-  "//third_party/libaom/source/libaom/av1/common/arm/av1_inv_txfm_neon.c",
-  "//third_party/libaom/source/libaom/av1/common/arm/av1_inv_txfm_neon.h",
-  "//third_party/libaom/source/libaom/av1/common/arm/highbd_inv_txfm_neon.c",
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_neon.c",
 ]
 
 aom_av1_common_intrin_sse2 = [
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse2.c",
+  "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse2.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cdef_block_sse2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/cfl_sse2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/convolve_2d_sse2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/convolve_sse2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/jnt_convolve_sse2.c",
   "//third_party/libaom/source/libaom/av1/common/x86/wiener_convolve_sse2.c",
-  "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse2.h",
 ]
 
 aom_av1_common_intrin_sse4_1 = [
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_horiz_rs_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_convolve_scale_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_txfm_sse4.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cdef_block_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/filterintra_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/highbd_inv_txfm_sse4.c",
   "//third_party/libaom/source/libaom/av1/common/x86/intra_edge_sse4.c",
@@ -54,9 +54,9 @@
 ]
 
 aom_av1_common_intrin_ssse3 = [
-  "//third_party/libaom/source/libaom/av1/common/cdef_block_ssse3.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_ssse3.c",
   "//third_party/libaom/source/libaom/av1/common/x86/av1_inv_txfm_ssse3.h",
+  "//third_party/libaom/source/libaom/av1/common/x86/cdef_block_ssse3.c",
   "//third_party/libaom/source/libaom/av1/common/x86/cfl_ssse3.c",
   "//third_party/libaom/source/libaom/av1/common/x86/jnt_convolve_ssse3.c",
   "//third_party/libaom/source/libaom/av1/common/x86/resize_ssse3.c",
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h
index 5e27081..5a793341 100644
--- a/third_party/libaom/source/config/config/aom_version.h
+++ b/third_party/libaom/source/config/config/aom_version.h
@@ -12,8 +12,8 @@
 #define VERSION_MAJOR 3
 #define VERSION_MINOR 3
 #define VERSION_PATCH 0
-#define VERSION_EXTRA "414-g46e8b1da9"
+#define VERSION_EXTRA "417-gcc31d8c4b"
 #define VERSION_PACKED \
   ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
-#define VERSION_STRING_NOSP "3.3.0-414-g46e8b1da9"
-#define VERSION_STRING " 3.3.0-414-g46e8b1da9"
+#define VERSION_STRING_NOSP "3.3.0-417-gcc31d8c4b"
+#define VERSION_STRING " 3.3.0-417-gcc31d8c4b"
diff --git a/third_party/zlib/contrib/optimizations/inffast_chunk.c b/third_party/zlib/contrib/optimizations/inffast_chunk.c
index 4bacbc46..8d62920 100644
--- a/third_party/zlib/contrib/optimizations/inffast_chunk.c
+++ b/third_party/zlib/contrib/optimizations/inffast_chunk.c
@@ -95,7 +95,7 @@
     code const FAR *dcode;      /* local strm->distcode */
     unsigned lmask;             /* mask for first level of length codes */
     unsigned dmask;             /* mask for first level of distance codes */
-    code here;                  /* retrieved table entry */
+    code const *here;           /* retrieved table entry */
     unsigned op;                /* code bits, operation, extra bits, or */
                                 /*  window position, window bytes to copy */
     unsigned len;               /* match length, unused bytes */
@@ -139,20 +139,20 @@
             bits += 8;
 #endif
         }
-        here = lcode[hold & lmask];
+        here = lcode + (hold & lmask);
       dolen:
-        op = (unsigned)(here.bits);
+        op = (unsigned)(here->bits);
         hold >>= op;
         bits -= op;
-        op = (unsigned)(here.op);
+        op = (unsigned)(here->op);
         if (op == 0) {                          /* literal */
-            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+            Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
                     "inflate:         literal '%c'\n" :
-                    "inflate:         literal 0x%02x\n", here.val));
-            *out++ = (unsigned char)(here.val);
+                    "inflate:         literal 0x%02x\n", here->val));
+            *out++ = (unsigned char)(here->val);
         }
         else if (op & 16) {                     /* length base */
-            len = (unsigned)(here.val);
+            len = (unsigned)(here->val);
             op &= 15;                           /* number of extra bits */
             if (op) {
                 if (bits < op) {
@@ -182,14 +182,14 @@
                 bits += 8;
 #endif
             }
-            here = dcode[hold & dmask];
+            here = dcode + (hold & dmask);
           dodist:
-            op = (unsigned)(here.bits);
+            op = (unsigned)(here->bits);
             hold >>= op;
             bits -= op;
-            op = (unsigned)(here.op);
+            op = (unsigned)(here->op);
             if (op & 16) {                      /* distance base */
-                dist = (unsigned)(here.val);
+                dist = (unsigned)(here->val);
                 op &= 15;                       /* number of extra bits */
                 if (bits < op) {
 #ifdef INFLATE_CHUNK_READ_64LE
@@ -295,7 +295,7 @@
                 }
             }
             else if ((op & 64) == 0) {          /* 2nd level distance code */
-                here = dcode[here.val + (hold & ((1U << op) - 1))];
+                here = dcode + here->val + (hold & ((1U << op) - 1));
                 goto dodist;
             }
             else {
@@ -305,7 +305,7 @@
             }
         }
         else if ((op & 64) == 0) {              /* 2nd level length code */
-            here = lcode[here.val + (hold & ((1U << op) - 1))];
+            here = lcode + here->val + (hold & ((1U << op) - 1));
             goto dolen;
         }
         else if (op & 32) {                     /* end-of-block */
diff --git a/third_party/zlib/inffast.c b/third_party/zlib/inffast.c
index 2797e8a0..d89ad5cc 100644
--- a/third_party/zlib/inffast.c
+++ b/third_party/zlib/inffast.c
@@ -74,7 +74,7 @@
     code const FAR *dcode;      /* local strm->distcode */
     unsigned lmask;             /* mask for first level of length codes */
     unsigned dmask;             /* mask for first level of distance codes */
-    code here;                  /* retrieved table entry */
+    code const *here;           /* retrieved table entry */
     unsigned op;                /* code bits, operation, extra bits, or */
                                 /*  window position, window bytes to copy */
     unsigned len;               /* match length, unused bytes */
@@ -111,20 +111,20 @@
             hold += (unsigned long)(*in++) << bits;
             bits += 8;
         }
-        here = lcode[hold & lmask];
+        here = lcode + (hold & lmask);
       dolen:
-        op = (unsigned)(here.bits);
+        op = (unsigned)(here->bits);
         hold >>= op;
         bits -= op;
-        op = (unsigned)(here.op);
+        op = (unsigned)(here->op);
         if (op == 0) {                          /* literal */
-            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+            Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
                     "inflate:         literal '%c'\n" :
-                    "inflate:         literal 0x%02x\n", here.val));
-            *out++ = (unsigned char)(here.val);
+                    "inflate:         literal 0x%02x\n", here->val));
+            *out++ = (unsigned char)(here->val);
         }
         else if (op & 16) {                     /* length base */
-            len = (unsigned)(here.val);
+            len = (unsigned)(here->val);
             op &= 15;                           /* number of extra bits */
             if (op) {
                 if (bits < op) {
@@ -142,14 +142,14 @@
                 hold += (unsigned long)(*in++) << bits;
                 bits += 8;
             }
-            here = dcode[hold & dmask];
+            here = dcode + (hold & dmask);
           dodist:
-            op = (unsigned)(here.bits);
+            op = (unsigned)(here->bits);
             hold >>= op;
             bits -= op;
-            op = (unsigned)(here.op);
+            op = (unsigned)(here->op);
             if (op & 16) {                      /* distance base */
-                dist = (unsigned)(here.val);
+                dist = (unsigned)(here->val);
                 op &= 15;                       /* number of extra bits */
                 if (bits < op) {
                     hold += (unsigned long)(*in++) << bits;
@@ -268,7 +268,7 @@
                 }
             }
             else if ((op & 64) == 0) {          /* 2nd level distance code */
-                here = dcode[here.val + (hold & ((1U << op) - 1))];
+                here = dcode + here->val + (hold & ((1U << op) - 1));
                 goto dodist;
             }
             else {
@@ -278,7 +278,7 @@
             }
         }
         else if ((op & 64) == 0) {              /* 2nd level length code */
-            here = lcode[here.val + (hold & ((1U << op) - 1))];
+            here = lcode + here->val + (hold & ((1U << op) - 1));
             goto dolen;
         }
         else if (op & 32) {                     /* end-of-block */
diff --git a/tools/cast3p/cast_core.version b/tools/cast3p/cast_core.version
new file mode 100644
index 0000000..bd6fb6b
--- /dev/null
+++ b/tools/cast3p/cast_core.version
@@ -0,0 +1 @@
+cast_20220318_0600_RC00
\ No newline at end of file
diff --git a/tools/cast3p/runtime.version b/tools/cast3p/runtime.version
index 3f82e17..9959994 100644
--- a/tools/cast3p/runtime.version
+++ b/tools/cast3p/runtime.version
@@ -1 +1 @@
-273826
\ No newline at end of file
+297714
\ No newline at end of file
diff --git a/tools/cast3p/update_binaries.py b/tools/cast3p/update_binaries.py
new file mode 100755
index 0000000..9435283
--- /dev/null
+++ b/tools/cast3p/update_binaries.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import logging
+import os
+import subprocess
+import shutil
+import sys
+import tempfile
+
+from zipfile import ZipFile
+
+DIR_SOURCE_ROOT = os.path.abspath(
+    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
+
+sys.path.append(os.path.join(DIR_SOURCE_ROOT, 'build'))
+import find_depot_tools
+
+CAST_CORE_ROOT = os.path.abspath(
+    os.path.join(DIR_SOURCE_ROOT, 'third_party', 'cast_core', 'prebuilts'))
+CAST_CORE_ZIP_PATH_TEMPLATE = (
+    'gs://castlite-release-artifacts/{version}/third_party/castlite' \
+    '/cast_core_qa_sdk_runtime_vizio_castos_armv7a' \
+    '/sdk_runtime_vizio_castos_armv7a.tgz')
+SIGNATURE_FILE = '.version'
+RUNTIME_ROOT = os.path.abspath(
+    os.path.join(DIR_SOURCE_ROOT, 'third_party', 'cast_web_runtime'))
+RUNTIME_ZIP_PATH_TEMPLATE = (
+    'gs://gtv-eureka/internal/1.56core/core_runtime-eng/{version}' \
+    '/core_runtime_package.zip')
+
+
+def DownloadFromCloudStorage(url, output_dir):
+  """Fetches a file from GCS and put it in |output_dir|."""
+  cmd = [
+      os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'), 'cp', url,
+      output_dir
+  ]
+  task = subprocess.check_call(cmd,
+                               stdout=subprocess.DEVNULL,
+                               stderr=subprocess.DEVNULL)
+
+
+def MakeCleanDirectory(directory_name):
+  if os.path.exists(directory_name):
+    shutil.rmtree(directory_name)
+  os.mkdir(directory_name)
+
+
+def UpdateBinaryIfNecessary(name, version_file, output_dir, gcs_path_template):
+  """Update the binary at |output_dir| if necessary by comparing versions."""
+  version = open(os.path.join(os.path.dirname(__file__),
+                              version_file)).read().strip()
+  signature_file_path = os.path.join(output_dir, SIGNATURE_FILE)
+  current_signature = (open(signature_file_path, 'r').read().strip()
+                       if os.path.exists(signature_file_path) else '')
+  if current_signature != version:
+    logging.info('Downloading {} version {}...'.format(name, version))
+    MakeCleanDirectory(output_dir)
+    DownloadFromCloudStorage(gcs_path_template.format(version=version),
+                             output_dir)
+  with open(signature_file_path, 'w') as f:
+    f.write(version)
+
+
+def main():
+  UpdateBinaryIfNecessary('Cast Core', 'cast_core.version', CAST_CORE_ROOT,
+                          CAST_CORE_ZIP_PATH_TEMPLATE)
+  UpdateBinaryIfNecessary('Cast Web Runtime', 'runtime.version', RUNTIME_ROOT,
+                          RUNTIME_ZIP_PATH_TEMPLATE)
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/tools/cast3p/update_runtime.py b/tools/cast3p/update_runtime.py
deleted file mode 100755
index 1624be1..0000000
--- a/tools/cast3p/update_runtime.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-import subprocess
-import shutil
-import sys
-import tempfile
-
-from zipfile import ZipFile
-
-DIR_SOURCE_ROOT = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
-
-sys.path.append(os.path.join(DIR_SOURCE_ROOT, 'build'))
-import find_depot_tools
-
-RUNTIME_SIGNATURE_FILE = '.version'
-WEB_RUNTIME_ROOT = os.path.abspath(
-    os.path.join(DIR_SOURCE_ROOT, 'third_party', 'cast_web_runtime'))
-ZIP_PATH_TEMPLATE = (
-    'gs://gtv-eureka/internal/master/core_runtime-eng/{version}' \
-    '/core_runtime_package.zip')
-
-
-# Fetches a .zip file from GCS and uncompresses it to |output_dir|.
-def DownloadAndUnpackFromCloudStorage(url, output_dir):
-  with tempfile.TemporaryDirectory() as tmpdir:
-    temp_zip_file = os.path.join(tmpdir, 'web_runtime.zip')
-    cmd = [
-        os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'), 'cp', url,
-        temp_zip_file
-    ]
-    task = subprocess.check_call(cmd,
-                                 stdout=subprocess.DEVNULL,
-                                 stderr=subprocess.DEVNULL)
-    with ZipFile(temp_zip_file, 'r') as zip_ref:
-      zip_ref.extractall(output_dir)
-
-
-def MakeCleanDirectory(directory_name):
-  if os.path.exists(directory_name):
-    shutil.rmtree(directory_name)
-  os.mkdir(directory_name)
-
-
-def main():
-  runtime_version = open(
-      os.path.join(os.path.dirname(__file__),
-                   'runtime.version')).read().strip()
-  signature_file_path = os.path.join(WEB_RUNTIME_ROOT, RUNTIME_SIGNATURE_FILE)
-  current_signature = (open(signature_file_path, 'r').read().strip()
-                       if os.path.exists(signature_file_path) else '')
-  if current_signature != runtime_version:
-    logging.info(
-        'Downloading Cast Web Runtime version {}...'.format(runtime_version))
-    MakeCleanDirectory(WEB_RUNTIME_ROOT)
-    DownloadAndUnpackFromCloudStorage(
-        ZIP_PATH_TEMPLATE.format(version=runtime_version), WEB_RUNTIME_ROOT)
-  with open(signature_file_path, 'w') as f:
-    f.write(runtime_version)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 7edec1c8..313245e 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -233,7 +233,7 @@
       'Dawn Win10 x86 DEPS Builder': 'dawn_tests_release_bot_dcheck_always_on_x86',
       'Dawn Win10 x64 DEPS Builder': 'dawn_tests_release_bot_dcheck_always_on_reclient',
 
-      'Dawn Win10 x64 ASAN Release': 'dawn_tests_asan_release_bot_dcheck_always_on',
+      'Dawn Win10 x64 ASAN Release': 'dawn_tests_asan_release_bot_dcheck_always_on_reclient',
     },
 
     'chromium.devtools-frontend': {
@@ -2247,8 +2247,8 @@
       'codesearch',
     ],
 
-    'dawn_tests_asan_release_bot_dcheck_always_on': [
-      'dawn_tests', 'asan', 'release_trybot_minimal_symbols',
+    'dawn_tests_asan_release_bot_dcheck_always_on_reclient': [
+      'dawn_tests', 'asan', 'release_trybot_minimal_symbols_reclient',
     ],
 
     'dawn_tests_asan_release_trybot': [
diff --git a/tools/mb/mb_config_expectations/chromium.dawn.json b/tools/mb/mb_config_expectations/chromium.dawn.json
index bb5f54c..8ec3fbd 100644
--- a/tools/mb/mb_config_expectations/chromium.dawn.json
+++ b/tools/mb/mb_config_expectations/chromium.dawn.json
@@ -63,7 +63,8 @@
       "is_debug": false,
       "symbol_level": 1,
       "use_dawn": true,
-      "use_goma": true
+      "use_rbe": true,
+      "use_remoteexec": true
     }
   },
   "Dawn Win10 x64 Builder": {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 2345ddd..53760dcf 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -9066,6 +9066,28 @@
   <int value="7" label="Unsupported Device"/>
 </enum>
 
+<enum name="BluetoothDeviceConnectToServiceFailureReason">
+  <int value="0" label="Connection already connected"/>
+  <int value="1" label="Page timeout"/>
+  <int value="2" label="Profile unavailable"/>
+  <int value="3" label="SDP search"/>
+  <int value="4" label="Create socket"/>
+  <int value="5" label="Invalid argument"/>
+  <int value="6" label="Adapter not powered"/>
+  <int value="7" label="Not supported"/>
+  <int value="8" label="Bad socket"/>
+  <int value="9" label="Memory allocation"/>
+  <int value="10" label="Busy"/>
+  <int value="11" label="Concurrent connection limit"/>
+  <int value="12" label="Timeout"/>
+  <int value="13" label="Refused"/>
+  <int value="14" label="Aborted by remote"/>
+  <int value="15" label="Aborted by local"/>
+  <int value="16" label="LMP protocol error"/>
+  <int value="17" label="Canceled"/>
+  <int value="18" label="Unknown"/>
+</enum>
+
 <enum name="BluetoothDeviceType">
   <int value="0" label="Unknown"/>
   <int value="1" label="Computer"/>
@@ -52455,6 +52477,7 @@
   <int value="-1664290318" label="ComputePressure:enabled"/>
   <int value="-1663410466" label="top-document-isolation"/>
   <int value="-1663125441" label="OptInImeMenu:enabled"/>
+  <int value="-1662763888" label="SidePanelJourneys:disabled"/>
   <int value="-1662646099" label="NTPOfflinePageSuggestions:enabled"/>
   <int value="-1662447331" label="wake-on-packets"/>
   <int value="-1661282561" label="SharingHubDesktopOmnibox:enabled"/>
@@ -53464,6 +53487,7 @@
   <int value="-1009111883" label="NearbyShareVisibilityReminder:enabled"/>
   <int value="-1008511612" label="EnableCustomMacPaperSizes:disabled"/>
   <int value="-1008130438" label="PageEntitiesPageContentAnnotations:enabled"/>
+  <int value="-1007985511" label="SidePanelJourneys:enabled"/>
   <int value="-1007961880" label="PrivacySandboxSettings:enabled"/>
   <int value="-1007856269" label="CssSelectorFragmentAnchor:disabled"/>
   <int value="-1007267652"
@@ -53522,6 +53546,8 @@
   <int value="-974882918" label="WebXRIncubations:disabled"/>
   <int value="-974461595" label="OmniboxPreserveLongerShortcutsText:enabled"/>
   <int value="-974378602" label="WebAuthenticationCable:disabled"/>
+  <int value="-973714709"
+      label="EnableMachineLearningModelLoaderWebPlatformApi:enabled"/>
   <int value="-973509424" label="NewTabPageIcons:disabled"/>
   <int value="-972945109" label="NtpRealbox:disabled"/>
   <int value="-972737445" label="ArcUseAuthEndpoint:disabled"/>
@@ -53572,6 +53598,8 @@
   <int value="-939676447" label="CrostiniResetLxdDb:enabled"/>
   <int value="-938178614" label="enable-suggestions-with-substring-match"/>
   <int value="-937430451" label="IntensiveWakeUpThrottling:disabled"/>
+  <int value="-936652950"
+      label="AutofillEnableManualFallbackForVirtualCards:disabled"/>
   <int value="-934163513" label="EcheSWA:enabled"/>
   <int value="-933377608"
       label="OmniboxUIExperimentHideSteadyStateUrlScheme:enabled"/>
@@ -54711,6 +54739,8 @@
   <int value="-131257916" label="OmniboxCompactSuggestions:disabled"/>
   <int value="-130318058" label="ExoGamepadVibration:enabled"/>
   <int value="-129823932" label="HardwareSecureDecryptionFallback:disabled"/>
+  <int value="-129061954"
+      label="AutofillEnableManualFallbackForVirtualCards:enabled"/>
   <int value="-128687277"
       label="OmniboxUIExperimentHideSteadyStateUrlPathQueryAndRef:disabled"/>
   <int value="-127666141" label="TabGroups:disabled"/>
@@ -57857,6 +57887,8 @@
       label="AutofillEnableInfoBarAccountIndicationFooterForSyncUsers:disabled"/>
   <int value="2027492085" label="SuppressToolbarCaptures:disabled"/>
   <int value="2027793952" label="EditPasswordsInSettings:disabled"/>
+  <int value="2030086360"
+      label="EnableMachineLearningModelLoaderWebPlatformApi:disabled"/>
   <int value="2032558514"
       label="RemoveUsageOfDeprecatedGaiaSigninEndpoint:enabled"/>
   <int value="2032880973" label="U2FSecurityKeyAPI:disabled"/>
@@ -67800,6 +67832,39 @@
   </int>
 </enum>
 
+<enum name="OptimizationGuideModelDeliveryEvent">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="ModelDeliveredAtRegistration">
+    The model was delivered immediately at registration.
+  </int>
+  <int value="2" label="ModelDelivered">
+    The model was delivered after loading from store or downloading from server.
+  </int>
+  <int value="3" label="GetModelsRequest">
+    GetModelsRequest was sent to the optimization guide server.
+  </int>
+  <int value="4" label="DownloadServiceRequest">
+    Model was requested to be downloaded using download service.
+  </int>
+  <int value="5" label="ModelDownloadStarted">
+    Download service started the model download.
+  </int>
+  <int value="6" label="ModelDownloaded">
+    Model got downloaded from the download service.
+  </int>
+  <int value="7" label="DownloadServiceUnavailable">
+    Download service was unavailable.
+  </int>
+  <int value="8" label="GetModelsResponseFailure">
+    GetModelsResponse failed.
+  </int>
+  <int value="9" label="DownloadURLInvalid">Download URL invalid.</int>
+  <int value="10" label="ModelDownloadFailure">
+    Model download failed due to download service or verifying the downloaded
+    model.
+  </int>
+</enum>
+
 <enum name="OptimizationGuideNavigationHostCoveredStatus">
   <obsolete>
     Removed as of 04/2020.
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 2daac742..af06af2 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -109,6 +109,40 @@
   <variant name=".NTPSnippets" summary="NTP snippets"/>
 </variants>
 
+<histogram name="Android.ActivityStop.NumberOfTabsUsed" units="%"
+    expires_after="2022-07-31">
+  <owner>gauravjj@google.com</owner>
+  <owner>skavuluru@google.com</owner>
+  <owner>clank-large-form-factors@google.com</owner>
+  <summary>
+    Captures the number of regular and incognito tabs used. Used tabs are
+    calculated by identifying the number of tabs that were selected between
+    ChromeTabbedActivity onResumeWithNative() and onStopWithNative(). This is
+    recorded when onStopWithNative() is called by backgrounding the app or by
+    opening another activity like SettingsActivity. If multiple instances are
+    running, each instance will only track and record usage of tabs that it
+    contains.
+  </summary>
+</histogram>
+
+<histogram name="Android.ActivityStop.PercentageOfTabsUsed" units="%"
+    expires_after="2022-07-31">
+  <owner>gauravjj@google.com</owner>
+  <owner>skavuluru@google.com</owner>
+  <owner>clank-large-form-factors@google.com</owner>
+  <summary>
+    Captures the percentage of regular and incognito tabs used. This is
+    calculated by finding the ratio of the number of tabs used to the total
+    number of tabs available between ChromeTabbedActivity onResumedWithNative
+    and onStopWithNative. Total number of tabs available is the sum of the tab
+    count when CTA is resumed and any new tabs that are opened before CTA is
+    stopped. This is recorded when ChromeTabbedActivity#onStopWithNative() is
+    called by backgrounding the app or by opening another activity like
+    SettingsActivity. If multiple instances are running, each instance will only
+    track and record usage of tabs that it contains.
+  </summary>
+</histogram>
+
 <histogram name="Android.AdaptiveToolbarButton.Clicked"
     enum="AdaptiveToolbarButtonVariant" expires_after="2022-08-21">
   <owner>bttk@chromium.org</owner>
@@ -4004,6 +4038,12 @@
 
 <histogram name="Android.WebView.ShouldInterceptRequest.InterceptionType"
     enum="InterceptionType" expires_after="2022-05-10">
+  <obsolete>
+    Deprecated in M102. This histogram had a bug which caused it to under-count
+    when the request was not intercepted. This has been fixed in the
+    &quot;Android.WebView.ShouldInterceptRequest.InterceptionType2&quot;
+    histogram.
+  </obsolete>
   <owner>ntfschr@chromium.org</owner>
   <owner>src/android_webview/OWNERS</owner>
   <summary>
@@ -4013,6 +4053,25 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebView.ShouldInterceptRequest.InterceptionType2"
+    enum="InterceptionType" expires_after="2023-03-29">
+  <owner>ntfschr@chromium.org</owner>
+  <owner>src/android_webview/OWNERS</owner>
+  <summary>
+    Whether the network request was intercepted by the embedder of Android
+    WebView, and if so which URL scheme was used for the request. Intercepted
+    requests are requests for which the shouldInterceptRequest() callback
+    returned a non-null response. This is logged each the
+    shouldInterceptRequest() callback API is invoked by WebView, which
+    corresponds to every network request.
+
+    This histogram was added in M102. Prior milestones logged
+    &quot;Android.WebView.ShouldInterceptRequest.InterceptionType&quot;, however
+    that histogram had a bug which caused the &quot;Not intercepted&quot; bucket
+    to be under-reported and for all other buckets to be over-reported.
+  </summary>
+</histogram>
+
 <histogram name="Android.WebView.SingleOrMultiProcess"
     enum="AndroidWebViewSingleOrMultiProcess" expires_after="2022-07-22">
   <owner>alexmitra@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
index cb32d59c..3b904b2 100644
--- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml
+++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -1136,6 +1136,29 @@
   </summary>
 </histogram>
 
+<histogram name="Bluetooth.Linux.ConnectToService.Bonded.FailureReason"
+    enum="BluetoothDeviceConnectToServiceFailureReason"
+    expires_after="2023-02-23">
+  <owner>hansenmichael@google.com</owner>
+  <owner>nearby-share-chromeos-eng@google.com</owner>
+  <summary>
+    Records a specific scenario in which we fail to establish a Bluetooth
+    Classic connection with a remote device that is considered to be bonded.
+    Emitted when the function completes.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Linux.ConnectToService.FailureReason"
+    enum="BluetoothDeviceConnectToServiceFailureReason"
+    expires_after="2023-02-23">
+  <owner>hansenmichael@google.com</owner>
+  <owner>nearby-share-chromeos-eng@google.com</owner>
+  <summary>
+    Failure reason when attempting to initiate an outgoing Bluetooth Classic
+    connection. Emitted when function completes.
+  </summary>
+</histogram>
+
 <histogram name="Bluetooth.Linux.ConnectToServiceInsecurelyResult"
     enum="BluetoothAdapterConnectToServiceInsecurelyResult"
     expires_after="2023-02-23">
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml
index 442f0d4..6e82a60 100644
--- a/tools/metrics/histograms/metadata/optimization/histograms.xml
+++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -850,6 +850,20 @@
 </histogram>
 
 <histogram
+    name="OptimizationGuide.PredictionManager.ModelDeliveryEvents.{OptimizationTarget}"
+    enum="OptimizationGuideModelDeliveryEvent" expires_after="M106">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>chrome-intelligence-core@google.com</owner>
+  <summary>
+    Records the different events of prediction model delivery lifecycle for
+    {OptimizationTarget}, such as fetching model metadata, downloading model
+    file, verification, unzipping, etc. Recorded whenever lifecycle state
+    changes.
+  </summary>
+  <token key="OptimizationTarget" variants="OptimizationTarget"/>
+</histogram>
+
+<histogram
     name="OptimizationGuide.PredictionManager.ModelTypeChanged.{OptimizationTarget}"
     units="BooleanChanged" expires_after="2022-03-07">
   <obsolete>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index d8c56ae..e8ff40b 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -15979,6 +15979,9 @@
     Metrics related to the privacy-preserving prefetch proxy.
   </summary>
   <metric name="count_css_js_loaded_cache_before_fcp">
+    <obsolete>
+      Deprecated March 2022.
+    </obsolete>
     <summary>
       The number of CSS or JS files that were loaded from the cache before first
       contentful paint, with a maximum of 10. Always set when this event is
@@ -15986,6 +15989,9 @@
     </summary>
   </metric>
   <metric name="count_css_js_loaded_network_before_fcp">
+    <obsolete>
+      Deprecated March 2022.
+    </obsolete>
     <summary>
       The number of CSS or JS files that were loaded from the network before
       FCP, with a maximum of 10. Always set when this event is recorded.
@@ -16012,6 +16018,9 @@
     </summary>
   </metric>
   <metric name="ordered_eligible_pages_bitmask">
+    <obsolete>
+      Deprecated March 2022.
+    </obsolete>
     <summary>
       Which links on the Google Search Page were eligible to be prefetched where
       the Nth-LSB is set if the Nth page is eligible.
diff --git a/tools/perf/chrome-health-presets.yaml b/tools/perf/chrome-health-presets.yaml
index a53317b..36592e0 100644
--- a/tools/perf/chrome-health-presets.yaml
+++ b/tools/perf/chrome-health-presets.yaml
@@ -7,9 +7,37 @@
 presets:
   chrome_health:
     telemetry_batch_experiment:
+      - benchmark: loading.desktop
+        configs:
+          - mac-laptop_low_end-perf
+          - mac-m1_mini_2020-perf
+          - linux-perf
+          - win-10-perf
+        stories:
+          - AirBnB_cold
+          - AirBnB_cold
+          - AirBnB_cold
+          - AirBnB_cold
+          - AllRecipes_cold
+          - AllRecipes_cold
+          - AllRecipes_cold
+          - AllRecipes_cold
+      - benchmark: loading.mobile
+        configs:
+          - android-pixel2-perf
+          - android-pixel4-perf
+        stories:
+          - Amazon
+          - Amazon
+          - Amazon
+          - Amazon
+          - Dailymotion
+          - Dailymotion
+          - Dailymotion
+          - Dailymotion
       - benchmark: speedometer2-chrome-health
         configs:
-          - mac-10_12_laptop_low_end-perf
+          - mac-laptop_low_end-perf
           - mac-m1_mini_2020-perf
           - linux-perf
           - win-10-perf
@@ -22,7 +50,7 @@
           - Speedometer2
       - benchmark: rendering.desktop
         configs:
-          - mac-10_12_laptop_low_end-perf
+          - mac-laptop_low_end-perf
           - mac-m1_mini_2020-perf
           - linux-perf
           - win-10-perf
@@ -108,7 +136,7 @@
     telemetry_batch_experiment:
       - benchmark: speedometer2-chrome-health
         configs:
-          - mac-10_12_laptop_low_end-perf
+          - mac-laptop_low_end-perf
           - mac-m1_mini_2020-perf
           - linux-perf
           - win-10-perf
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 3713548..ac967bb0 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -13,8 +13,8 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "mac": {
-            "hash": "6be7a443c110d001b68c8f81594c116e86133726",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/557f2048d57b272fdbdb27405940136b15036873/trace_processor_shell"
+            "hash": "064824789fcdab74f8ec188949c9cd362f204669",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/be7e3b9ba78503da04d08f06502aa8f86e9b0ac4/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "c0397e87456ad6c6a7aa0133e5b81c97adbab4ab",
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index 364db17..b29ab9f 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -61,6 +61,7 @@
     "ax_mode.h",
     "ax_node_data.cc",
     "ax_node_data.h",
+    "ax_node_id_forward.h",
     "ax_relative_bounds.cc",
     "ax_relative_bounds.h",
     "ax_role_properties.cc",
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc
index edfd419..069cd92c 100644
--- a/ui/accessibility/accessibility_features.cc
+++ b/ui/accessibility/accessibility_features.cc
@@ -109,7 +109,7 @@
 }
 
 const base::Feature kDockedMagnifierResizing{"DockedMagnifierResizing",
-                                             base::FEATURE_DISABLED_BY_DEFAULT};
+                                             base::FEATURE_ENABLED_BY_DEFAULT};
 
 bool IsDockedMagnifierResizingEnabled() {
   return base::FeatureList::IsEnabled(::features::kDockedMagnifierResizing);
diff --git a/ui/accessibility/ax_node_data.h b/ui/accessibility/ax_node_data.h
index 75e6edb..75b8da0 100644
--- a/ui/accessibility/ax_node_data.h
+++ b/ui/accessibility/ax_node_data.h
@@ -16,6 +16,7 @@
 #include "base/strings/string_split.h"
 #include "ui/accessibility/ax_base_export.h"
 #include "ui/accessibility/ax_enums.mojom-forward.h"
+#include "ui/accessibility/ax_node_id_forward.h"
 #include "ui/accessibility/ax_relative_bounds.h"
 #include "ui/accessibility/ax_text_attributes.h"
 #include "ui/gfx/geometry/rect_f.h"
@@ -24,9 +25,6 @@
 
 class AXTreeID;
 
-// Defines the type used for AXNode IDs.
-using AXNodeID = int32_t;
-
 // If a node is not yet or no longer valid, its ID should have a value of
 // kInvalidAXNodeID.
 static constexpr AXNodeID kInvalidAXNodeID = 0;
diff --git a/ui/accessibility/ax_node_id_forward.h b/ui/accessibility/ax_node_id_forward.h
new file mode 100644
index 0000000..5cdaec4
--- /dev/null
+++ b/ui/accessibility/ax_node_id_forward.h
@@ -0,0 +1,17 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_ACCESSIBILITY_AX_NODE_ID_FORWARD_H_
+#define UI_ACCESSIBILITY_AX_NODE_ID_FORWARD_H_
+
+#include <stdint.h>
+
+namespace ui {
+
+// Defines the type used for AXNode IDs.
+using AXNodeID = int32_t;
+
+}  // namespace ui
+
+#endif  // UI_ACCESSIBILITY_AX_NODE_ID_FORWARD_H_
diff --git a/ui/accessibility/extensions/chromevoxclassic/BUILD.gn b/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
index 1bb1de2..0a1549998 100644
--- a/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
+++ b/ui/accessibility/extensions/chromevoxclassic/BUILD.gn
@@ -4,9 +4,9 @@
 
 import("//build/config/features.gni")
 import(
-    "//chrome/browser/resources/chromeos/accessibility/common/run_jsbundler.gni")
-import(
     "//chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings.gni")
+import(
+    "//chrome/browser/resources/chromeos/accessibility/tools/run_jsbundler.gni")
 import("//chrome/common/features.gni")
 import("//chrome/test/base/js2gtest.gni")
 import("//testing/test.gni")
diff --git a/ui/base/models/image_model.cc b/ui/base/models/image_model.cc
index 27cc58b..a9f84fd 100644
--- a/ui/base/models/image_model.cc
+++ b/ui/base/models/image_model.cc
@@ -164,15 +164,18 @@
   return !(*this == other);
 }
 
-#if !BUILDFLAG(IS_IOS)
 gfx::ImageSkia ImageModel::Rasterize(
     const ui::ColorProvider* color_provider) const {
   if (IsImage())
     return GetImage().AsImageSkia();
 
   if (IsVectorIcon()) {
+#if BUILDFLAG(IS_IOS)
+    CHECK(false);
+#else
     DCHECK(color_provider);
     return ThemedVectorIcon(GetVectorIcon()).GetImageSkia(color_provider);
+#endif
   }
 
   if (IsImageGenerator())
@@ -180,7 +183,6 @@
 
   return gfx::ImageSkia();
 }
-#endif
 
 ImageModel::ImageGeneratorAndSize::ImageGeneratorAndSize(
     ImageGenerator generator,
diff --git a/ui/base/models/image_model.h b/ui/base/models/image_model.h
index 926159ff..7f01e00 100644
--- a/ui/base/models/image_model.h
+++ b/ui/base/models/image_model.h
@@ -122,10 +122,8 @@
   bool operator==(const ImageModel& other) const;
   bool operator!=(const ImageModel& other) const;
 
-#if !BUILDFLAG(IS_IOS)
   // Rasterizes if necessary.
   gfx::ImageSkia Rasterize(const ui::ColorProvider* color_provider) const;
-#endif
 
  private:
   struct ImageGeneratorAndSize {
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index b189324..8b01427 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -289,6 +289,7 @@
   clone->SetFillsBoundsOpaquely(fills_bounds_opaquely_);
   clone->SetFillsBoundsCompletely(fills_bounds_completely_);
   clone->SetRoundedCornerRadius(rounded_corner_radii());
+  clone->SetGradientMask(gradient_mask());
   clone->SetIsFastRoundedCorner(is_fast_rounded_corner());
   clone->SetName(name_);
 
@@ -717,6 +718,10 @@
   GetAnimator()->SetRoundedCorners(corner_radii);
 }
 
+void Layer::SetGradientMask(const gfx::LinearGradient& gradient_mask) {
+  GetAnimator()->SetGradientMask(gradient_mask);
+}
+
 void Layer::SetIsFastRoundedCorner(bool enable) {
   cc_layer_->SetIsFastRoundedCorner(enable);
   ScheduleDraw();
@@ -807,6 +812,7 @@
   new_layer->SetRoundedCorner(cc_layer_->corner_radii());
   new_layer->SetIsFastRoundedCorner(cc_layer_->is_fast_rounded_corner());
   new_layer->SetMasksToBounds(cc_layer_->masks_to_bounds());
+  new_layer->SetGradientMask(cc_layer_->gradient_mask());
 
   cc_layer_ = new_layer.get();
   if (content_layer_) {
@@ -1525,6 +1531,15 @@
     mirror->dest()->SetRoundedCornersFromAnimation(rounded_corners, reason);
 }
 
+void Layer::SetGradientMaskFromAnimation(
+    const gfx::LinearGradient& gradient_mask,
+    PropertyChangeReason reason) {
+  cc_layer_->SetGradientMask(gradient_mask);
+
+  for (const auto& mirror : mirrors_)
+    mirror->dest()->SetGradientMaskFromAnimation(gradient_mask, reason);
+}
+
 void Layer::ScheduleDrawForAnimation() {
   ScheduleDraw();
 }
@@ -1570,6 +1585,10 @@
   return rounded_corner_radii();
 }
 
+gfx::LinearGradient Layer::GetGradientMaskForAnimation() const {
+  return gradient_mask();
+}
+
 float Layer::GetDeviceScaleFactor() const {
   return device_scale_factor_;
 }
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h
index 044eaeb..c0cd707 100644
--- a/ui/compositor/layer.h
+++ b/ui/compositor/layer.h
@@ -40,6 +40,7 @@
 namespace gfx {
 class RoundedCornersF;
 class Transform;
+class LinearGradient;
 }  // namespace gfx
 
 namespace viz {
@@ -325,6 +326,12 @@
     return cc_layer_->corner_radii();
   }
 
+  // Gets/sets a gradient mask that is applied to the clip bounds on the layer
+  void SetGradientMask(const gfx::LinearGradient& linear_gradient);
+  const gfx::LinearGradient gradient_mask() const {
+    return cc_layer_->gradient_mask();
+  }
+
   // If set to true, this layer would not trigger a render surface (if possible)
   // due to having a rounded corner resulting in a better performance at the
   // cost of maybe having some blending artifacts.
@@ -582,6 +589,8 @@
   void SetRoundedCornersFromAnimation(
       const gfx::RoundedCornersF& rounded_corners,
       PropertyChangeReason reason) override;
+  void SetGradientMaskFromAnimation(const gfx::LinearGradient& gradient_mask,
+                                    PropertyChangeReason reason) override;
   void ScheduleDrawForAnimation() override;
   const gfx::Rect& GetBoundsForAnimation() const override;
   gfx::Transform GetTransformForAnimation() const override;
@@ -592,6 +601,7 @@
   SkColor GetColorForAnimation() const override;
   gfx::Rect GetClipRectForAnimation() const override;
   gfx::RoundedCornersF GetRoundedCornersForAnimation() const override;
+  gfx::LinearGradient GetGradientMaskForAnimation() const override;
   float GetDeviceScaleFactor() const override;
   Layer* GetLayer() override;
   cc::Layer* GetCcLayer() const override;
diff --git a/ui/compositor/layer_animation_delegate.h b/ui/compositor/layer_animation_delegate.h
index f7d4f46..79088f3 100644
--- a/ui/compositor/layer_animation_delegate.h
+++ b/ui/compositor/layer_animation_delegate.h
@@ -9,6 +9,7 @@
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/compositor/compositor_export.h"
 #include "ui/compositor/property_change_reason.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
 #include "ui/gfx/geometry/transform.h"
@@ -45,6 +46,9 @@
   virtual void SetRoundedCornersFromAnimation(
       const gfx::RoundedCornersF& rounded_corners,
       PropertyChangeReason reason) = 0;
+  virtual void SetGradientMaskFromAnimation(
+      const gfx::LinearGradient& gradient_mask,
+      PropertyChangeReason reason) = 0;
   virtual void ScheduleDrawForAnimation() = 0;
   virtual const gfx::Rect& GetBoundsForAnimation() const = 0;
   virtual gfx::Transform GetTransformForAnimation() const = 0;
@@ -55,6 +59,7 @@
   virtual SkColor GetColorForAnimation() const = 0;
   virtual gfx::Rect GetClipRectForAnimation() const = 0;
   virtual gfx::RoundedCornersF GetRoundedCornersForAnimation() const = 0;
+  virtual gfx::LinearGradient GetGradientMaskForAnimation() const = 0;
   virtual float GetDeviceScaleFactor() const = 0;
   virtual ui::Layer* GetLayer() = 0;
   virtual cc::Layer* GetCcLayer() const = 0;
diff --git a/ui/compositor/layer_animation_element.cc b/ui/compositor/layer_animation_element.cc
index 45e79cf..1b070f92 100644
--- a/ui/compositor/layer_animation_element.cc
+++ b/ui/compositor/layer_animation_element.cc
@@ -359,6 +359,54 @@
   gfx::RoundedCornersF target_;
 };
 
+// GradientMaskTransition ----------------------------------------------------
+
+class GradientMaskTransition : public LayerAnimationElement {
+ public:
+  GradientMaskTransition(const gfx::LinearGradient& target,
+                         base::TimeDelta duration)
+      : LayerAnimationElement(GRADIENT_MASK, duration), target_(target) {}
+
+  GradientMaskTransition(const GradientMaskTransition&) = delete;
+  GradientMaskTransition& operator=(const GradientMaskTransition&) = delete;
+
+  ~GradientMaskTransition() override = default;
+
+ protected:
+  std::string DebugName() const override { return "GradientMaskTransition"; }
+  void OnStart(LayerAnimationDelegate* delegate) override {
+    start_ = delegate->GetGradientMaskForAnimation();
+  }
+
+  bool OnProgress(double t, LayerAnimationDelegate* delegate) override {
+    auto gradient_mask = gfx::LinearGradient(
+        gfx::Tween::FloatValueBetween(t, start_.angle(), target_.angle()));
+
+    DCHECK_EQ(start_.step_count(), target_.step_count());
+    for (auto i = 0; i < static_cast<int>(start_.step_count()); ++i) {
+      gradient_mask.AddStep(
+          gfx::Tween::FloatValueBetween(t, start_.steps()[i].percent,
+                                        target_.steps()[i].percent),
+          gfx::Tween::IntValueBetween(t, start_.steps()[i].alpha,
+                                        target_.steps()[i].alpha));
+    }
+
+    delegate->SetGradientMaskFromAnimation(
+        gradient_mask, PropertyChangeReason::FROM_ANIMATION);
+    return true;
+  }
+
+  void OnGetTarget(TargetValue* target) const override {
+    target->gradient_mask = target_;
+  }
+
+  void OnAbort(LayerAnimationDelegate* delegate) override {}
+
+ private:
+  gfx::LinearGradient start_;
+  gfx::LinearGradient target_;
+};
+
 // ThreadedLayerAnimationElement -----------------------------------------------
 
 class ThreadedLayerAnimationElement : public LayerAnimationElement {
@@ -588,7 +636,9 @@
       color(delegate ? delegate->GetColorForAnimation() : SK_ColorTRANSPARENT),
       clip_rect(delegate ? delegate->GetClipRectForAnimation() : gfx::Rect()),
       rounded_corners(delegate ? delegate->GetRoundedCornersForAnimation()
-                               : gfx::RoundedCornersF()) {}
+                               : gfx::RoundedCornersF()),
+      gradient_mask(delegate ? delegate->GetGradientMaskForAnimation()
+                             : gfx::LinearGradient::GetEmpty()) {}
 
 // LayerAnimationElement -------------------------------------------------------
 
@@ -778,6 +828,9 @@
         case ROUNDED_CORNERS:
           str.append("ROUNDED_CORNERS");
           break;
+        case GRADIENT_MASK:
+          str.append("GRADIENT_MASK");
+          break;
         case SENTINEL:
           NOTREACHED();
           break;
@@ -875,4 +928,11 @@
   return std::make_unique<RoundedCornersTransition>(rounded_corners, duration);
 }
 
+std::unique_ptr<LayerAnimationElement>
+LayerAnimationElement::CreateGradientMaskElement(
+    const gfx::LinearGradient& gradient_mask,
+    base::TimeDelta duration) {
+  return std::make_unique<GradientMaskTransition>(gradient_mask, duration);
+}
+
 }  // namespace ui
diff --git a/ui/compositor/layer_animation_element.h b/ui/compositor/layer_animation_element.h
index 82903b3..afded4a7 100644
--- a/ui/compositor/layer_animation_element.h
+++ b/ui/compositor/layer_animation_element.h
@@ -17,6 +17,7 @@
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/compositor/compositor_export.h"
 #include "ui/gfx/animation/tween.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
 #include "ui/gfx/geometry/transform.h"
@@ -42,10 +43,11 @@
     COLOR = (1 << 6),
     CLIP = (1 << 7),
     ROUNDED_CORNERS = (1 << 8),
+    GRADIENT_MASK = (1 << 9),
 
     // Used when iterating over properties.
     FIRST_PROPERTY = TRANSFORM,
-    SENTINEL = (1 << 9)
+    SENTINEL = (1 << 10)
   };
 
   static AnimatableProperty ToAnimatableProperty(
@@ -65,6 +67,7 @@
     SkColor color;
     gfx::Rect clip_rect;
     gfx::RoundedCornersF rounded_corners;
+    gfx::LinearGradient gradient_mask;
   };
 
   typedef uint32_t AnimatableProperties;
@@ -151,6 +154,12 @@
       const gfx::RoundedCornersF& rounded_corners,
       base::TimeDelta duration);
 
+  // Creates an element that transitions the gradient mask to the
+  // given one. The caller owns the return value.
+  static std::unique_ptr<LayerAnimationElement> CreateGradientMaskElement(
+      const gfx::LinearGradient& gradient_mask,
+      base::TimeDelta duration);
+
   // Sets the start time for the animation. This must be called before the first
   // call to {Start, IsFinished}. Once the animation is finished, this must
   // be called again in order to restart the animation.
diff --git a/ui/compositor/layer_animation_element_unittest.cc b/ui/compositor/layer_animation_element_unittest.cc
index 44fd5677..c412c9e 100644
--- a/ui/compositor/layer_animation_element_unittest.cc
+++ b/ui/compositor/layer_animation_element_unittest.cc
@@ -468,6 +468,53 @@
   CheckApproximatelyEqual(target, target_value.rounded_corners);
 }
 
+// Check that the GradientMask element progresses the delegate as expected and
+// that the element can be reused after it completes.
+TEST(LayerAnimationElementTest, GradientMaskElement) {
+  TestLayerAnimationDelegate delegate;
+  gfx::LinearGradient start(45);
+  start.AddStep(0, 0);
+  gfx::LinearGradient target(135);
+  target.AddStep(50, 255);
+  gfx::LinearGradient middle(90);
+  middle.AddStep(25, 127);
+
+  base::TimeTicks start_time;
+  base::TimeDelta delta = base::Seconds(1);
+
+  std::unique_ptr<LayerAnimationElement> element =
+      LayerAnimationElement::CreateGradientMaskElement(target, delta);
+
+  for (int i = 0; i < 2; ++i) {
+    start_time += delta;
+    element->set_requested_start_time(start_time);
+    delegate.SetGradientMaskFromAnimation(
+        start, PropertyChangeReason::NOT_FROM_ANIMATION);
+    element->Start(&delegate, 1);
+    element->Progress(start_time, &delegate);
+    EXPECT_EQ(start, delegate.GetGradientMaskForAnimation());
+    delegate.ExpectLastPropertyChangeReason(
+        PropertyChangeReason::FROM_ANIMATION);
+    element->Progress(start_time + delta / 2, &delegate);
+    EXPECT_EQ(middle, delegate.GetGradientMaskForAnimation());
+    delegate.ExpectLastPropertyChangeReason(
+        PropertyChangeReason::FROM_ANIMATION);
+
+    base::TimeDelta element_duration;
+    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
+    EXPECT_EQ(delta, element_duration);
+
+    element->Progress(start_time + delta, &delegate);
+    EXPECT_EQ(target, delegate.GetGradientMaskForAnimation());
+    delegate.ExpectLastPropertyChangeReason(
+        PropertyChangeReason::FROM_ANIMATION);
+  }
+
+  LayerAnimationElement::TargetValue target_value(&delegate);
+  element->GetTargetValue(&target_value);
+  EXPECT_EQ(target, target_value.gradient_mask);
+}
+
 // Check that a threaded opacity element updates the delegate as expected when
 // aborted.
 TEST(LayerAnimationElementTest, AbortOpacityElement) {
diff --git a/ui/compositor/layer_animator.cc b/ui/compositor/layer_animator.cc
index 0f6fcbb1..8fcc022 100644
--- a/ui/compositor/layer_animator.cc
+++ b/ui/compositor/layer_animator.cc
@@ -122,6 +122,11 @@
                   RoundedCorners,
                   gfx::RoundedCornersF,
                   rounded_corners)
+ANIMATED_PROPERTY(const gfx::LinearGradient&,
+                  GRADIENT_MASK,
+                  GradientMask,
+                  gfx::LinearGradient,
+                  gradient_mask)
 
 #undef ANIMATED_PROPERTY
 
diff --git a/ui/compositor/layer_animator.h b/ui/compositor/layer_animator.h
index 57655689..bc93f79 100644
--- a/ui/compositor/layer_animator.h
+++ b/ui/compositor/layer_animator.h
@@ -22,6 +22,7 @@
 #include "ui/compositor/layer_animation_element.h"
 #include "ui/compositor/layer_threaded_animation_delegate.h"
 #include "ui/gfx/animation/tween.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 
 namespace cc {
 class Animation;
@@ -116,6 +117,11 @@
   virtual void SetRoundedCorners(const gfx::RoundedCornersF& rounded_corners);
   gfx::RoundedCornersF GetTargetRoundedCorners() const;
 
+  // Sets the linear gradient mask on the delegate. Requires that the bounds are
+  // set by SetRoundedCorners. May cause an implicit animation.
+  virtual void SetGradientMask(const gfx::LinearGradient& linear_gradient);
+  gfx::LinearGradient GetTargetGradientMask() const;
+
   // Returns the default length of animations, including adjustment for slow
   // animation mode if set.
   base::TimeDelta GetTransitionDuration() const;
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index e56abc6..6497d7d1 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -772,6 +772,9 @@
 
   gfx::Rect clip_rect(1, 1, 2, 2);
 
+  gfx::LinearGradient gradient_mask(45);
+  gradient_mask.AddStep(50, 50);
+
   layer->SetTransform(transform);
   layer->SetColor(SK_ColorRED);
   layer->SetLayerInverted(true);
@@ -779,6 +782,7 @@
   layer->AddTrilinearFilteringRequest();
   layer->SetClipRect(clip_rect);
   layer->SetRoundedCornerRadius({1, 2, 4, 5});
+  layer->SetGradientMask(gradient_mask);
   layer->SetIsFastRoundedCorner(true);
   layer->SetSubtreeCaptureId(viz::SubtreeCaptureId(1));
 
@@ -797,6 +801,7 @@
             clone->cc_layer_for_testing()->trilinear_filtering());
   EXPECT_EQ(clip_rect, clone->clip_rect());
   EXPECT_EQ(layer->rounded_corner_radii(), clone->rounded_corner_radii());
+  EXPECT_EQ(layer->gradient_mask(), clone->gradient_mask());
   EXPECT_EQ(layer->is_fast_rounded_corner(), clone->is_fast_rounded_corner());
 
   // However, the SubtreeCaptureId is not cloned.
@@ -810,6 +815,10 @@
   layer->SetIsFastRoundedCorner(false);
   layer->SetRoundedCornerRadius({3, 6, 9, 12});
 
+  gradient_mask.set_angle(90);
+  gradient_mask.AddStep(90, 30);
+  layer->SetGradientMask(gradient_mask);
+
   // The clone is an independent copy, so state changes do not propagate.
   EXPECT_EQ(transform, clone->GetTargetTransform());
   EXPECT_EQ(SK_ColorRED, clone->background_color());
@@ -819,6 +828,7 @@
   EXPECT_FALSE(layer->is_fast_rounded_corner());
   EXPECT_TRUE(clone->is_fast_rounded_corner());
   EXPECT_NE(layer->rounded_corner_radii(), clone->rounded_corner_radii());
+  EXPECT_NE(layer->gradient_mask(), clone->gradient_mask());
 
   constexpr SkColor kTransparent = SK_ColorTRANSPARENT;
   layer->SetColor(kTransparent);
@@ -1053,6 +1063,9 @@
   l1->SetIsFastRoundedCorner(true);
   constexpr viz::SubtreeCaptureId kSubtreeCaptureId(22);
   l1->SetSubtreeCaptureId(kSubtreeCaptureId);
+  gfx::LinearGradient gradient_mask(45);
+  gradient_mask.AddStep(50, 50);
+  l1->SetGradientMask(gradient_mask);
 
   EXPECT_EQ(gfx::Point3F(), l1->cc_layer_for_testing()->transform_origin());
   EXPECT_TRUE(l1->cc_layer_for_testing()->draws_content());
@@ -1065,6 +1078,8 @@
   EXPECT_EQ(kSubtreeCaptureId,
             l1->cc_layer_for_testing()->subtree_capture_id());
   EXPECT_EQ(kSubtreeCaptureId, l1->GetSubtreeCaptureId());
+  EXPECT_TRUE(l1->cc_layer_for_testing()->HasGradientMask());
+  EXPECT_EQ(l1->cc_layer_for_testing()->gradient_mask(), gradient_mask);
 
   cc::Layer* before_layer = l1->cc_layer_for_testing();
 
@@ -1090,6 +1105,8 @@
   EXPECT_EQ(kSubtreeCaptureId,
             l1->cc_layer_for_testing()->subtree_capture_id());
   EXPECT_EQ(kSubtreeCaptureId, l1->GetSubtreeCaptureId());
+  EXPECT_TRUE(l1->cc_layer_for_testing()->HasGradientMask());
+  EXPECT_EQ(gradient_mask, l1->cc_layer_for_testing()->gradient_mask());
   EXPECT_FALSE(callback1_run);
 
   bool callback2_run = false;
@@ -1112,6 +1129,7 @@
   EXPECT_TRUE(l1->cc_layer_for_testing()->HasRoundedCorner());
   EXPECT_EQ(l1->cc_layer_for_testing()->corner_radii(), kCornerRadii);
   EXPECT_TRUE(l1->cc_layer_for_testing()->is_fast_rounded_corner());
+  EXPECT_EQ(l1->cc_layer_for_testing()->gradient_mask(), gradient_mask);
   EXPECT_TRUE(callback2_run);
 
   before_layer = l1->cc_layer_for_testing();
@@ -1135,6 +1153,7 @@
   EXPECT_TRUE(l1->cc_layer_for_testing()->HasRoundedCorner());
   EXPECT_EQ(l1->cc_layer_for_testing()->corner_radii(), kCornerRadii);
   EXPECT_TRUE(l1->cc_layer_for_testing()->is_fast_rounded_corner());
+  EXPECT_EQ(l1->cc_layer_for_testing()->gradient_mask(), gradient_mask);
   EXPECT_FALSE(callback3_run);
 
   // Release the on |l1| mailbox to clean up the test.
@@ -1326,6 +1345,29 @@
   EXPECT_EQ(kRadii, layer->rounded_corner_radii());
 }
 
+TEST_F(LayerWithDelegateTest, GradientMask) {
+  gfx::Rect layer_bounds(10, 20, 100, 100);
+  gfx::LinearGradient gradient_mask;
+  gradient_mask.AddStep(50, 50);
+
+  auto layer = std::make_unique<Layer>(LAYER_TEXTURED);
+
+  NullLayerDelegate delegate;
+  layer->set_delegate(&delegate);
+  layer->SetVisible(true);
+  layer->SetBounds(layer_bounds);
+
+  compositor()->SetRootLayer(layer.get());
+  Draw();
+
+  EXPECT_TRUE(layer->rounded_corner_radii().IsEmpty());
+
+  // Setting a rounded corner radius should set an rrect with bounds same as the
+  // layer.
+  layer->SetGradientMask(gradient_mask);
+  EXPECT_EQ(gradient_mask, layer->gradient_mask());
+}
+
 // Checks that stacking-related methods behave as advertised.
 TEST_F(LayerWithNullDelegateTest, Stacking) {
   auto root = std::make_unique<Layer>(LAYER_NOT_DRAWN);
diff --git a/ui/compositor/test/test_layer_animation_delegate.cc b/ui/compositor/test/test_layer_animation_delegate.cc
index 64c3d85..b077818 100644
--- a/ui/compositor/test/test_layer_animation_delegate.cc
+++ b/ui/compositor/test/test_layer_animation_delegate.cc
@@ -127,6 +127,14 @@
   last_property_change_reason_is_set_ = true;
 }
 
+void TestLayerAnimationDelegate::SetGradientMaskFromAnimation(
+    const gfx::LinearGradient& gradient_mask,
+    PropertyChangeReason reason) {
+  gradient_mask_ = gradient_mask;
+  last_property_change_reason_ = reason;
+  last_property_change_reason_is_set_ = true;
+}
+
 void TestLayerAnimationDelegate::ScheduleDrawForAnimation() {
 }
 
@@ -167,6 +175,11 @@
   return rounded_corners_;
 }
 
+gfx::LinearGradient TestLayerAnimationDelegate::GetGradientMaskForAnimation()
+    const {
+  return gradient_mask_;
+}
+
 float TestLayerAnimationDelegate::GetDeviceScaleFactor() const {
   return 1.0f;
 }
diff --git a/ui/compositor/test/test_layer_animation_delegate.h b/ui/compositor/test/test_layer_animation_delegate.h
index 294a2f5..642335e4d 100644
--- a/ui/compositor/test/test_layer_animation_delegate.h
+++ b/ui/compositor/test/test_layer_animation_delegate.h
@@ -8,6 +8,7 @@
 #include "cc/layers/layer.h"
 #include "ui/compositor/layer_animation_delegate.h"
 #include "ui/compositor/layer_threaded_animation_delegate.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/transform.h"
 
@@ -66,6 +67,8 @@
   void SetRoundedCornersFromAnimation(
       const gfx::RoundedCornersF& rounded_corners,
       PropertyChangeReason reason) override;
+  void SetGradientMaskFromAnimation(const gfx::LinearGradient& gradient_mask,
+                                    PropertyChangeReason reason) override;
   void ScheduleDrawForAnimation() override;
   const gfx::Rect& GetBoundsForAnimation() const override;
   gfx::Transform GetTransformForAnimation() const override;
@@ -76,6 +79,7 @@
   SkColor GetColorForAnimation() const override;
   gfx::Rect GetClipRectForAnimation() const override;
   gfx::RoundedCornersF GetRoundedCornersForAnimation() const override;
+  gfx::LinearGradient GetGradientMaskForAnimation() const override;
   float GetDeviceScaleFactor() const override;
   LayerAnimatorCollection* GetLayerAnimatorCollection() override;
   ui::Layer* GetLayer() override;
@@ -102,6 +106,7 @@
   SkColor color_;
   gfx::Rect clip_rect_;
   gfx::RoundedCornersF rounded_corners_;
+  gfx::LinearGradient gradient_mask_;
   scoped_refptr<cc::Layer> cc_layer_;
   absl::optional<int> frame_number_;
 
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index c7a570a..b4ac8ce 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -695,6 +695,7 @@
     "font_names_testing.cc",
     "font_names_testing.h",
     "font_unittest.cc",
+    "geometry/linear_gradient_unittest.cc",
     "geometry/rrect_f_unittest.cc",
     "geometry/transform_operations_unittest.cc",
     "geometry/transform_unittest.cc",
diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc
index e0d4875..07c8bf9 100644
--- a/ui/gfx/color_utils.cc
+++ b/ui/gfx/color_utils.cc
@@ -215,6 +215,9 @@
   const float color_angle = hsl.h * 360;
 
   // Hues in comments below are of the corresponding kGoogleXXX500 color.
+  // Every cutoff is a halfway point between the two neighboring hue values to
+  // provide as fair of a representation as possible for what color should be
+  // used.
   // RED: 4
   if (color_angle < 15)
     return pick_color(kRed);
@@ -228,7 +231,10 @@
   if (color_angle < 163)
     return pick_color(kGreen);
   // CYAN: 189
-  if (color_angle < 203)
+  // In dark mode, the Mac system blue hue is right on the border between a
+  // kGoogleCyan and kGoogleBlue color, so the cutoff point is tweaked to make
+  // it map to a kGoogleBlue color.
+  if (color_angle < 202)
     return pick_color(kCyan);
   // BLUE: 217
   if (color_angle < 245)
diff --git a/ui/gfx/geometry/BUILD.gn b/ui/gfx/geometry/BUILD.gn
index 2b43e99..480c567b 100644
--- a/ui/gfx/geometry/BUILD.gn
+++ b/ui/gfx/geometry/BUILD.gn
@@ -80,6 +80,8 @@
 component("geometry_skia") {
   sources = [
     "geometry_skia_export.h",
+    "linear_gradient.cc",
+    "linear_gradient.h",
     "mask_filter_info.cc",
     "mask_filter_info.h",
     "matrix44.cc",
diff --git a/ui/gfx/geometry/linear_gradient.cc b/ui/gfx/geometry/linear_gradient.cc
new file mode 100644
index 0000000..ea769b3
--- /dev/null
+++ b/ui/gfx/geometry/linear_gradient.cc
@@ -0,0 +1,77 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/geometry/linear_gradient.h"
+
+#include <sstream>
+
+#include "base/check_op.h"
+#include "base/containers/adapters.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "ui/gfx/geometry/angle_conversions.h"
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/transform.h"
+
+namespace gfx {
+
+// static
+LinearGradient& LinearGradient::GetEmpty() {
+  static LinearGradient kEmpty;
+  return kEmpty;
+}
+
+LinearGradient::LinearGradient() = default;
+
+LinearGradient::LinearGradient(int16_t angle) : angle_(angle) {}
+
+LinearGradient::LinearGradient(const LinearGradient& copy) = default;
+
+void LinearGradient::AddStep(float percent, uint8_t alpha) {
+  DCHECK_LT(step_count_, kMaxStepSize);
+  DCHECK_GE(percent, 0);
+  DCHECK_LE(percent, 100);
+  // make sure the step's percent is monotonically increasing.
+  DCHECK(step_count_ ? steps_[step_count_ - 1].percent < percent : true)
+      << base::StringPrintf("prev[%zu]=%f, next[%zu]=%f", step_count_ - 1,
+                            steps_[step_count_ - 1].percent, step_count_,
+                            steps_[step_count_].percent);
+  steps_[step_count_].percent = percent;
+  steps_[step_count_++].alpha = alpha;
+}
+
+void LinearGradient::ReverseSteps() {
+  std::reverse(steps_.begin(), steps_.end());
+  std::rotate(steps_.begin(), steps_.end() - step_count_, steps_.end());
+  for (size_t i = 0; i < step_count_; i++)
+    steps_[i].percent = 100.f - steps_[i].percent;
+}
+
+void LinearGradient::Transform(const gfx::Transform& transform) {
+  gfx::PointF origin, end;
+  float radian = gfx::DegToRad(static_cast<float>(angle_));
+  float y = -sin(radian);
+  float x = cos(radian);
+  end.Offset(x, y);
+  transform.TransformPoint(&origin);
+  transform.TransformPoint(&end);
+  gfx::Vector2dF diff = end - origin;
+  int16_t new_angle =
+      -static_cast<int16_t>(gfx::RadToDeg(atan2(diff.y(), diff.x())));
+  angle_ = new_angle;
+}
+
+std::string LinearGradient::ToString() const {
+  std::string result = base::StringPrintf(
+      "LinearGradient{angle=%u, step_count=%zu [", angle_, step_count_);
+  for (size_t i = 0; i < step_count_; i++) {
+    if (i)
+      result += " - ";
+    result += base::NumberToString(steps_[i].percent) + ":" +
+              base::NumberToString(static_cast<int>(steps_[i].alpha));
+  }
+  return result + "]}";
+}
+
+}  // namespace gfx
diff --git a/ui/gfx/geometry/linear_gradient.h b/ui/gfx/geometry/linear_gradient.h
new file mode 100644
index 0000000..1ad025f
--- /dev/null
+++ b/ui/gfx/geometry/linear_gradient.h
@@ -0,0 +1,90 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_LINEAR_GRADIENT_H_
+#define UI_GFX_LINEAR_GRADIENT_H_
+
+#include <array>
+#include <string>
+
+#include "ui/gfx/geometry/geometry_skia_export.h"
+
+namespace gfx {
+
+class Transform;
+
+// A class that defines a linear gradient mask.
+// Up to 6 steps are supported.
+//
+// ex. Horizontal linear gradient that starts in the middle.
+// LinearGradient gradient(0);
+// gradient.AddStep(20, 0);
+// gradient.AddStep(30, 255);
+// gradient.AddStep(70, 255);
+// gradient.AddStep(80, 0);
+class GEOMETRY_SKIA_EXPORT LinearGradient {
+ public:
+  struct Step {
+    constexpr Step() = default;
+    // Percent that defines a position in diagonal, from 0 to 100.
+    float percent = 0;
+    // Alpha, from 0 to 255.
+    uint8_t alpha = 0;
+  };
+  static LinearGradient& GetEmpty();
+
+  static constexpr size_t kMaxStepSize = 6;
+  using StepArray = std::array<Step, kMaxStepSize>;
+
+  LinearGradient();
+  explicit LinearGradient(int16_t angle);
+  LinearGradient(const LinearGradient& copy);
+  LinearGradient& operator=(const LinearGradient& gradient_mask) = default;
+
+  bool IsEmpty() const { return !step_count_; }
+
+  // Add a new step. Adding more than 6 results in DCHECK or ignored.
+  void AddStep(float percent, uint8_t alpha);
+
+  // Get step information.
+  const StepArray& steps() const { return steps_; }
+  StepArray& steps() { return steps_; }
+  size_t step_count() const { return step_count_; }
+
+  // Gets/Sets an angle (in degrees).
+  int16_t angle() const { return angle_; }
+  void set_angle(int16_t degree) { angle_ = degree % 360; }
+
+  // Reverse the step 180 degree.
+  void ReverseSteps();
+
+  // Transform the angle.
+  void Transform(const gfx::Transform& transform);
+
+  std::string ToString() const;
+
+ private:
+  // angle in degrees.
+  int16_t angle_ = 0;
+  size_t step_count_ = 0;
+  StepArray steps_;
+};
+
+inline bool operator==(const LinearGradient::Step& lhs,
+                       const LinearGradient::Step& rhs) {
+  return lhs.percent == rhs.percent && lhs.alpha == rhs.alpha;
+}
+
+inline bool operator==(const LinearGradient& lhs, const LinearGradient& rhs) {
+  return lhs.angle() == rhs.angle() && lhs.step_count() == rhs.step_count() &&
+         lhs.steps() == rhs.steps();
+}
+
+inline bool operator!=(const LinearGradient& lhs, const LinearGradient& rhs) {
+  return !(lhs == rhs);
+}
+
+}  // namespace gfx
+
+#endif  // UI_GFX_LINEAR_GRADIENT_H_
diff --git a/ui/gfx/geometry/linear_gradient_unittest.cc b/ui/gfx/geometry/linear_gradient_unittest.cc
new file mode 100644
index 0000000..79c6ffb6
--- /dev/null
+++ b/ui/gfx/geometry/linear_gradient_unittest.cc
@@ -0,0 +1,93 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/geometry/linear_gradient.h"
+
+#include "build/build_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/transform.h"
+
+namespace gfx {
+
+TEST(LinearGradientTest, Basic) {
+  LinearGradient gradient(45);
+  EXPECT_TRUE(gradient.IsEmpty());
+
+  gradient.AddStep(10, 0);
+  gradient.AddStep(50, 50);
+  gradient.AddStep(80, 1);
+
+  EXPECT_FALSE(gradient.IsEmpty());
+  EXPECT_EQ(45, gradient.angle());
+  EXPECT_EQ(3u, gradient.step_count());
+  EXPECT_EQ(gradient.steps()[0].percent, 10);
+  EXPECT_EQ(gradient.steps()[0].alpha, 0);
+  EXPECT_EQ(gradient.steps()[1].percent, 50);
+  EXPECT_EQ(gradient.steps()[1].alpha, 50);
+  EXPECT_EQ(gradient.steps()[2].percent, 80);
+  EXPECT_EQ(gradient.steps()[2].alpha, 1);
+
+  LinearGradient gradient2(90);
+  gradient2.AddStep(10, 0);
+  gradient2.AddStep(50, 50);
+  gradient2.AddStep(80, 1);
+
+  EXPECT_NE(gradient, gradient2);
+
+  gradient2.set_angle(45);
+  EXPECT_EQ(gradient, gradient2);
+
+  gradient2.AddStep(90, 0);
+  EXPECT_NE(gradient, gradient2);
+}
+
+TEST(LinearGradientTest, Reverse) {
+  LinearGradient gradient(45);
+  // Make sure reversing an empty LinearGradient doesn't cause an issue.
+  gradient.ReverseSteps();
+
+  gradient.AddStep(10, 0);
+  gradient.AddStep(50, 50);
+  gradient.AddStep(80, 1);
+
+  gradient.ReverseSteps();
+
+  EXPECT_EQ(45, gradient.angle());
+  EXPECT_EQ(3u, gradient.step_count());
+
+  EXPECT_EQ(gradient.steps()[0].percent, 20);
+  EXPECT_EQ(gradient.steps()[0].alpha, 1);
+  EXPECT_EQ(gradient.steps()[1].percent, 50);
+  EXPECT_EQ(gradient.steps()[1].alpha, 50);
+  EXPECT_EQ(gradient.steps()[2].percent, 90);
+  EXPECT_EQ(gradient.steps()[2].alpha, 0);
+}
+
+TEST(LinearGradientTest, Rotate) {
+  {
+    LinearGradient gradient(45);
+    gfx::Transform transform;
+    transform.Translate(10, 50);
+    gradient.Transform(transform);
+    EXPECT_EQ(45, gradient.angle());
+  }
+  // Scale can change the angle.
+  {
+    LinearGradient gradient(45);
+    gfx::Transform transform;
+    transform.Scale(1, 10);
+    gradient.Transform(transform);
+    EXPECT_EQ(84, gradient.angle());
+  }
+  {
+    LinearGradient gradient(45);
+    gfx::Transform transform;
+    transform.Rotate(45);
+    gradient.Transform(transform);
+    EXPECT_EQ(0, gradient.angle());
+  }
+}
+
+}  // namespace gfx
diff --git a/ui/gfx/geometry/mask_filter_info.cc b/ui/gfx/geometry/mask_filter_info.cc
index 9757acd..c033155 100644
--- a/ui/gfx/geometry/mask_filter_info.cc
+++ b/ui/gfx/geometry/mask_filter_info.cc
@@ -11,13 +11,19 @@
 namespace gfx {
 
 bool MaskFilterInfo::Transform(const gfx::Transform& transform) {
-  return rounded_corner_bounds_.IsEmpty()
-             ? false
-             : transform.TransformRRectF(&rounded_corner_bounds_);
+  if (rounded_corner_bounds_.IsEmpty())
+    return false;
+
+  if (!transform.TransformRRectF(&rounded_corner_bounds_))
+    return false;
+
+  gradient_mask_.Transform(transform);
+  return true;
 }
 
 std::string MaskFilterInfo::ToString() const {
-  return "MaskFilterInfo{" + rounded_corner_bounds_.ToString() + "}";
+  return "MaskFilterInfo{" + rounded_corner_bounds_.ToString() +
+         ", gradient_mask=" + gradient_mask_.ToString() + "}";
 }
 
 }  // namespace gfx
diff --git a/ui/gfx/geometry/mask_filter_info.h b/ui/gfx/geometry/mask_filter_info.h
index c796b494..c96bd18 100644
--- a/ui/gfx/geometry/mask_filter_info.h
+++ b/ui/gfx/geometry/mask_filter_info.h
@@ -6,6 +6,7 @@
 #define UI_GFX_GEOMETRY_MASK_FILTER_INFO_H_
 
 #include "ui/gfx/geometry/geometry_skia_export.h"
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/geometry/rrect_f.h"
 
@@ -19,8 +20,12 @@
   MaskFilterInfo() = default;
   explicit MaskFilterInfo(const RRectF& rrect)
       : rounded_corner_bounds_(rrect) {}
-  MaskFilterInfo(const RectF& bounds, const RoundedCornersF& radii)
-      : rounded_corner_bounds_(bounds, radii) {}
+  MaskFilterInfo(const RRectF& rrect, const gfx::LinearGradient& gradient_mask)
+      : rounded_corner_bounds_(rrect), gradient_mask_(gradient_mask) {}
+  MaskFilterInfo(const RectF& bounds,
+                 const RoundedCornersF& radii,
+                 const gfx::LinearGradient& gradient_mask)
+      : rounded_corner_bounds_(bounds, radii), gradient_mask_(gradient_mask) {}
   MaskFilterInfo(const MaskFilterInfo& copy) = default;
   ~MaskFilterInfo() = default;
 
@@ -36,6 +41,13 @@
            rounded_corner_bounds_.GetType() != RRectF::Type::kRect;
   }
 
+  const gfx::LinearGradient& gradient_mask() const { return gradient_mask_; }
+
+  // True if this contains an effective gradient mask (requires filter bounds).
+  bool HasGradientMask() const {
+    return !rounded_corner_bounds_.IsEmpty() && !gradient_mask_.IsEmpty();
+  }
+
   // True if this contains no effective mask information.
   bool IsEmpty() const { return rounded_corner_bounds_.IsEmpty(); }
 
@@ -49,6 +61,9 @@
   // The rounded corner bounds. This also defines the bounds that the mask
   // filter will be applied to.
   RRectF rounded_corner_bounds_;
+
+  // Shader based linear gradient mask to be applied to a layer.
+  gfx::LinearGradient gradient_mask_;
 };
 
 inline bool operator==(const MaskFilterInfo& lhs, const MaskFilterInfo& rhs) {
diff --git a/ui/gfx/mojom/BUILD.gn b/ui/gfx/mojom/BUILD.gn
index 757d7934..0a2c5c2 100644
--- a/ui/gfx/mojom/BUILD.gn
+++ b/ui/gfx/mojom/BUILD.gn
@@ -21,6 +21,7 @@
     "gpu_fence_handle.mojom",
     "hdr_metadata.mojom",
     "hdr_static_metadata.mojom",
+    "linear_gradient.mojom",
     "mask_filter_info.mojom",
     "overlay_priority_hint.mojom",
     "overlay_transform.mojom",
@@ -324,6 +325,17 @@
       traits_headers = [ "mask_filter_info_mojom_traits.h" ]
       traits_public_deps = [ "//ui/gfx" ]
     },
+    {
+      types = [
+        {
+          mojom = "gfx.mojom.LinearGradient"
+          cpp = "::gfx::LinearGradient"
+        },
+      ]
+      traits_sources = [ "linear_gradient_mojom_traits.cc" ]
+      traits_headers = [ "linear_gradient_mojom_traits.h" ]
+      traits_public_deps = [ "//ui/gfx" ]
+    },
   ]
 
   cpp_typemaps += shared_cpp_typemaps
diff --git a/ui/gfx/mojom/linear_gradient.mojom b/ui/gfx/mojom/linear_gradient.mojom
new file mode 100644
index 0000000..c95519c
--- /dev/null
+++ b/ui/gfx/mojom/linear_gradient.mojom
@@ -0,0 +1,17 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module gfx.mojom;
+
+// See ui/gfx/geometry/linear_gradient.h.
+struct Step {
+  float percent;
+  uint8 alpha;
+};
+
+struct LinearGradient {
+  int16 angle = 0;
+  uint8 step_count = 0;
+  array<Step, 6> steps;
+};
diff --git a/ui/gfx/mojom/linear_gradient_mojom_traits.cc b/ui/gfx/mojom/linear_gradient_mojom_traits.cc
new file mode 100644
index 0000000..07d741f
--- /dev/null
+++ b/ui/gfx/mojom/linear_gradient_mojom_traits.cc
@@ -0,0 +1,28 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/mojom/linear_gradient_mojom_traits.h"
+
+namespace mojo {
+
+// static
+bool StructTraits<gfx::mojom::LinearGradientDataView, gfx::LinearGradient>::
+    Read(gfx::mojom::LinearGradientDataView data, gfx::LinearGradient* out) {
+  std::array<gfx::LinearGradient::Step, gfx::LinearGradient::kMaxStepSize>
+      steps_data;
+  if (!data.ReadSteps(&steps_data))
+    return false;
+
+  if (data.step_count() > steps_data.size())
+    return false;
+
+  for (int i = 0; i < data.step_count(); ++i) {
+    out->AddStep(steps_data[i].percent, steps_data[i].alpha);
+  }
+  out->set_angle(data.angle());
+
+  return true;
+}
+
+}  // namespace mojo
diff --git a/ui/gfx/mojom/linear_gradient_mojom_traits.h b/ui/gfx/mojom/linear_gradient_mojom_traits.h
new file mode 100644
index 0000000..09412c3
--- /dev/null
+++ b/ui/gfx/mojom/linear_gradient_mojom_traits.h
@@ -0,0 +1,52 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_MOJOM_LINEAR_GRADIENT_MOJOM_TRAITS_H_
+#define UI_GFX_MOJOM_LINEAR_GRADIENT_MOJOM_TRAITS_H_
+
+#include "ui/gfx/geometry/linear_gradient.h"
+#include "ui/gfx/mojom/linear_gradient.mojom-shared.h"
+
+namespace mojo {
+
+template <>
+struct StructTraits<gfx::mojom::StepDataView, gfx::LinearGradient::Step> {
+  static float percent(const gfx::LinearGradient::Step& input) {
+    return input.percent;
+  }
+
+  static uint8_t alpha(const gfx::LinearGradient::Step& input) {
+    return input.alpha;
+  }
+
+  static bool Read(gfx::mojom::StepDataView data,
+                   gfx::LinearGradient::Step* out) {
+    out->percent = data.percent();
+    out->alpha = data.alpha();
+    return true;
+  }
+};
+
+template <>
+struct StructTraits<gfx::mojom::LinearGradientDataView, gfx::LinearGradient> {
+  static int16_t angle(const gfx::LinearGradient& input) {
+    return input.angle();
+  }
+
+  static uint8_t step_count(const gfx::LinearGradient& input) {
+    return input.step_count();
+  }
+
+  static const gfx::LinearGradient::StepArray& steps(
+      const gfx::LinearGradient& input) {
+    return input.steps();
+  }
+
+  static bool Read(gfx::mojom::LinearGradientDataView data,
+                   gfx::LinearGradient* out);
+};
+
+}  // namespace mojo
+
+#endif  // UI_GFX_MOJOM_LINEAR_GRADIENT_MOJOM_TRAITS_H_
diff --git a/ui/gfx/mojom/mask_filter_info.mojom b/ui/gfx/mojom/mask_filter_info.mojom
index 7e3b9ea..9d42d6e0 100644
--- a/ui/gfx/mojom/mask_filter_info.mojom
+++ b/ui/gfx/mojom/mask_filter_info.mojom
@@ -5,8 +5,10 @@
 module gfx.mojom;
 
 import "ui/gfx/mojom/rrect_f.mojom";
+import "ui/gfx/mojom/linear_gradient.mojom";
 
-// See ui/gfx/mask_filter_info.h.
+// See ui/gfx/geometry/mask_filter_info.h.
 struct MaskFilterInfo {
   gfx.mojom.RRectF rounded_corner_bounds;
+  gfx.mojom.LinearGradient? gradient_mask;
 };
diff --git a/ui/gfx/mojom/mask_filter_info_mojom_traits.cc b/ui/gfx/mojom/mask_filter_info_mojom_traits.cc
index 683762ae..ec275d04 100644
--- a/ui/gfx/mojom/mask_filter_info_mojom_traits.cc
+++ b/ui/gfx/mojom/mask_filter_info_mojom_traits.cc
@@ -12,7 +12,15 @@
   gfx::RRectF bounds;
   if (!data.ReadRoundedCornerBounds(&bounds))
     return false;
-  *out = gfx::MaskFilterInfo(bounds);
+
+  absl::optional<gfx::LinearGradient> gradient_mask;
+  if (!data.ReadGradientMask(&gradient_mask))
+    return false;
+
+  if (gradient_mask.has_value() && !gradient_mask->IsEmpty())
+    *out = gfx::MaskFilterInfo(bounds, gradient_mask.value());
+  else
+    *out = gfx::MaskFilterInfo(bounds);
   return true;
 }
 
diff --git a/ui/gfx/mojom/mask_filter_info_mojom_traits.h b/ui/gfx/mojom/mask_filter_info_mojom_traits.h
index 849742a..7f0da80d 100644
--- a/ui/gfx/mojom/mask_filter_info_mojom_traits.h
+++ b/ui/gfx/mojom/mask_filter_info_mojom_traits.h
@@ -5,7 +5,9 @@
 #ifndef UI_GFX_MOJOM_MASK_FILTER_INFO_MOJOM_TRAITS_H_
 #define UI_GFX_MOJOM_MASK_FILTER_INFO_MOJOM_TRAITS_H_
 
+#include "ui/gfx/geometry/linear_gradient.h"
 #include "ui/gfx/geometry/mask_filter_info.h"
+#include "ui/gfx/mojom/linear_gradient_mojom_traits.h"
 #include "ui/gfx/mojom/mask_filter_info.mojom-shared.h"
 #include "ui/gfx/mojom/rrect_f_mojom_traits.h"
 
@@ -17,6 +19,11 @@
     return info.rounded_corner_bounds();
   }
 
+  static const gfx::LinearGradient& gradient_mask(
+      const gfx::MaskFilterInfo& info) {
+    return info.gradient_mask();
+  }
+
   static bool Read(gfx::mojom::MaskFilterInfoDataView data,
                    gfx::MaskFilterInfo* out);
 };
diff --git a/ui/views/border.cc b/ui/views/border.cc
index a5f01ff..fa0542ae 100644
--- a/ui/views/border.cc
+++ b/ui/views/border.cc
@@ -10,6 +10,7 @@
 #include "base/check.h"
 #include "base/memory/ptr_util.h"
 #include "cc/paint/paint_flags.h"
+#include "ui/color/color_provider.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/geometry/dip_util.h"
@@ -75,6 +76,26 @@
   return gfx::Size(insets_.width(), insets_.height());
 }
 
+class ThemedSolidSidedBorder : public SolidSidedBorder {
+ public:
+  ThemedSolidSidedBorder(const gfx::Insets& insets, ui::ColorId color);
+
+  // SolidSidedBorder:
+  void Paint(const View& view, gfx::Canvas* canvas) override;
+
+ private:
+  ui::ColorId color_;
+};
+
+ThemedSolidSidedBorder::ThemedSolidSidedBorder(const gfx::Insets& insets,
+                                               ui::ColorId color)
+    : SolidSidedBorder(insets, gfx::kPlaceholderColor), color_(color) {}
+
+void ThemedSolidSidedBorder::Paint(const View& view, gfx::Canvas* canvas) {
+  set_color(view.GetColorProvider()->GetColor(color_));
+  SolidSidedBorder::Paint(view, canvas);
+}
+
 // A border with a rounded rectangle and single color.
 class RoundedRectBorder : public Border {
  public:
@@ -244,6 +265,12 @@
   return std::make_unique<SolidSidedBorder>(gfx::Insets(thickness), color);
 }
 
+std::unique_ptr<Border> CreateThemedSolidBorder(int thickness,
+                                                ui::ColorId color) {
+  return std::make_unique<ThemedSolidSidedBorder>(gfx::Insets(thickness),
+                                                  color);
+}
+
 std::unique_ptr<Border> CreateEmptyBorder(const gfx::Insets& insets) {
   return std::make_unique<EmptyBorder>(insets);
 }
diff --git a/ui/views/border.h b/ui/views/border.h
index c62feca..8352712 100644
--- a/ui/views/border.h
+++ b/ui/views/border.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/color/color_id.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/views/views_export.h"
@@ -81,6 +82,11 @@
 VIEWS_EXPORT std::unique_ptr<Border> CreateSolidBorder(int thickness,
                                                        SkColor color);
 
+// Creates a border that is a simple line of the specified thickness and color,
+// which updates on theme changes.
+VIEWS_EXPORT std::unique_ptr<Border> CreateThemedSolidBorder(int thickness,
+                                                             ui::ColorId color);
+
 // Creates a border that is a rounded rectangle of the specified thickness and
 // color.
 // NOTE: `corner_radius` is an OUTER EDGE RADIUS, not a stroke radius!
diff --git a/ui/views/examples/examples_with_content_main.cc b/ui/views/examples/examples_with_content_main.cc
index 97f3764..1052d5bf 100644
--- a/ui/views/examples/examples_with_content_main.cc
+++ b/ui/views/examples/examples_with_content_main.cc
@@ -58,6 +58,7 @@
 
 #if BUILDFLAG(IS_WIN)
 int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t*, int) {
+  base::CommandLine::Init(0, nullptr);
   sandbox::SandboxInterfaceInfo sandbox_info = {nullptr};
   content::InitializeSandboxInfo(&sandbox_info);
   ui::ViewsContentClient views_content_client(instance, &sandbox_info);