diff --git a/DEPS b/DEPS
index 75d02a40..7f82f3b5 100644
--- a/DEPS
+++ b/DEPS
@@ -74,7 +74,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '4fafedd33add9948db1147c60d681ed9340984fd',
+  'skia_revision': 'f226e66d75374e370f3ae2c6895bc689670e9e18',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -86,7 +86,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '0e74e059621b5eee49e10381a704d13a5713480a',
+  'angle_revision': '5b1180df6835e403e5a9636fe9f7c987e1e48e2c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -98,7 +98,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '682118834b3cf2b5510ee676088fdd8f11869e84',
+  'pdfium_revision': 'd01f2429bc561eed07293b46e08a07c54e471521',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc
index 77d84c6..72031e2 100644
--- a/ash/display/display_manager_unittest.cc
+++ b/ash/display/display_manager_unittest.cc
@@ -3810,16 +3810,23 @@
 
 class MultiMirroringTest : public DisplayManagerTest {
  public:
-  MultiMirroringTest() {
+  MultiMirroringTest() = default;
+  ~MultiMirroringTest() override = default;
+
+  // DisplayManagerTest:
+  void SetUp() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         ::switches::kEnableMultiMirroring);
+    DisplayManagerTest::SetUp();
   }
-  ~MultiMirroringTest() override = default;
 
   void ActivateSoftwareMirrorMode(bool active) {
     display_manager()->SetMirrorMode(active);
     RunAllPendingInMessageLoop();
   }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MultiMirroringTest);
 };
 
 TEST_F(MultiMirroringTest, HardwareMirrorMode) {
diff --git a/ash/system/palette/tools/metalayer_mode.cc b/ash/system/palette/tools/metalayer_mode.cc
index 1d71e01..8107637d 100644
--- a/ash/system/palette/tools/metalayer_mode.cc
+++ b/ash/system/palette/tools/metalayer_mode.cc
@@ -157,6 +157,12 @@
   UpdateState();
 }
 
+void MetalayerMode::OnAssistantFeatureAllowedChanged(
+    mojom::AssistantAllowedState state) {
+  assistant_allowed_state_ = state;
+  UpdateState();
+}
+
 void MetalayerMode::UpdateState() {
   if (enabled() && !selectable())
     delegate()->DisableTool(GetToolId());
diff --git a/ash/system/palette/tools/metalayer_mode.h b/ash/system/palette/tools/metalayer_mode.h
index 581d3a04..5e81e60 100644
--- a/ash/system/palette/tools/metalayer_mode.h
+++ b/ash/system/palette/tools/metalayer_mode.h
@@ -31,7 +31,8 @@
   // from |enabled| which means that the palette tool is currently selected by
   // the user.
   bool feature_enabled() const {
-    return voice_interaction_enabled_ && voice_interaction_context_enabled_;
+    return voice_interaction_enabled_ && voice_interaction_context_enabled_ &&
+           assistant_allowed_state_ == mojom::AssistantAllowedState::ALLOWED;
   }
 
   // Whether the tool is in "loading" state.
@@ -66,6 +67,8 @@
       mojom::VoiceInteractionState state) override;
   void OnVoiceInteractionSettingsEnabled(bool enabled) override;
   void OnVoiceInteractionContextEnabled(bool enabled) override;
+  void OnAssistantFeatureAllowedChanged(
+      mojom::AssistantAllowedState state) override;
 
   // Update the state of the tool based on the current availability of the tool.
   void UpdateState();
@@ -83,6 +86,9 @@
 
   bool voice_interaction_context_enabled_ = false;
 
+  mojom::AssistantAllowedState assistant_allowed_state_ =
+      mojom::AssistantAllowedState::ALLOWED;
+
   base::TimeTicks previous_stroke_end_;
 
   // True when the mode is activated via the stylus barrel button.
diff --git a/ash/system/palette/tools/metalayer_unittest.cc b/ash/system/palette/tools/metalayer_unittest.cc
index 99e1d272..d8da4e9d 100644
--- a/ash/system/palette/tools/metalayer_unittest.cc
+++ b/ash/system/palette/tools/metalayer_unittest.cc
@@ -67,35 +67,54 @@
       mojom::VoiceInteractionState::NOT_READY,
       mojom::VoiceInteractionState::STOPPED,
       mojom::VoiceInteractionState::RUNNING};
+  const mojom::AssistantAllowedState kAllowedStates[] = {
+      mojom::AssistantAllowedState::ALLOWED,
+      mojom::AssistantAllowedState::DISALLOWED_BY_ARC_DISALLOWED,
+      mojom::AssistantAllowedState::DISALLOWED_BY_ARC_POLICY,
+      mojom::AssistantAllowedState::DISALLOWED_BY_LOCALE,
+      mojom::AssistantAllowedState::DISALLOWED_BY_FLAG,
+      mojom::AssistantAllowedState::DISALLOWED_BY_NONPRIMARY_USER,
+      mojom::AssistantAllowedState::DISALLOWED_BY_SUPERVISED_USER,
+      mojom::AssistantAllowedState::DISALLOWED_BY_INCOGNITO,
+  };
   const base::string16 kLoading(base::ASCIIToUTF16("loading"));
 
   // Iterate over every possible combination of states.
   for (mojom::VoiceInteractionState state : kStates) {
-    for (int enabled = 0; enabled <= 1; enabled++) {
-      for (int context = 0; context <= 1; context++) {
-        const bool ready = state != mojom::VoiceInteractionState::NOT_READY;
-        const bool selectable = enabled && context && ready;
+    for (mojom::AssistantAllowedState allowed_state : kAllowedStates) {
+      for (int enabled = 0; enabled <= 1; enabled++) {
+        for (int context = 0; context <= 1; context++) {
+          const bool allowed =
+              allowed_state == mojom::AssistantAllowedState::ALLOWED;
+          const bool ready = state != mojom::VoiceInteractionState::NOT_READY;
+          const bool selectable = allowed && enabled && context && ready;
 
-        Shell::Get()->voice_interaction_controller()->NotifyStatusChanged(
-            state);
-        Shell::Get()->voice_interaction_controller()->NotifySettingsEnabled(
-            enabled);
-        Shell::Get()->voice_interaction_controller()->NotifyContextEnabled(
-            context);
+          Shell::Get()->voice_interaction_controller()->NotifyStatusChanged(
+              state);
+          Shell::Get()->voice_interaction_controller()->NotifySettingsEnabled(
+              enabled);
+          Shell::Get()->voice_interaction_controller()->NotifyContextEnabled(
+              context);
+          Shell::Get()->voice_interaction_controller()->NotifyFeatureAllowed(
+              allowed_state);
 
-        std::unique_ptr<views::View> view =
-            base::WrapUnique(tool_->CreateView());
-        EXPECT_TRUE(view);
-        EXPECT_EQ(selectable, view->enabled());
+          std::unique_ptr<views::View> view =
+              base::WrapUnique(tool_->CreateView());
+          EXPECT_TRUE(view);
+          EXPECT_EQ(selectable, view->enabled());
 
-        const base::string16 label_text =
-            static_cast<HoverHighlightView*>(view.get())->text_label()->text();
+          const base::string16 label_text =
+              static_cast<HoverHighlightView*>(view.get())
+                  ->text_label()
+                  ->text();
 
-        const bool label_contains_loading =
-            label_text.find(kLoading) != base::string16::npos;
+          const bool label_contains_loading =
+              label_text.find(kLoading) != base::string16::npos;
 
-        EXPECT_EQ(enabled && context && !ready, label_contains_loading);
-        tool_->OnViewDestroyed();
+          EXPECT_EQ(allowed && enabled && context && !ready,
+                    label_contains_loading);
+          tool_->OnViewDestroyed();
+        }
       }
     }
   }
diff --git a/ash/system/screen_layout_observer_unittest.cc b/ash/system/screen_layout_observer_unittest.cc
index 9c00998..aab99c6 100644
--- a/ash/system/screen_layout_observer_unittest.cc
+++ b/ash/system/screen_layout_observer_unittest.cc
@@ -551,11 +551,18 @@
 // Test ScreenLayoutObserver with multi-mirroring enabled.
 class ScreenLayoutObserverMultiMirroringTest : public ScreenLayoutObserverTest {
  public:
-  ScreenLayoutObserverMultiMirroringTest() {
+  ScreenLayoutObserverMultiMirroringTest() = default;
+  ~ScreenLayoutObserverMultiMirroringTest() override = default;
+
+  // ScreenLayoutObserverTest:
+  void SetUp() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         ::switches::kEnableMultiMirroring);
+    ScreenLayoutObserverTest::SetUp();
   }
-  ~ScreenLayoutObserverMultiMirroringTest() override = default;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ScreenLayoutObserverMultiMirroringTest);
 };
 
 TEST_F(ScreenLayoutObserverMultiMirroringTest,
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc
index ae5b9a4..0c14304 100644
--- a/ash/test/ash_test_helper.cc
+++ b/ash/test/ash_test_helper.cc
@@ -67,7 +67,8 @@
     : ash_test_environment_(ash_test_environment),
       test_shell_delegate_(nullptr),
       dbus_thread_manager_initialized_(false),
-      bluez_dbus_manager_initialized_(false) {
+      bluez_dbus_manager_initialized_(false),
+      command_line_(std::make_unique<base::test::ScopedCommandLine>()) {
   ui::test::EnableTestConfigForPlatformWindows();
   aura::test::InitializeAuraEventGeneratorDelegate();
 }
@@ -75,7 +76,6 @@
 AshTestHelper::~AshTestHelper() = default;
 
 void AshTestHelper::SetUp(bool start_session, bool provide_local_state) {
-  command_line_ = std::make_unique<base::test::ScopedCommandLine>();
   // TODO(jamescook): Can we do this without changing command line?
   // Use the origin (1,1) so that it doesn't over
   // lap with the native mouse cursor.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 89e9ddb9..f5cbb79 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2879,6 +2879,9 @@
     if (is_java_debug || dcheck_always_on) {
       defines += [ "_DCHECK_IS_ON" ]
     }
+    if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) {
+      defines += [ "_IS_UBSAN" ]
+    }
   }
 
   java_cpp_template("base_native_libraries_gen") {
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index af4eeef1..e1b7838 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -7,9 +7,12 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.AsyncTask;
+import android.os.Build;
 import android.os.StrictMode;
 import android.os.SystemClock;
+import android.system.Os;
 
+import org.chromium.base.BuildConfig;
 import org.chromium.base.CommandLine;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
@@ -400,6 +403,7 @@
 
                     linker.finishLibraryLoad();
                 } else {
+                    setEnvForNative();
                     preloadAlreadyLocked(appContext);
                     // Load libraries using the system linker.
                     for (String library : NativeLibraries.LIBRARIES) {
@@ -547,6 +551,27 @@
         sInstance = loader;
     }
 
+    /**
+     * Configure ubsan using $UBSAN_OPTIONS. This function needs to be called before any native
+     * libraries are loaded because ubsan reads its configuration from $UBSAN_OPTIONS when the
+     * native library is loaded.
+     */
+    public static void setEnvForNative() {
+        // The setenv API was added in L. On older versions of Android, we should still see ubsan
+        // reports, but they will not have stack traces.
+        if (BuildConfig.IS_UBSAN && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            try {
+                // This value is duplicated in build/android/pylib/constants/__init__.py.
+                Os.setenv("UBSAN_OPTIONS",
+                        "print_stacktrace=1 stack_trace_format='#%n pc %o %m' "
+                                + "handle_segv=0 handle_sigbus=0 handle_sigfpe=0",
+                        true);
+            } catch (Exception e) {
+                Log.w(TAG, "failed to set UBSAN_OPTIONS", e);
+            }
+        }
+    }
+
     // Only methods needed before or during normal JNI registration are during System.OnLoad.
     // nativeLibraryLoaded is then called to register everything else.  This process is called
     // "initialization".  This method will be mapped (by generated code) to the LibraryLoaded
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index 7e7c874..827313d 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -518,6 +518,7 @@
      * Load the Linker JNI library. Throws UnsatisfiedLinkError on error.
      */
     protected static void loadLinkerJniLibrary() {
+        LibraryLoader.setEnvForNative();
         String libName = "lib" + LINKER_JNI_LIBRARY + ".so";
         if (DEBUG) {
             Log.i(TAG, "Loading " + libName);
diff --git a/base/android/java/templates/BuildConfig.template b/base/android/java/templates/BuildConfig.template
index 16f02f6..6b63584 100644
--- a/base/android/java/templates/BuildConfig.template
+++ b/base/android/java/templates/BuildConfig.template
@@ -29,6 +29,12 @@
     public static final boolean DCHECK_IS_ON = false;
 #endif
 
+#if defined(_IS_UBSAN)
+    public static final boolean IS_UBSAN = true;
+#else
+    public static final boolean IS_UBSAN = false;
+#endif
+
     // Sorted list of locales that have a compressed .pak within assets.
     // Stored as an array because AssetManager.list() is slow.
     public static final String[] COMPRESSED_LOCALES =
diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/constants/__init__.py
index 70e8688..b600b20 100644
--- a/build/android/pylib/constants/__init__.py
+++ b/build/android/pylib/constants/__init__.py
@@ -118,6 +118,8 @@
 # Configure ubsan to print stack traces in the format understood by "stack" so
 # that they will be symbolized, and disable signal handlers because they
 # interfere with the breakpad and sandbox tests.
+# This value is duplicated in
+# base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
 UBSAN_OPTIONS = (
     'print_stacktrace=1 stack_trace_format=\'#%n pc %o %m\' '
     'handle_segv=0 handle_sigbus=0 handle_sigfpe=0')
diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py
index 53033406c..3306a22 100644
--- a/build/android/pylib/local/device/local_device_gtest_run.py
+++ b/build/android/pylib/local/device/local_device_gtest_run.py
@@ -44,8 +44,6 @@
 _EXTRA_TEST_LIST = (
     'org.chromium.native_test.NativeTestInstrumentationTestRunner'
         '.TestList')
-_EXTRA_UBSAN_OPTIONS = (
-    'org.chromium.native_test.NativeTest.UBSAN_OPTIONS')
 
 _MAX_SHARD_SIZE = 256
 _SECONDS_TO_NANOS = int(1e9)
@@ -174,9 +172,6 @@
         device.adb, dir=device.GetExternalStoragePath(), suffix='.gtest_out')
     extras[_EXTRA_STDOUT_FILE] = stdout_file.name
 
-    if self._tool != 'asan':
-      extras[_EXTRA_UBSAN_OPTIONS] = constants.UBSAN_OPTIONS
-
     if self._wait_for_java_debugger:
       cmd = ['am', 'set-debug-app', '-w', self._package]
       device.RunShellCommand(cmd, check_return=True)
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index c4a5adc..4fbfb56 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -2038,6 +2038,9 @@
         if (is_java_debug || dcheck_always_on) {
           defines += [ "_DCHECK_IS_ON" ]
         }
+        if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) {
+          defines += [ "_IS_UBSAN" ]
+        }
         defines += [
           "COMPRESSED_LOCALE_LIST=" +
               "@FileArg($_rebased_build_config:compressed_locales_java_list)",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNavigateTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNavigateTest.java
index dca670f..f9c1ec2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNavigateTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNavigateTest.java
@@ -17,6 +17,7 @@
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
 import org.chromium.chrome.R;
@@ -29,6 +30,8 @@
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.OmniboxTestUtils;
 import org.chromium.chrome.test.util.browser.TabLoadObserver;
+import org.chromium.content.browser.test.util.Criteria;
+import org.chromium.content.browser.test.util.CriteriaHelper;
 import org.chromium.content.browser.test.util.KeyUtils;
 import org.chromium.net.test.EmbeddedTestServer;
 import org.chromium.ui.test.util.UiRestriction;
@@ -83,19 +86,14 @@
         // Focus URL bar.
         final UrlBar urlBar = (UrlBar) mActivity.findViewById(R.id.url_bar);
         Assert.assertNotNull("urlBar is null", urlBar);
-        ThreadUtils.runOnUiThreadBlocking(() -> {
-            urlBar.requestFocus();
-            mBottomSheet.endAnimations();
-        });
+        ThreadUtils.runOnUiThreadBlocking(() -> { urlBar.requestFocus(); });
 
-        Assert.assertEquals("Bottom sheet should be expanded.", BottomSheet.SHEET_STATE_FULL,
-                mBottomSheet.getSheetState());
+        // Verify BottomSheet is expanded.
+        CriteriaHelper.pollUiThread(
+                Criteria.equals(BottomSheet.SHEET_STATE_FULL, () -> mBottomSheet.getSheetState()));
 
         // Navigate to the URL.
-        ThreadUtils.runOnUiThreadBlocking(() -> {
-            urlBar.setText(url);
-            mBottomSheet.endAnimations();
-        });
+        ThreadUtils.runOnUiThreadBlocking(() -> { urlBar.setText(url); });
         final LocationBarLayout locationBar =
                 (LocationBarLayout) mActivity.findViewById(R.id.location_bar);
         OmniboxTestUtils.waitForOmniboxSuggestions(locationBar);
@@ -106,7 +104,9 @@
                 InstrumentationRegistry.getInstrumentation(), urlBar, KeyEvent.KEYCODE_ENTER);
         observer.assertLoaded();
 
-        Assert.assertEquals("Bottom sheet should be closed.", BottomSheet.SHEET_STATE_PEEK,
+        // TODO(mdjones): Add polling to wait for sheet to be done animating, once it properly
+        // animates on close. crbug.com/764860.
+        Assert.assertEquals("The bottom sheet should be closed.", BottomSheet.SHEET_STATE_PEEK,
                 mBottomSheet.getSheetState());
 
         // The URL has been set before the page notification was broadcast, so it is safe to access.
@@ -127,6 +127,8 @@
     @Test
     @MediumTest
     @Feature({"Navigation", "Main"})
+    //@RetryOnFailure
+    @DisabledTest(message = "crbug.com/793534")
     public void testNavigate() throws Exception {
         String url = mTestServer.getURL("/chrome/test/data/android/navigate/simple.html");
         String result = typeInOmniboxAndNavigate(url, "Simple");
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index b13d6da8..8e17bc9 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -10773,13 +10773,13 @@
         "<ph name="CHROME_EXTENSION_NAME">$1<ex>Chrome extension name</ex></ph>" wants to connect
       </message>
       <message name="IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT" desc="The label shown to the user to inform them that no USB devices were found matching the requirements that the application provided.">
-        No compatible devices found
+        No compatible devices found.
       </message>
       <message name="IDS_DEVICE_CHOOSER_DEVICE_NAME_WITH_ID" desc="To distinguish devices with the same name, the device chooser shows the device name with id.">
         <ph name="DEVICE_NAME">$1<ex>device name</ex></ph> (<ph name="DEVICE_ID">$2<ex>device id</ex></ph>)
       </message>
       <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT" desc="The label shown to the user to inform them that no Bluetooth devices were found matching the requirements that the application provided.">
-        No compatible devices found
+        No compatible devices found.
       </message>
       <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ADAPTER_OFF" desc="Text of a link the user can click to get help information when Bluetooth adapter is turned off.">
         <ph name="TURN_ON_BLUETOOTH_LINK">$1<ex>Turn on Bluetooth</ex></ph> to allow pairing
@@ -10790,8 +10790,17 @@
       <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING" desc="The label that is used to indicate the chooser is scanning for Bluetooth devices.">
         ''' while scanning for devices...
       </message>
-      <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN" desc="Text of a link the user can click to start a new scan for Bluetooth devices.">
-        re-scan
+      <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN" desc="Text of a button the user can click to start a new scan for Bluetooth devices.">
+        Re-scan
+      </message>
+      <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN_TOOLTIP" desc="Tooltip for the button that lets the user start a new scan for Bluetooth devices.">
+        Re-scan Bluetooth devices
+      </message>
+      <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING_LABEL" desc="Text on label that indicates a scan for Bluetooth devices is in progress.">
+        Scanning...
+      </message>
+      <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING_LABEL_TOOLTIP" desc="Tooltip for the label that shows while scanning for Bluetooth devices.">
+        Scanning for Bluetooth devices...
       </message>
       <message name="IDS_BLUETOOTH_DEVICE_CHOOSER_PAIR_BUTTON_TEXT" desc="Label on the button that closes the Bluetooth chooser popup and pairs the selected device.">
         Pair
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 430bb7ba..6a9a566e1 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2660,7 +2660,7 @@
     {"enable-bulk-printers", flag_descriptions::kBulkPrintersName,
      flag_descriptions::kBulkPrintersDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(features::kBulkPrinters)},
-    {"enable-cros-component", flag_descriptions::kCrOSComponentName,
+    {"disable-cros-component", flag_descriptions::kCrOSComponentName,
      flag_descriptions::kCrOSComponentDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(features::kCrOSComponent)},
     {"enable-cros-container", flag_descriptions::kCrOSContainerName,
diff --git a/chrome/browser/chooser_controller/chooser_controller.cc b/chrome/browser/chooser_controller/chooser_controller.cc
index ff464cac..a792688f 100644
--- a/chrome/browser/chooser_controller/chooser_controller.cc
+++ b/chrome/browser/chooser_controller/chooser_controller.cc
@@ -65,10 +65,14 @@
   return false;
 }
 
-bool ChooserController::ShouldShowFootnoteView() const {
+bool ChooserController::ShouldShowHelpButton() const {
   return true;
 }
 
+bool ChooserController::ShouldShowReScanButton() const {
+  return false;
+}
+
 bool ChooserController::AllowMultipleSelection() const {
   return false;
 }
diff --git a/chrome/browser/chooser_controller/chooser_controller.h b/chrome/browser/chooser_controller/chooser_controller.h
index 6c620874..72530af 100644
--- a/chrome/browser/chooser_controller/chooser_controller.h
+++ b/chrome/browser/chooser_controller/chooser_controller.h
@@ -64,14 +64,17 @@
   // Returns the text to be displayed in the chooser title.
   base::string16 GetTitle() const;
 
-  // Returns if the chooser needs to show an icon before the text.
+  // Returns whether the chooser needs to show an icon before the text.
   // For WebBluetooth, it is a signal strength icon.
   virtual bool ShouldShowIconBeforeText() const;
 
-  // Returns if the chooser needs to show a footnote view.
-  virtual bool ShouldShowFootnoteView() const;
+  // Returns whether the chooser needs to show a help button.
+  virtual bool ShouldShowHelpButton() const;
 
-  // Returns if the chooser allows multiple items to be selected.
+  // Returns whether the chooser needs to show a button to re-scan for devices.
+  virtual bool ShouldShowReScanButton() const;
+
+  // Returns whether the chooser allows multiple items to be selected.
   virtual bool AllowMultipleSelection() const;
 
   // Returns the text to be displayed in the chooser when there are no options.
diff --git a/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.cc b/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.cc
index 918415bf..66487fc6 100644
--- a/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.cc
+++ b/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.cc
@@ -22,6 +22,10 @@
   return true;
 }
 
+bool FakeBluetoothChooserController::ShouldShowReScanButton() const {
+  return true;
+}
+
 base::string16 FakeBluetoothChooserController::GetNoOptionsText() const {
   return l10n_util::GetStringUTF16(
       IDS_BLUETOOTH_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT);
diff --git a/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.h b/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.h
index e62f219..5ab6c47 100644
--- a/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.h
+++ b/chrome/browser/chooser_controller/fake_bluetooth_chooser_controller.h
@@ -52,6 +52,7 @@
 
   // ChooserController:
   bool ShouldShowIconBeforeText() const override;
+  bool ShouldShowReScanButton() const override;
   base::string16 GetNoOptionsText() const override;
   base::string16 GetOkButtonLabel() const override;
   size_t NumOptions() const override;
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
index 792baec..d67ddd4 100644
--- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
+++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h"
 
+#include "ash/public/cpp/ash_switches.h"
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
@@ -83,6 +84,10 @@
 
 // static
 bool WebUIScreenLocker::ShouldPreloadLockScreen() {
+  // Only preload webui lock screen when it is used.
+  if (!ash::switches::IsUsingWebUiLock())
+    return false;
+
   // Bail for mash because IdleDetector/UserActivityDetector does not work
   // properly there.
   // TODO(xiyuan): Revisit after http://crbug.com/626899.
diff --git a/chrome/browser/chromeos/net/tether_notification_presenter.cc b/chrome/browser/chromeos/net/tether_notification_presenter.cc
index 77bf60ac..8e1a120 100644
--- a/chrome/browser/chromeos/net/tether_notification_presenter.cc
+++ b/chrome/browser/chromeos/net/tether_notification_presenter.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/app/vector_icons/vector_icons.h"
+#include "chrome/browser/notifications/notification_display_service.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
@@ -20,7 +21,6 @@
 #include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/gfx/vector_icon_types.h"
-#include "ui/message_center/message_center.h"
 #include "ui/message_center/notification.h"
 #include "ui/message_center/notification_types.h"
 #include "ui/message_center/notifier_id.h"
@@ -39,11 +39,33 @@
 
 const char kTetherSettingsSubpage[] = "networks?type=Tether";
 
+// Handles clicking and closing of a notification via callbacks.
+class TetherNotificationDelegate
+    : public message_center::HandleNotificationClickDelegate {
+ public:
+  TetherNotificationDelegate(ButtonClickCallback click,
+                             base::RepeatingClosure close)
+      : HandleNotificationClickDelegate(click), close_callback_(close) {}
+
+  // NotificationDelegate:
+  void Close(bool by_user) override {
+    if (!close_callback_.is_null())
+      close_callback_.Run();
+  }
+
+ private:
+  ~TetherNotificationDelegate() override = default;
+
+  base::RepeatingClosure close_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(TetherNotificationDelegate);
+};
+
 class SettingsUiDelegateImpl
     : public TetherNotificationPresenter::SettingsUiDelegate {
  public:
-  SettingsUiDelegateImpl() {}
-  ~SettingsUiDelegateImpl() override {}
+  SettingsUiDelegateImpl() = default;
+  ~SettingsUiDelegateImpl() override = default;
 
   void ShowSettingsSubPageForProfile(Profile* profile,
                                      const std::string& sub_page) override {
@@ -65,26 +87,6 @@
       normalized_signal_strength);
 }
 
-std::unique_ptr<message_center::Notification> CreateNotification(
-    const std::string& id,
-    const base::string16& title,
-    const base::string16& message,
-    const gfx::ImageSkia& small_image,
-    const message_center::RichNotificationData& rich_notification_data =
-        message_center::RichNotificationData()) {
-  auto notification = base::MakeUnique<message_center::Notification>(
-      message_center::NotificationType::NOTIFICATION_TYPE_SIMPLE, id, title,
-      message, gfx::Image() /* image */, base::string16() /* display_source */,
-      GURL() /* origin_url */,
-      message_center::NotifierId(
-          message_center::NotifierId::NotifierType::SYSTEM_COMPONENT,
-          ash::system_notifier::kNotifierTether),
-      rich_notification_data, nullptr);
-  notification->SetSystemPriority();
-  notification->set_small_image(gfx::Image(small_image));
-  return notification;
-}
-
 }  // namespace
 
 // static
@@ -110,19 +112,13 @@
 
 TetherNotificationPresenter::TetherNotificationPresenter(
     Profile* profile,
-    message_center::MessageCenter* message_center,
     NetworkConnect* network_connect)
     : profile_(profile),
-      message_center_(message_center),
       network_connect_(network_connect),
       settings_ui_delegate_(base::WrapUnique(new SettingsUiDelegateImpl())),
-      weak_ptr_factory_(this) {
-  message_center_->AddObserver(this);
-}
+      weak_ptr_factory_(this) {}
 
-TetherNotificationPresenter::~TetherNotificationPresenter() {
-  message_center_->RemoveObserver(this);
-}
+TetherNotificationPresenter::~TetherNotificationPresenter() = default;
 
 void TetherNotificationPresenter::NotifyPotentialHotspotNearby(
     const cryptauth::RemoteDevice& remote_device,
@@ -162,13 +158,13 @@
           IDS_TETHER_NOTIFICATION_WIFI_AVAILABLE_MULTIPLE_DEVICES_TITLE),
       l10n_util::GetStringUTF16(
           IDS_TETHER_NOTIFICATION_WIFI_AVAILABLE_MULTIPLE_DEVICES_MESSAGE),
-      GetImageForSignalStrength(kMediumSignalStrength)));
+      GetImageForSignalStrength(kMediumSignalStrength),
+      {} /* rich_notification_data */));
 }
 
 NotificationPresenter::PotentialHotspotNotificationState
 TetherNotificationPresenter::GetPotentialHotspotNotificationState() {
-  if (!message_center_->FindVisibleNotificationById(
-          kPotentialHotspotNotificationId)) {
+  if (showing_notification_id_ != kPotentialHotspotNotificationId) {
     return NotificationPresenter::PotentialHotspotNotificationState::
         NO_HOTSPOT_NOTIFICATION_SHOWN;
   }
@@ -196,7 +192,8 @@
                                  base::ASCIIToUTF16(device_name)),
       l10n_util::GetStringFUTF16(IDS_TETHER_NOTIFICATION_SETUP_REQUIRED_MESSAGE,
                                  base::ASCIIToUTF16(device_name)),
-      GetImageForSignalStrength(signal_strength)));
+      GetImageForSignalStrength(signal_strength),
+      {} /* rich_notification_data */));
 }
 
 void TetherNotificationPresenter::RemoveSetupRequiredNotification() {
@@ -204,12 +201,12 @@
 }
 
 void TetherNotificationPresenter::NotifyConnectionToHostFailed() {
+  const std::string id = kActiveHostNotificationId;
   PA_LOG(INFO) << "Displaying \"connection attempt failed\" notification. "
-               << "Notification ID = " << kActiveHostNotificationId;
+               << "Notification ID = " << id;
 
   ShowNotification(message_center::Notification::CreateSystemNotification(
-      message_center::NotificationType::NOTIFICATION_TYPE_SIMPLE,
-      kActiveHostNotificationId,
+      message_center::NotificationType::NOTIFICATION_TYPE_SIMPLE, id,
       l10n_util::GetStringUTF16(
           IDS_TETHER_NOTIFICATION_CONNECTION_FAILED_TITLE),
       l10n_util::GetStringUTF16(
@@ -219,7 +216,10 @@
       message_center::NotifierId(
           message_center::NotifierId::NotifierType::SYSTEM_COMPONENT,
           ash::system_notifier::kNotifierTether),
-      {} /* rich_notification_data */, nullptr /* delegate */,
+      {} /* rich_notification_data */,
+      new message_center::HandleNotificationClickDelegate(base::BindRepeating(
+          &TetherNotificationPresenter::OnNotificationClicked,
+          weak_ptr_factory_.GetWeakPtr(), id)),
       kNotificationCellularAlertIcon,
       message_center::SystemNotificationWarningLevel::WARNING));
 }
@@ -229,35 +229,53 @@
 }
 
 void TetherNotificationPresenter::OnNotificationClicked(
-    const std::string& notification_id) {
-  // Iterate through all IDs corresponding to notifications which should open
-  // the Tether settings page when clicked. If the notification ID provided
-  // exists in |kIdsWhichOpenTetherSettingsOnClick|, open settings.
-  for (size_t i = 0; i < arraysize(kIdsWhichOpenTetherSettingsOnClick); ++i) {
-    const char* const curr_clickable_id = kIdsWhichOpenTetherSettingsOnClick[i];
-    if (notification_id == curr_clickable_id) {
-      OpenSettingsAndRemoveNotification(kTetherSettingsSubpage,
-                                        notification_id);
-      return;
-    }
+    const std::string& notification_id,
+    base::Optional<int> button_index) {
+  if (button_index) {
+    DCHECK_EQ(kPotentialHotspotNotificationId, notification_id);
+    DCHECK_EQ(0, *button_index);
+    DCHECK(hotspot_nearby_device_id_);
+    PA_LOG(INFO) << "\"Potential hotspot nearby\" notification button was "
+                 << "clicked.";
+    network_connect_->ConnectToNetworkId(*hotspot_nearby_device_id_);
+    RemoveNotificationIfVisible(kPotentialHotspotNotificationId);
+    return;
   }
 
-  // Otherwise, ignore this click since it is not in the list of clickable IDs
-  // (e.g., it could have been created by another feature/application).
+  OpenSettingsAndRemoveNotification(kTetherSettingsSubpage, notification_id);
 }
 
-void TetherNotificationPresenter::OnNotificationButtonClicked(
-    const std::string& notification_id,
-    int button_index) {
-  if (notification_id != kPotentialHotspotNotificationId)
-    return;
+void TetherNotificationPresenter::OnNotificationClosed(
+    const std::string& notification_id) {
+  if (showing_notification_id_ == notification_id)
+    showing_notification_id_.clear();
+}
 
-  DCHECK(button_index == 0);
-  DCHECK(hotspot_nearby_device_id_);
-  PA_LOG(INFO) << "\"Potential hotspot nearby\" notification button was "
-               << "clicked.";
-  network_connect_->ConnectToNetworkId(*hotspot_nearby_device_id_);
-  RemoveNotificationIfVisible(kPotentialHotspotNotificationId);
+std::unique_ptr<message_center::Notification>
+TetherNotificationPresenter::CreateNotification(
+    const std::string& id,
+    const base::string16& title,
+    const base::string16& message,
+    const gfx::ImageSkia& small_image,
+    const message_center::RichNotificationData& rich_notification_data) {
+  auto notification = base::MakeUnique<message_center::Notification>(
+      message_center::NotificationType::NOTIFICATION_TYPE_SIMPLE, id, title,
+      message, gfx::Image() /* image */, base::string16() /* display_source */,
+      GURL() /* origin_url */,
+      message_center::NotifierId(
+          message_center::NotifierId::NotifierType::SYSTEM_COMPONENT,
+          ash::system_notifier::kNotifierTether),
+      rich_notification_data,
+      new TetherNotificationDelegate(
+          base::BindRepeating(
+              &TetherNotificationPresenter::OnNotificationClicked,
+              weak_ptr_factory_.GetWeakPtr(), id),
+          base::BindRepeating(
+              &TetherNotificationPresenter::OnNotificationClosed,
+              weak_ptr_factory_.GetWeakPtr(), id)));
+  notification->SetSystemPriority();
+  notification->set_small_image(gfx::Image(small_image));
+  return notification;
 }
 
 void TetherNotificationPresenter::SetSettingsUiDelegateForTesting(
@@ -267,13 +285,9 @@
 
 void TetherNotificationPresenter::ShowNotification(
     std::unique_ptr<message_center::Notification> notification) {
-  std::string notification_id = notification->id();
-  if (message_center_->FindVisibleNotificationById(notification_id)) {
-    message_center_->UpdateNotification(notification_id,
-                                        std::move(notification));
-  } else {
-    message_center_->AddNotification(std::move(notification));
-  }
+  showing_notification_id_ = notification->id();
+  NotificationDisplayService::GetForProfile(profile_)->Display(
+      NotificationHandler::Type::TRANSIENT, *notification);
 }
 
 void TetherNotificationPresenter::OpenSettingsAndRemoveNotification(
@@ -292,12 +306,8 @@
   if (notification_id == kPotentialHotspotNotificationId)
     hotspot_nearby_device_id_.reset();
 
-  if (!message_center_->FindVisibleNotificationById(notification_id))
-    return;
-
-  PA_LOG(INFO) << "Removing notification with ID \"" << notification_id
-               << "\".";
-  message_center_->RemoveNotification(notification_id, false /* by_user */);
+  NotificationDisplayService::GetForProfile(profile_)->Close(
+      NotificationHandler::Type::TRANSIENT, notification_id);
 }
 
 }  // namespace tether
diff --git a/chrome/browser/chromeos/net/tether_notification_presenter.h b/chrome/browser/chromeos/net/tether_notification_presenter.h
index fddb2a87..10d810a 100644
--- a/chrome/browser/chromeos/net/tether_notification_presenter.h
+++ b/chrome/browser/chromeos/net/tether_notification_presenter.h
@@ -17,13 +17,11 @@
 #include "chromeos/network/network_connect.h"
 #include "chromeos/network/network_state.h"
 #include "components/cryptauth/remote_device.h"
-#include "ui/message_center/message_center_observer.h"
 #include "ui/message_center/notification.h"
 
 class Profile;
 
 namespace message_center {
-class MessageCenter;
 class Notification;
 }  // namespace message_center
 
@@ -33,14 +31,11 @@
 
 // Produces notifications associated with CrOS tether network events and alerts
 // observers about interactions with those notifications.
-class TetherNotificationPresenter
-    : public NotificationPresenter,
-      public message_center::MessageCenterObserver {
+class TetherNotificationPresenter : public NotificationPresenter {
  public:
-  // Caller must ensure that |profile|, |message_center|, and |network_connect|
-  // outlive this instance.
+  // Caller must ensure that |profile| and |network_connect| outlive this
+  // instance.
   TetherNotificationPresenter(Profile* profile,
-                              message_center::MessageCenter* message_center,
                               NetworkConnect* network_connect);
   ~TetherNotificationPresenter() override;
 
@@ -58,11 +53,6 @@
   void NotifyConnectionToHostFailed() override;
   void RemoveConnectionToHostFailedNotification() override;
 
-  // message_center::MessageCenterObserver:
-  void OnNotificationClicked(const std::string& notification_id) override;
-  void OnNotificationButtonClicked(const std::string& notification_id,
-                                   int button_index) override;
-
   class SettingsUiDelegate {
    public:
     virtual ~SettingsUiDelegate() {}
@@ -84,6 +74,17 @@
   // IDs of all notifications which, when clicked, open mobile data settings.
   static const char* const kIdsWhichOpenTetherSettingsOnClick[];
 
+  void OnNotificationClicked(const std::string& notification_id,
+                             base::Optional<int> button_index);
+  void OnNotificationClosed(const std::string& notification_id);
+
+  std::unique_ptr<message_center::Notification> CreateNotification(
+      const std::string& id,
+      const base::string16& title,
+      const base::string16& message,
+      const gfx::ImageSkia& small_image,
+      const message_center::RichNotificationData& rich_notification_data);
+
   void SetSettingsUiDelegateForTesting(
       std::unique_ptr<SettingsUiDelegate> settings_ui_delegate);
   void ShowNotification(
@@ -93,9 +94,11 @@
   void RemoveNotificationIfVisible(const std::string& notification_id);
 
   Profile* profile_;
-  message_center::MessageCenter* message_center_;
   NetworkConnect* network_connect_;
 
+  // The ID of the currently showing notification.
+  std::string showing_notification_id_;
+
   std::unique_ptr<SettingsUiDelegate> settings_ui_delegate_;
 
   // The device ID of the device whose metadata is displayed in the "potential
diff --git a/chrome/browser/chromeos/net/tether_notification_presenter_unittest.cc b/chrome/browser/chromeos/net/tether_notification_presenter_unittest.cc
index cc4ab821..1f580d4 100644
--- a/chrome/browser/chromeos/net/tether_notification_presenter_unittest.cc
+++ b/chrome/browser/chromeos/net/tether_notification_presenter_unittest.cc
@@ -8,14 +8,11 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/observer_list.h"
+#include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/common/url_constants.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/cryptauth/remote_device_test_util.h"
-#include "content/public/test/test_browser_thread_bundle.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/message_center/fake_message_center.h"
-#include "ui/message_center/message_center_observer.h"
 
 namespace {
 const int kTestNetworkSignalStrength = 50;
@@ -29,71 +26,6 @@
 
 const char kTetherSettingsSubpage[] = "networks?type=Tether";
 
-class TestMessageCenter : public message_center::FakeMessageCenter {
- public:
-  TestMessageCenter() : message_center::FakeMessageCenter() {}
-  ~TestMessageCenter() override {}
-
-  void NotifyNotificationTapped(const std::string& notification_id) {
-    for (auto& observer : observer_list_) {
-      observer.OnNotificationClicked(notification_id);
-    }
-  }
-
-  void NotifyNotificationButtonTapped(const std::string& notification_id,
-                                      int button_index) {
-    for (auto& observer : observer_list_) {
-      observer.OnNotificationButtonClicked(notification_id, button_index);
-    }
-  }
-
-  size_t GetNumNotifications() { return notifications_.size(); }
-
-  // message_center::FakeMessageCenter:
-  void AddObserver(message_center::MessageCenterObserver* observer) override {
-    observer_list_.AddObserver(observer);
-  }
-
-  void RemoveObserver(
-      message_center::MessageCenterObserver* observer) override {
-    observer_list_.RemoveObserver(observer);
-  }
-
-  message_center::Notification* FindVisibleNotificationById(
-      const std::string& id) override {
-    auto iter = std::find_if(
-        notifications_.begin(), notifications_.end(),
-        [id](const std::shared_ptr<message_center::Notification> notification) {
-          return notification->id() == id;
-        });
-    return iter != notifications_.end() ? iter->get() : nullptr;
-  }
-
-  void AddNotification(
-      std::unique_ptr<message_center::Notification> notification) override {
-    notifications_.push_back(std::move(notification));
-  }
-
-  void UpdateNotification(
-      const std::string& old_id,
-      std::unique_ptr<message_center::Notification> new_notification) override {
-    RemoveNotification(old_id, false /* by_user */);
-    AddNotification(std::move(new_notification));
-  }
-
-  void RemoveNotification(const std::string& id, bool by_user) override {
-    notifications_.erase(std::find_if(
-        notifications_.begin(), notifications_.end(),
-        [id](const std::shared_ptr<message_center::Notification> notification) {
-          return notification->id() == id;
-        }));
-  }
-
- private:
-  std::vector<std::shared_ptr<message_center::Notification>> notifications_;
-  base::ObserverList<message_center::MessageCenterObserver> observer_list_;
-};
-
 cryptauth::RemoteDevice CreateTestRemoteDevice() {
   cryptauth::RemoteDevice device = cryptauth::GenerateTestRemoteDevices(1)[0];
   device.name = "testDevice";
@@ -102,7 +34,7 @@
 
 }  // namespace
 
-class TetherNotificationPresenterTest : public testing::Test {
+class TetherNotificationPresenterTest : public BrowserWithTestWindowTest {
  public:
   class TestNetworkConnect : public NetworkConnect {
    public:
@@ -162,16 +94,15 @@
   TetherNotificationPresenterTest() : test_device_(CreateTestRemoteDevice()) {}
 
   void SetUp() override {
-    message_center::MessageCenter::Initialize();
+    BrowserWithTestWindowTest::SetUp();
 
-    TestingProfile::Builder builder;
-    profile_ = builder.Build();
-    test_message_center_ = base::WrapUnique(new TestMessageCenter());
+    display_service_ =
+        std::make_unique<NotificationDisplayServiceTester>(profile());
+
     test_network_connect_ = base::WrapUnique(new TestNetworkConnect());
 
     notification_presenter_ = base::MakeUnique<TetherNotificationPresenter>(
-        profile_.get(), test_message_center_.get(),
-        test_network_connect_.get());
+        profile(), test_network_connect_.get());
 
     test_settings_ui_delegate_ = new TestSettingsUiDelegate();
     notification_presenter_->SetSettingsUiDelegateForTesting(
@@ -179,8 +110,8 @@
   }
 
   void TearDown() override {
-    profile_.reset();
-    message_center::MessageCenter::Shutdown();
+    display_service_.reset();
+    BrowserWithTestWindowTest::TearDown();
   }
 
   std::string GetActiveHostNotificationId() {
@@ -198,7 +129,7 @@
   }
 
   void VerifySettingsOpened(const std::string& expected_subpage) {
-    EXPECT_EQ(profile_.get(), test_settings_ui_delegate_->last_profile());
+    EXPECT_EQ(profile(), test_settings_ui_delegate_->last_profile());
     EXPECT_EQ(expected_subpage,
               test_settings_ui_delegate_->last_settings_subpage());
   }
@@ -208,14 +139,12 @@
     EXPECT_TRUE(test_settings_ui_delegate_->last_settings_subpage().empty());
   }
 
-  const content::TestBrowserThreadBundle thread_bundle_;
   const cryptauth::RemoteDevice test_device_;
 
-  std::unique_ptr<TestingProfile> profile_;
-  std::unique_ptr<TestMessageCenter> test_message_center_;
   std::unique_ptr<TestNetworkConnect> test_network_connect_;
   TestSettingsUiDelegate* test_settings_ui_delegate_;
   std::unique_ptr<TetherNotificationPresenter> notification_presenter_;
+  std::unique_ptr<NotificationDisplayServiceTester> display_service_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TetherNotificationPresenterTest);
@@ -223,148 +152,136 @@
 
 TEST_F(TetherNotificationPresenterTest,
        TestHostConnectionFailedNotification_RemoveProgrammatically) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetActiveHostNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetActiveHostNotificationId()));
   notification_presenter_->NotifyConnectionToHostFailed();
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetActiveHostNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetActiveHostNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetActiveHostNotificationId(), notification->id());
 
-  EXPECT_EQ(1u, test_message_center_->GetNumNotifications());
   notification_presenter_->RemoveConnectionToHostFailedNotification();
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetActiveHostNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetActiveHostNotificationId()));
 
   VerifySettingsNotOpened();
 }
 
 TEST_F(TetherNotificationPresenterTest,
        TestHostConnectionFailedNotification_TapNotification) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetActiveHostNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetActiveHostNotificationId()));
   notification_presenter_->NotifyConnectionToHostFailed();
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetActiveHostNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetActiveHostNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetActiveHostNotificationId(), notification->id());
 
   // Tap the notification.
-  test_message_center_->NotifyNotificationTapped(GetActiveHostNotificationId());
+  ASSERT_TRUE(notification->delegate());
+  notification->delegate()->Click();
   VerifySettingsOpened(kTetherSettingsSubpage);
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetActiveHostNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetActiveHostNotificationId()));
 }
 
 TEST_F(TetherNotificationPresenterTest,
        TestSetupRequiredNotification_RemoveProgrammatically) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetSetupRequiredNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetSetupRequiredNotificationId()));
   notification_presenter_->NotifySetupRequired(test_device_.name,
                                                kTestNetworkSignalStrength);
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetSetupRequiredNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetSetupRequiredNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetSetupRequiredNotificationId(), notification->id());
 
-  EXPECT_EQ(1u, test_message_center_->GetNumNotifications());
   notification_presenter_->RemoveSetupRequiredNotification();
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetSetupRequiredNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
-}
-
-TEST_F(TetherNotificationPresenterTest,
-       TestSetupRequiredNotification_TapNotification) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetSetupRequiredNotificationId()));
-  notification_presenter_->NotifySetupRequired(test_device_.name,
-                                               kTestNetworkSignalStrength);
-
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetSetupRequiredNotificationId());
-  EXPECT_TRUE(notification);
-  EXPECT_EQ(GetSetupRequiredNotificationId(), notification->id());
-
-  // Tap the notification.
-  test_message_center_->NotifyNotificationTapped(
-      GetSetupRequiredNotificationId());
-  VerifySettingsOpened(kTetherSettingsSubpage);
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetSetupRequiredNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
-}
-
-TEST_F(TetherNotificationPresenterTest,
-       TestSinglePotentialHotspotNotification_RemoveProgrammatically) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
-  notification_presenter_->NotifyPotentialHotspotNearby(
-      test_device_, kTestNetworkSignalStrength);
-
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
-  EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
-
-  notification_presenter_->RemovePotentialHotspotNotification();
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetSetupRequiredNotificationId()));
 
   VerifySettingsNotOpened();
 }
 
 TEST_F(TetherNotificationPresenterTest,
-       TestSinglePotentialHotspotNotification_TapNotification) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+       TestSetupRequiredNotification_TapNotification) {
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetSetupRequiredNotificationId()));
+  notification_presenter_->NotifySetupRequired(test_device_.name,
+                                               kTestNetworkSignalStrength);
+
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetSetupRequiredNotificationId());
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(GetSetupRequiredNotificationId(), notification->id());
+
+  // Tap the notification.
+  ASSERT_TRUE(notification->delegate());
+  notification->delegate()->Click();
+  VerifySettingsOpened(kTetherSettingsSubpage);
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetSetupRequiredNotificationId()));
+}
+
+TEST_F(TetherNotificationPresenterTest,
+       TestPotentialHotspotNotification_RemoveProgrammatically) {
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
   notification_presenter_->NotifyPotentialHotspotNearby(
       test_device_, kTestNetworkSignalStrength);
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
+  EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
+
+  notification_presenter_->RemovePotentialHotspotNotification();
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
+
+  VerifySettingsNotOpened();
+}
+
+TEST_F(TetherNotificationPresenterTest,
+       TestPotentialHotspotNotification_TapNotification) {
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
+  notification_presenter_->NotifyPotentialHotspotNearby(
+      test_device_, kTestNetworkSignalStrength);
+
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
 
   // Tap the notification.
-  test_message_center_->NotifyNotificationTapped(
-      GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification->delegate());
+  notification->delegate()->Click();
   VerifySettingsOpened(kTetherSettingsSubpage);
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
 }
 
 TEST_F(TetherNotificationPresenterTest,
        TestSinglePotentialHotspotNotification_TapNotificationButton) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
   notification_presenter_->NotifyPotentialHotspotNearby(
       test_device_, kTestNetworkSignalStrength);
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
 
   // Tap the notification's button.
-  test_message_center_->NotifyNotificationButtonTapped(
-      GetPotentialHotspotNotificationId(), 0 /* button_index */);
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
+  ASSERT_TRUE(notification->delegate());
+  notification->delegate()->ButtonClick(0);
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
 
   EXPECT_EQ(test_device_.GetDeviceId(),
             test_network_connect_->network_id_to_connect());
@@ -372,57 +289,52 @@
 
 TEST_F(TetherNotificationPresenterTest,
        TestMultiplePotentialHotspotNotification_RemoveProgrammatically) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
   notification_presenter_->NotifyMultiplePotentialHotspotsNearby();
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
 
   notification_presenter_->RemovePotentialHotspotNotification();
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
 
   VerifySettingsNotOpened();
 }
 
 TEST_F(TetherNotificationPresenterTest,
        TestMultiplePotentialHotspotNotification_TapNotification) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
   notification_presenter_->NotifyMultiplePotentialHotspotsNearby();
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
 
   // Tap the notification.
-  test_message_center_->NotifyNotificationTapped(
-      GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification->delegate());
+  notification->delegate()->Click();
   VerifySettingsOpened(kTetherSettingsSubpage);
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
-  EXPECT_EQ(0u, test_message_center_->GetNumNotifications());
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
 }
 
 TEST_F(TetherNotificationPresenterTest,
        TestPotentialHotspotNotifications_UpdatesOneNotification) {
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
   notification_presenter_->NotifyPotentialHotspotNearby(
       test_device_, kTestNetworkSignalStrength);
 
-  message_center::Notification* notification =
-      test_message_center_->FindVisibleNotificationById(
-          GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  base::Optional<message_center::Notification> notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
-  EXPECT_EQ(1u, test_message_center_->GetNumNotifications());
 
   // Simulate more device results coming in. Display the potential hotspots
   // notification for multiple devices.
@@ -430,26 +342,19 @@
 
   // The existing notification should have been updated instead of creating a
   // new one.
-  notification = test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId());
-  EXPECT_TRUE(notification);
+  notification =
+      display_service_->GetNotification(GetPotentialHotspotNotificationId());
+  ASSERT_TRUE(notification);
   EXPECT_EQ(GetPotentialHotspotNotificationId(), notification->id());
-  EXPECT_EQ(1u, test_message_center_->GetNumNotifications());
 
   notification_presenter_->RemovePotentialHotspotNotification();
-  EXPECT_FALSE(test_message_center_->FindVisibleNotificationById(
-      GetPotentialHotspotNotificationId()));
+  EXPECT_FALSE(
+      display_service_->GetNotification(GetPotentialHotspotNotificationId()));
 
   VerifySettingsNotOpened();
 }
 
 TEST_F(TetherNotificationPresenterTest,
-       TestDoesNotOpenSettingsWhenOtherNotificationClicked) {
-  test_message_center_->NotifyNotificationTapped("otherNotificationId");
-  VerifySettingsNotOpened();
-}
-
-TEST_F(TetherNotificationPresenterTest,
        TestGetPotentialHotspotNotificationState) {
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
@@ -472,8 +377,9 @@
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 SINGLE_HOTSPOT_NEARBY_SHOWN);
-  test_message_center_->NotifyNotificationTapped(
-      GetPotentialHotspotNotificationId());
+  display_service_->GetNotification(GetPotentialHotspotNotificationId())
+      ->delegate()
+      ->Click();
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 NO_HOTSPOT_NOTIFICATION_SHOWN);
@@ -484,8 +390,9 @@
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 SINGLE_HOTSPOT_NEARBY_SHOWN);
-  test_message_center_->NotifyNotificationButtonTapped(
-      GetPotentialHotspotNotificationId(), 0 /* button_index */);
+  display_service_->GetNotification(GetPotentialHotspotNotificationId())
+      ->delegate()
+      ->ButtonClick(0);
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 NO_HOTSPOT_NOTIFICATION_SHOWN);
@@ -516,8 +423,9 @@
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 MULTIPLE_HOTSPOTS_NEARBY_SHOWN);
-  test_message_center_->NotifyNotificationTapped(
-      GetPotentialHotspotNotificationId());
+  display_service_->GetNotification(GetPotentialHotspotNotificationId())
+      ->delegate()
+      ->Click();
   EXPECT_EQ(notification_presenter_->GetPotentialHotspotNotificationState(),
             NotificationPresenter::PotentialHotspotNotificationState::
                 NO_HOTSPOT_NOTIFICATION_SHOWN);
diff --git a/chrome/browser/chromeos/tether/tether_service.cc b/chrome/browser/chromeos/tether/tether_service.cc
index 4881a0a..93d54ac 100644
--- a/chrome/browser/chromeos/tether/tether_service.cc
+++ b/chrome/browser/chromeos/tether/tether_service.cc
@@ -118,7 +118,6 @@
       notification_presenter_(
           base::MakeUnique<chromeos::tether::TetherNotificationPresenter>(
               profile_,
-              message_center::MessageCenter::Get(),
               chromeos::NetworkConnect::Get())),
       remote_device_provider_(
           cryptauth::RemoteDeviceProviderImpl::Factory::NewInstance(
diff --git a/chrome/browser/download/download_danger_prompt_browsertest.cc b/chrome/browser/download/download_danger_prompt_browsertest.cc
index 7758a53..44a6f98 100644
--- a/chrome/browser/download/download_danger_prompt_browsertest.cc
+++ b/chrome/browser/download/download_danger_prompt_browsertest.cc
@@ -354,11 +354,11 @@
     danger_type_ = danger_type;
     invocation_type_ = invocation_type;
 
-    RunDialog();
+    ShowAndVerifyUi();
   }
 
  private:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ON_CALL(download_, GetURL()).WillByDefault(ReturnRef(download_url_));
     ON_CALL(download_, GetReferrerUrl())
         .WillByDefault(ReturnRef(GURL::EmptyGURL()));
@@ -389,38 +389,37 @@
 };
 
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_DangerousFile) {
+                       InvokeUi_DangerousFile) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, USER_INITIATED);
 }
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_DangerousFileFromApi) {
+                       InvokeUi_DangerousFileFromApi) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, FROM_DOWNLOAD_API);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_DangerousUrl) {
+IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest, InvokeUi_DangerousUrl) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, USER_INITIATED);
 }
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_DangerousUrlFromApi) {
+                       InvokeUi_DangerousUrlFromApi) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, FROM_DOWNLOAD_API);
 }
 
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_UncommonContent) {
+                       InvokeUi_UncommonContent) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT, USER_INITIATED);
 }
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_UncommonContentFromApi) {
+                       InvokeUi_UncommonContentFromApi) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT, FROM_DOWNLOAD_API);
 }
 
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_PotentiallyUnwanted) {
+                       InvokeUi_PotentiallyUnwanted) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED, USER_INITIATED);
 }
 IN_PROC_BROWSER_TEST_F(DownloadDangerPromptBrowserTest,
-                       InvokeDialog_PotentiallyUnwantedFromApi) {
+                       InvokeUi_PotentiallyUnwantedFromApi) {
   RunTest(content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED,
           FROM_DOWNLOAD_API);
 }
diff --git a/chrome/browser/extensions/bookmark_app_helper_browsertest.cc b/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
index ce730444e..58259a8 100644
--- a/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
+++ b/chrome/browser/extensions/bookmark_app_helper_browsertest.cc
@@ -92,7 +92,7 @@
     run_loop.Run();
   }
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ASSERT_TRUE(embedded_test_server()->Start());
 
     const std::string path = (name == "CreateWindowedPWA")
@@ -124,17 +124,17 @@
 };
 
 // Launches an installation confirmation dialog for a bookmark app.
-IN_PROC_BROWSER_TEST_F(BookmarkAppHelperTest, InvokeDialog_CreateBookmarkApp) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(BookmarkAppHelperTest, InvokeUi_CreateBookmarkApp) {
+  ShowAndVerifyUi();
 }
 
 // Launches an installation confirmation dialog for a PWA.
-IN_PROC_BROWSER_TEST_F(BookmarkAppHelperTest, InvokeDialog_CreateWindowedPWA) {
+IN_PROC_BROWSER_TEST_F(BookmarkAppHelperTest, InvokeUi_CreateWindowedPWA) {
   // The PWA dialog will be launched because manifest_test_page.html passes
   // the PWA check, but the kDesktopPWAWindowing flag must also be enabled.
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeature(features::kDesktopPWAWindowing);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/device_permissions_dialog_controller.cc b/chrome/browser/extensions/device_permissions_dialog_controller.cc
index 49f01e9..ab2136d 100644
--- a/chrome/browser/extensions/device_permissions_dialog_controller.cc
+++ b/chrome/browser/extensions/device_permissions_dialog_controller.cc
@@ -25,7 +25,7 @@
   prompt_->SetObserver(nullptr);
 }
 
-bool DevicePermissionsDialogController::ShouldShowFootnoteView() const {
+bool DevicePermissionsDialogController::ShouldShowHelpButton() const {
   return false;
 }
 
diff --git a/chrome/browser/extensions/device_permissions_dialog_controller.h b/chrome/browser/extensions/device_permissions_dialog_controller.h
index dd5fbbd..c2de2361 100644
--- a/chrome/browser/extensions/device_permissions_dialog_controller.h
+++ b/chrome/browser/extensions/device_permissions_dialog_controller.h
@@ -22,7 +22,7 @@
   ~DevicePermissionsDialogController() override;
 
   // ChooserController:
-  bool ShouldShowFootnoteView() const override;
+  bool ShouldShowHelpButton() const override;
   bool AllowMultipleSelection() const override;
   base::string16 GetNoOptionsText() const override;
   base::string16 GetOkButtonLabel() const override;
diff --git a/chrome/browser/external_protocol/external_protocol_handler.cc b/chrome/browser/external_protocol/external_protocol_handler.cc
index e621060..9faf99f 100644
--- a/chrome/browser/external_protocol/external_protocol_handler.cc
+++ b/chrome/browser/external_protocol/external_protocol_handler.cc
@@ -201,12 +201,10 @@
   if (profile_prefs) {  // May be NULL during testing.
     DictionaryPrefUpdate update_excluded_schemas_profile(
         profile_prefs, prefs::kExcludedSchemes);
-    if (!update_excluded_schemas_profile->empty()) {
-      if (state == DONT_BLOCK)
-        update_excluded_schemas_profile->SetBoolean(scheme, false);
-      else
-        update_excluded_schemas_profile->Remove(scheme, nullptr);
-    }
+    if (state == DONT_BLOCK)
+      update_excluded_schemas_profile->SetBoolean(scheme, false);
+    else
+      update_excluded_schemas_profile->Remove(scheme, nullptr);
   }
 }
 
diff --git a/chrome/browser/external_protocol/external_protocol_handler_unittest.cc b/chrome/browser/external_protocol/external_protocol_handler_unittest.cc
index 91ad01c..f2a2f8d 100644
--- a/chrome/browser/external_protocol/external_protocol_handler_unittest.cc
+++ b/chrome/browser/external_protocol/external_protocol_handler_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/external_protocol/external_protocol_handler.h"
 
 #include "base/run_loop.h"
+#include "base/values.h"
 #include "chrome/browser/prefs/browser_prefs.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -120,17 +121,13 @@
   ExternalProtocolHandlerTest() {}
 
   void SetUp() override {
-    local_state_.reset(new TestingPrefServiceSimple);
     profile_.reset(new TestingProfile());
-    RegisterLocalState(local_state_->registry());
-    TestingBrowserProcess::GetGlobal()->SetLocalState(local_state_.get());
   }
 
   void TearDown() override {
     // Ensure that g_accept_requests gets set back to true after test execution.
     ExternalProtocolHandler::PermitLaunchUrl();
     TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
-    local_state_.reset();
   }
 
   enum class Action { PROMPT, LAUNCH, BLOCK };
@@ -165,7 +162,6 @@
 
   FakeExternalProtocolHandlerDelegate delegate_;
 
-  std::unique_ptr<TestingPrefServiceSimple> local_state_;
   std::unique_ptr<TestingProfile> profile_;
 };
 
@@ -246,7 +242,6 @@
   ExternalProtocolHandler::BlockState block_state =
       ExternalProtocolHandler::GetBlockState("tel", profile_.get());
   EXPECT_EQ(ExternalProtocolHandler::UNKNOWN, block_state);
-  EXPECT_TRUE(local_state_->GetDictionary(prefs::kExcludedSchemes)->empty());
   EXPECT_TRUE(
       profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty());
 }
@@ -255,7 +250,6 @@
   ExternalProtocolHandler::BlockState block_state =
       ExternalProtocolHandler::GetBlockState("afp", profile_.get());
   EXPECT_EQ(ExternalProtocolHandler::BLOCK, block_state);
-  EXPECT_TRUE(local_state_->GetDictionary(prefs::kExcludedSchemes)->empty());
   EXPECT_TRUE(
       profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty());
 }
@@ -264,7 +258,36 @@
   ExternalProtocolHandler::BlockState block_state =
       ExternalProtocolHandler::GetBlockState("mailto", profile_.get());
   EXPECT_EQ(ExternalProtocolHandler::DONT_BLOCK, block_state);
-  EXPECT_TRUE(local_state_->GetDictionary(prefs::kExcludedSchemes)->empty());
+  EXPECT_TRUE(
+      profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty());
+}
+
+TEST_F(ExternalProtocolHandlerTest, TestSetBlockState) {
+  const char kScheme[] = "custom";
+  ExternalProtocolHandler::BlockState block_state =
+      ExternalProtocolHandler::GetBlockState(kScheme, profile_.get());
+  EXPECT_EQ(ExternalProtocolHandler::UNKNOWN, block_state);
+  EXPECT_TRUE(
+      profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty());
+
+  // Set to DONT_BLOCK, and make sure it is written to prefs.
+  ExternalProtocolHandler::SetBlockState(
+      kScheme, ExternalProtocolHandler::DONT_BLOCK, profile_.get());
+  block_state = ExternalProtocolHandler::GetBlockState(kScheme, profile_.get());
+  EXPECT_EQ(ExternalProtocolHandler::DONT_BLOCK, block_state);
+  base::Value expected_excluded_schemes(base::Value::Type::DICTIONARY);
+  expected_excluded_schemes.SetKey(kScheme, base::Value(false));
+  EXPECT_EQ(expected_excluded_schemes,
+            *profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes));
+
+  // Note: BLOCK is no longer supported (it triggers a DCHECK in SetBlockState;
+  // see https://crbug.com/724919).
+
+  // Set back to UNKNOWN, and make sure this results in an empty dictionary.
+  ExternalProtocolHandler::SetBlockState(
+      kScheme, ExternalProtocolHandler::UNKNOWN, profile_.get());
+  block_state = ExternalProtocolHandler::GetBlockState(kScheme, profile_.get());
+  EXPECT_EQ(ExternalProtocolHandler::UNKNOWN, block_state);
   EXPECT_TRUE(
       profile_->GetPrefs()->GetDictionary(prefs::kExcludedSchemes)->empty());
 }
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 385050b..ae28b0b 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2431,7 +2431,7 @@
 
 const char kCrOSComponentName[] = "Chrome OS Component";
 const char kCrOSComponentDescription[] =
-    "Enable the use of componentized escpr CUPS filter.";
+    "Disable the use of componentized escpr CUPS filter.";
 
 const char kCrOSContainerName[] = "Chrome OS Container";
 const char kCrOSContainerDescription[] =
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc
index a887674..ef3787b9 100644
--- a/chrome/browser/infobars/infobars_browsertest.cc
+++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -16,9 +16,11 @@
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/test/test_browser_ui.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/extension_dialog_auto_confirm.h"
 #include "extensions/browser/extension_registry.h"
@@ -26,6 +28,10 @@
 #include "extensions/browser/test_extension_registry_observer.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
+#if !defined(OS_CHROMEOS)
+#include "chrome/browser/ui/startup/default_browser_infobar_delegate.h"
+#endif
+
 class InfoBarsTest : public InProcessBrowserTest {
  public:
   InfoBarsTest() {}
@@ -93,3 +99,106 @@
                 browser()->tab_strip_model()->GetActiveWebContents())->
                 infobar_count());
 }
+
+namespace {
+
+// Helper to return when an InfoBar has been removed or replaced.
+class InfoBarObserver : public infobars::InfoBarManager::Observer {
+ public:
+  InfoBarObserver(infobars::InfoBarManager* manager, infobars::InfoBar* infobar)
+      : manager_(manager), infobar_(infobar) {
+    manager_->AddObserver(this);
+  }
+
+  // infobars::InfoBarManager::Observer:
+  void OnInfoBarRemoved(infobars::InfoBar* infobar, bool animate) override {
+    if (infobar != infobar_)
+      return;
+    manager_->RemoveObserver(this);
+    run_loop_.Quit();
+  }
+  void OnInfoBarReplaced(infobars::InfoBar* old_infobar,
+                         infobars::InfoBar* new_infobar) override {
+    OnInfoBarRemoved(old_infobar, false);
+  }
+
+  void WaitForRemoval() { run_loop_.Run(); }
+
+ private:
+  infobars::InfoBarManager* manager_;
+  infobars::InfoBar* infobar_;
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBarObserver);
+};
+
+}  // namespace
+
+class InfoBarUiTest : public UiBrowserTest {
+ public:
+  InfoBarUiTest() = default;
+
+  // TestBrowserUi:
+  void PreShow() override;
+  void ShowUi(const std::string& name) override;
+  bool VerifyUi() override;
+  void WaitForUserDismissal() override;
+
+ private:
+  // Returns the InfoBarService associated with the active tab.
+  InfoBarService* GetInfoBarService();
+
+  // Sets |infobars_| to a sorted (by pointer value) list of all infobars from
+  // the active tab.
+  void UpdateInfoBars();
+
+  infobars::InfoBarManager::InfoBars infobars_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBarUiTest);
+};
+
+void InfoBarUiTest::PreShow() {
+  UpdateInfoBars();
+}
+
+void InfoBarUiTest::ShowUi(const std::string& name) {
+  // TODO(pkasting): Add other infobars, and check in VerifyUi() that the
+  // correct one was shown.
+#if defined(OS_CHROMEOS)
+  ADD_FAILURE() << "This infobar is not supported on this OS.";
+#else
+  chrome::DefaultBrowserInfoBarDelegate::Create(GetInfoBarService(),
+                                                browser()->profile());
+#endif
+}
+
+bool InfoBarUiTest::VerifyUi() {
+  infobars::InfoBarManager::InfoBars old_infobars = infobars_;
+  UpdateInfoBars();
+  auto added = base::STLSetDifference<infobars::InfoBarManager::InfoBars>(
+      infobars_, old_infobars);
+  return (added.size() == 1) &&
+         (added[0]->delegate()->GetIdentifier() ==
+          infobars::InfoBarDelegate::DEFAULT_BROWSER_INFOBAR_DELEGATE);
+}
+
+void InfoBarUiTest::WaitForUserDismissal() {
+  InfoBarObserver observer(GetInfoBarService(), infobars_.front());
+  observer.WaitForRemoval();
+}
+
+InfoBarService* InfoBarUiTest::GetInfoBarService() {
+  return InfoBarService::FromWebContents(
+      browser()->tab_strip_model()->GetActiveWebContents());
+}
+
+void InfoBarUiTest::UpdateInfoBars() {
+  infobars_ = GetInfoBarService()->infobars_;
+  std::sort(infobars_.begin(), infobars_.end());
+}
+
+#if !defined(OS_CHROMEOS)
+IN_PROC_BROWSER_TEST_F(InfoBarUiTest, InvokeUi_default_browser) {
+  ShowAndVerifyUi();
+}
+#endif
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index 90ce9f3..7585605 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -450,7 +450,7 @@
     DCHECK_EQ(-1, requests_to_wait_for_);
     DCHECK(!run_loop_);
 
-    if (requests_to_wait_for >= num_requests_)
+    if (requests_to_wait_for <= num_requests_)
       return;
 
     requests_to_wait_for_ = requests_to_wait_for;
@@ -461,9 +461,7 @@
     EXPECT_EQ(num_requests_, requests_to_wait_for);
   }
 
-  // It is up to the caller to wait until all relevant requests has been
-  // created, either through calling WaitForRequests or some other manner,
-  // before calling this method.
+  // Returns the total number of requests handled thus far.
   int32_t num_requests() const {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     return num_requests_;
@@ -707,7 +705,6 @@
   // Have to wait for it, since the search page does not depend on having
   // sent the tracking request.
   WaitForRequests(2);
-  EXPECT_EQ(2, num_requests());
 
   // Check the path and query string.
   std::string url;
@@ -752,7 +749,6 @@
   // to wait for the tracking request, since the new error page does not depend
   // on it.
   WaitForRequests(3);
-  EXPECT_EQ(3, num_requests());
 }
 
 // Test that the reload button on a DNS error page works after a same document
@@ -796,7 +792,6 @@
   // to wait for the tracking request, since the new error page does not depend
   // on it.
   WaitForRequests(3);
-  EXPECT_EQ(3, num_requests());
 }
 
 // Test that clicking links on a DNS error page works.
@@ -834,7 +829,6 @@
   // to make sure to wait the tracking request, since the new page does not
   // depend on it.
   WaitForRequests(2);
-  EXPECT_EQ(2, num_requests());
 }
 
 // Test that a DNS error occuring in an iframe does not result in showing
diff --git a/chrome/browser/notifications/stub_notification_display_service.cc b/chrome/browser/notifications/stub_notification_display_service.cc
index c2140b2..ade292b 100644
--- a/chrome/browser/notifications/stub_notification_display_service.cc
+++ b/chrome/browser/notifications/stub_notification_display_service.cc
@@ -175,7 +175,8 @@
     std::unique_ptr<NotificationCommon::Metadata> metadata) {
   // This mimics notification replacement behaviour; the Close() method on a
   // notification's delegate is not meant to be invoked in this situation.
-  Close(notification_type, notification.id());
+  RemoveNotification(notification_type, notification.id(), false /* by_user */,
+                     true /* silent */);
 
   NotificationHandler* handler = GetNotificationHandler(notification_type);
   if (notification_type == NotificationHandler::Type::TRANSIENT)
@@ -193,14 +194,8 @@
 void StubNotificationDisplayService::Close(
     NotificationHandler::Type notification_type,
     const std::string& notification_id) {
-  notifications_.erase(
-      std::remove_if(
-          notifications_.begin(), notifications_.end(),
-          [notification_type, notification_id](const NotificationData& data) {
-            return data.type == notification_type &&
-                   data.notification.id() == notification_id;
-          }),
-      notifications_.end());
+  RemoveNotification(notification_type, notification_id, false /* by_user */,
+                     false /* silent */);
 }
 
 void StubNotificationDisplayService::GetDisplayed(
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc
index 29c09a9..3f77775 100644
--- a/chrome/browser/password_manager/password_manager_browsertest.cc
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc
@@ -3518,23 +3518,20 @@
   histograms.ExpectTotalCount(kHistogram, 0);
 }
 
-// Harness for showing dialogs as part of the DialogBrowserTest suite. Allows
-// the dialogs to be shown interactively when invoked with, e.g.,
-//   browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-//       --dialog=PasswordManagerDialogBrowserTest.InvokeDialog_normal.
+// Harness for showing dialogs as part of the DialogBrowserTest suite.
 class PasswordManagerDialogBrowserTest
     : public SupportsTestDialog<PasswordManagerBrowserTestBase> {
  public:
   PasswordManagerDialogBrowserTest() = default;
 
-  // SupportsTestDialog:
+  // SupportsTestUi:
   void SetUp() override {
-    // Secondary UI needs to be enabled before ShowDialog for the test to work.
+    // Secondary UI needs to be enabled before ShowUi for the test to work.
     UseMdOnly();
-    SupportsTestDialog::SetUp();
+    SupportsTestUi::SetUp();
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     // Note regarding flakiness: LocationBarBubbleDelegateView::ShowForReason()
     // uses ShowInactive() unless the bubble is invoked with reason ==
     // USER_GESTURE. This means that, so long as these dialogs are not triggered
@@ -3561,8 +3558,8 @@
   DISALLOW_COPY_AND_ASSIGN(PasswordManagerDialogBrowserTest);
 };
 
-IN_PROC_BROWSER_TEST_F(PasswordManagerDialogBrowserTest, InvokeDialog_normal) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PasswordManagerDialogBrowserTest, InvokeUi_normal) {
+  ShowAndVerifyUi();
 }
 
 // Verify that password manager ignores passwords on forms injected into
diff --git a/chrome/browser/permissions/permission_request_manager_browsertest.cc b/chrome/browser/permissions/permission_request_manager_browsertest.cc
index fb9ce5d2..6db3857 100644
--- a/chrome/browser/permissions/permission_request_manager_browsertest.cc
+++ b/chrome/browser/permissions/permission_request_manager_browsertest.cc
@@ -110,7 +110,7 @@
   PermissionRequest* MakePermissionRequest(ContentSettingsType permission);
 
   // TestBrowserDialog:
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
   // Holds requests that do not delete themselves.
   std::vector<std::unique_ptr<PermissionRequest>> owned_requests_;
@@ -143,7 +143,7 @@
   return owned_requests_.back().get();
 }
 
-void PermissionDialogTest::ShowDialog(const std::string& name) {
+void PermissionDialogTest::ShowUi(const std::string& name) {
   constexpr const char* kMultipleName = "multiple";
   constexpr struct {
     const char* name;
@@ -470,7 +470,7 @@
 // that could result in permission bubbles not being dismissed, and a problem
 // referencing a temporary drag window. See http://crbug.com/754552.
 IN_PROC_BROWSER_TEST_F(PermissionDialogTest, SwitchBrowserWindow) {
-  ShowDialog("geolocation");
+  ShowUi("geolocation");
   TabStripModel* strip = browser()->tab_strip_model();
 
   // Drag out into a dragging window. E.g. see steps in [BrowserWindowController
@@ -494,54 +494,53 @@
 }
 
 // Host wants to run flash.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_flash) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_flash) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to know your location.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_geolocation) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_geolocation) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to show notifications.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_notifications) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_notifications) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to use your microphone.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_mic) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_mic) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to use your camera.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_camera) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_camera) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to open email links.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_protocol_handlers) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_protocol_handlers) {
+  ShowAndVerifyUi();
 }
 
 // Host wants to use your MIDI devices.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_midi) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_midi) {
+  ShowAndVerifyUi();
 }
 
 // Shows a permissions bubble with multiple requests.
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeDialog_multiple) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, InvokeUi_multiple) {
+  ShowAndVerifyUi();
 }
 
 // CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER is ChromeOS only.
 #if defined(OS_CHROMEOS)
-#define MAYBE_InvokeDialog_protected_media InvokeDialog_protected_media
+#define MAYBE_InvokeUi_protected_media InvokeUi_protected_media
 #else
-#define MAYBE_InvokeDialog_protected_media DISABLED_InvokeDialog_protected_media
+#define MAYBE_InvokeUi_protected_media DISABLED_InvokeUi_protected_media
 #endif
-IN_PROC_BROWSER_TEST_F(PermissionDialogTest,
-                       MAYBE_InvokeDialog_protected_media) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PermissionDialogTest, MAYBE_InvokeUi_protected_media) {
+  ShowAndVerifyUi();
 }
 
 }  // anonymous namespace
diff --git a/chrome/browser/resources/interventions_internals/index.css b/chrome/browser/resources/interventions_internals/index.css
index b06a5b42..295eddc7 100644
--- a/chrome/browser/resources/interventions_internals/index.css
+++ b/chrome/browser/resources/interventions_internals/index.css
@@ -60,6 +60,14 @@
   float: right;
 }
 
+#expand-log-button {
+  float: right;
+}
+
+#collapse-log-button {
+  float: right;
+}
+
 .hidden-tab {
   display: none;
   padding: 12px;
diff --git a/chrome/browser/resources/interventions_internals/index.html b/chrome/browser/resources/interventions_internals/index.html
index da429f2..91dbe087 100644
--- a/chrome/browser/resources/interventions_internals/index.html
+++ b/chrome/browser/resources/interventions_internals/index.html
@@ -59,6 +59,8 @@
       <input type="text" id="log-search-bar"
           placeholder="Search for something ...">
       <button id="clear-log-button" type="button">Clear logs</button>
+      <button id="collapse-log-button" type="button">Collapse all</button>
+      <button id="expand-log-button" type="button">Expand all</button>
       <table id="message-logs-table">
         <tr>
           <th class="log-time" id="time-table-header">Time</th>
diff --git a/chrome/browser/resources/interventions_internals/index.js b/chrome/browser/resources/interventions_internals/index.js
index 7969b9e..9b3906779 100644
--- a/chrome/browser/resources/interventions_internals/index.js
+++ b/chrome/browser/resources/interventions_internals/index.js
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 /** The columns that are used to find rows that contain the keyword. */
-const KEY_COLUMNS = ['log-type', 'log-description', 'log-url'];
 const ENABLE_BLACKLIST_BUTTON = 'Enable Blacklist';
 const IGNORE_BLACKLIST_BUTTON = 'Ignore Blacklist';
 const IGNORE_BLACKLIST_MESSAGE = 'Blacklist decisions are ignored.';
@@ -12,6 +11,19 @@
 window.logTableMap = {};
 
 /**
+ * Helper method to pad number, used for time format.
+ * @param {number} value The original number.
+ * @param {number} length The desired number length.
+ */
+function getPaddedValue(value, length) {
+  let result = '' + value;
+  while (result.length < length) {
+    result = '0' + result;
+  }
+  return result;
+}
+
+/**
  * Convert milliseconds to human readable date/time format.
  * The return format will be "MM/dd/YYYY hh:mm:ss.sss"
  * @param {number} time Time in millisecond since Unix Epoch.
@@ -26,8 +38,11 @@
   };
 
   let dateString = date.toLocaleDateString('en-US', options);
-  return dateString + ' ' + date.getHours() + ':' + date.getMinutes() + ':' +
-      date.getSeconds() + '.' + date.getMilliseconds();
+  let hour = getPaddedValue(date.getHours(), 2);
+  let min = getPaddedValue(date.getMinutes(), 2);
+  let sec = getPaddedValue(date.getSeconds(), 2);
+  let millisec = getPaddedValue(date.getMilliseconds(), 3);
+  return dateString + ' ' + hour + ':' + min + ':' + sec + '.' + millisec;
 }
 
 /**
@@ -95,6 +110,32 @@
 }
 
 /**
+ * Helper method to expand all logs in the message-logs-table.
+ */
+function expandAllLogs() {
+  let rows = $('message-logs-table').rows;
+  for (let i = 1; i < rows.length; i++) {
+    if (rows[i].className.includes('expansion-row')) {
+      rows[i].className = rows[i].className.replace('hide', 'show');
+      rows[i - 1].querySelector('.arrow').className = 'arrow up';
+    }
+  }
+}
+
+/**
+ * Helper method to collapse all logs in the message-logs-table.
+ */
+function collapseAllLogs() {
+  let rows = $('message-logs-table').rows;
+  for (let i = 1; i < rows.length; i++) {
+    if (rows[i].className.includes('expansion-row')) {
+      rows[i].className = rows[i].className.replace('show', 'hide');
+      rows[i - 1].querySelector('.arrow').className = 'arrow down';
+    }
+  }
+}
+
+/**
  * Update the |pageId| log message group. Copy the main row that contains the
  * most updated log message of the group to the expansion row, and update the
  * current main row with new info.
@@ -270,22 +311,46 @@
   $('log-search-bar').addEventListener('keyup', () => {
     let keyword = $('log-search-bar').value.toUpperCase();
     let rows = $('message-logs-table').rows;
+    expandAllLogs();
 
     for (let i = 1; i < rows.length; i++) {
-      let row = rows[i];
-      let found = KEY_COLUMNS.some((column) => {
-        let cell = row.querySelector('.' + column);
-        if (!cell) {
-          return keyword == '';
+      rows[i].style.display =
+          rows[i].textContent.toUpperCase().includes(keyword) ? '' : 'none';
+
+      let subtable = rows[i].querySelector('.expansion-logs-table');
+      if (subtable) {
+        for (let i = 0; i < subtable.rows.length; i++) {
+          subtable.rows[i].style.display =
+              subtable.rows[i].textContent.toUpperCase().includes(keyword) ?
+              '' :
+              'none';
         }
-        return cell.textContent.toUpperCase().includes(keyword);
-      });
-      row.style.display = found ? '' : 'none';
+      }
     }
   });
 }
 
 /**
+ * Initialize the button to expand all logs data, and collapse all logs.
+ */
+function setupExpandLogs() {
+  // Expand all button.
+  $('expand-log-button').addEventListener('click', () => {
+    expandAllLogs();
+    $('collapse-log-button').style.display = '';
+    $('expand-log-button').style.display = 'none';
+  });
+
+  // Collapse all button.
+  $('collapse-log-button').style.display = 'none';
+  $('collapse-log-button').addEventListener('click', () => {
+    collapseAllLogs();
+    $('collapse-log-button').style.display = 'none';
+    $('expand-log-button').style.display = '';
+  });
+}
+
+/**
  * Create and add a copy to clipboard button to a given node.
  *
  * @param {string} text The text that will be copied to the clipboard.
@@ -495,11 +560,6 @@
     nqeCol.setAttribute('class', 'nqe-value-column');
     nqeCol.textContent = type;
     nqeRow.appendChild(nqeCol);
-
-    // Insert ECT changed message to message-logs-table.
-    insertMessageRowToMessageLogTable(
-        now, 'ECT Changed', 'Effective Connection Type changed to ' + type,
-        '' /* URL */, 0 /* pageId */);
   },
 };
 
@@ -612,6 +672,7 @@
   setupTabControl();
   setupLogSearch();
   setupLogClear();
+  setupExpandLogs();
   let pageHandler = null;
   let pageImpl = null;
 
diff --git a/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc b/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc
index 6453113..22a9f839 100644
--- a/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc
+++ b/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc
@@ -15,7 +15,7 @@
   AskGoogleForSuggestionsDialogTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     std::unique_ptr<SpellingBubbleModel> model =
         base::MakeUnique<SpellingBubbleModel>(
             browser()->profile(),
@@ -33,15 +33,13 @@
 
 #if !defined(OS_MACOSX)
 // Initially disabled except on Mac due to http://crbug.com/683808.
-#define MAYBE_InvokeDialog_default DISABLED_InvokeDialog_default
+#define MAYBE_InvokeUi_default DISABLED_InvokeUi_default
 #else
-#define MAYBE_InvokeDialog_default InvokeDialog_default
+#define MAYBE_InvokeUi_default InvokeUi_default
 #endif
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=AskGoogleForSuggestionsDialogTest.InvokeDialog_default
+// Test that calls ShowUi("default").
 IN_PROC_BROWSER_TEST_F(AskGoogleForSuggestionsDialogTest,
-                       MAYBE_InvokeDialog_default) {
-  RunDialog();
+                       MAYBE_InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc b/chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc
index bf2e23b..5b625a2 100644
--- a/chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc
+++ b/chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc
@@ -145,7 +145,7 @@
     delegate_.reset(new TestCardUnmaskDelegate());
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     CardUnmaskPromptView* dialog =
         CreateCardUnmaskPromptView(controller(), contents());
     CreditCard card = test::GetMaskedServerCard();
@@ -183,38 +183,35 @@
   DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViewBrowserTest);
 };
 
-// Note: Although the following tests all just call RunDialog(), they execute
-// different behavior based on the test name's suffix. See ShowDialog().
-
-IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, InvokeDialog_expired) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, InvokeUi_expired) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, InvokeDialog_valid) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, InvokeUi_valid) {
+  ShowAndVerifyUi();
 }
 
 // This dialog will show a temporary error when Confirm is clicked.
 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest,
-                       InvokeDialog_valid_TemporaryError) {
-  RunDialog();
+                       InvokeUi_valid_TemporaryError) {
+  ShowAndVerifyUi();
 }
 
 // This dialog will show a permanent error when Confirm is clicked.
 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest,
-                       InvokeDialog_valid_PermanentError) {
-  RunDialog();
+                       InvokeUi_valid_PermanentError) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest, DisplayUI) {
-  ShowDialog(kExpiryExpired);
+  ShowUi(kExpiryExpired);
 }
 
 // Makes sure the user can close the dialog while the verification success
 // message is showing.
 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest,
                        EarlyCloseAfterSuccess) {
-  ShowDialog(kExpiryExpired);
+  ShowUi(kExpiryExpired);
   controller()->OnUnmaskResponse(base::ASCIIToUTF16("123"),
                                  base::ASCIIToUTF16("10"),
                                  base::ASCIIToUTF16("2020"), false);
@@ -236,7 +233,7 @@
 // https://crbug.com/484376
 IN_PROC_BROWSER_TEST_F(CardUnmaskPromptViewBrowserTest,
                        CloseTabWhileDialogShowing) {
-  ShowDialog(kExpiryExpired);
+  ShowUi(kExpiryExpired);
   // Simulate AutofillManager (the delegate in production code) being destroyed
   // before CardUnmaskPromptViewBridge::OnConstrainedWindowClosed() is called.
   FreeDelegate();
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_browsertest.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_browsertest.cc
index 5898906..23dd38b 100644
--- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_browsertest.cc
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_browsertest.cc
@@ -37,7 +37,7 @@
   }
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     content::WebContents* web_contents =
         browser()->tab_strip_model()->GetActiveWebContents();
 
@@ -69,28 +69,26 @@
 };
 
 // Invokes a bubble asking the user if they want to save a credit card locally.
-// See test_browser_dialog.h for instructions on how to run.
-IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest, InvokeDialog_Local) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest, InvokeUi_Local) {
+  ShowAndVerifyUi();
 }
 
 // Invokes a bubble asking the user if they want to save a credit card to the
-// server. See test_browser_dialog.h for instructions on how to run.
-IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest, InvokeDialog_Server) {
-  RunDialog();
+// server.
+IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest, InvokeUi_Server) {
+  ShowAndVerifyUi();
 }
 
 // Invokes a bubble asking the user if they want to save a credit card to the
-// server, with an added CVC step. See test_browser_dialog.h for instructions on
-// how to run.
+// server, with an added CVC step.
 IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest,
-                       InvokeDialog_Server_WithCvcStep) {
-  RunDialog();
+                       InvokeUi_Server_WithCvcStep) {
+  ShowAndVerifyUi();
 }
 
 // Tests that opening a new tab will hide the save card bubble.
 IN_PROC_BROWSER_TEST_F(SaveCardBubbleControllerImplTest, NewTabHidesDialog) {
-  ShowDialog("Local");
+  ShowUi("Local");
   EXPECT_NE(nullptr, controller()->save_card_bubble_view());
   // Open a new tab page in the foreground.
   ui_test_utils::NavigateToURLWithDisposition(
diff --git a/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.cc b/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.cc
index ae8a004..7112521 100644
--- a/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.cc
+++ b/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.cc
@@ -48,6 +48,10 @@
   return true;
 }
 
+bool BluetoothChooserController::ShouldShowReScanButton() const {
+  return true;
+}
+
 base::string16 BluetoothChooserController::GetNoOptionsText() const {
   return l10n_util::GetStringUTF16(
       IDS_BLUETOOTH_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT);
diff --git a/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.h b/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.h
index a3daa026..9a0529e5 100644
--- a/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.h
+++ b/chrome/browser/ui/bluetooth/bluetooth_chooser_controller.h
@@ -29,6 +29,7 @@
 
   // ChooserController:
   bool ShouldShowIconBeforeText() const override;
+  bool ShouldShowReScanButton() const override;
   base::string16 GetNoOptionsText() const override;
   base::string16 GetOkButtonLabel() const override;
   size_t NumOptions() const override;
diff --git a/chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.mm b/chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.mm
index 19b2c60..4cdf22b 100644
--- a/chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.mm
+++ b/chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.mm
@@ -449,7 +449,7 @@
     // Help button.
     CGFloat helpButtonWidth = 0.0f;
     CGFloat helpButtonHeight = 0.0f;
-    if (chooserController_->ShouldShowFootnoteView()) {
+    if (chooserController_->ShouldShowHelpButton()) {
       helpButton_ =
           [self createHyperlinkButtonWithText:
                     l10n_util::GetNSStringF(
@@ -478,14 +478,14 @@
     CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX;
     CGFloat scrollViewHeight =
         kChooserHeight - 2 * kMarginY -
-        (chooserController_->ShouldShowFootnoteView() ? 4 * kVerticalPadding
-                                                      : 2 * kVerticalPadding) -
+        (chooserController_->ShouldShowHelpButton() ? 4 * kVerticalPadding
+                                                    : 2 * kVerticalPadding) -
         titleHeight - cancelButtonHeight - helpButtonHeight;
     CGFloat scrollViewOriginX = kMarginX;
     CGFloat scrollViewOriginY =
         kMarginY + helpButtonHeight +
-        (chooserController_->ShouldShowFootnoteView() ? 3 * kVerticalPadding
-                                                      : kVerticalPadding) +
+        (chooserController_->ShouldShowHelpButton() ? 3 * kVerticalPadding
+                                                    : kVerticalPadding) +
         cancelButtonHeight;
     NSRect scrollFrame = NSMakeRect(scrollViewOriginX, scrollViewOriginY,
                                     scrollViewWidth, scrollViewHeight);
@@ -564,8 +564,8 @@
                                   connectButtonWidth;
     CGFloat cancelButtonOriginY =
         kMarginY + helpButtonHeight +
-        (chooserController_->ShouldShowFootnoteView() ? 2 * kVerticalPadding
-                                                      : 0.0f);
+        (chooserController_->ShouldShowHelpButton() ? 2 * kVerticalPadding
+                                                    : 0.0f);
     [cancelButton_
         setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)];
     [self addSubview:cancelButton_];
@@ -579,7 +579,7 @@
     [connectButton_ setEnabled:NO];
     [self addSubview:connectButton_];
 
-    if (chooserController_->ShouldShowFootnoteView()) {
+    if (chooserController_->ShouldShowHelpButton()) {
       // Separator.
       CGFloat separatorOriginX = 0.0f;
       separatorOriginY_ = kMarginY + helpButtonHeight + kVerticalPadding;
diff --git a/chrome/browser/ui/collected_cookies_browsertest.cc b/chrome/browser/ui/collected_cookies_browsertest.cc
index 2d79848..66e801f 100644
--- a/chrome/browser/ui/collected_cookies_browsertest.cc
+++ b/chrome/browser/ui/collected_cookies_browsertest.cc
@@ -24,7 +24,7 @@
   CollectedCookiesTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ASSERT_TRUE(embedded_test_server()->Start());
 
     // Disable cookies.
@@ -62,16 +62,14 @@
   DISALLOW_COPY_AND_ASSIGN(CollectedCookiesTestMd);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=CollectedCookiesTestMd.InvokeDialog_default
-IN_PROC_BROWSER_TEST_F(CollectedCookiesTestMd, InvokeDialog_default) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(CollectedCookiesTestMd, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 // If this crashes on Windows, use http://crbug.com/79331
 IN_PROC_BROWSER_TEST_F(CollectedCookiesTest, DoubleDisplay) {
-  ShowDialog(std::string());
+  ShowUi(std::string());
 
   // Click on the info link a second time.
   content::WebContents* web_contents =
@@ -81,7 +79,7 @@
 
 // If this crashes on Windows, use http://crbug.com/79331
 IN_PROC_BROWSER_TEST_F(CollectedCookiesTest, NavigateAway) {
-  ShowDialog(std::string());
+  ShowUi(std::string());
 
   // Navigate to another page.
   ui_test_utils::NavigateToURL(
diff --git a/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc b/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc
index 64e5f3c..43a49c21 100644
--- a/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc
+++ b/chrome/browser/ui/extensions/extension_installed_bubble_browsertest.cc
@@ -37,7 +37,7 @@
       std::unique_ptr<base::DictionaryValue> extra_keys = nullptr);
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
   BubbleController* GetExtensionBubbleControllerFromManager(
       BubbleManager* manager) const {
@@ -81,7 +81,7 @@
   return bubble;
 }
 
-void ExtensionInstalledBubbleBrowserTest::ShowDialog(const std::string& name) {
+void ExtensionInstalledBubbleBrowserTest::ShowUi(const std::string& name) {
   // Default to Manifest::COMPONENT to test all anchoring locations. Without
   // this, a page action is added automatically, which will always be the
   // preferred anchor.
@@ -107,38 +107,36 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_BrowserAction) {
-  RunDialog();
+                       InvokeUi_BrowserAction) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_PageAction) {
-  RunDialog();
+                       InvokeUi_PageAction) {
+  ShowAndVerifyUi();
 }
 
 // Test anchoring to the app menu.
 IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_InstalledByDefault) {
-  RunDialog();
+                       InvokeUi_InstalledByDefault) {
+  ShowAndVerifyUi();
 }
 
 // Test anchoring to the omnibox.
-IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_Omnibox) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest, InvokeUi_Omnibox) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_SignInPromo) {
-  RunDialog();
+                       InvokeUi_SignInPromo) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
-                       InvokeDialog_NoAction) {
+IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest, InvokeUi_NoAction) {
   // Sign in to supppress the signin promo.
   SigninManagerFactory::GetForProfile(browser()->profile())
       ->SetAuthenticatedAccountInfo("test", "test@example.com");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleBrowserTest,
diff --git a/chrome/browser/ui/global_error/global_error_browsertest.cc b/chrome/browser/ui/global_error/global_error_browsertest.cc
index d62c355..9cdc39c4 100644
--- a/chrome/browser/ui/global_error/global_error_browsertest.cc
+++ b/chrome/browser/ui/global_error/global_error_browsertest.cc
@@ -76,13 +76,13 @@
   }
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(GlobalErrorBubbleTest);
 };
 
-void GlobalErrorBubbleTest::ShowDialog(const std::string& name) {
+void GlobalErrorBubbleTest::ShowUi(const std::string& name) {
   content::WindowedNotificationObserver global_errors_updated(
       chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED,
       base::Bind([](const content::NotificationSource& source,
@@ -177,41 +177,41 @@
 }
 
 IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest,
-                       InvokeDialog_ExtensionDisabledGlobalError) {
-  RunDialog();
+                       InvokeUi_ExtensionDisabledGlobalError) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest,
-                       InvokeDialog_ExtensionDisabledGlobalErrorRemote) {
-  RunDialog();
+                       InvokeUi_ExtensionDisabledGlobalErrorRemote) {
+  ShowAndVerifyUi();
 }
 
 // This shows a non-persistent dialog during a RunLoop::RunUntilIdle(), so it's
 // not possible to guarantee that events to dismiss the dialog are not processed
 // as well. Disable by default to prevent flakiness in browser_tests.
 IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest,
-                       DISABLED_InvokeDialog_ExtensionGlobalError) {
-  RunDialog();
+                       DISABLED_InvokeUi_ExtensionGlobalError) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest,
-                       InvokeDialog_ExternalInstallBubbleAlert) {
+                       InvokeUi_ExternalInstallBubbleAlert) {
   extensions::FeatureSwitch::ScopedOverride prompt(
       extensions::FeatureSwitch::prompt_for_external_extensions(), true);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 // RecoveryInstallGlobalError only exists on Windows and Mac.
 #if defined(OS_WIN) || defined(OS_MACOSX)
 IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest,
-                       InvokeDialog_RecoveryInstallGlobalError) {
-  RunDialog();
+                       InvokeUi_RecoveryInstallGlobalError) {
+  ShowAndVerifyUi();
 }
 #endif
 
 // Signin global errors never happon on ChromeOS.
 #if !defined(OS_CHROMEOS)
-IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest, InvokeDialog_SigninGlobalError) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(GlobalErrorBubbleTest, InvokeUi_SigninGlobalError) {
+  ShowAndVerifyUi();
 }
 #endif
diff --git a/chrome/browser/ui/test/browser_dialog_browsertest.cc b/chrome/browser/ui/test/browser_ui_browsertest.cc
similarity index 67%
rename from chrome/browser/ui/test/browser_dialog_browsertest.cc
rename to chrome/browser/ui/test/browser_ui_browsertest.cc
index d3d7759..9aa2130 100644
--- a/chrome/browser/ui/test/browser_dialog_browsertest.cc
+++ b/chrome/browser/ui/test/browser_ui_browsertest.cc
@@ -7,51 +7,51 @@
 #include "base/test/launcher/test_launcher.h"
 #include "base/test/test_switches.h"
 #include "base/test/test_timeouts.h"
-#include "chrome/browser/ui/test/test_browser_dialog.h"
+#include "build/build_config.h"
+#include "chrome/browser/ui/test/test_browser_ui.h"
 #include "content/public/common/content_switches.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/compositor/compositor_switches.h"
 
 namespace {
 
-// Switch for BrowserDialogTest.Invoke to spawn a subprocess testing the
-// provided argument under a consistent setup.
-constexpr const char kDialogSwitch[] = "dialog";
+// Switch for BrowserUiTest.Invoke to spawn a subprocess testing the provided
+// argument under a consistent setup.
+constexpr const char kUiSwitch[] = "ui";
 
-// Pattern to search in test names that indicate support for dialog testing.
-constexpr const char kDialogPattern[] = "InvokeDialog_";
+// Pattern to search in test names that indicate support for UI testing.
+constexpr const char kUiPattern[] = "InvokeUi_";
 
 }  // namespace
 
-// Adds a browser_test entry point into the dialog testing framework. Without a
-// --dialog specified, just lists the available dialogs and exits.
-TEST(BrowserDialogTest, Invoke) {
+// Adds a browser_test entry point into the UI testing framework. Without a
+// --ui specified, just lists the available UIs and exits.
+TEST(BrowserUiTest, Invoke) {
   const base::CommandLine& invoker = *base::CommandLine::ForCurrentProcess();
-  const std::string dialog_name = invoker.GetSwitchValueASCII(kDialogSwitch);
+  const std::string ui_name = invoker.GetSwitchValueASCII(kUiSwitch);
 
-  std::set<std::string> dialog_cases;
+  std::set<std::string> ui_cases;
   const testing::UnitTest* unit_test = testing::UnitTest::GetInstance();
   for (int i = 0; i < unit_test->total_test_case_count(); ++i) {
     const testing::TestCase* test_case = unit_test->GetTestCase(i);
     for (int j = 0; j < test_case->total_test_count(); ++j) {
       const char* name = test_case->GetTestInfo(j)->name();
-      if (strstr(name, kDialogPattern))
-        dialog_cases.insert(test_case->name() + std::string(".") + name);
+      if (strstr(name, kUiPattern))
+        ui_cases.insert(test_case->name() + std::string(".") + name);
     }
   }
 
-  if (dialog_name.empty()) {
+  if (ui_name.empty()) {
     std::string case_list;
-    for (const std::string& name : dialog_cases)
+    for (const std::string& name : ui_cases)
       case_list += "\t" + name + "\n";
-    VLOG(0) << "\nPass one of the following after --" << kDialogSwitch << "=\n"
+    VLOG(0) << "\nPass one of the following after --" << kUiSwitch << "=\n"
             << case_list;
     return;
   }
 
-  auto it = dialog_cases.find(dialog_name);
-  ASSERT_NE(it, dialog_cases.end()) << "Dialog '" << dialog_name
-                                    << "' not found.";
+  auto it = ui_cases.find(ui_name);
+  ASSERT_NE(it, ui_cases.end()) << "UI '" << ui_name << "' not found.";
 
   // Don't create test output for the subprocess (the paths will conflict).
   base::CommandLine::StringVector argv = invoker.argv();
@@ -63,8 +63,8 @@
       });
   base::CommandLine command(argv);
 
-  // Replace TestBrowserDialog.Invoke with |dialog_name|.
-  command.AppendSwitchASCII(base::kGTestFilterFlag, dialog_name);
+  // Replace TestBrowserUi.Invoke with |ui_name|.
+  command.AppendSwitchASCII(base::kGTestFilterFlag, ui_name);
 
   base::LaunchOptions options;
 
diff --git a/chrome/browser/ui/test/test_browser_dialog.cc b/chrome/browser/ui/test/test_browser_dialog.cc
index d6af0f39..95ede0a 100644
--- a/chrome/browser/ui/test/test_browser_dialog.cc
+++ b/chrome/browser/ui/test/test_browser_dialog.cc
@@ -4,19 +4,12 @@
 
 #include "chrome/browser/ui/test/test_browser_dialog.h"
 
-#include "base/command_line.h"
+#include "base/logging.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
-#include "base/test/gtest_util.h"
-#include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "chrome/browser/platform_util.h"
-#include "chrome/common/chrome_features.h"
-#include "ui/base/ui_base_features.h"
-#include "ui/views/test/widget_test.h"
-#include "ui/views/widget/widget.h"
-#include "ui/views/widget/widget_observer.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 #if defined(OS_CHROMEOS)
 #include "ash/public/cpp/config.h"
@@ -28,121 +21,102 @@
 #include "chrome/browser/ui/test/test_browser_dialog_mac.h"
 #endif
 
+#if defined(TOOLKIT_VIEWS)
+#include "ui/views/test/widget_test.h"
+#include "ui/views/widget/widget_observer.h"
+#endif
+
 namespace {
 
-// An automatic action for WidgetCloser to post to the RunLoop.
-// TODO(tapted): Explore asynchronous Widget::Close() and DialogClientView::
-// {Accept,Cancel}Window() approaches to test other dialog lifetimes.
-enum class DialogAction {
-  INTERACTIVE,  // Run interactively.
-  CLOSE_NOW,    // Call Widget::CloseNow().
-  CLOSE,        // Call Widget::Close().
-};
-
-// Helper to break out of the nested run loop that runs a test dialog.
-class WidgetCloser : public views::WidgetObserver {
+#if defined(TOOLKIT_VIEWS)
+// Helper to return when a Widget has been closed.
+// TODO(pkasting): This is pretty similar to views::test::WidgetClosingObserver
+// in ui/views/test/widget_test.h but keys off widget destruction rather than
+// closing.  Can the two be combined?
+class WidgetCloseObserver : public views::WidgetObserver {
  public:
-  WidgetCloser(views::Widget* widget, DialogAction action)
-      : action_(action), widget_(widget), weak_ptr_factory_(this) {
+  explicit WidgetCloseObserver(views::Widget* widget) : widget_(widget) {
     widget->AddObserver(this);
-    if (action == DialogAction::INTERACTIVE)
-      return;
-
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(&WidgetCloser::CloseAction,
-                                  weak_ptr_factory_.GetWeakPtr()));
   }
 
-  // WidgetObserver:
+  // views::WidgetObserver:
   void OnWidgetDestroyed(views::Widget* widget) override {
     widget_->RemoveObserver(this);
     widget_ = nullptr;
     run_loop_.Quit();
   }
 
-  void Wait() { run_loop_.Run(); }
+  void WaitForDestroy() { run_loop_.Run(); }
+
+ protected:
+  views::Widget* widget() { return widget_; }
 
  private:
-  void CloseAction() {
-    if (!widget_)
-      return;
+  views::Widget* widget_;
+  base::RunLoop run_loop_;
 
-    switch (action_) {
-      case DialogAction::CLOSE_NOW:
-        widget_->CloseNow();
-        break;
-      case DialogAction::CLOSE:
-        widget_->Close();
-        break;
-      case DialogAction::INTERACTIVE:
-        NOTREACHED();
-        break;
-    }
+  DISALLOW_COPY_AND_ASSIGN(WidgetCloseObserver);
+};
+
+// Helper to close a Widget.  Inherits from WidgetCloseObserver since regardless
+// of whether the close is done synchronously, we always want callers to wait
+// for it to complete.
+class WidgetCloser : public WidgetCloseObserver {
+ public:
+  WidgetCloser(views::Widget* widget, bool async)
+      : WidgetCloseObserver(widget) {
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(&WidgetCloser::CloseWidget,
+                                  weak_ptr_factory_.GetWeakPtr(), async));
   }
 
-  base::RunLoop run_loop_;
-  const DialogAction action_;
-  views::Widget* widget_;
+ private:
+  void CloseWidget(bool async) {
+    if (!widget())
+      return;
 
-  base::WeakPtrFactory<WidgetCloser> weak_ptr_factory_;
+    if (async)
+      widget()->Close();
+    else
+      widget()->CloseNow();
+  }
+
+  base::WeakPtrFactory<WidgetCloser> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(WidgetCloser);
 };
-
-// Extracts the |name| argument for ShowDialog() from the current test case.
-// E.g. for InvokeDialog_name (or DISABLED_InvokeDialog_name) returns "name".
-std::string NameFromTestCase() {
-  const std::string name = base::TestNameWithoutDisabledPrefix(
-      testing::UnitTest::GetInstance()->current_test_info()->name());
-  std::string::size_type underscore = name.find('_');
-  return underscore == std::string::npos ? std::string()
-                                         : name.substr(underscore + 1);
-}
+#endif  // defined(TOOLKIT_VIEWS)
 
 }  // namespace
 
-TestBrowserDialog::TestBrowserDialog() {}
+TestBrowserDialog::TestBrowserDialog() = default;
+TestBrowserDialog::~TestBrowserDialog() = default;
 
-void TestBrowserDialog::RunDialog() {
+void TestBrowserDialog::PreShow() {
+// The rest of this class assumes the child dialog is toolkit-views. So, for
+// Mac, it will only work when MD for secondary UI is enabled. Without this, a
+// Cocoa dialog will be created, which TestBrowserDialog doesn't support.
+// Force kSecondaryUiMd on Mac to get coverage on the bots. Leave it optional
+// elsewhere so that the non-MD dialog can be invoked to compare.
 #if defined(OS_MACOSX)
-  // The rest of this method assumes the child dialog is toolkit-views. So, for
-  // Mac, it will only work when MD for secondary UI is enabled. Without this, a
-  // Cocoa dialog will be created, which TestBrowserDialog doesn't support.
-  // Force kSecondaryUiMd on Mac to get coverage on the bots. Leave it optional
-  // elsewhere so that the non-MD dialog can be invoked to compare. Note that
-  // since SetUp() has already been called, some parts of the toolkit may
-  // already be initialized without MD - this is just to ensure Cocoa dialogs
-  // are not selected.
-  base::test::ScopedFeatureList enable_views_on_mac_always;
-  enable_views_on_mac_always.InitWithFeatures(
-      {features::kSecondaryUiMd, features::kShowAllDialogsWithViewsToolkit},
-      {});
+  // Note that since SetUp() has already been called, some parts of the toolkit
+  // may already be initialized without MD - this is just to ensure Cocoa
+  // dialogs are not selected.
+  UseMdOnly();
 #endif
 
-  views::Widget::Widgets widgets_before =
-      views::test::WidgetTest::GetAllWidgets();
-#if defined(OS_CHROMEOS)
-  // GetAllWidgets() uses AuraTestHelper to find the aura root window, but
-  // that's not used on browser_tests, so ask ash. Under mash the MusClient
-  // provides the list of root windows, so this isn't needed.
-  if (chromeos::GetAshConfig() != ash::Config::MASH) {
-    views::Widget::GetAllChildWidgets(ash::Shell::GetPrimaryRootWindow(),
-                                      &widgets_before);
-  }
-#endif  // OS_CHROMEOS
+  UpdateWidgets();
+}
 
-  ShowDialog(NameFromTestCase());
-  views::Widget::Widgets widgets_after =
-      views::test::WidgetTest::GetAllWidgets();
-#if defined(OS_CHROMEOS)
-  if (chromeos::GetAshConfig() != ash::Config::MASH) {
-    views::Widget::GetAllChildWidgets(ash::Shell::GetPrimaryRootWindow(),
-                                      &widgets_after);
-  }
-#endif  // OS_CHROMEOS
+// This can return false if no dialog was shown, if the dialog shown wasn't a
+// toolkit-views dialog, or if more than one child dialog was shown.
+bool TestBrowserDialog::VerifyUi() {
+#if defined(TOOLKIT_VIEWS)
+  views::Widget::Widgets widgets_before = widgets_;
+  UpdateWidgets();
 
-  auto added = base::STLSetDifference<std::vector<views::Widget*>>(
-      widgets_after, widgets_before);
+  auto added =
+      base::STLSetDifference<views::Widget::Widgets>(widgets_, widgets_before);
 
   if (added.size() > 1) {
     // Some tests create a standalone window to anchor a dialog. In those cases,
@@ -151,38 +125,57 @@
       return !widget->widget_delegate()->AsDialogDelegate();
     });
   }
+  widgets_ = added;
 
-  // This can fail if no dialog was shown, if the dialog shown wasn't a toolkit-
-  // views dialog, or if more than one child dialog was shown.
-  ASSERT_EQ(1u, added.size());
+  return added.size() == 1;
+#else
+  NOTIMPLEMENTED();
+  return false;
+#endif
+}
 
-  DialogAction action = DialogAction::CLOSE_NOW;
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          internal::kInteractiveSwitch)) {
-    action = DialogAction::INTERACTIVE;
-  } else if (AlwaysCloseAsynchronously()) {
-    // TODO(tapted): Iterate over close methods when non-interactive for greater
-    // test coverage.
-    action = DialogAction::CLOSE;
-  }
-
-  WidgetCloser closer(added[0], action);
+void TestBrowserDialog::WaitForUserDismissal() {
 #if defined(OS_MACOSX)
   internal::TestBrowserDialogInteractiveSetUp();
 #endif
-  closer.Wait();
+
+#if defined(TOOLKIT_VIEWS)
+  ASSERT_FALSE(widgets_.empty());
+  WidgetCloseObserver observer(*widgets_.begin());
+  observer.WaitForDestroy();
+#else
+  NOTIMPLEMENTED();
+#endif
 }
 
-void TestBrowserDialog::UseMdOnly() {
-#if defined(OS_MACOSX)
-  maybe_enable_md_.InitWithFeatures(
-      {features::kSecondaryUiMd, features::kShowAllDialogsWithViewsToolkit},
-      {});
+void TestBrowserDialog::DismissUi() {
+#if defined(TOOLKIT_VIEWS)
+  ASSERT_FALSE(widgets_.empty());
+  WidgetCloser closer(*widgets_.begin(), AlwaysCloseAsynchronously());
+  closer.WaitForDestroy();
 #else
-  maybe_enable_md_.InitWithFeatures({features::kSecondaryUiMd}, {});
+  NOTIMPLEMENTED();
 #endif
 }
 
 bool TestBrowserDialog::AlwaysCloseAsynchronously() {
+  // TODO(tapted): Iterate over close methods for greater test coverage.
   return false;
 }
+
+void TestBrowserDialog::UpdateWidgets() {
+#if defined(TOOLKIT_VIEWS)
+  widgets_ = views::test::WidgetTest::GetAllWidgets();
+#if defined(OS_CHROMEOS)
+  // GetAllWidgets() uses AuraTestHelper to find the aura root window, but
+  // that's not used on browser_tests, so ask ash. Under mash the MusClient
+  // provides the list of root windows, so this isn't needed.
+  if (chromeos::GetAshConfig() != ash::Config::MASH) {
+    views::Widget::GetAllChildWidgets(ash::Shell::GetPrimaryRootWindow(),
+                                      &widgets_);
+  }
+#endif  // OS_CHROMEOS
+#else
+  NOTIMPLEMENTED();
+#endif
+}
diff --git a/chrome/browser/ui/test/test_browser_dialog.h b/chrome/browser/ui/test/test_browser_dialog.h
index 459b157c..6c7445d2 100644
--- a/chrome/browser/ui/test/test_browser_dialog.h
+++ b/chrome/browser/ui/test/test_browser_dialog.h
@@ -5,72 +5,28 @@
 #ifndef CHROME_BROWSER_UI_TEST_TEST_BROWSER_DIALOG_H_
 #define CHROME_BROWSER_UI_TEST_TEST_BROWSER_DIALOG_H_
 
-#include <string>
-#include <utility>
-#include <vector>
-
 #include "base/macros.h"
-#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/ui/test/test_browser_ui.h"
 #include "chrome/test/base/in_process_browser_test.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/native_widget_types.h"
 
-// TestBrowserDialog provides a way to register an InProcessBrowserTest testing
-// harness with a framework that invokes Chrome browser dialogs in a consistent
-// way. It optionally provides a way to invoke dialogs "interactively". This
-// allows screenshots to be generated easily, with the same test data, to assist
-// with UI review. It also provides a registry of dialogs so they can be
-// systematically checked for subtle changes and regressions.
-//
-// To use TestBrowserDialog, a test harness should inherit from
-// DialogBrowserTest rather than InProcessBrowserTest. If the dialog under test
-// has only a single mode of operation, the only other requirement on the test
-// harness is an override:
-//
-// class FooDialogTest : public DialogBrowserTest {
-//  public:
-//   ..
-//   // DialogBrowserTest:
-//   void ShowDialog(const std::string& name) override {
-//     /* Show dialog attached to browser() and leave it open. */
-//   }
-//   ..
-// };
-//
-// then in the foo_dialog_browsertest.cc, define any number of
-//
-// IN_PROC_BROWSER_TEST_F(FooDialogTest, InvokeDialog_name) {
-//   RunDialog();
-// }
-//
-// The string after "InvokeDialog_" (here, "name") is the argument given to
-// ShowDialog(). In a regular test suite run, RunDialog() shows the dialog and
-// immediately closes it (after ensuring it was actually created).
-//
-// To get a list of all available dialogs, run the `BrowserDialogTest.Invoke`
-// test case without other arguments. I.e.
-//
-//   browser_tests --gtest_filter=BrowserDialogTest.Invoke
-//
-// Dialogs listed can be shown interactively using the --dialog argument. E.g.
-//
-//   browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-//       --dialog=FooDialogTest.InvokeDialog_name
-class TestBrowserDialog {
+#if defined(TOOLKIT_VIEWS)
+#include "ui/views/widget/widget.h"
+#endif
+
+// A dialog-specific subclass of TestBrowserUi, which will verify that a test
+// showed a single dialog.
+class TestBrowserDialog : public TestBrowserUi {
  protected:
   TestBrowserDialog();
+  ~TestBrowserDialog() override;
 
-  // Runs the dialog whose name corresponds to the current test case.
-  void RunDialog();
+  // TestBrowserUi:
+  void PreShow() override;
+  bool VerifyUi() override;
+  void WaitForUserDismissal() override;
+  void DismissUi() override;
 
-  // Convenience method to force-enable features::kSecondaryUiMd for this test
-  // on all platforms. This should be called in an override of SetUp().
-  void UseMdOnly();
-
-  // Show the dialog corresponding to |name| and leave it open.
-  virtual void ShowDialog(const std::string& name) = 0;
-
-  // Whether to always close asynchronously using Widget::Close(). This covers
+  // Whether to close asynchronously using Widget::Close(). This covers
   // codepaths relying on DialogDelegate::Close(), which isn't invoked by
   // Widget::CloseNow(). Dialogs should support both, since the OS can initiate
   // the destruction of dialogs, e.g., during logoff which bypass
@@ -78,31 +34,20 @@
   virtual bool AlwaysCloseAsynchronously();
 
  private:
-  base::test::ScopedFeatureList maybe_enable_md_;
+#if defined(TOOLKIT_VIEWS)
+  // Stores the current widgets in |widgets_|.
+  void UpdateWidgets();
+
+  // The widgets present before/after showing UI.
+  views::Widget::Widgets widgets_;
+#endif  // defined(TOOLKIT_VIEWS)
 
   DISALLOW_COPY_AND_ASSIGN(TestBrowserDialog);
 };
 
-// Helper to mix in a TestBrowserDialog to an existing test harness. |Base|
-// must be a descendant of InProcessBrowserTest.
 template <class Base>
-class SupportsTestDialog : public Base, public TestBrowserDialog {
- protected:
-  template <class... Args>
-  explicit SupportsTestDialog(Args&&... args)
-      : Base(std::forward<Args>(args)...) {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SupportsTestDialog);
-};
+using SupportsTestDialog = SupportsTestUi<Base, TestBrowserDialog>;
 
 using DialogBrowserTest = SupportsTestDialog<InProcessBrowserTest>;
 
-namespace internal {
-
-// When present on the command line, runs the test in an interactive mode.
-constexpr const char kInteractiveSwitch[] = "interactive";
-
-}  // namespace internal
-
 #endif  // CHROME_BROWSER_UI_TEST_TEST_BROWSER_DIALOG_H_
diff --git a/chrome/browser/ui/test/test_browser_dialog_mac.h b/chrome/browser/ui/test/test_browser_dialog_mac.h
index eb817b8..c82595ad 100644
--- a/chrome/browser/ui/test/test_browser_dialog_mac.h
+++ b/chrome/browser/ui/test/test_browser_dialog_mac.h
@@ -7,7 +7,11 @@
 
 namespace internal {
 
-// Platform dependent fixture for TestBrowserDialog.
+// Platform dependent fixture for TestBrowserDialog.  browser_tests is not built
+// as an .app bundle, so windows from it cannot normally be activated.  But for
+// interactive tests, dialogs need to be activated.  This hacks the process type
+// so that they can be, and activates the application in case something already
+// tried (but failed) to activate it before this.
 void TestBrowserDialogInteractiveSetUp();
 
 }  // namespace internal
diff --git a/chrome/browser/ui/test/test_browser_ui.cc b/chrome/browser/ui/test/test_browser_ui.cc
new file mode 100644
index 0000000..9d8cef0
--- /dev/null
+++ b/chrome/browser/ui/test/test_browser_ui.cc
@@ -0,0 +1,54 @@
+// Copyright 2017 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/ui/test/test_browser_ui.h"
+
+#include "base/command_line.h"
+#include "base/test/gtest_util.h"
+#include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
+#include "chrome/common/chrome_features.h"
+#include "ui/base/ui_base_features.h"
+
+namespace {
+
+// Extracts the |name| argument for ShowUi() from the current test case name.
+// E.g. for InvokeUi_name (or DISABLED_InvokeUi_name) returns "name".
+std::string NameFromTestCase() {
+  const std::string name = base::TestNameWithoutDisabledPrefix(
+      testing::UnitTest::GetInstance()->current_test_info()->name());
+  size_t underscore = name.find('_');
+  return underscore == std::string::npos ? std::string()
+                                         : name.substr(underscore + 1);
+}
+
+}  // namespace
+
+TestBrowserUi::TestBrowserUi() = default;
+TestBrowserUi::~TestBrowserUi() = default;
+
+void TestBrowserUi::ShowAndVerifyUi() {
+  PreShow();
+  ShowUi(NameFromTestCase());
+  ASSERT_TRUE(VerifyUi());
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          internal::kInteractiveSwitch))
+    WaitForUserDismissal();
+  else
+    DismissUi();
+}
+
+void TestBrowserUi::UseMdOnly() {
+  if (enable_md_)
+    return;
+
+  enable_md_ = std::make_unique<base::test::ScopedFeatureList>();
+  enable_md_->InitWithFeatures(
+#if defined(OS_MACOSX)
+      {features::kSecondaryUiMd, features::kShowAllDialogsWithViewsToolkit},
+#else
+      {features::kSecondaryUiMd},
+#endif
+      {});
+}
diff --git a/chrome/browser/ui/test/test_browser_ui.h b/chrome/browser/ui/test/test_browser_ui.h
new file mode 100644
index 0000000..57d1f9fb
--- /dev/null
+++ b/chrome/browser/ui/test/test_browser_ui.h
@@ -0,0 +1,136 @@
+// Copyright 2017 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_UI_TEST_TEST_BROWSER_UI_H_
+#define CHROME_BROWSER_UI_TEST_TEST_BROWSER_UI_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "chrome/test/base/in_process_browser_test.h"
+
+namespace base {
+namespace test {
+class ScopedFeatureList;
+}  // namespace test
+}  // namespace base
+
+// TestBrowserUi provides a way to register an InProcessBrowserTest testing
+// harness with a framework that invokes Chrome browser UI in a consistent way.
+// It optionally provides a way to invoke UI "interactively". This allows
+// screenshots to be generated easily, with the same test data, to assist with
+// UI review. It also provides a UI registry so pieces of UI can be
+// systematically checked for subtle changes and regressions.
+//
+// To use TestBrowserUi, a test harness should inherit from UiBrowserTest rather
+// than InProcessBrowserTest, then provide some overrides:
+//
+// class FooUiTest : public UiBrowserTest {
+//  public:
+//   ..
+//   // UiBrowserTest:
+//   void ShowUi(const std::string& name) override {
+//     /* Show Ui attached to browser() and leave it open. */
+//   }
+//
+//   bool VerifyUi() override {
+//     /* Return true if the UI was successfully shown. */
+//   }
+//
+//   void WaitForUserDismissal() override {
+//     /* Block until the user closes the UI. */
+//   }
+//   ..
+// };
+//
+// Further overrides are available for tests which need to do work before
+// showing any UI or when closing in non-interactive mode.  For tests whose UI
+// is a dialog, there's also the TestBrowserDialog class, which provides all but
+// ShowUi() already; see test_browser_dialog.h.
+//
+// The test may then define any number of cases for individual pieces of UI:
+//
+// IN_PROC_BROWSER_TEST_F(FooUiTest, InvokeUi_name) {
+//   // Perform optional setup here; then:
+//   ShowAndVerifyUi();
+// }
+//
+// The string after "InvokeUi_" (here, "name") is the argument given to
+// ShowUi(). In a regular test suite run, ShowAndVerifyUi() shows the UI and
+// immediately closes it (after ensuring it was actually created).
+//
+// To get a list of all available UI, run the "BrowserUiTest.Invoke" test case
+// without other arguments, i.e.:
+//
+//   browser_tests --gtest_filter=BrowserUiTest.Invoke
+//
+// UI listed can be shown interactively using the --ui argument. E.g.
+//
+//   browser_tests --gtest_filter=BrowserUiTest.Invoke --interactive
+//       --ui=FooUiTest.InvokeUi_name
+class TestBrowserUi {
+ protected:
+  TestBrowserUi();
+  virtual ~TestBrowserUi();
+
+  // Called by ShowAndVerifyUi() before ShowUi(), to provide a place to do any
+  // setup needed in order to successfully verify the UI post-show.
+  virtual void PreShow() {}
+
+  // Should be implemented in individual tests to show UI with the given |name|
+  // (which will be supplied by the test case).
+  virtual void ShowUi(const std::string& name) = 0;
+
+  // Called by ShowAndVerifyUi() after ShowUi().  Returns whether the UI was
+  // successfully shown.
+  virtual bool VerifyUi() = 0;
+
+  // Called by ShowAndVerifyUi() after VerifyUi(), in the case where the test is
+  // interactive.  This should block until the UI has been dismissed.
+  virtual void WaitForUserDismissal() = 0;
+
+  // Called by ShowAndVerifyUi() after VerifyUi(), in the case where the test is
+  // non-interactive.  This should do anything necessary to close the UI before
+  // browser shutdown.
+  virtual void DismissUi() {}
+
+  // Shows the UI whose name corresponds to the current test case, and verifies
+  // it was successfully shown.  Most test cases can simply invoke this directly
+  // with no other code.
+  void ShowAndVerifyUi();
+
+  // Convenience method to force-enable features::kSecondaryUiMd for this test
+  // on all platforms. This should be called in an override of SetUp().
+  void UseMdOnly();
+
+ private:
+  // If non-null, forces secondary UI to MD.
+  std::unique_ptr<base::test::ScopedFeatureList> enable_md_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestBrowserUi);
+};
+
+// Helper to mix in a TestBrowserUi to an existing test harness. |Base| must be
+// a descendant of InProcessBrowserTest.
+template <class Base, class TestUi>
+class SupportsTestUi : public Base, public TestUi {
+ protected:
+  template <class... Args>
+  explicit SupportsTestUi(Args&&... args) : Base(std::forward<Args>(args)...) {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SupportsTestUi);
+};
+
+using UiBrowserTest = SupportsTestUi<InProcessBrowserTest, TestBrowserUi>;
+
+namespace internal {
+
+// When present on the command line, runs the test in an interactive mode.
+constexpr const char kInteractiveSwitch[] = "interactive";
+
+}  // namespace internal
+
+#endif  // CHROME_BROWSER_UI_TEST_TEST_BROWSER_UI_H_
diff --git a/chrome/browser/ui/update_chrome_dialog_browsertest.cc b/chrome/browser/ui/update_chrome_dialog_browsertest.cc
index fb2bec3..29db4592 100644
--- a/chrome/browser/ui/update_chrome_dialog_browsertest.cc
+++ b/chrome/browser/ui/update_chrome_dialog_browsertest.cc
@@ -16,7 +16,7 @@
     DialogBrowserTest::SetUp();
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     InProcessBrowserTest::browser()->window()->ShowUpdateChromeDialog();
   }
 
@@ -24,9 +24,7 @@
   DISALLOW_COPY_AND_ASSIGN(UpdateRecommendedDialogTest);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=UpdateRecommendedDialogTest.InvokeDialog_default
-IN_PROC_BROWSER_TEST_F(UpdateRecommendedDialogTest, InvokeDialog_default) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(UpdateRecommendedDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/accessibility/invert_bubble_view_browsertest.cc b/chrome/browser/ui/views/accessibility/invert_bubble_view_browsertest.cc
index f4a01ba..e9be0c3 100644
--- a/chrome/browser/ui/views/accessibility/invert_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/accessibility/invert_bubble_view_browsertest.cc
@@ -15,7 +15,7 @@
   InvertBubbleViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ShowInvertBubbleView(browser(), &anchor_);
   }
 
@@ -26,7 +26,7 @@
 };
 
 // Invokes a bubble that asks the user if they want to install a high contrast
-// Chrome theme. See test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(InvertBubbleViewBrowserTest, InvokeDialog_default) {
-  RunDialog();
+// Chrome theme.
+IN_PROC_BROWSER_TEST_F(InvertBubbleViewBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_browsertest.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_browsertest.cc
index 1bc7da8..0fd9845 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_browsertest.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_views_browsertest.cc
@@ -23,7 +23,7 @@
   AppInfoDialogBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     extension_environment_ =
         base::MakeUnique<extensions::TestExtensionEnvironment>(nullptr);
     constexpr char kTestExtensionId[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
@@ -52,8 +52,7 @@
   DISALLOW_COPY_AND_ASSIGN(AppInfoDialogBrowserTest);
 };
 
-// Invokes a dialog that shows details of an installed extension. See
-// test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(AppInfoDialogBrowserTest, InvokeDialog_default) {
-  RunDialog();
+// Invokes a dialog that shows details of an installed extension.
+IN_PROC_BROWSER_TEST_F(AppInfoDialogBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc
index 83e5b5c..b5db0b52 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view_browsertest.cc
@@ -23,7 +23,7 @@
   BookmarkBubbleViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
 #if !defined(OS_CHROMEOS)
     if (name == "bookmark_details") {
       SigninManagerFactory::GetForProfile(browser()->profile())
@@ -61,21 +61,20 @@
 // ChromeOS is always signed in.
 #if !defined(OS_CHROMEOS)
 IN_PROC_BROWSER_TEST_F(BookmarkBubbleViewBrowserTest,
-                       InvokeDialog_bookmark_details) {
-  RunDialog();
+                       InvokeUi_bookmark_details) {
+  ShowAndVerifyUi();
 }
 #endif
 
 IN_PROC_BROWSER_TEST_F(BookmarkBubbleViewBrowserTest,
-                       InvokeDialog_bookmark_details_signed_in) {
-  RunDialog();
+                       InvokeUi_bookmark_details_signed_in) {
+  ShowAndVerifyUi();
 }
 
 #if defined(OS_WIN)
-IN_PROC_BROWSER_TEST_F(BookmarkBubbleViewBrowserTest,
-                       InvokeDialog_ios_promotion) {
+IN_PROC_BROWSER_TEST_F(BookmarkBubbleViewBrowserTest, InvokeUi_ios_promotion) {
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       switches::kForceDesktopIOSPromotion);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 #endif
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view_browsertest.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view_browsertest.cc
index f0536d5d..1c76f5c4 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view_browsertest.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view_browsertest.cc
@@ -13,7 +13,7 @@
   BookmarkEditorViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     DCHECK_EQ("all_tabs", name);
     chrome::ShowBookmarkAllTabsDialog(browser());
   }
@@ -24,7 +24,6 @@
 
 // Shows the dialog for bookmarking all tabs. This shows a BookmarkEditorView
 // dialog, with a tree view, where a user can rename and select a parent folder.
-// Can be interactive when run with --gtest_filter=BrowserDialogTest.Invoke.
-IN_PROC_BROWSER_TEST_F(BookmarkEditorViewBrowserTest, InvokeDialog_all_tabs) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(BookmarkEditorViewBrowserTest, InvokeUi_all_tabs) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/certificate_selector_dialog_browsertest.cc b/chrome/browser/ui/views/certificate_selector_dialog_browsertest.cc
index 60b73d2..acb64dfe 100644
--- a/chrome/browser/ui/views/certificate_selector_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/certificate_selector_dialog_browsertest.cc
@@ -45,7 +45,7 @@
   CertificateSelectorDialogTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     cert_1_ =
         net::ImportCertFromFile(net::GetTestCertsDirectory(), "client_1.pem");
     cert_2_ =
@@ -65,8 +65,7 @@
   DISALLOW_COPY_AND_ASSIGN(CertificateSelectorDialogTest);
 };
 
-// Invokes a dialog that allows the user select a certificate. See
-// test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(CertificateSelectorDialogTest, InvokeDialog_default) {
-  RunDialog();
+// Invokes a dialog that allows the user select a certificate.
+IN_PROC_BROWSER_TEST_F(CertificateSelectorDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/chrome_cleaner_dialog_browsertest_win.cc b/chrome/browser/ui/views/chrome_cleaner_dialog_browsertest_win.cc
index 1ec91178..6c41726 100644
--- a/chrome/browser/ui/views/chrome_cleaner_dialog_browsertest_win.cc
+++ b/chrome/browser/ui/views/chrome_cleaner_dialog_browsertest_win.cc
@@ -51,7 +51,7 @@
             Return(safe_browsing::ChromeCleanerController::State::kInfected));
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     chrome::ShowChromeCleanerPrompt(browser(), mock_dialog_controller_.get(),
                                     mock_cleaner_controller_.get());
   }
@@ -68,8 +68,8 @@
   DISALLOW_COPY_AND_ASSIGN(ChromeCleanerDialogTest);
 };
 
-IN_PROC_BROWSER_TEST_F(ChromeCleanerDialogTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ChromeCleanerDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/chrome_cleaner_reboot_dialog_browsertest_win.cc b/chrome/browser/ui/views/chrome_cleaner_reboot_dialog_browsertest_win.cc
index e8f1e2b..bef08121 100644
--- a/chrome/browser/ui/views/chrome_cleaner_reboot_dialog_browsertest_win.cc
+++ b/chrome/browser/ui/views/chrome_cleaner_reboot_dialog_browsertest_win.cc
@@ -19,8 +19,7 @@
 
 // Provides tests which allows explicit invocation of the Chrome Cleaner Reboot
 // Prompt useful for checking dialog layout or any other interactive
-// functionality tests. See docs/testing/test_browser_dialog.md for description
-// of the testing framework.
+// functionality tests.
 class ChromeCleanerRebootDialog : public DialogBrowserTest {
  public:
   void SetUpInProcessBrowserTestFixture() override {
@@ -28,7 +27,7 @@
   }
 
   // DialogBrowserTest overrides.
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ON_CALL(mock_cleaner_controller_, state())
         .WillByDefault(::testing::Return(
             safe_browsing::ChromeCleanerController::State::kRebootRequired));
@@ -45,8 +44,8 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-IN_PROC_BROWSER_TEST_F(ChromeCleanerRebootDialog, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ChromeCleanerRebootDialog, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_browsertest.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_browsertest.cc
index d07f5aff5..96e744c6 100644
--- a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_browsertest.cc
+++ b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_browsertest.cc
@@ -20,7 +20,7 @@
   DesktopMediaPickerViewsBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     picker_ = base::MakeUnique<DesktopMediaPickerViews>();
     auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
     gfx::NativeWindow native_window = browser()->window()->GetNativeWindow();
@@ -45,8 +45,7 @@
 };
 
 // Invokes a dialog that allows the user to select what view of their desktop
-// they would like to share. See test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(DesktopMediaPickerViewsBrowserTest,
-                       InvokeDialog_default) {
-  RunDialog();
+// they would like to share.
+IN_PROC_BROWSER_TEST_F(DesktopMediaPickerViewsBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/device_chooser_browsertest.cc b/chrome/browser/ui/views/device_chooser_browsertest.cc
index f3041e35..87371c55c 100644
--- a/chrome/browser/ui/views/device_chooser_browsertest.cc
+++ b/chrome/browser/ui/views/device_chooser_browsertest.cc
@@ -43,13 +43,13 @@
 }  // namespace
 
 // Invokes a dialog allowing the user to select a USB device for a web page or
-// extension. See test_browser_dialog.h.
+// extension.
 class UsbChooserBrowserTest : public DialogBrowserTest {
  public:
   UsbChooserBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ShowChooser(name, browser(),
                 base::MakeUnique<FakeUsbChooserController>(device_count_));
   }
@@ -62,33 +62,33 @@
   DISALLOW_COPY_AND_ASSIGN(UsbChooserBrowserTest);
 };
 
-IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeDialog_NoDevicesBubble) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeUi_NoDevicesBubble) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeDialog_NoDevicesModal) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeUi_NoDevicesModal) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeDialog_WithDevicesBubble) {
+IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeUi_WithDevicesBubble) {
   device_count_ = 5;
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeDialog_WithDevicesModal) {
+IN_PROC_BROWSER_TEST_F(UsbChooserBrowserTest, InvokeUi_WithDevicesModal) {
   device_count_ = 5;
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 // Invokes a dialog allowing the user to select a Bluetooth device for a web
-// page or extension. See test_browser_dialog.h.
+// page or extension.
 class BluetoothChooserBrowserTest : public DialogBrowserTest {
  public:
   BluetoothChooserBrowserTest()
       : status_(FakeBluetoothChooserController::BluetoothStatus::UNAVAILABLE) {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     auto controller =
         std::make_unique<FakeBluetoothChooserController>(std::move(devices_));
     auto* controller_unowned = controller.get();
@@ -145,75 +145,68 @@
 };
 
 IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_UnavailableBubble) {
-  RunDialog();
+                       InvokeUi_UnavailableBubble) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_UnavailableModal) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_UnavailableModal) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_NoDevicesBubble) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_NoDevicesBubble) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_NoDevicesModal) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_NoDevicesModal) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ScanningBubble) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_ScanningBubble) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::SCANNING);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ScanningModal) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_ScanningModal) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::SCANNING);
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ScanningWithDevicesBubble) {
+                       InvokeUi_ScanningWithDevicesBubble) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::SCANNING);
   AddDeviceForAllStrengths();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ScanningWithDevicesModal) {
+                       InvokeUi_ScanningWithDevicesModal) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::SCANNING);
   AddDeviceForAllStrengths();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ConnectedBubble) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_ConnectedBubble) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
   AddConnectedDevice();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest,
-                       InvokeDialog_ConnectedModal) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_ConnectedModal) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
   AddConnectedDevice();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeDialog_PairedBubble) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_PairedBubble) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
   AddPairedDevice();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeDialog_PairedModal) {
+IN_PROC_BROWSER_TEST_F(BluetoothChooserBrowserTest, InvokeUi_PairedModal) {
   set_status(FakeBluetoothChooserController::BluetoothStatus::IDLE);
   AddPairedDevice();
-  RunDialog();
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/device_chooser_content_view.cc b/chrome/browser/ui/views/device_chooser_content_view.cc
index 59c6bf2..dd946ee2 100644
--- a/chrome/browser/ui/views/device_chooser_content_view.cc
+++ b/chrome/browser/ui/views/device_chooser_content_view.cc
@@ -8,6 +8,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
 #include "chrome/grit/generated_resources.h"
+#include "components/strings/grit/components_strings.h"
 #include "components/vector_icons/vector_icons.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -17,43 +18,115 @@
 #include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/resources/grit/ui_resources.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/button/image_button_factory.h"
+#include "ui/views/controls/button/label_button.h"
+#include "ui/views/controls/button/md_text_button.h"
 #include "ui/views/controls/styled_label.h"
 #include "ui/views/controls/table/table_view.h"
 #include "ui/views/controls/throbber.h"
+#include "ui/views/layout/box_layout.h"
 #include "ui/views/widget/widget.h"
 
 namespace {
 
-const int kThrobberDiameter = 24;
-
-const int kAdapterOffHelpLinkPadding = 5;
+constexpr int kAdapterOffHelpLinkPadding = 5;
 
 // The lookup table for signal strength level image.
-const int kSignalStrengthLevelImageIds[5] = {IDR_SIGNAL_0_BAR, IDR_SIGNAL_1_BAR,
-                                             IDR_SIGNAL_2_BAR, IDR_SIGNAL_3_BAR,
-                                             IDR_SIGNAL_4_BAR};
+constexpr int kSignalStrengthLevelImageIds[5] = {
+    IDR_SIGNAL_0_BAR, IDR_SIGNAL_1_BAR, IDR_SIGNAL_2_BAR, IDR_SIGNAL_3_BAR,
+    IDR_SIGNAL_4_BAR};
+
+constexpr int kHelpButtonTag = 1;
+constexpr int kReScanButtonTag = 2;
 
 }  // namespace
 
+DeviceChooserContentView::BluetoothStatusContainer::BluetoothStatusContainer(
+    views::ButtonListener* listener) {
+  re_scan_button_ = views::MdTextButton::CreateSecondaryUiButton(
+      listener,
+      l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN));
+  re_scan_button_->SetTooltipText(
+      l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN_TOOLTIP));
+  re_scan_button_->SetFocusForPlatform();
+  re_scan_button_->set_tag(kReScanButtonTag);
+  // Ensures that the focus will never cycle to the help button, because that's
+  // rarely useful and can look weird.
+  re_scan_button_->set_request_focus_on_press(true);
+  AddChildView(re_scan_button_);
+
+  throbber_ = new views::Throbber();
+  AddChildView(throbber_);
+
+  scanning_label_ = new views::Label(
+      l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING_LABEL),
+      views::style::CONTEXT_LABEL, views::style::STYLE_DISABLED);
+  scanning_label_->SetTooltipText(l10n_util::GetStringUTF16(
+      IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING_LABEL_TOOLTIP));
+  AddChildView(scanning_label_);
+}
+
+gfx::Size
+DeviceChooserContentView::BluetoothStatusContainer::CalculatePreferredSize()
+    const {
+  const gfx::Size throbber_size = throbber_->GetPreferredSize();
+  const gfx::Size scanning_label_size = scanning_label_->GetPreferredSize();
+  const gfx::Size re_scan_button_size = re_scan_button_->GetPreferredSize();
+
+  // The re-scan button and throbber plus label won't be shown at the same time,
+  // so they overlap each other. The width is thus the larger of the two modes.
+  const int width = std::max(throbber_size.width() + GetThrobberLabelSpacing() +
+                                 scanning_label_size.width(),
+                             re_scan_button_size.width());
+  // The height is equal to the tallest of the child views.
+  const int height = std::max(
+      throbber_size.height(),
+      std::max(scanning_label_size.height(), re_scan_button_size.height()));
+  return gfx::Size(width, height);
+}
+
+void DeviceChooserContentView::BluetoothStatusContainer::Layout() {
+  CenterVertically(re_scan_button_);
+  CenterVertically(throbber_);
+  CenterVertically(scanning_label_);
+  scanning_label_->SetX(throbber_->bounds().right() +
+                        GetThrobberLabelSpacing());
+}
+
+void DeviceChooserContentView::BluetoothStatusContainer::
+    ShowScanningLabelAndThrobber() {
+  re_scan_button_->SetVisible(false);
+  throbber_->SetVisible(true);
+  scanning_label_->SetVisible(true);
+  throbber_->Start();
+}
+
+void DeviceChooserContentView::BluetoothStatusContainer::ShowReScanButton(
+    bool enabled) {
+  re_scan_button_->SetVisible(true);
+  re_scan_button_->SetEnabled(enabled);
+  throbber_->Stop();
+  throbber_->SetVisible(false);
+  scanning_label_->SetVisible(false);
+}
+
+int DeviceChooserContentView::BluetoothStatusContainer::
+    GetThrobberLabelSpacing() const {
+  return ChromeLayoutProvider::Get()->GetDistanceMetric(
+      views::DISTANCE_RELATED_CONTROL_HORIZONTAL);
+}
+
+void DeviceChooserContentView::BluetoothStatusContainer::CenterVertically(
+    views::View* view) {
+  view->SizeToPreferredSize();
+  view->SetY((height() - view->height()) / 2);
+}
+
 DeviceChooserContentView::DeviceChooserContentView(
     views::TableViewObserver* table_view_observer,
     std::unique_ptr<ChooserController> chooser_controller)
-    : chooser_controller_(std::move(chooser_controller)),
-      help_text_(l10n_util::GetStringFUTF16(
-          IDS_DEVICE_CHOOSER_GET_HELP_LINK_WITH_SCANNING_STATUS,
-          base::string16())),
-      help_and_scanning_text_(l10n_util::GetStringFUTF16(
-          IDS_DEVICE_CHOOSER_GET_HELP_LINK_WITH_SCANNING_STATUS,
-          l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING))) {
-  base::string16 re_scan_text =
-      l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN);
-  std::vector<size_t> offsets;
-  help_and_re_scan_text_ = l10n_util::GetStringFUTF16(
-      IDS_DEVICE_CHOOSER_GET_HELP_LINK_WITH_RE_SCAN_LINK, help_text_,
-      re_scan_text, &offsets);
-  help_text_range_ = gfx::Range(offsets[0], offsets[0] + help_text_.size());
-  re_scan_text_range_ =
-      gfx::Range(offsets[1], offsets[1] + re_scan_text.size());
+    : chooser_controller_(std::move(chooser_controller)) {
   chooser_controller_->set_view(this);
   std::vector<ui::TableColumn> table_columns;
   table_columns.push_back(ui::TableColumn());
@@ -69,10 +142,6 @@
   table_parent_ = table_view_->CreateParentIfNecessary();
   AddChildView(table_parent_);
 
-  throbber_ = new views::Throbber();
-  throbber_->SetVisible(false);
-  AddChildView(throbber_);
-
   base::string16 link_text = l10n_util::GetStringUTF16(
       IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ON_BLUETOOTH_LINK_TEXT);
   size_t offset = 0;
@@ -84,13 +153,6 @@
       views::StyledLabel::RangeStyleInfo::CreateForLink());
   turn_adapter_off_help_->SetVisible(false);
   AddChildView(turn_adapter_off_help_);
-
-  if (chooser_controller_->ShouldShowFootnoteView()) {
-    footnote_link_ = base::MakeUnique<views::StyledLabel>(help_text_, this);
-    footnote_link_->set_owned_by_client();
-    footnote_link_->AddStyleRange(
-        help_text_range_, views::StyledLabel::RangeStyleInfo::CreateForLink());
-  }
 }
 
 DeviceChooserContentView::~DeviceChooserContentView() {
@@ -107,10 +169,7 @@
 void DeviceChooserContentView::Layout() {
   gfx::Rect rect(GetContentsBounds());
   table_parent_->SetBoundsRect(rect);
-  // Set the throbber in the center of the chooser.
-  throbber_->SetBounds((rect.width() - kThrobberDiameter) / 2,
-                       (rect.height() - kThrobberDiameter) / 2,
-                       kThrobberDiameter, kThrobberDiameter);
+
   // Set the adapter off message in the center of the chooser.
   // The adapter off message will only be shown when the adapter is off,
   // and in that case, the system won't be able to scan for devices, so
@@ -128,10 +187,10 @@
 }
 
 int DeviceChooserContentView::RowCount() {
-  // When there are no devices, the table contains a message saying there
-  // are no devices, so the number of rows is always at least 1.
+  // When there are no devices and we're not scanning, the table contains a
+  // message saying there are no devices.
   return std::max(base::checked_cast<int>(chooser_controller_->NumOptions()),
-                  1);
+                  refreshing_ ? 0 : 1);
 }
 
 base::string16 DeviceChooserContentView::GetText(int row, int column_id) {
@@ -190,8 +249,6 @@
   table_view_->OnItemsAdded(base::checked_cast<int>(index), 1);
   UpdateTableView();
   table_view_->SetVisible(true);
-  throbber_->SetVisible(false);
-  throbber_->Stop();
 }
 
 void DeviceChooserContentView::OnOptionRemoved(size_t index) {
@@ -213,18 +270,8 @@
   table_view_->SetVisible(enabled);
   turn_adapter_off_help_->SetVisible(!enabled);
 
-  throbber_->Stop();
-  throbber_->SetVisible(false);
-
-  if (enabled) {
-    SetGetHelpAndReScanLink();
-  } else {
-    DCHECK(footnote_link_);
-    footnote_link_->SetText(help_text_);
-    footnote_link_->AddStyleRange(
-        help_text_range_, views::StyledLabel::RangeStyleInfo::CreateForLink());
-  }
-
+  bluetooth_status_container_->ShowReScanButton(enabled);
+  refreshing_ = false;
   if (GetWidget() && GetWidget()->GetRootView())
     GetWidget()->GetRootView()->Layout();
 }
@@ -238,26 +285,11 @@
     UpdateTableView();
   }
 
-  // When refreshing and no option available yet, hide |table_view_| and show
-  // |throbber_|. Otherwise show |table_view_| and hide |throbber_|.
-  bool throbber_visible =
-      refreshing && (chooser_controller_->NumOptions() == 0);
-  table_view_->SetVisible(!throbber_visible);
-  throbber_->SetVisible(throbber_visible);
-  if (throbber_visible)
-    throbber_->Start();
+  if (refreshing)
+    bluetooth_status_container_->ShowScanningLabelAndThrobber();
   else
-    throbber_->Stop();
-
-  if (refreshing) {
-    DCHECK(footnote_link_);
-    footnote_link_->SetText(help_and_scanning_text_);
-    footnote_link_->AddStyleRange(
-        help_text_range_, views::StyledLabel::RangeStyleInfo::CreateForLink());
-  } else {
-    SetGetHelpAndReScanLink();
-  }
-
+    bluetooth_status_container_->ShowReScanButton(true /* enabled */);
+  refreshing_ = refreshing;
   if (GetWidget() && GetWidget()->GetRootView())
     GetWidget()->GetRootView()->Layout();
 }
@@ -265,15 +297,16 @@
 void DeviceChooserContentView::StyledLabelLinkClicked(views::StyledLabel* label,
                                                       const gfx::Range& range,
                                                       int event_flags) {
-  if (label == turn_adapter_off_help_) {
-    chooser_controller_->OpenAdapterOffHelpUrl();
-  } else if (label == footnote_link_.get()) {
-    if (range == help_text_range_)
-      chooser_controller_->OpenHelpCenterUrl();
-    else if (range == re_scan_text_range_)
-      chooser_controller_->RefreshOptions();
-    else
-      NOTREACHED();
+  DCHECK_EQ(turn_adapter_off_help_, label);
+  chooser_controller_->OpenAdapterOffHelpUrl();
+}
+
+void DeviceChooserContentView::ButtonPressed(views::Button* sender,
+                                             const ui::Event& event) {
+  if (sender->tag() == kHelpButtonTag) {
+    chooser_controller_->OpenHelpCenterUrl();
+  } else if (sender->tag() == kReScanButtonTag) {
+    chooser_controller_->RefreshOptions();
   } else {
     NOTREACHED();
   }
@@ -283,6 +316,40 @@
   return chooser_controller_->GetTitle();
 }
 
+std::unique_ptr<views::View> DeviceChooserContentView::CreateExtraView() {
+  std::vector<views::View*> extra_views;
+  if (chooser_controller_->ShouldShowHelpButton()) {
+    views::ImageButton* help_button = views::CreateVectorImageButton(this);
+    views::SetImageFromVectorIcon(help_button, vector_icons::kHelpOutlineIcon);
+    help_button->SetFocusForPlatform();
+    help_button->SetTooltipText(l10n_util::GetStringUTF16(IDS_LEARN_MORE));
+    help_button->set_tag(kHelpButtonTag);
+    extra_views.push_back(help_button);
+  }
+
+  if (chooser_controller_->ShouldShowReScanButton()) {
+    bluetooth_status_container_ = new BluetoothStatusContainer(this);
+    extra_views.push_back(bluetooth_status_container_);
+  }
+
+  if (extra_views.size() == 0)
+    return nullptr;
+  if (extra_views.size() == 1)
+    return std::unique_ptr<views::View>(extra_views.at(0));
+
+  auto container = std::make_unique<views::View>();
+  views::BoxLayout* layout =
+      new views::BoxLayout(views::BoxLayout::kHorizontal, gfx::Insets(),
+                           ChromeLayoutProvider::Get()->GetDistanceMetric(
+                               views::DISTANCE_RELATED_CONTROL_HORIZONTAL));
+  layout->set_cross_axis_alignment(
+      views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER);
+  container->SetLayoutManager(layout);
+  for (auto* view : extra_views)
+    container->AddChildView(view);
+  return container;
+}
+
 base::string16 DeviceChooserContentView::GetDialogButtonLabel(
     ui::DialogButton button) const {
   return button == ui::DIALOG_BUTTON_OK
@@ -319,12 +386,3 @@
     table_view_->SetEnabled(true);
   }
 }
-
-void DeviceChooserContentView::SetGetHelpAndReScanLink() {
-  DCHECK(footnote_link_);
-  footnote_link_->SetText(help_and_re_scan_text_);
-  footnote_link_->AddStyleRange(
-      help_text_range_, views::StyledLabel::RangeStyleInfo::CreateForLink());
-  footnote_link_->AddStyleRange(
-      re_scan_text_range_, views::StyledLabel::RangeStyleInfo::CreateForLink());
-}
diff --git a/chrome/browser/ui/views/device_chooser_content_view.h b/chrome/browser/ui/views/device_chooser_content_view.h
index 264f9bc..1f3522eb 100644
--- a/chrome/browser/ui/views/device_chooser_content_view.h
+++ b/chrome/browser/ui/views/device_chooser_content_view.h
@@ -12,10 +12,13 @@
 #include "chrome/browser/chooser_controller/chooser_controller.h"
 #include "ui/base/models/table_model.h"
 #include "ui/gfx/range/range.h"
+#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/label.h"
 #include "ui/views/controls/styled_label_listener.h"
 #include "ui/views/view.h"
 
 namespace views {
+class LabelButton;
 class StyledLabel;
 class TableView;
 class TableViewObserver;
@@ -27,7 +30,8 @@
 class DeviceChooserContentView : public views::View,
                                  public ui::TableModel,
                                  public ChooserController::View,
-                                 public views::StyledLabelListener {
+                                 public views::StyledLabelListener,
+                                 public views::ButtonListener {
  public:
   DeviceChooserContentView(
       views::TableViewObserver* table_view_observer,
@@ -58,16 +62,17 @@
                               const gfx::Range& range,
                               int event_flags) override;
 
-  views::StyledLabel* footnote_link() { return footnote_link_.get(); }
+  // views::ButtonListener:
+  void ButtonPressed(views::Button* sender, const ui::Event& event) override;
 
   base::string16 GetWindowTitle() const;
+  std::unique_ptr<views::View> CreateExtraView();
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const;
   bool IsDialogButtonEnabled(ui::DialogButton button) const;
   void Accept();
   void Cancel();
   void Close();
   void UpdateTableView();
-  void SetGetHelpAndReScanLink();
 
  private:
   friend class ChooserDialogViewTest;
@@ -75,17 +80,42 @@
   FRIEND_TEST_ALL_PREFIXES(DeviceChooserContentViewTest, ClickRescanLink);
   FRIEND_TEST_ALL_PREFIXES(DeviceChooserContentViewTest, ClickGetHelpLink);
 
+  class BluetoothStatusContainer : public views::View {
+   public:
+    explicit BluetoothStatusContainer(views::ButtonListener* listener);
+
+    // view::Views:
+    gfx::Size CalculatePreferredSize() const override;
+    void Layout() override;
+
+    void ShowScanningLabelAndThrobber();
+    void ShowReScanButton(bool enabled);
+
+    views::LabelButton* re_scan_button() { return re_scan_button_; }
+    views::Throbber* throbber() { return throbber_; }
+    views::Label* scanning_label() { return scanning_label_; }
+
+   private:
+    int GetThrobberLabelSpacing() const;
+    void CenterVertically(views::View* view);
+
+    views::LabelButton* re_scan_button_;
+    views::Throbber* throbber_;
+    views::Label* scanning_label_;
+
+    DISALLOW_COPY_AND_ASSIGN(BluetoothStatusContainer);
+  };
+
   std::unique_ptr<ChooserController> chooser_controller_;
-  views::TableView* table_view_ = nullptr;  // Weak.
-  views::View* table_parent_ = nullptr;  // Weak.
-  views::StyledLabel* turn_adapter_off_help_ = nullptr;  // Weak.
-  views::Throbber* throbber_ = nullptr;  // Weak.
-  std::unique_ptr<views::StyledLabel> footnote_link_;
-  base::string16 help_text_;
-  base::string16 help_and_scanning_text_;
-  base::string16 help_and_re_scan_text_;
-  gfx::Range help_text_range_;
-  gfx::Range re_scan_text_range_;
+
+  // True when the devices are refreshing (i.e. when OnRefreshStateChanged(true)
+  // is called).
+  bool refreshing_ = false;
+
+  views::TableView* table_view_ = nullptr;
+  views::View* table_parent_ = nullptr;
+  views::StyledLabel* turn_adapter_off_help_ = nullptr;
+  BluetoothStatusContainer* bluetooth_status_container_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(DeviceChooserContentView);
 };
diff --git a/chrome/browser/ui/views/device_chooser_content_view_unittest.cc b/chrome/browser/ui/views/device_chooser_content_view_unittest.cc
index 68347358..954f77e 100644
--- a/chrome/browser/ui/views/device_chooser_content_view_unittest.cc
+++ b/chrome/browser/ui/views/device_chooser_content_view_unittest.cc
@@ -14,7 +14,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/list_selection_model.h"
-#include "ui/views/controls/link.h"
+#include "ui/events/base_event_utils.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/styled_label.h"
 #include "ui/views/controls/table/table_view.h"
 #include "ui/views/controls/table/table_view_observer.h"
@@ -42,10 +44,14 @@
     content_view_ = std::make_unique<DeviceChooserContentView>(
         table_observer_.get(), std::move(controller));
 
+    // Also creates |bluetooth_status_container_|.
+    extra_views_container_ = content_view().CreateExtraView();
+
     ASSERT_NE(nullptr, table_view());
-    ASSERT_NE(nullptr, throbber());
     ASSERT_NE(nullptr, adapter_off_help_link());
-    ASSERT_NE(nullptr, footnote_link());
+    ASSERT_NE(nullptr, re_scan_button());
+    ASSERT_NE(nullptr, throbber());
+    ASSERT_NE(nullptr, scanning_label());
 
     controller_->SetBluetoothStatus(
         FakeBluetoothChooserController::BluetoothStatus::IDLE);
@@ -57,24 +63,17 @@
 
   views::TableView* table_view() { return content_view().table_view_; }
   ui::TableModel* table_model() { return table_view()->model(); }
-  views::Throbber* throbber() { return content_view().throbber_; }
   views::StyledLabel* adapter_off_help_link() {
     return content_view().turn_adapter_off_help_;
   }
-  views::StyledLabel* footnote_link() {
-    return content_view().footnote_link_.get();
+  views::LabelButton* re_scan_button() {
+    return content_view().bluetooth_status_container_->re_scan_button();
   }
-
-  void ExpectFootnoteLinkHasScanningText() {
-    EXPECT_EQ(content_view().help_and_scanning_text_, footnote_link()->text());
+  views::Throbber* throbber() {
+    return content_view().bluetooth_status_container_->throbber();
   }
-
-  void ExpectFootnoteLinkHasRescanText() {
-    EXPECT_EQ(content_view().help_and_re_scan_text_, footnote_link()->text());
-  }
-
-  void ExpectFootnoteLinkOnlyHasHelpText() {
-    EXPECT_EQ(content_view().help_text_, footnote_link()->text());
+  views::Label* scanning_label() {
+    return content_view().bluetooth_status_container_->scanning_label();
   }
 
   void AddUnpairedDevice() {
@@ -114,6 +113,9 @@
     EXPECT_FALSE(IsDeviceSelected());
   }
 
+ protected:
+  std::unique_ptr<views::View> extra_views_container_;
+
  private:
   std::unique_ptr<MockTableViewObserver> table_observer_;
   FakeBluetoothChooserController* controller_ = nullptr;
@@ -127,9 +129,11 @@
 
   EXPECT_TRUE(table_view()->visible());
   ExpectNoDevices();
-  EXPECT_FALSE(throbber()->visible());
   EXPECT_FALSE(adapter_off_help_link()->visible());
-  ExpectFootnoteLinkHasRescanText();
+  EXPECT_FALSE(throbber()->visible());
+  EXPECT_FALSE(scanning_label()->visible());
+  EXPECT_TRUE(re_scan_button()->visible());
+  EXPECT_TRUE(re_scan_button()->enabled());
 }
 
 TEST_F(DeviceChooserContentViewTest, AddOption) {
@@ -209,7 +213,9 @@
   EXPECT_FALSE(table_view()->visible());
   EXPECT_TRUE(adapter_off_help_link()->visible());
   EXPECT_FALSE(throbber()->visible());
-  ExpectFootnoteLinkOnlyHasHelpText();
+  EXPECT_FALSE(scanning_label()->visible());
+  EXPECT_TRUE(re_scan_button()->visible());
+  EXPECT_FALSE(re_scan_button()->enabled());
 
   controller()->RemoveDevice(0);
   controller()->SetBluetoothStatus(
@@ -217,24 +223,29 @@
   ExpectNoDevices();
   EXPECT_FALSE(adapter_off_help_link()->visible());
   EXPECT_FALSE(throbber()->visible());
+  EXPECT_FALSE(scanning_label()->visible());
+  EXPECT_TRUE(re_scan_button()->visible());
+  EXPECT_TRUE(re_scan_button()->enabled());
 }
 
 TEST_F(DeviceChooserContentViewTest, ScanForDevices) {
   controller()->SetBluetoothStatus(
       FakeBluetoothChooserController::BluetoothStatus::SCANNING);
-  EXPECT_FALSE(table_view()->visible());
+  EXPECT_EQ(0, table_view()->RowCount());
+  EXPECT_FALSE(table_view()->enabled());
   EXPECT_FALSE(adapter_off_help_link()->visible());
   EXPECT_TRUE(throbber()->visible());
-  ExpectFootnoteLinkHasScanningText();
+  EXPECT_TRUE(scanning_label()->visible());
+  EXPECT_FALSE(re_scan_button()->visible());
 
   AddUnpairedDevice();
-  EXPECT_TRUE(table_view()->visible());
+  EXPECT_EQ(1, table_view()->RowCount());
   EXPECT_TRUE(table_view()->enabled());
   EXPECT_FALSE(adapter_off_help_link()->visible());
-  EXPECT_FALSE(throbber()->visible());
-  EXPECT_EQ(1, table_view()->RowCount());
+  EXPECT_TRUE(throbber()->visible());
+  EXPECT_TRUE(scanning_label()->visible());
   EXPECT_FALSE(IsDeviceSelected());
-  ExpectFootnoteLinkHasScanningText();
+  EXPECT_FALSE(re_scan_button()->visible());
 }
 
 TEST_F(DeviceChooserContentViewTest, ClickAdapterOffHelpLink) {
@@ -242,14 +253,24 @@
   adapter_off_help_link()->LinkClicked(nullptr, 0);
 }
 
-TEST_F(DeviceChooserContentViewTest, ClickRescanLink) {
+TEST_F(DeviceChooserContentViewTest, ClickRescanButton) {
   EXPECT_CALL(*controller(), RefreshOptions()).Times(1);
-  content_view().StyledLabelLinkClicked(footnote_link(),
-                                        content_view().re_scan_text_range_, 0);
+  const gfx::Point point(10, 10);
+  const ui::MouseEvent event(ui::ET_MOUSE_PRESSED, point, point,
+                             ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+                             ui::EF_LEFT_MOUSE_BUTTON);
+  content_view().ButtonPressed(re_scan_button(), event);
 }
 
-TEST_F(DeviceChooserContentViewTest, ClickGetHelpLink) {
+TEST_F(DeviceChooserContentViewTest, ClickHelpButton) {
   EXPECT_CALL(*controller(), OpenHelpCenterUrl()).Times(1);
-  content_view().StyledLabelLinkClicked(footnote_link(),
-                                        content_view().help_text_range_, 0);
+  // The content view doesn't have a direct reference to the help button, so we
+  // need to find it. It's on the left (in LTR) so it should be the first child.
+  views::ImageButton* help_button =
+      static_cast<views::ImageButton*>(extra_views_container_->child_at(0));
+  const gfx::Point point(10, 10);
+  const ui::MouseEvent event(ui::ET_MOUSE_PRESSED, point, point,
+                             ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+                             ui::EF_LEFT_MOUSE_BUTTON);
+  content_view().ButtonPressed(help_button, event);
 }
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
index 7004227..aa0a5d07 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc
@@ -19,9 +19,11 @@
 #include "ui/gfx/geometry/insets.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
+#include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/link.h"
 #include "ui/views/controls/styled_label.h"
 #include "ui/views/layout/fill_layout.h"
+#include "ui/views/window/dialog_client_view.h"
 
 ChooserDialogView::ChooserDialogView(
     std::unique_ptr<ChooserController> chooser_controller) {
@@ -72,14 +74,14 @@
   return device_chooser_content_view_->IsDialogButtonEnabled(button);
 }
 
-views::View* ChooserDialogView::CreateFootnoteView() {
-  views::View* footnote_link = device_chooser_content_view_->footnote_link();
-  if (footnote_link) {
-    footnote_link->SetBorder(
-        views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric(
-            views::INSETS_DIALOG_SUBSECTION)));
-  }
-  return footnote_link;
+views::View* ChooserDialogView::GetInitiallyFocusedView() {
+  return GetDialogClientView()->cancel_button();
+}
+
+views::View* ChooserDialogView::CreateExtraView() {
+  std::unique_ptr<views::View> extra_view =
+      device_chooser_content_view_->CreateExtraView();
+  return extra_view ? extra_view.release() : nullptr;
 }
 
 bool ChooserDialogView::Accept() {
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view.h b/chrome/browser/ui/views/extensions/chooser_dialog_view.h
index dcb4f6e..1226158 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view.h
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view.h
@@ -31,7 +31,8 @@
   // views::DialogDelegate:
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
   bool IsDialogButtonEnabled(ui::DialogButton button) const override;
-  views::View* CreateFootnoteView() override;
+  views::View* GetInitiallyFocusedView() override;
+  views::View* CreateExtraView() override;
   bool Accept() override;
   bool Cancel() override;
   bool Close() override;
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc
index 4438f31..cc6ffe3 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc
@@ -11,8 +11,11 @@
 #include "chrome/browser/ui/views/device_chooser_content_view.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "ui/events/base_event_utils.h"
+#include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/table/table_view.h"
 #include "ui/views/widget/widget.h"
+#include "ui/views/window/dialog_client_view.h"
 
 class ChooserDialogViewTest : public ChromeViewsTestBase {
  public:
@@ -23,11 +26,14 @@
     auto controller = std::make_unique<FakeBluetoothChooserController>();
     controller_ = controller.get();
     dialog_ = new ChooserDialogView(std::move(controller));
-    controller_->SetBluetoothStatus(
-        FakeBluetoothChooserController::BluetoothStatus::IDLE);
 
     widget_ = views::DialogDelegate::CreateDialogWidget(dialog_, GetContext(),
                                                         nullptr);
+    controller_->SetBluetoothStatus(
+        FakeBluetoothChooserController::BluetoothStatus::IDLE);
+
+    ASSERT_NE(nullptr, table_view());
+    ASSERT_NE(nullptr, re_scan_button());
   }
 
   void TearDown() override {
@@ -35,6 +41,15 @@
     ChromeViewsTestBase::TearDown();
   }
 
+  views::TableView* table_view() {
+    return dialog_->device_chooser_content_view_for_test()->table_view_;
+  }
+
+  views::LabelButton* re_scan_button() {
+    return dialog_->device_chooser_content_view_for_test()
+        ->bluetooth_status_container_->re_scan_button();
+  }
+
   void AddDevice() {
     controller_->AddDevice(
         {"Device", FakeBluetoothChooserController::NOT_CONNECTED,
@@ -42,10 +57,6 @@
          FakeBluetoothChooserController::kSignalStrengthLevel1});
   }
 
-  void SelectDevice(size_t index) {
-    dialog_->device_chooser_content_view_for_test()->table_view_->Select(index);
-  }
-
  protected:
   ChooserDialogView* dialog_ = nullptr;
   FakeBluetoothChooserController* controller_ = nullptr;
@@ -64,7 +75,7 @@
   EXPECT_FALSE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
   AddDevice();
   EXPECT_FALSE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
-  SelectDevice(0);
+  table_view()->Select(0);
   EXPECT_TRUE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
 
   // Changing state disables the OK button.
@@ -74,17 +85,39 @@
   controller_->SetBluetoothStatus(
       FakeBluetoothChooserController::BluetoothStatus::SCANNING);
   EXPECT_FALSE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
-  SelectDevice(0);
+  table_view()->Select(0);
   EXPECT_TRUE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
   controller_->SetBluetoothStatus(
       FakeBluetoothChooserController::BluetoothStatus::IDLE);
   EXPECT_FALSE(dialog_->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK));
 }
 
+TEST_F(ChooserDialogViewTest, CancelButtonFocusedWhenReScanIsPressed) {
+  EXPECT_CALL(*controller_, RefreshOptions()).WillOnce(testing::Invoke([=]() {
+    controller_->SetBluetoothStatus(
+        FakeBluetoothChooserController::BluetoothStatus::SCANNING);
+  }));
+  AddDevice();
+  table_view()->RequestFocus();
+  controller_->RemoveDevice(0);
+
+  // Click the re-scan button.
+  const gfx::Point point(10, 10);
+  const ui::MouseEvent event(ui::ET_MOUSE_PRESSED, point, point,
+                             ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+                             ui::EF_LEFT_MOUSE_BUTTON);
+  re_scan_button()->OnMousePressed(event);
+  re_scan_button()->OnMouseReleased(event);
+
+  EXPECT_FALSE(re_scan_button()->visible());
+  EXPECT_EQ(dialog_->GetDialogClientView()->cancel_button(),
+            dialog_->GetFocusManager()->GetFocusedView());
+}
+
 TEST_F(ChooserDialogViewTest, Accept) {
   AddDevice();
   AddDevice();
-  SelectDevice(1);
+  table_view()->Select(1);
   std::vector<size_t> expected = {1u};
   EXPECT_CALL(*controller_, Select(testing::Eq(expected))).Times(1);
   dialog_->Accept();
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
index abb4d21d..181ab885 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
@@ -230,7 +230,7 @@
   ExtensionInstallDialogViewInteractiveBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     extensions::ChromeTestExtensionLoader loader(browser()->profile());
     base::FilePath test_data_dir;
     PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
@@ -284,59 +284,59 @@
 };
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_Simple) {
-  RunDialog();
+                       InvokeUi_Simple) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_External) {
+                       InvokeUi_External) {
   set_external_install();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_ExternalWithPermission) {
+                       InvokeUi_ExternalWithPermission) {
   set_external_install();
   AddPermission("Example permission");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_FromWebstore) {
+                       InvokeUi_FromWebstore) {
   set_from_webstore();
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_FromWebstoreWithPermission) {
+                       InvokeUi_FromWebstoreWithPermission) {
   set_from_webstore();
   AddPermission("Example permission");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_MultilinePermission) {
+                       InvokeUi_MultilinePermission) {
   AddPermission(
       "In the shade of the house, in the sunshine of the riverbank "
       "near the boats, in the shade of the Sal-wood forest, in the "
       "shade of the fig tree is where Siddhartha grew up");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_ManyPermissions) {
+                       InvokeUi_ManyPermissions) {
   for (int i = 0; i < 20; i++)
     AddPermission("Example permission");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_DetailedPermission) {
+                       InvokeUi_DetailedPermission) {
   AddPermissionWithDetails("Example header permission",
                            {base::ASCIIToUTF16("Detailed permission 1"),
                             base::ASCIIToUTF16("Detailed permission 2"),
                             base::ASCIIToUTF16("Detailed permission 3")});
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 class ExtensionInstallDialogRatingsSectionTest
diff --git a/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
index e228281..ba24278 100644
--- a/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view_browsertest.cc
@@ -51,7 +51,7 @@
   void SetUp() override;
 
   // TestBrowserDialog:
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
  private:
   // ExtensionMessageBubbleBrowserTest:
@@ -75,11 +75,10 @@
   // not affect the behavior of the bubble (just the appearance), so enable for
   // all platforms.
   UseMdOnly();
-  SupportsTestDialog::SetUp();
+  SupportsTestUi::SetUp();
 }
 
-void ExtensionMessageBubbleViewBrowserTest::ShowDialog(
-    const std::string& name) {
+void ExtensionMessageBubbleViewBrowserTest::ShowUi(const std::string& name) {
   // When invoked this way, the dialog test harness must close the bubble.
   base::AutoReset<bool> guard(&block_close_, true);
 
@@ -219,11 +218,11 @@
   TestControlledStartupNotShownOnRestart();
 }
 
-// BrowserDialogTest for the warning bubble that appears when opening a new tab
-// and an extension is controlling it. Only shown on Windows.
+// BrowserUiTest for the warning bubble that appears when opening a new tab and
+// an extension is controlling it. Only shown on Windows.
 IN_PROC_BROWSER_TEST_F(ExtensionMessageBubbleViewBrowserTest,
-                       InvokeDialog_ntp_override) {
-  RunDialog();
+                       InvokeUi_ntp_override) {
+  ShowAndVerifyUi();
 }
 
 #endif  // defined(OS_WIN)
@@ -248,12 +247,11 @@
   TestClickingDismissButton();
 }
 
-// BrowserDialogTest for the warning bubble that appears at startup when there
-// are extensions installed in developer mode. Can be invoked interactively with
-// --gtest_filter=BrowserDialogTest.Invoke.
+// BrowserUiTest for the warning bubble that appears at startup when there are
+// extensions installed in developer mode.
 IN_PROC_BROWSER_TEST_F(ExtensionMessageBubbleViewBrowserTest,
-                       InvokeDialog_devmode_warning) {
-  RunDialog();
+                       InvokeUi_devmode_warning) {
+  ShowAndVerifyUi();
 }
 
 class NtpExtensionBubbleViewBrowserTest
diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
index 0d6032f..d2ce2ef 100644
--- a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
@@ -264,7 +264,7 @@
     EXTENSION_LOCAL_SOURCE,
     EXTENSION_FROM_WEBSTORE,
   };
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     extensions::DictionaryBuilder manifest_builder;
     manifest_builder.Set("name", "ExtensionForRemoval").Set("version", "1.0");
     if (extension_origin_ == EXTENSION_FROM_WEBSTORE) {
@@ -310,7 +310,7 @@
     uninstall_method_ = uninstall_method;
     extension_origin_ = extension_origin;
 
-    RunDialog();
+    ShowAndVerifyUi();
   }
 
  private:
@@ -336,21 +336,21 @@
 };
 
 IN_PROC_BROWSER_TEST_F(ExtensionUninstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_ManualUninstall) {
+                       InvokeUi_ManualUninstall) {
   RunTest(MANUAL_UNINSTALL, EXTENSION_LOCAL_SOURCE);
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionUninstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_ManualUninstallShowReportAbuse) {
+                       InvokeUi_ManualUninstallShowReportAbuse) {
   RunTest(MANUAL_UNINSTALL, EXTENSION_FROM_WEBSTORE);
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionUninstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_UninstallByExtension) {
+                       InvokeUi_UninstallByExtension) {
   RunTest(UNINSTALL_BY_EXTENSION, EXTENSION_LOCAL_SOURCE);
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionUninstallDialogViewInteractiveBrowserTest,
-                       InvokeDialog_UninstallByExtensionShowReportAbuse) {
+                       InvokeUi_UninstallByExtensionShowReportAbuse) {
   RunTest(UNINSTALL_BY_EXTENSION, EXTENSION_FROM_WEBSTORE);
 }
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_browsertest.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_browsertest.cc
index 4088981e..e8a04b51 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_browsertest.cc
@@ -54,7 +54,7 @@
     manager.WaitForNavigationFinished();
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     std::vector<base::string16> headers = {base::string16(),
                                            base::ASCIIToUTF16("header2")};
     MediaGalleriesDialogController::Entries attached_permissions = {
@@ -78,6 +78,6 @@
 };
 
 IN_PROC_BROWSER_TEST_F(MediaGalleriesInteractiveDialogTest,
-                       InvokeDialog_DisplayDialog) {
-  RunDialog();
+                       InvokeUi_DisplayDialog) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/extensions/pwa_confirmation_view_browsertest.cc b/chrome/browser/ui/views/extensions/pwa_confirmation_view_browsertest.cc
index f71c7089..d971f78 100644
--- a/chrome/browser/ui/views/extensions/pwa_confirmation_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/pwa_confirmation_view_browsertest.cc
@@ -20,7 +20,7 @@
  public:
   PWAConfirmationViewTest() {}
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     constexpr int kIconSize = 48;
     WebApplicationInfo::IconInfo icon_info;
     icon_info.data.allocN32Pixels(kIconSize, kIconSize, true);
@@ -58,20 +58,20 @@
 
 // Launches an installation confirmation dialog for a PWA with a short name and
 // origin.
-IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeDialog_short_text) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeUi_short_text) {
+  ShowAndVerifyUi();
 }
 
 // Launches an installation confirmation dialog for a PWA with name and origin
 // long enough to be elided.
-IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeDialog_long_text) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeUi_long_text) {
+  ShowAndVerifyUi();
 }
 
 // Launches an installation confirmation dialog for a PWA with an RTL subdomain
 // which is long enough to be elided.
-IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeDialog_rtl) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PWAConfirmationViewTest, InvokeUi_rtl) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/extensions/request_file_system_dialog_browsertest.cc b/chrome/browser/ui/views/extensions/request_file_system_dialog_browsertest.cc
index 34cb81a..dfc53bee 100644
--- a/chrome/browser/ui/views/extensions/request_file_system_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/request_file_system_dialog_browsertest.cc
@@ -21,7 +21,7 @@
  public:
   RequestFileSystemDialogTest() {}
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     RequestFileSystemDialogView::ShowDialog(
         browser()->tab_strip_model()->GetActiveWebContents(),
         "RequestFileSystemDialogTest", "TestVolume", true,
@@ -34,8 +34,8 @@
   DISALLOW_COPY_AND_ASSIGN(RequestFileSystemDialogTest);
 };
 
-IN_PROC_BROWSER_TEST_F(RequestFileSystemDialogTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(RequestFileSystemDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc
index 30cc493..e5f2570e 100644
--- a/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc
@@ -77,7 +77,7 @@
   ExternalProtocolDialogBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name = "") override {
+  void ShowUi(const std::string& name) override {
     content::WebContents* web_contents =
         browser()->tab_strip_model()->GetActiveWebContents();
     int render_view_process_id =
@@ -108,7 +108,7 @@
 };
 
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestAccept) {
-  ShowDialog();
+  ShowUi(std::string());
   EXPECT_TRUE(dialog_->Accept());
   EXPECT_TRUE(called_);
   EXPECT_TRUE(accept_);
@@ -120,7 +120,7 @@
 
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest,
                        TestAcceptWithChecked) {
-  ShowDialog();
+  ShowUi(std::string());
   SetChecked(true);
   EXPECT_TRUE(dialog_->Accept());
   EXPECT_TRUE(called_);
@@ -132,7 +132,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestCancel) {
-  ShowDialog();
+  ShowUi(std::string());
   EXPECT_TRUE(dialog_->Cancel());
   EXPECT_FALSE(called_);
   EXPECT_FALSE(accept_);
@@ -144,7 +144,7 @@
 
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest,
                        TestCancelWithChecked) {
-  ShowDialog();
+  ShowUi(std::string());
   SetChecked(true);
   EXPECT_TRUE(dialog_->Cancel());
   EXPECT_FALSE(called_);
@@ -157,7 +157,7 @@
 
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestClose) {
   // Closing the dialog should be the same as canceling, except for histograms.
-  ShowDialog();
+  ShowUi(std::string());
   EXPECT_TRUE(dialog_->Close());
   EXPECT_FALSE(called_);
   EXPECT_FALSE(accept_);
@@ -170,7 +170,7 @@
 IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest,
                        TestCloseWithChecked) {
   // Closing the dialog should be the same as canceling, except for histograms.
-  ShowDialog();
+  ShowUi(std::string());
   SetChecked(true);
   EXPECT_TRUE(dialog_->Close());
   EXPECT_FALSE(called_);
@@ -182,8 +182,7 @@
 }
 
 // Invokes a dialog that asks the user if an external application is allowed to
-// run. See test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest,
-                       InvokeDialog_default) {
-  RunDialog();
+// run.
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/feature_promos/bookmark_promo_dialog_browsertest.cc b/chrome/browser/ui/views/feature_promos/bookmark_promo_dialog_browsertest.cc
index 62b4c01..2091ae81 100644
--- a/chrome/browser/ui/views/feature_promos/bookmark_promo_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/feature_promos/bookmark_promo_dialog_browsertest.cc
@@ -14,7 +14,7 @@
   BookmarkPromoDialogTest() = default;
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     BrowserView::GetBrowserViewForBrowser(browser())
         ->toolbar()
         ->location_bar()
@@ -26,10 +26,7 @@
   DISALLOW_COPY_AND_ASSIGN(BookmarkPromoDialogTest);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// ../browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=BookmarkPromoDialogTest.InvokeDialog_BookmarkPromoBubble
-IN_PROC_BROWSER_TEST_F(BookmarkPromoDialogTest,
-                       InvokeDialog_BookmarkPromoBubble) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(BookmarkPromoDialogTest, InvokeUi_BookmarkPromoBubble) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/feature_promos/incognito_window_promo_dialog_browsertest.cc b/chrome/browser/ui/views/feature_promos/incognito_window_promo_dialog_browsertest.cc
index 2ad2b07..c394b9f 100644
--- a/chrome/browser/ui/views/feature_promos/incognito_window_promo_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/feature_promos/incognito_window_promo_dialog_browsertest.cc
@@ -16,7 +16,7 @@
   IncognitoWindowPromoDialogTest() = default;
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     feature_engagement::IncognitoWindowTrackerFactory::GetInstance()
         ->GetForProfile(browser()->profile())
         ->ShowPromo();
@@ -28,13 +28,10 @@
 
 }  // namespace
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// ../browser_tests --gtest_filter=BrowserDialogTest.Invoke
-// --interactive
-// --dialog=IncognitoWindowPromoDialogTest.InvokeDialog_IncognitoWindowPromo
+// Test that calls ShowUi("default").
 IN_PROC_BROWSER_TEST_F(IncognitoWindowPromoDialogTest,
-                       InvokeDialog_IncognitoWindowPromo) {
-  RunDialog();
+                       InvokeUi_IncognitoWindowPromo) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace feature_engagement
diff --git a/chrome/browser/ui/views/feature_promos/new_tab_promo_dialog_browsertest.cc b/chrome/browser/ui/views/feature_promos/new_tab_promo_dialog_browsertest.cc
index 575e7f0..4c92c8d 100644
--- a/chrome/browser/ui/views/feature_promos/new_tab_promo_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/feature_promos/new_tab_promo_dialog_browsertest.cc
@@ -12,7 +12,7 @@
   NewTabPromoDialogTest() = default;
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     // The promo only exists in the TabStripImpl.
     TabStripImpl* tab_strip_impl =
         BrowserView::GetBrowserViewForBrowser(browser())
@@ -26,9 +26,7 @@
   DISALLOW_COPY_AND_ASSIGN(NewTabPromoDialogTest);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// ../browser_tests --gtest_filter=BrowserDialogTest.Invoke
-// --interactive --dialog=NewTabPromoDialogTest.InvokeDialog_NewTabPromo
-IN_PROC_BROWSER_TEST_F(NewTabPromoDialogTest, InvokeDialog_NewTabPromo) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(NewTabPromoDialogTest, InvokeUi_NewTabPromo) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/first_run_bubble_browsertest.cc b/chrome/browser/ui/views/first_run_bubble_browsertest.cc
index 997cb49a..b5ef1166 100644
--- a/chrome/browser/ui/views/first_run_bubble_browsertest.cc
+++ b/chrome/browser/ui/views/first_run_bubble_browsertest.cc
@@ -14,7 +14,7 @@
   FirstRunBubbleBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     FirstRunBubble::Show(browser());
   }
 
@@ -23,7 +23,7 @@
 };
 
 // Invokes a dialog that tells the user they can type into the omnibox to search
-// with Google. See test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(FirstRunBubbleBrowserTest, InvokeDialog_default) {
-  RunDialog();
+// with Google.
+IN_PROC_BROWSER_TEST_F(FirstRunBubbleBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/hung_renderer_view_browsertest.cc b/chrome/browser/ui/views/hung_renderer_view_browsertest.cc
index 8f669bf..7ed9b27 100644
--- a/chrome/browser/ui/views/hung_renderer_view_browsertest.cc
+++ b/chrome/browser/ui/views/hung_renderer_view_browsertest.cc
@@ -20,7 +20,7 @@
   HungRendererDialogViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents();
     TabDialogs::FromWebContents(web_contents)
         ->ShowHungRendererDialog(content::WebContentsUnresponsiveState());
@@ -30,12 +30,11 @@
   DISALLOW_COPY_AND_ASSIGN(HungRendererDialogViewBrowserTest);
 };
 
-// Invokes the hung renderer (aka page unresponsive) dialog. See
-// test_browser_dialog.h.
+// Invokes the hung renderer (aka page unresponsive) dialog.
 // TODO(tapted): The framework sometimes doesn't pick up the spawned dialog and
-// the ASSERT_EQ in TestBrowserDialog::RunDialog() fails. This seems to only
+// the ASSERT_EQ in TestBrowserUi::ShowAndVerifyUi() fails. This seems to only
 // happen on the bots. So the test is disabled for now.
 IN_PROC_BROWSER_TEST_F(HungRendererDialogViewBrowserTest,
-                       DISABLED_InvokeDialog_default) {
-  RunDialog();
+                       DISABLED_InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/importer/import_lock_dialog_view_browsertest.cc b/chrome/browser/ui/views/importer/import_lock_dialog_view_browsertest.cc
index 766cc793..5e7c9d59 100644
--- a/chrome/browser/ui/views/importer/import_lock_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/importer/import_lock_dialog_view_browsertest.cc
@@ -15,7 +15,7 @@
   ImportLockDialogViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     gfx::NativeWindow native_window = browser()->window()->GetNativeWindow();
     ImportLockDialogView::Show(native_window, base::Callback<void(bool)>());
   }
@@ -25,7 +25,7 @@
 };
 
 // Invokes a dialog that implores the user to close Firefox before trying to
-// import data. See test_browser_dialog.h.
-IN_PROC_BROWSER_TEST_F(ImportLockDialogViewBrowserTest, InvokeDialog_default) {
-  RunDialog();
+// import data.
+IN_PROC_BROWSER_TEST_F(ImportLockDialogViewBrowserTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc b/chrome/browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc
index 1b4996a..a0997fa 100644
--- a/chrome/browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/content_setting_bubble_dialog_browsertest.cc
@@ -39,7 +39,7 @@
   void ShowDialogBubble(ContentSettingsType content_type,
                         ContentSettingImageModel::ImageType image_type);
 
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ContentSettingBubbleDialogTest);
@@ -110,7 +110,7 @@
                                static_cast<int>(image_type), 1);
 }
 
-void ContentSettingBubbleDialogTest::ShowDialog(const std::string& name) {
+void ContentSettingBubbleDialogTest::ShowUi(const std::string& name) {
   constexpr struct {
     const char* name;
     ContentSettingsType content_type;
@@ -148,68 +148,63 @@
   ADD_FAILURE() << "Unknown dialog type";
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeDialog_cookies) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_cookies) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeDialog_images) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_images) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_javascript) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_javascript) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeDialog_plugins) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_plugins) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeDialog_popups) {
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_popups) {
   ASSERT_TRUE(embedded_test_server()->Start());
-  RunDialog();
+  ShowAndVerifyUi();
+}
+
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_geolocation) {
+  ShowAndVerifyUi();
+}
+
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_ppapi_broker) {
+  ShowAndVerifyUi();
+}
+
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_mixed_script) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_geolocation) {
-  RunDialog();
+                       InvokeUi_mediastream_mic) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_ppapi_broker) {
-  RunDialog();
+                       InvokeUi_mediastream_camera) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_mixed_script) {
-  RunDialog();
+                       InvokeUi_protocol_handlers) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_mediastream_mic) {
-  RunDialog();
+                       InvokeUi_automatic_downloads) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_mediastream_camera) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_midi_sysex) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_protocol_handlers) {
-  RunDialog();
-}
-
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_automatic_downloads) {
-  RunDialog();
-}
-
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest,
-                       InvokeDialog_midi_sysex) {
-  RunDialog();
-}
-
-IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeDialog_ads) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ContentSettingBubbleDialogTest, InvokeUi_ads) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/location_bar/zoom_bubble_view_browsertest.cc b/chrome/browser/ui/views/location_bar/zoom_bubble_view_browsertest.cc
index c1db4d9..530eafe 100644
--- a/chrome/browser/ui/views/location_bar/zoom_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/zoom_bubble_view_browsertest.cc
@@ -162,7 +162,7 @@
   ZoomBubbleDialogTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
     content::WebContents* web_contents = browser_view->GetActiveWebContents();
     ZoomBubbleView::ShowBubble(web_contents, gfx::Point(),
@@ -173,9 +173,7 @@
   DISALLOW_COPY_AND_ASSIGN(ZoomBubbleDialogTest);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=ZoomBubbleDialogTest.InvokeDialog_default
-IN_PROC_BROWSER_TEST_F(ZoomBubbleDialogTest, InvokeDialog_default) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(ZoomBubbleDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc
index 488939be..5bf4408c 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc
@@ -113,7 +113,7 @@
   PageInfoBubbleViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     // All the possible test names.
     constexpr char kInsecure[] = "Insecure";
     constexpr char kInternal[] = "Internal";
@@ -396,90 +396,88 @@
 }
 
 // Shows the Page Info bubble for a HTTP page (specifically, about:blank).
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeDialog_Insecure) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_Insecure) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for a HTTPS page.
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeDialog_Secure) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_Secure) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for an internal page, e.g. chrome://settings.
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeDialog_Internal) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_Internal) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for an extensions page.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_InternalExtension) {
-  RunDialog();
+                       InvokeUi_InternalExtension) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for a chrome page that displays the source HTML.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_InternalViewSource) {
-  RunDialog();
+                       InvokeUi_InternalViewSource) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for a site flagged for malware by Safe Browsing.
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeDialog_Malware) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_Malware) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for a site flagged for social engineering by Safe
 // Browsing.
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeDialog_Deceptive) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_Deceptive) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for a site flagged for distributing unwanted
 // software by Safe Browsing.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_UnwantedSoftware) {
-  RunDialog();
+                       InvokeUi_UnwantedSoftware) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble Safe Browsing soft warning after detecting the
 // user has re-used an existing password on a site, e.g. due to phishing.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_PasswordReuseSoft) {
-  RunDialog();
+                       InvokeUi_PasswordReuseSoft) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble Safe Browsing warning after detecting the user has
 // re-used an existing password on a site, e.g. due to phishing.
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_PasswordReuse) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_PasswordReuse) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for an admin-provided cert when the page is
 // secure, but has a form that submits to an insecure url.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_MixedContentForm) {
-  RunDialog();
+                       InvokeUi_MixedContentForm) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble for an admin-provided cert when the page is
 // secure, but it uses insecure resources (e.g. images).
-IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_MixedContent) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest, InvokeUi_MixedContent) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble with all the permissions displayed with 'Allow'
 // set. All permissions will show regardless of its factory default value.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_AllowAllPermissions) {
-  RunDialog();
+                       InvokeUi_AllowAllPermissions) {
+  ShowAndVerifyUi();
 }
 
 // Shows the Page Info bubble with all the permissions displayed with 'Block'
 // set. All permissions will show regardless of its factory default value.
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
-                       InvokeDialog_BlockAllPermissions) {
-  RunDialog();
+                       InvokeUi_BlockAllPermissions) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewBrowserTest,
diff --git a/chrome/browser/ui/views/passwords/manage_password_items_view.cc b/chrome/browser/ui/views/passwords/manage_password_items_view.cc
index 800181f3..b7ff76bf 100644
--- a/chrome/browser/ui/views/passwords/manage_password_items_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_password_items_view.cc
@@ -133,7 +133,7 @@
     label->SetObscured(true);
   if (!form.federation_origin.unique())
     label->SetElideBehavior(gfx::ELIDE_HEAD);
-  label->SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY);
+
   return label;
 }
 
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_browsertest.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_browsertest.cc
index 52bbfa30..3832fe17b 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_browsertest.cc
@@ -16,7 +16,7 @@
   ManagePasswordsBubbleDialogViewTest() {}
   ~ManagePasswordsBubbleDialogViewTest() override {}
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     if (name == "PendingPasswordBubble") {
       SetupPendingPassword();
     } else if (name == "AutomaticPasswordBubble") {
@@ -40,12 +40,12 @@
     }
   }
 
-  // SupportsTestDialog:
+  // SupportsTestUi:
   void SetUp() override {
 #if defined(OS_MACOSX)
     UseMdOnly();  // This needs to be called during SetUp() on Mac.
 #endif
-    SupportsTestDialog::SetUp();
+    SupportsTestUi::SetUp();
   }
 
  private:
@@ -53,23 +53,23 @@
 };
 
 IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleDialogViewTest,
-                       InvokeDialog_PendingPasswordBubble) {
-  RunDialog();
+                       InvokeUi_PendingPasswordBubble) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleDialogViewTest,
-                       InvokeDialog_AutomaticPasswordBubble) {
-  RunDialog();
+                       InvokeUi_AutomaticPasswordBubble) {
+  ShowAndVerifyUi();
 }
 
 // Disabled: ExecuteManagePasswordsCommand() spins a runloop which will be flaky
 // in a browser test. See http://crbug.com/716681.
 IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleDialogViewTest,
-                       DISABLED_InvokeDialog_ManagePasswordBubble) {
-  RunDialog();
+                       DISABLED_InvokeUi_ManagePasswordBubble) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleDialogViewTest,
-                       InvokeDialog_AutoSignin) {
-  RunDialog();
+                       InvokeUi_AutoSignin) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
index 414d8fa..2fbc4dd 100644
--- a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
@@ -99,7 +99,7 @@
  public:
   // DialogBrowserTest:
   void SetUpOnMainThread() override;
-  void ShowDialog(const std::string& name) override;
+  void ShowUi(const std::string& name) override;
 
   void SetupChooseCredentials(
       std::vector<std::unique_ptr<autofill::PasswordForm>> local_credentials,
@@ -435,7 +435,7 @@
 }
 
 // DialogBrowserTest methods for interactive dialog invocation.
-void PasswordDialogViewTest::ShowDialog(const std::string& name) {
+void PasswordDialogViewTest::ShowUi(const std::string& name) {
   if (name == "AutoSigninFirstRun") {
     controller()->OnPromptEnableAutoSignin();
     return;
@@ -489,26 +489,24 @@
   }
 }
 
-IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest,
-                       InvokeDialog_PopupAutoSigninPrompt) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, InvokeUi_PopupAutoSigninPrompt) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(
     PasswordDialogViewTest,
-    InvokeDialog_PopupAccountChooserWithSingleCredentialClickSignIn) {
-  RunDialog();
+    InvokeUi_PopupAccountChooserWithSingleCredentialClickSignIn) {
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(
     PasswordDialogViewTest,
-    InvokeDialog_PopupAccountChooserWithMultipleCredentialClickSignIn) {
-  RunDialog();
+    InvokeUi_PopupAccountChooserWithMultipleCredentialClickSignIn) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest,
-                       InvokeDialog_AutoSigninFirstRun) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, InvokeUi_AutoSigninFirstRun) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/payments/payment_request_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
index 2c9f80f3..97b6f5e 100644
--- a/chrome/browser/ui/views/payments/payment_request_browsertest.cc
+++ b/chrome/browser/ui/views/payments/payment_request_browsertest.cc
@@ -434,9 +434,7 @@
   PaymentsRequestVisualTest() {}
 
   // TestBrowserDialog:
-  void ShowDialog(const std::string& name) override {
-    InvokePaymentRequestUI();
-  }
+  void ShowUi(const std::string& name) override { InvokePaymentRequestUI(); }
 
   bool AlwaysCloseAsynchronously() override {
     // Bypassing Widget::CanClose() causes payments::JourneyLogger to see the
@@ -448,9 +446,9 @@
   DISALLOW_COPY_AND_ASSIGN(PaymentsRequestVisualTest);
 };
 
-IN_PROC_BROWSER_TEST_F(PaymentsRequestVisualTest, InvokeDialog_NoShipping) {
+IN_PROC_BROWSER_TEST_F(PaymentsRequestVisualTest, InvokeUi_NoShipping) {
   NavigateTo("/payment_request_no_shipping_test.html");
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 class PaymentRequestSettingsLinkTest : public PaymentRequestBrowserTestBase {
diff --git a/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui.cc b/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui.cc
index ce5d97e..7f73dca4 100644
--- a/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui.cc
+++ b/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui.cc
@@ -12,8 +12,10 @@
 #include "chrome/browser/ui/views/device_chooser_content_view.h"
 #include "components/bubble/bubble_controller.h"
 #include "ui/views/bubble/bubble_dialog_delegate.h"
+#include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/styled_label.h"
 #include "ui/views/controls/table/table_view_observer.h"
+#include "ui/views/window/dialog_client_view.h"
 
 namespace {
 
@@ -46,7 +48,8 @@
   // views::DialogDelegate:
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
   bool IsDialogButtonEnabled(ui::DialogButton button) const override;
-  views::View* CreateFootnoteView() override;
+  views::View* GetInitiallyFocusedView() override;
+  views::View* CreateExtraView() override;
   bool Accept() override;
   bool Cancel() override;
   bool Close() override;
@@ -107,6 +110,10 @@
   return device_chooser_content_view_->GetWindowTitle();
 }
 
+views::View* ChooserBubbleUiViewDelegate::GetInitiallyFocusedView() {
+  return GetDialogClientView()->cancel_button();
+}
+
 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
     ui::DialogButton button) const {
   return device_chooser_content_view_->GetDialogButtonLabel(button);
@@ -117,8 +124,10 @@
   return device_chooser_content_view_->IsDialogButtonEnabled(button);
 }
 
-views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() {
-  return device_chooser_content_view_->footnote_link();
+views::View* ChooserBubbleUiViewDelegate::CreateExtraView() {
+  std::unique_ptr<views::View> extra_view =
+      device_chooser_content_view_->CreateExtraView();
+  return extra_view ? extra_view.release() : nullptr;
 }
 
 bool ChooserBubbleUiViewDelegate::Accept() {
diff --git a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view_browsertest.cc b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view_browsertest.cc
index 33d1dfd77..1bc5832 100644
--- a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view_browsertest.cc
@@ -20,7 +20,7 @@
   ForcedReauthenticationDialogViewBrowserTest() {}
 
   // override DialogBrowserTest
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     Profile* profile = browser()->profile();
     SigninManager* manager = SigninManagerFactory::GetForProfile(profile);
     manager->SetAuthenticatedAccountInfo("test1", "test@xyz.com");
@@ -35,8 +35,8 @@
 };
 
 IN_PROC_BROWSER_TEST_F(ForcedReauthenticationDialogViewBrowserTest,
-                       InvokeDialog_default) {
-  RunDialog();
+                       InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 // Dialog will not be display if there is no valid browser window.
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
index acb51eb1..cb201662 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view_browsertest.cc
@@ -125,8 +125,8 @@
   ProfileChooserViewExtensionsTest() {}
   ~ProfileChooserViewExtensionsTest() override {}
 
-  // SupportsTestDialog:
-  void ShowDialog(const std::string& name) override {
+  // SupportsTestUi:
+  void ShowUi(const std::string& name) override {
     constexpr char kSignedIn[] = "SignedIn";
     constexpr char kMultiProfile[] = "MultiProfile";
     constexpr char kGuest[] = "Guest";
@@ -388,43 +388,42 @@
 }
 
 // Shows a non-signed in profile with no others.
-IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 // Shows a signed in profile with no others.
-IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
-                       InvokeDialog_SignedIn) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, InvokeUi_SignedIn) {
+  ShowAndVerifyUi();
 }
 
 // Shows the |ProfileChooserView| with three different profiles.
 IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
-                       InvokeDialog_MultiProfile) {
-  RunDialog();
+                       InvokeUi_MultiProfile) {
+  ShowAndVerifyUi();
 }
 
 // Shows the |ProfileChooserView| during a Guest browsing session.
-IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, InvokeDialog_Guest) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest, InvokeUi_Guest) {
+  ShowAndVerifyUi();
 }
 
 // Shows the manage account link, which appears when account consistency is
 // enabled for signed-in accounts.
 IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
-                       InvokeDialog_ManageAccountLink) {
-  RunDialog();
+                       InvokeUi_ManageAccountLink) {
+  ShowAndVerifyUi();
 }
 
 // Shows the |ProfileChooserView| from a signed-in account that has a supervised
 // user profile attached.
 IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
-                       InvokeDialog_SupervisedOwner) {
-  RunDialog();
+                       InvokeUi_SupervisedOwner) {
+  ShowAndVerifyUi();
 }
 
 // Shows the |ProfileChooserView| when a supervised user is the active profile.
 IN_PROC_BROWSER_TEST_F(ProfileChooserViewExtensionsTest,
-                       InvokeDialog_SupervisedUser) {
-  RunDialog();
+                       InvokeUi_SupervisedUser) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc
index 1ec7bd6a..a8dc24b 100644
--- a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc
@@ -27,7 +27,7 @@
   ~PasswordReuseModalWarningTest() override {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     content::WebContents* web_contents =
         browser()->tab_strip_model()->GetActiveWebContents();
     dialog_ = new PasswordReuseModalWarningDialog(
@@ -59,16 +59,16 @@
   DISALLOW_COPY_AND_ASSIGN(PasswordReuseModalWarningTest);
 };
 
-IN_PROC_BROWSER_TEST_F(PasswordReuseModalWarningTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(PasswordReuseModalWarningTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(PasswordReuseModalWarningTest, InvokeDialog_softer) {
+IN_PROC_BROWSER_TEST_F(PasswordReuseModalWarningTest, InvokeUi_softer) {
   base::test::ScopedFeatureList feature_list;
   feature_list.InitAndEnableFeatureWithParameters(
       safe_browsing::kGoogleBrandedPhishingWarning,
       {{"softer_warning", "true"}});
-  RunDialog();
+  ShowAndVerifyUi();
 }
 
 IN_PROC_BROWSER_TEST_F(PasswordReuseModalWarningTest, TestBasicDialogBehavior) {
@@ -76,13 +76,13 @@
 
   // Simulating a click on ui::DIALOG_BUTTON_OK button results in a
   // CHANGE_PASSWORD action.
-  ShowDialog(std::string());
+  ShowUi(std::string());
   dialog_->GetDialogClientView()->AcceptWindow();
   EXPECT_EQ(PasswordProtectionService::CHANGE_PASSWORD, latest_user_action_);
 
   // Simulating a click on ui::DIALOG_BUTTON_CANCEL button results in an
   // IGNORE_WARNING action.
-  ShowDialog(std::string());
+  ShowUi(std::string());
   dialog_->GetDialogClientView()->CancelWindow();
   EXPECT_EQ(PasswordProtectionService::IGNORE_WARNING, latest_user_action_);
 }
@@ -91,7 +91,7 @@
                        CloseDialogWhenWebContentsDestroyed) {
   ASSERT_TRUE(embedded_test_server()->Start());
 
-  ShowDialog(std::string());
+  ShowUi(std::string());
   CloseActiveWebContents();
   EXPECT_EQ(PasswordProtectionService::CLOSE, latest_user_action_);
 }
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc b/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
index 938c5049..827bba3 100644
--- a/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/session_crashed_bubble_view_browsertest.cc
@@ -18,7 +18,7 @@
   SessionCrashedBubbleViewTest() {}
   ~SessionCrashedBubbleViewTest() override {}
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser())
                                    ->toolbar()
                                    ->app_menu_button();
@@ -32,6 +32,6 @@
 };
 
 IN_PROC_BROWSER_TEST_F(SessionCrashedBubbleViewTest,
-                       InvokeDialog_SessionCrashedBubble) {
-  RunDialog();
+                       InvokeUi_SessionCrashedBubble) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc
index 31a4243..346cde5a 100644
--- a/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc
@@ -148,7 +148,7 @@
 
 class SettingsResetPromptDialogTest : public DialogBrowserTest {
  public:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     const std::map<std::string, ModelParams> name_to_model_params = {
         {"DefaultSearchEngineChanged",
          {SettingType::DEFAULT_SEARCH_ENGINE, 0, 0}},
@@ -183,55 +183,54 @@
 };
 
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_DefaultSearchEngineChanged) {
-  RunDialog();
+                       InvokeUi_DefaultSearchEngineChanged) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_SingleStartupPageChanged) {
-  RunDialog();
+                       InvokeUi_SingleStartupPageChanged) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_MultipleStartupPagesChanged) {
-  RunDialog();
+                       InvokeUi_MultipleStartupPagesChanged) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_HomePageChanged) {
-  RunDialog();
+                       InvokeUi_HomePageChanged) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_DefaultSearchEngineChangedByExtension) {
-  RunDialog();
+                       InvokeUi_DefaultSearchEngineChangedByExtension) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_SingleStartupPageChangedByExtension) {
-  RunDialog();
+                       InvokeUi_SingleStartupPageChangedByExtension) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_MultipleStartupPagesChangedByExtension) {
-  RunDialog();
+                       InvokeUi_MultipleStartupPagesChangedByExtension) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_HomePageChangedByExtension) {
-  RunDialog();
+                       InvokeUi_HomePageChangedByExtension) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(
     SettingsResetPromptDialogTest,
-    InvokeDialog_DefaultSearchEngineChangedByMultipleExtensions) {
-  RunDialog();
-}
-IN_PROC_BROWSER_TEST_F(
-    SettingsResetPromptDialogTest,
-    InvokeDialog_SingleStartupPageChangedByMultipleExtensions) {
-  RunDialog();
-}
-IN_PROC_BROWSER_TEST_F(
-    SettingsResetPromptDialogTest,
-    InvokeDialog_MultipleStartupPagesChangedByMultipleExtensions) {
-  RunDialog();
+    InvokeUi_DefaultSearchEngineChangedByMultipleExtensions) {
+  ShowAndVerifyUi();
 }
 IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
-                       InvokeDialog_HomePageChangedByMultipleExtensions) {
-  RunDialog();
+                       InvokeUi_SingleStartupPageChangedByMultipleExtensions) {
+  ShowAndVerifyUi();
+}
+IN_PROC_BROWSER_TEST_F(
+    SettingsResetPromptDialogTest,
+    InvokeUi_MultipleStartupPagesChangedByMultipleExtensions) {
+  ShowAndVerifyUi();
+}
+IN_PROC_BROWSER_TEST_F(SettingsResetPromptDialogTest,
+                       InvokeUi_HomePageChangedByMultipleExtensions) {
+  ShowAndVerifyUi();
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc
index f0f1d46..ff3af99 100644
--- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc
+++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc
@@ -43,7 +43,7 @@
     DialogBrowserTest::SetUp();
   }
 
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     Profile* profile = browser()->profile();
 
     // Add a bookmark to ensure CheckShouldPromptForNewProfile() returns true.
@@ -65,10 +65,7 @@
   DISALLOW_COPY_AND_ASSIGN(ProfileSigninConfirmationDialogTest);
 };
 
-// Test that calls ShowDialog("default"). Interactive when run via
-// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive
-// --dialog=ProfileSigninConfirmationDialogTest.InvokeDialog_default
-IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationDialogTest,
-                       InvokeDialog_default) {
-  RunDialog();
+// Test that calls ShowUi("default").
+IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/views/toolbar/outdated_upgrade_bubble_view_browsertest.cc b/chrome/browser/ui/views/toolbar/outdated_upgrade_bubble_view_browsertest.cc
index bd9b68b5..58fb244 100644
--- a/chrome/browser/ui/views/toolbar/outdated_upgrade_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/toolbar/outdated_upgrade_bubble_view_browsertest.cc
@@ -14,7 +14,7 @@
   OutdatedUpgradeBubbleTest() = default;
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     ToolbarView* toolbar_view =
         BrowserView::GetBrowserViewForBrowser(browser())->toolbar();
     if (name == "Outdated")
@@ -31,17 +31,17 @@
   DISALLOW_COPY_AND_ASSIGN(OutdatedUpgradeBubbleTest);
 };
 
-IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeDialog_Outdated) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeUi_Outdated) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeDialog_NoAutoUpdate) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeUi_NoAutoUpdate) {
+  ShowAndVerifyUi();
 }
 
 // The critical upgrade dialog is intentionally only shown on Windows.
 #if defined(OS_WIN)
-IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeDialog_Critical) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(OutdatedUpgradeBubbleTest, InvokeUi_Critical) {
+  ShowAndVerifyUi();
 }
 #endif
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog_browsertest.cc b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog_browsertest.cc
index b3ecee5..0c7f30b1 100644
--- a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog_browsertest.cc
@@ -78,7 +78,7 @@
 // functionality.
 class TryChromeDialogBrowserTestBase : public InProcessBrowserTest {
  public:
-  // Breaks ShowDialog() out of its modal run loop.
+  // Breaks ShowDialogSync() out of its modal run loop.
   void QuitModalLoop() {
     if (quit_closure_)
       quit_closure_.Run();
@@ -289,19 +289,19 @@
   TryChromeDialogTest()
       : SupportsTestDialog<TryChromeDialogBrowserTestBase>(GetParam()) {}
 
-  // SupportsTestDialog:
+  // SupportsTestUi:
   void SetUp() override {
     UseMdOnly();
-    SupportsTestDialog::SetUp();
+    SupportsTestUi::SetUp();
   }
-  void ShowDialog(const std::string& name) override { ShowDialogSync(); }
+  void ShowUi(const std::string& name) override { ShowDialogSync(); }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TryChromeDialogTest);
 };
 
-IN_PROC_BROWSER_TEST_P(TryChromeDialogTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_P(TryChromeDialogTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 
 INSTANTIATE_TEST_CASE_P(
diff --git a/chrome/browser/ui/views/uninstall_view_browsertest.cc b/chrome/browser/ui/views/uninstall_view_browsertest.cc
index 7a37338..cc6a8f2 100644
--- a/chrome/browser/ui/views/uninstall_view_browsertest.cc
+++ b/chrome/browser/ui/views/uninstall_view_browsertest.cc
@@ -14,7 +14,7 @@
   UninstallViewBrowserTest() {}
 
   // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
+  void ShowUi(const std::string& name) override {
     // UninstallView may need to know whether Chrome is the default browser,
     // which requires IO. Since this is a test, we'll just allow that.
     base::ThreadRestrictions::SetIOAllowed(true);
@@ -31,12 +31,10 @@
   DISALLOW_COPY_AND_ASSIGN(UninstallViewBrowserTest);
 };
 
-// Invokes a dialog confirming that the user wants to uninstall Chrome. See
-// test_browser_dialog.h.
+// Invokes a dialog confirming that the user wants to uninstall Chrome.
 // Disabled because the build bots don't click to dismiss the dialog, they just
 // wait for it to time out. Unfortunately because we have to explicitly exit
-// (see ShowDialog above) this approach doesn't work.
-IN_PROC_BROWSER_TEST_F(UninstallViewBrowserTest,
-                       DISABLED_InvokeDialog_default) {
-  RunDialog();
+// (see ShowUi above) this approach doesn't work.
+IN_PROC_BROWSER_TEST_F(UninstallViewBrowserTest, DISABLED_InvokeUi_default) {
+  ShowAndVerifyUi();
 }
diff --git a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc
index 5b98e6c53..2cd8d3a9 100644
--- a/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc
+++ b/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc
@@ -9,6 +9,7 @@
 
 #include "base/base_switches.h"
 #include "base/command_line.h"
+#include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/flag_descriptions.h"
 #include "chrome/browser/net/nqe/ui_network_quality_estimator_service.h"
@@ -91,7 +92,6 @@
     mojom::InterventionsInternalsPagePtr page) {
   page_ = std::move(page);
   DCHECK(page_);
-  OnEffectiveConnectionTypeChanged(current_estimated_ect_);
   logger_->AddAndNotifyObserver(this);
   ui_nqe_service_->AddEffectiveConnectionTypeObserver(this);
 }
@@ -103,8 +103,15 @@
     // Don't try to notify the page if |page_| is not ready.
     return;
   }
-  page_->OnEffectiveConnectionTypeChanged(
-      net::GetNameForEffectiveConnectionType(type));
+  std::string ect_name = net::GetNameForEffectiveConnectionType(type);
+  page_->OnEffectiveConnectionTypeChanged(ect_name);
+
+  // Log change ECT event.
+  previews::PreviewsLogger::MessageLog message(
+      "ECT Changed" /* event_type */,
+      "Effective Connection Type changed to " + ect_name, GURL(""),
+      base::Time::Now(), 0 /* page_id */);
+  OnNewMessageLogAdded(message);
 }
 
 void InterventionsInternalsPageHandler::OnNewMessageLogAdded(
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index c324c609..152141a 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -579,7 +579,7 @@
 
 // Enables or disables Chrome OS Component updates on Chrome OS.
 const base::Feature kCrOSComponent{"CrOSComponent",
-                                   base::FEATURE_DISABLED_BY_DEFAULT};
+                                   base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables or disables Chrome OS Container utility on Chrome OS.
 const base::Feature kCrOSContainer{"CrOSContainer",
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8c0c443..66c0f67 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -784,11 +784,13 @@
       "../browser/ui/sync/profile_signin_confirmation_helper_browsertest.cc",
       "../browser/ui/tab_modal_confirm_dialog_browsertest.cc",
       "../browser/ui/tab_modal_confirm_dialog_browsertest.h",
-      "../browser/ui/test/browser_dialog_browsertest.cc",
+      "../browser/ui/test/browser_ui_browsertest.cc",
       "../browser/ui/test/test_browser_dialog.cc",
       "../browser/ui/test/test_browser_dialog.h",
       "../browser/ui/test/test_browser_dialog_mac.h",
       "../browser/ui/test/test_browser_dialog_mac.mm",
+      "../browser/ui/test/test_browser_ui.cc",
+      "../browser/ui/test/test_browser_ui.h",
       "../browser/ui/toolbar/browser_actions_bar_browsertest.cc",
       "../browser/ui/toolbar/browser_actions_bar_browsertest.h",
       "../browser/ui/toolbar/component_toolbar_actions_browsertest.cc",
diff --git a/chrome/test/base/browser_tests_main.cc b/chrome/test/base/browser_tests_main.cc
index d0d20b0..0ef205d 100644
--- a/chrome/test/base/browser_tests_main.cc
+++ b/chrome/test/base/browser_tests_main.cc
@@ -10,7 +10,7 @@
 
 #if defined(OS_WIN)
 #include "base/win/win_util.h"
-#include "chrome/browser/ui/test/test_browser_dialog.h"
+#include "chrome/browser/ui/test/test_browser_ui.h"
 #endif  // defined(OS_WIN)
 
 int main(int argc, char** argv) {
diff --git a/chrome/test/data/webui/interventions_internals_browsertest.js b/chrome/test/data/webui/interventions_internals_browsertest.js
index b802f29..9391ab5 100644
--- a/chrome/test/data/webui/interventions_internals_browsertest.js
+++ b/chrome/test/data/webui/interventions_internals_browsertest.js
@@ -86,25 +86,6 @@
 
     window.testPageHandler = new TestPageHandler();
 
-    /**
-     * Convert milliseconds to human readable date/time format.
-     * The return format will be "MM/dd/YYYY hh:mm:ss.sss"
-     * @param {number} time Time in millisecond since Unix Epoch.
-     * @return The converted string format.
-     */
-    getTimeFormat = function(time) {
-      let date = new Date(time);
-      let options = {
-        year: 'numeric',
-        month: '2-digit',
-        day: '2-digit',
-      };
-
-      let timeString = date.toLocaleDateString('en-US', options);
-      return dateString + ' ' + date.getHours() + ':' + date.getMinutes() +
-          ':' + date.getSeconds() + '.' + date.getMilliseconds();
-    };
-
     getBlacklistedStatus = function(blacklisted) {
       return (blacklisted ? 'Blacklisted' : 'Not blacklisted');
     };
@@ -212,6 +193,7 @@
         description: 'Some description_a',
         url: {url: 'Some gurl.spec()_a'},
         time: 1507221689240,  // Oct 05 2017 16:41:29 UTC
+        expectedTime: '10/05/2017 09:41:29.240',
         pageId: 0,
       },
       {
@@ -219,6 +201,7 @@
         description: 'Some description_b',
         url: {url: 'Some gurl.spec()_b'},
         time: 758675653000,  // Jan 15 1994 23:14:13 UTC
+        expectedTime: '01/15/1994 15:14:13.000',
         pageId: 0,
       },
       {
@@ -226,6 +209,7 @@
         description: 'Some description_c',
         url: {url: 'Some gurl.spec()_c'},
         time: -314307870000,  // Jan 16 1960 04:15:30 UTC
+        expectedTime: '01/15/1960 20:15:30.000',
         pageId: 0,
       },
     ];
@@ -238,13 +222,13 @@
     expectEquals(logs.length, rows.length);
 
     logs.forEach((log, index) => {
-      let expectedTime = getTimeFormat(log.time);
       let row = rows[logs.length - index - 1];  // Expecting reversed order.
                                                 // (i.e. a new log message is
                                                 // appended to the top of the
                                                 // log table).
 
-      expectEquals(expectedTime, row.querySelector('.log-time').textContent);
+      expectEquals(
+          log.expectedTime, row.querySelector('.log-time').textContent);
       expectEquals(log.type, row.querySelector('.log-type').textContent);
       expectEquals(
           log.description, row.querySelector('.log-description').textContent);
diff --git a/components/cronet/ios/Cronet.h b/components/cronet/ios/Cronet.h
index 8ef22fe..18d0de0 100644
--- a/components/cronet/ios/Cronet.h
+++ b/components/cronet/ios/Cronet.h
@@ -33,17 +33,6 @@
 // be handled.
 typedef BOOL (^RequestFilterBlock)(NSURLRequest* request);
 
-// A delegate that a client can pass to Cronet to collect metrics for a
-// session task. The delegate can be added and removed by calling
-// [Cronet addMetricsDelegate:] and [Cronet removeMetricsDelegate:] methods
-// respectively.
-@protocol CronetMetricsDelegate <NSObject>
-// Is invoked by Cronet when the metrics for the task are ready.
-- (void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task
-                    didFinishCollectingMetrics:(NSURLSessionTaskMetrics*)metrics
-    NS_AVAILABLE_IOS(10.0);
-@end
-
 // Interface for installing Cronet.
 // TODO(gcasto): Should this macro be separate from the one defined in
 // bidirectional_stream_c.h?
@@ -66,6 +55,10 @@
 // any effect before |start| is called.
 + (void)setBrotliEnabled:(BOOL)brotliEnabled;
 
+// Sets whether Metrics should be collected by CronetEngine. This method only
+// has any effect before |start| is called.
++ (void)setMetricsEnabled:(BOOL)metricsEnabled;
+
 // Set HTTP Cache type to be used by CronetEngine.  This method only has any
 // effect before |start| is called.  See HttpCacheType enum for available
 // options.
@@ -206,19 +199,4 @@
 // This method only has any effect before |start| is called.
 + (void)enableTestCertVerifierForTesting;
 
-// Registers a CronetMetricsDelegate callback.  The client is responsible for
-// creating an object which implements CronetMetricsDelegate, and passing
-// that as a |delegate|.  Returns |YES| if the delegate is added successfully,
-// and |NO| if it was not (because there is already an identical delegate
-// registered).
-+ (BOOL)addMetricsDelegate:(id<CronetMetricsDelegate>)delegate
-    NS_AVAILABLE_IOS(10.0);
-
-// Unregisters a CronetMetricsDelegate callback.  |delegate| should be a
-// pointer to the delegate which is to be removed.  It returns |YES| if the
-// delegate is successfully removed and |NO| if the delegate is not
-// contained in the set of delegates (and therefore cannot be removed).
-+ (BOOL)removeMetricsDelegate:(id<CronetMetricsDelegate>)delegate
-    NS_AVAILABLE_IOS(10.0);
-
 @end
diff --git a/components/cronet/ios/Cronet.mm b/components/cronet/ios/Cronet.mm
index fdab2aa..3986be1 100644
--- a/components/cronet/ios/Cronet.mm
+++ b/components/cronet/ios/Cronet.mm
@@ -15,6 +15,7 @@
 #include "base/synchronization/lock.h"
 #include "components/cronet/ios/accept_languages_table.h"
 #include "components/cronet/ios/cronet_environment.h"
+#include "components/cronet/ios/cronet_metrics.h"
 #include "components/cronet/url_request_context_config.h"
 #include "ios/net/crn_http_protocol_handler.h"
 #include "ios/net/empty_nsurlcache.h"
@@ -45,11 +46,15 @@
 base::LazyInstance<std::unique_ptr<CronetHttpProtocolHandlerDelegate>>::Leaky
     gHttpProtocolHandlerDelegate = LAZY_INSTANCE_INITIALIZER;
 
+base::LazyInstance<std::unique_ptr<cronet::CronetMetricsDelegate>>::Leaky
+    gMetricsDelegate = LAZY_INSTANCE_INITIALIZER;
+
 // See [Cronet initialize] method to set the default values of the global
 // variables.
 BOOL gHttp2Enabled;
 BOOL gQuicEnabled;
 BOOL gBrotliEnabled;
+BOOL gMetricsEnabled;
 cronet::URLRequestContextConfig::HttpCacheType gHttpCache;
 QuicHintVector gQuicHints;
 NSString* gExperimentalOptions;
@@ -63,7 +68,7 @@
 std::unique_ptr<net::CertVerifier> gMockCertVerifier;
 NSString* gAcceptLanguages;
 BOOL gEnablePKPBypassForLocalTrustAnchors;
-NSMutableSet<id<CronetMetricsDelegate>>* gMetricsDelegates;
+dispatch_once_t gSwizzleOnceToken;
 
 // CertVerifier, which allows any certificates for testing.
 class TestCertVerifier : public net::CertVerifier {
@@ -189,6 +194,11 @@
   gBrotliEnabled = brotliEnabled;
 }
 
++ (void)setMetricsEnabled:(BOOL)metricsEnabled {
+  [self checkNotStarted];
+  gMetricsEnabled = metricsEnabled;
+}
+
 + (BOOL)addQuicHint:(NSString*)host port:(int)port altPort:(int)altPort {
   [self checkNotStarted];
 
@@ -332,6 +342,18 @@
           gChromeNet.Get()->GetURLRequestContextGetter(), gRequestFilterBlock));
   net::HTTPProtocolHandlerDelegate::SetInstance(
       gHttpProtocolHandlerDelegate.Get().get());
+
+  if (gMetricsEnabled) {
+    gMetricsDelegate.Get().reset(new cronet::CronetMetricsDelegate());
+    net::MetricsDelegate::SetInstance(gMetricsDelegate.Get().get());
+
+    dispatch_once(&gSwizzleOnceToken, ^{
+      cronet::SwizzleSessionWithConfiguration();
+    });
+  } else {
+    net::MetricsDelegate::SetInstance(nullptr);
+  }
+
   gRequestFilterBlock = nil;
 }
 
@@ -350,7 +372,14 @@
   [self startInternal];
 }
 
++ (void)unswizzleForTesting {
+  if (gSwizzleOnceToken)
+    cronet::SwizzleSessionWithConfiguration();
+  gSwizzleOnceToken = 0;
+}
+
 + (void)shutdownForTesting {
+  [Cronet unswizzleForTesting];
   [Cronet initialize];
 }
 
@@ -496,6 +525,7 @@
   gHttp2Enabled = YES;
   gQuicEnabled = NO;
   gBrotliEnabled = NO;
+  gMetricsEnabled = NO;
   gHttpCache = cronet::URLRequestContextConfig::HttpCacheType::DISK;
   gQuicHints.clear();
   gExperimentalOptions = @"{}";
@@ -505,32 +535,12 @@
   gPkpList.clear();
   gRequestFilterBlock = nil;
   gHttpProtocolHandlerDelegate.Get().reset(nullptr);
+  gMetricsDelegate.Get().reset(nullptr);
   gPreservedSharedURLCache = nil;
   gEnableTestCertVerifierForTesting = NO;
   gMockCertVerifier.reset(nullptr);
   gAcceptLanguages = nil;
   gEnablePKPBypassForLocalTrustAnchors = YES;
-  gMetricsDelegates = [NSMutableSet set];
-}
-
-+ (BOOL)addMetricsDelegate:(id<CronetMetricsDelegate>)delegate {
-  @synchronized(gMetricsDelegates) {
-    if ([gMetricsDelegates containsObject:delegate]) {
-      return NO;
-    }
-    [gMetricsDelegates addObject:delegate];
-    return YES;
-  }
-}
-
-+ (BOOL)removeMetricsDelegate:(id<CronetMetricsDelegate>)delegate {
-  @synchronized(gMetricsDelegates) {
-    if ([gMetricsDelegates containsObject:delegate]) {
-      [gMetricsDelegates removeObject:delegate];
-      return YES;
-    }
-    return NO;
-  }
 }
 
 @end
diff --git a/components/cronet/ios/cronet_metrics.h b/components/cronet/ios/cronet_metrics.h
index 553bb5a1..4754aa3 100644
--- a/components/cronet/ios/cronet_metrics.h
+++ b/components/cronet/ios/cronet_metrics.h
@@ -8,31 +8,106 @@
 #import <Foundation/Foundation.h>
 
 #include "components/grpc_support/include/bidirectional_stream_c.h"
+#import "ios/net/crn_http_protocol_handler.h"
+#include "net/http/http_network_session.h"
+
+// These are internal versions of NSURLSessionTaskTransactionMetrics and
+// NSURLSessionTaskMetrics, defined primarily so that Cronet can
+// initialize them and set their properties (the iOS classes are readonly).
+
+// The correspondences are
+//   CronetTransactionMetrics -> NSURLSessionTaskTransactionMetrics
+//   CronetMetrics -> NSURLSessionTaskMetrics
 
 FOUNDATION_EXPORT GRPC_SUPPORT_EXPORT NS_AVAILABLE_IOS(10.0)
-@interface CronetMetrics : NSURLSessionTaskTransactionMetrics
+@interface CronetTransactionMetrics : NSURLSessionTaskTransactionMetrics
 
+// All of the below redefined as readwrite.
+
+// This is set to [task currentRequest].
 @property(copy, readwrite) NSURLRequest* request;
+// This is set to [task response].
 @property(copy, readwrite) NSURLResponse* response;
 
+// This is set to net::LoadTimingInfo::request_start_time.
 @property(copy, readwrite) NSDate* fetchStartDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::dns_start.
 @property(copy, readwrite) NSDate* domainLookupStartDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::dns_end.
 @property(copy, readwrite) NSDate* domainLookupEndDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::connect_start.
 @property(copy, readwrite) NSDate* connectStartDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::ssl_start.
 @property(copy, readwrite) NSDate* secureConnectionStartDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::ssl_end.
 @property(copy, readwrite) NSDate* secureConnectionEndDate;
+// This is set to net::LoadTimingInfo::ConnectTiming::connect_end.
 @property(copy, readwrite) NSDate* connectEndDate;
+// This is set to net::LoadTimingInfo::sent_start.
 @property(copy, readwrite) NSDate* requestStartDate;
+// This is set to net::LoadTimingInfo::send_end.
 @property(copy, readwrite) NSDate* requestEndDate;
+// This is set to net::LoadTimingInfo::receive_headers_end.
 @property(copy, readwrite) NSDate* responseStartDate;
+// This is set to net::MetricsDelegate::Metrics::response_end_time.
 @property(copy, readwrite) NSDate* responseEndDate;
 
+// This is set to net::HttpResponseInfo::connection_info.
 @property(copy, readwrite) NSString* networkProtocolName;
+// This is set to YES if net::HttpResponseInfo::proxy_server.is_direct()
+// returns false.
 @property(assign, readwrite, getter=isProxyConnection) BOOL proxyConnection;
+// This is set to YES if net::LoadTimingInfo::ConnectTiming::conect_start is
+// null.
 @property(assign, readwrite, getter=isReusedConnection) BOOL reusedConnection;
+// This is set to LocalCache if net::HttpResponseInfo::was_cached is true, set
+// to ServerPush if net::LoadTimingInfo::push_start is non-null, and set to
+// NetworkLoad otherwise.
 @property(assign, readwrite)
     NSURLSessionTaskMetricsResourceFetchType resourceFetchType;
 
+- (NSString*)description;
+
 @end
 
+// This is an internal version of NSURLSessionTaskMetrics - see comment above
+// CronetTransactionMetrics.
+NS_AVAILABLE_IOS(10.0) @interface CronetMetrics : NSURLSessionTaskMetrics
+// Redefined as readwrite.
+@property(copy, readwrite)
+    NSArray<NSURLSessionTaskTransactionMetrics*>* transactionMetrics;
+@end
+
+namespace cronet {
+
+// net::MetricsDelegate for Cronet.
+class CronetMetricsDelegate : public net::MetricsDelegate {
+ public:
+  using Metrics = net::MetricsDelegate::Metrics;
+
+  CronetMetricsDelegate() {}
+  void OnStartNetRequest(NSURLSessionTask* task) override;
+  void OnStopNetRequest(std::unique_ptr<Metrics> metrics) override;
+
+  // Returns the metrics collected for a specific task (removing that task's
+  // entry from the map in the process).
+  // It is called exactly once by the swizzled delegate proxy (see below),
+  // uses it to retrieve metrics data collected by net/ and pass them on to
+  // the client. If there is no metrics data for the passed task, this returns
+  // nullptr.
+  static std::unique_ptr<Metrics> MetricsForTask(NSURLSessionTask* task);
+ private:
+  static NSObject* task_metrics_map_lock_;
+  static std::map<NSURLSessionTask*, std::unique_ptr<Metrics>>
+      task_metrics_map_;
+};
+
+// This is the swizzling function that Cronet (in its startInternal
+// method) calls to inject the proxy delegate into iOS networking API and
+// intercept didFinishCollectingMetrics to replace the (empty) iOS metrics data
+// with metrics data from net.
+void SwizzleSessionWithConfiguration();
+
+}  // namespace cronet
+
 #endif // COMPONENTS_CRONET_IOS_CRONET_METRICS_H_
diff --git a/components/cronet/ios/cronet_metrics.mm b/components/cronet/ios/cronet_metrics.mm
index 735f9f6c..61a0b1f 100644
--- a/components/cronet/ios/cronet_metrics.mm
+++ b/components/cronet/ios/cronet_metrics.mm
@@ -4,7 +4,11 @@
 
 #import "components/cronet/ios/cronet_metrics.h"
 
-@implementation CronetMetrics
+#include <objc/runtime.h>
+
+#include "base/strings/sys_string_conversions.h"
+
+@implementation CronetTransactionMetrics
 
 @synthesize request = _request;
 @synthesize response = _response;
@@ -26,4 +30,307 @@
 @synthesize reusedConnection = _reusedConnection;
 @synthesize resourceFetchType = _resourceFetchType;
 
+// The NSURLSessionTaskTransactionMetrics and NSURLSessionTaskMetrics classes
+// are not supposed to be extended.  Its default init method initialized an
+// internal class, and therefore needs to be overridden to explicitly
+// initialize (and return) an instance of this class.
+// The |self = old_self| swap is necessary because [super init] must be
+// assigned to self (or returned immediately), but in this case is returning
+// a value of the wrong type.
+
+- (instancetype)init {
+  id old_self = self;
+  self = [super init];
+  self = old_self;
+  return old_self;
+}
+
+- (NSString*)description {
+  return [NSString
+      stringWithFormat:
+          @""
+           "fetchStartDate: %@\n"
+           "domainLookupStartDate: %@\n"
+           "domainLookupEndDate: %@\n"
+           "connectStartDate: %@\n"
+           "secureConnectionStartDate: %@\n"
+           "secureConnectionEndDate: %@\n"
+           "connectEndDate: %@\n"
+           "requestStartDate: %@\n"
+           "requestEndDate: %@\n"
+           "responseStartDate: %@\n"
+           "responseEndDate: %@\n"
+           "networkProtocolName: %@\n"
+           "proxyConnection: %i\n"
+           "reusedConnection: %i\n"
+           "resourceFetchType: %lu\n",
+          [self fetchStartDate], [self domainLookupStartDate],
+          [self domainLookupEndDate], [self connectStartDate],
+          [self secureConnectionStartDate], [self secureConnectionEndDate],
+          [self connectEndDate], [self requestStartDate], [self requestEndDate],
+          [self responseStartDate], [self responseEndDate],
+          [self networkProtocolName], [self isProxyConnection],
+          [self isReusedConnection], (long)[self resourceFetchType]];
+}
+
 @end
+
+@implementation CronetMetrics
+
+@synthesize transactionMetrics = _transactionMetrics;
+
+- (instancetype)init {
+  id old_self = self;
+  self = [super init];
+  self = old_self;
+  return old_self;
+}
+
+@end
+
+namespace {
+
+using Metrics = net::MetricsDelegate::Metrics;
+
+// Helper method that converts the ticks data found in LoadTimingInfo to an
+// NSDate value to be used in client-side data.
+NSDate* TicksToDate(const net::LoadTimingInfo& reference,
+                    const base::TimeTicks& ticks) {
+  if (ticks.is_null())
+    return nil;
+  base::Time ticks_since_1970 =
+      (reference.request_start_time + (ticks - reference.request_start));
+  return [NSDate dateWithTimeIntervalSince1970:ticks_since_1970.ToDoubleT()];
+}
+
+// Converts Metrics metrics data into CronetTransactionMetrics (which
+// importantly implements the NSURLSessionTaskTransactionMetrics API)
+CronetTransactionMetrics* NativeToIOSMetrics(Metrics& metrics)
+    NS_AVAILABLE_IOS(10.0) {
+  NSURLSessionTask* task = metrics.task;
+  const net::LoadTimingInfo& load_timing_info = metrics.load_timing_info;
+  const net::HttpResponseInfo& response_info = metrics.response_info;
+
+  CronetTransactionMetrics* transaction_metrics =
+      [[CronetTransactionMetrics alloc] init];
+
+  [transaction_metrics setRequest:[task currentRequest]];
+  [transaction_metrics setResponse:[task response]];
+
+  transaction_metrics.fetchStartDate =
+      [NSDate dateWithTimeIntervalSince1970:load_timing_info.request_start_time
+                                                .ToDoubleT()];
+
+  transaction_metrics.domainLookupStartDate =
+      TicksToDate(load_timing_info, load_timing_info.connect_timing.dns_start);
+  transaction_metrics.domainLookupEndDate =
+      TicksToDate(load_timing_info, load_timing_info.connect_timing.dns_end);
+
+  transaction_metrics.connectStartDate = TicksToDate(
+      load_timing_info, load_timing_info.connect_timing.connect_start);
+  transaction_metrics.secureConnectionStartDate =
+      TicksToDate(load_timing_info, load_timing_info.connect_timing.ssl_start);
+  transaction_metrics.secureConnectionEndDate =
+      TicksToDate(load_timing_info, load_timing_info.connect_timing.ssl_end);
+  transaction_metrics.connectEndDate = TicksToDate(
+      load_timing_info, load_timing_info.connect_timing.connect_end);
+
+  transaction_metrics.requestStartDate =
+      TicksToDate(load_timing_info, load_timing_info.send_start);
+  transaction_metrics.requestEndDate =
+      TicksToDate(load_timing_info, load_timing_info.send_end);
+  transaction_metrics.responseStartDate =
+      TicksToDate(load_timing_info, load_timing_info.receive_headers_end);
+  transaction_metrics.responseEndDate = [NSDate
+      dateWithTimeIntervalSince1970:metrics.response_end_time.ToDoubleT()];
+
+  transaction_metrics.networkProtocolName =
+      base::SysUTF8ToNSString(net::HttpResponseInfo::ConnectionInfoToString(
+          response_info.connection_info));
+  transaction_metrics.proxyConnection = !response_info.proxy_server.is_direct();
+
+  // If the connect timing information is null, then there was no connection
+  // establish - i.e., one was reused.
+  // The corrolary to this is that, if reusedConnection is YES, then
+  // domainLookupStartDate, domainLookupEndDate, connectStartDate,
+  // connectEndDate, secureConnectionStartDate, and secureConnectionEndDate are
+  // all meaningless.
+  transaction_metrics.reusedConnection =
+      load_timing_info.connect_timing.connect_start.is_null();
+
+  // Guess the resource fetch type based on some heuristics about what data is
+  // present.
+  if (response_info.was_cached) {
+    transaction_metrics.resourceFetchType =
+        NSURLSessionTaskMetricsResourceFetchTypeLocalCache;
+  } else if (!load_timing_info.push_start.is_null()) {
+    transaction_metrics.resourceFetchType =
+        NSURLSessionTaskMetricsResourceFetchTypeServerPush;
+  } else {
+    transaction_metrics.resourceFetchType =
+        NSURLSessionTaskMetricsResourceFetchTypeNetworkLoad;
+  }
+
+  return transaction_metrics;
+}
+
+}  // namespace
+
+// In order for Cronet to use the iOS metrics collection API, it needs to
+// replace the normal NSURLSession mechanism for calling into the delegate
+// (so it can provide metrics from net/, instead of the empty metrics that iOS
+// would provide otherwise.
+// To this end, Cronet's startInternal method replaces the NSURLSession's
+// sessionWithConfiguration method to inject a delegateProxy in between the
+// client delegate and iOS code.
+// This class represrents that delegateProxy. The important function is the
+// didFinishCollectingMetrics callback, which when a request is being handled
+// by Cronet, replaces the metrics collected by iOS with those connected by
+// Cronet.
+@interface URLSessionTaskDelegateProxy : NSProxy<NSURLSessionTaskDelegate>
+- (instancetype)initWithDelegate:(id<NSURLSessionDelegate>)delegate;
+@end
+
+@implementation URLSessionTaskDelegateProxy {
+  id<NSURLSessionDelegate> _delegate;
+  BOOL _respondsToDidFinishCollectingMetrics;
+}
+
+// As this is a proxy delegate, it needs to be initialized with a real client
+// delegate, to whom all of the method invocations will eventually get passed.
+- (instancetype)initWithDelegate:(id<NSURLSessionDelegate>)delegate {
+  _delegate = delegate;
+  _respondsToDidFinishCollectingMetrics =
+      [_delegate respondsToSelector:@selector
+                 (URLSession:task:didFinishCollectingMetrics:)];
+  return self;
+}
+
+// Any methods other than didFinishCollectingMetrics should be forwarded
+// directly to the client delegate.
+- (void)forwardInvocation:(NSInvocation*)invocation {
+  [invocation setTarget:_delegate];
+  [invocation invoke];
+}
+
+// And for that reason, URLSessionTaskDelegateProxy should act like it responds
+// to any of the selectors that the client delegate does.
+- (nullable NSMethodSignature*)methodSignatureForSelector:(SEL)sel {
+  return [(id)_delegate methodSignatureForSelector:sel];
+}
+
+// didFinishCollectionMetrics ultimately calls into the corresponding method on
+// the client delegate (if it exists), but first replaces the iOS-supplied
+// metrics with metrics collected by Cronet (if they exist).
+- (void)URLSession:(NSURLSession*)session
+                          task:(NSURLSessionTask*)task
+    didFinishCollectingMetrics:(NSURLSessionTaskMetrics*)metrics
+    NS_AVAILABLE_IOS(10.0) {
+  std::unique_ptr<Metrics> netMetrics =
+      cronet::CronetMetricsDelegate::MetricsForTask(task);
+
+  if (_respondsToDidFinishCollectingMetrics) {
+    if (netMetrics) {
+      CronetTransactionMetrics* cronetTransactionMetrics =
+          NativeToIOSMetrics(*netMetrics);
+
+      CronetMetrics* cronetMetrics = [[CronetMetrics alloc] init];
+      [cronetMetrics setTransactionMetrics:@[ cronetTransactionMetrics ]];
+
+      [(id<NSURLSessionTaskDelegate>)_delegate URLSession:session
+                                                     task:task
+                               didFinishCollectingMetrics:cronetMetrics];
+    } else {
+      // If there are no metrics is Cronet's task->metrics map, then Cronet is
+      // not handling this request, so just transparently pass iOS's collected
+      // metrics.
+      [(id<NSURLSessionTaskDelegate>)_delegate URLSession:session
+                                                     task:task
+                               didFinishCollectingMetrics:metrics];
+    }
+  }
+}
+
+@end
+
+@implementation NSURLSession (Cronet)
+
++ (NSURLSession*)
+hookSessionWithConfiguration:(NSURLSessionConfiguration*)configuration
+                    delegate:(nullable id<NSURLSessionDelegate>)delegate
+               delegateQueue:(nullable NSOperationQueue*)queue {
+  URLSessionTaskDelegateProxy* delegate_proxy =
+      [[URLSessionTaskDelegateProxy alloc] initWithDelegate:delegate];
+  // Because the the method implementations are swapped, this is not a
+  // recursive call, and instead just forwards the call to the original
+  // sessionWithConfiguration method.
+  return [self hookSessionWithConfiguration:configuration
+                                   delegate:delegate_proxy
+                              delegateQueue:queue];
+}
+
+@end
+
+namespace cronet {
+
+// static
+NSObject* CronetMetricsDelegate::task_metrics_map_lock_ =
+    [[NSObject alloc] init];
+std::map<NSURLSessionTask*, std::unique_ptr<Metrics>>
+    CronetMetricsDelegate::task_metrics_map_;
+
+std::unique_ptr<Metrics> CronetMetricsDelegate::MetricsForTask(
+    NSURLSessionTask* task) {
+  @synchronized(task_metrics_map_lock_) {
+    auto metrics_search = task_metrics_map_.find(task);
+    if (metrics_search == task_metrics_map_.end()) {
+      return nullptr;
+    }
+
+    std::unique_ptr<Metrics> metrics = std::move(metrics_search->second);
+    // Remove the entry to free memory.
+    task_metrics_map_.erase(metrics_search);
+
+    return metrics;
+  }
+}
+
+void CronetMetricsDelegate::OnStartNetRequest(NSURLSessionTask* task) {
+  if (@available(iOS 10, *)) {
+    @synchronized(task_metrics_map_lock_) {
+      if ([task state] == NSURLSessionTaskStateRunning) {
+        task_metrics_map_[task] = nullptr;
+      }
+    }
+  }
+}
+
+void CronetMetricsDelegate::OnStopNetRequest(std::unique_ptr<Metrics> metrics) {
+  if (@available(iOS 10, *)) {
+    @synchronized(task_metrics_map_lock_) {
+      auto metrics_search = task_metrics_map_.find(metrics->task);
+      if (metrics_search != task_metrics_map_.end())
+        metrics_search->second = std::move(metrics);
+    }
+  }
+}
+
+#pragma mark - Swizzle
+
+void SwizzleSessionWithConfiguration() {
+  Class nsurlsession_class = object_getClass([NSURLSession class]);
+
+  SEL original_selector =
+      @selector(sessionWithConfiguration:delegate:delegateQueue:);
+  SEL swizzled_selector =
+      @selector(hookSessionWithConfiguration:delegate:delegateQueue:);
+
+  Method original_method =
+      class_getInstanceMethod(nsurlsession_class, original_selector);
+  Method swizzled_method =
+      class_getInstanceMethod(nsurlsession_class, swizzled_selector);
+
+  method_exchangeImplementations(original_method, swizzled_method);
+}
+
+}  // namespace cronet
diff --git a/components/cronet/ios/test/BUILD.gn b/components/cronet/ios/test/BUILD.gn
index 057f51c..8957469 100644
--- a/components/cronet/ios/test/BUILD.gn
+++ b/components/cronet/ios/test/BUILD.gn
@@ -8,7 +8,6 @@
 test("cronet_test") {
   testonly = true
   sources = [
-    "../cronet_metrics.h",  # used for unit testing of private interface
     "cronet_acceptlang_test.mm",
     "cronet_http_test.mm",
     "cronet_metrics_test.mm",
diff --git a/components/cronet/ios/test/cronet_http_test.mm b/components/cronet/ios/test/cronet_http_test.mm
index 4e0dcf5b..0a0e9400 100644
--- a/components/cronet/ios/test/cronet_http_test.mm
+++ b/components/cronet/ios/test/cronet_http_test.mm
@@ -421,4 +421,29 @@
   ASSERT_TRUE(block_used);
 }
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+TEST_F(HttpTest, LegacyApi) {
+  NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
+
+  __block BOOL block_used = NO;
+  [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+    block_used = YES;
+    EXPECT_EQ(request.URL, url);
+    return YES;
+  }];
+
+  NSURLRequest* request = [NSURLRequest requestWithURL:url];
+  NSError* err;
+  NSHTTPURLResponse* response;
+  [NSURLConnection sendSynchronousRequest:request
+                        returningResponse:&response
+                                    error:&err];
+
+  EXPECT_EQ(200, [response statusCode]);
+  EXPECT_TRUE(block_used);
+  EXPECT_FALSE(err);
+}
+#pragma clang diagnostic pop
+
 }  // namespace cronet
diff --git a/components/cronet/ios/test/cronet_metrics_test.mm b/components/cronet/ios/test/cronet_metrics_test.mm
index 23e91956..0189a259 100644
--- a/components/cronet/ios/test/cronet_metrics_test.mm
+++ b/components/cronet/ios/test/cronet_metrics_test.mm
@@ -4,98 +4,384 @@
 
 #import <Cronet/Cronet.h>
 
-#include "components/cronet/ios/cronet_metrics.h"
+#include "base/strings/sys_string_conversions.h"
 #include "components/cronet/ios/test/cronet_test_base.h"
-
+#include "components/cronet/ios/test/start_cronet.h"
+#include "components/cronet/ios/test/test_server.h"
+#include "components/grpc_support/test/quic_test_server.h"
+#import "net/base/mac/url_conversions.h"
 #include "testing/gtest_mac.h"
+#include "url/gurl.h"
 
-@interface TestMetricsDelegate : NSObject<CronetMetricsDelegate>
-@end
-
-@implementation TestMetricsDelegate
-- (void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task
-                    didFinishCollectingMetrics:(NSURLSessionTaskMetrics*)metrics
-    NS_AVAILABLE_IOS(10.0) {
-  // This is never actually called, so its definition currently doesn't matter.
-}
+// Forward declaration of class in cronet_metrics.h for testing.
+NS_AVAILABLE_IOS(10.0)
+@interface CronetTransactionMetrics : NSURLSessionTaskTransactionMetrics
 @end
 
 namespace cronet {
 
 class CronetMetricsTest : public CronetTestBase {
  protected:
-  CronetMetricsTest() {}
-  ~CronetMetricsTest() override {}
+  void SetUpWithMetrics(BOOL metrics_enabled) {
+    TestServer::Start();
+
+    [Cronet setMetricsEnabled:metrics_enabled];
+    StartCronet(grpc_support::GetQuicTestServerPort());
+
+    [Cronet registerHttpProtocolHandler];
+    NSURLSessionConfiguration* config =
+        [NSURLSessionConfiguration ephemeralSessionConfiguration];
+    config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
+    [Cronet installIntoSessionConfiguration:config];
+    session_ = [NSURLSession sessionWithConfiguration:config
+                                             delegate:delegate_
+                                        delegateQueue:nil];
+  }
+
+  void TearDown() override {
+    [Cronet shutdownForTesting];
+
+    TestServer::Shutdown();
+    CronetTestBase::TearDown();
+  }
+
+  NSURLSession* session_;
 };
 
-TEST_F(CronetMetricsTest, Setters) {
+class CronetEnabledMetricsTest : public CronetMetricsTest {
+ protected:
+  void SetUp() override {
+    CronetMetricsTest::SetUp();
+    SetUpWithMetrics(YES);
+  }
+};
+
+class CronetDisabledMetricsTest : public CronetMetricsTest {
+ protected:
+  void SetUp() override {
+    CronetMetricsTest::SetUp();
+    SetUpWithMetrics(NO);
+  }
+};
+
+// Tests that metrics data is sane for a QUIC request.
+TEST_F(CronetEnabledMetricsTest, ProtocolIsQuic) {
   if (@available(iOS 10, *)) {
-    CronetMetrics* cronet_metrics = [[CronetMetrics alloc] init];
+    NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
 
-    NSDate* test_date = [NSDate date];
-    NSURLRequest* test_req = [NSURLRequest
-        requestWithURL:[NSURL URLWithString:@"test.example.com"]];
-    NSURLResponse* test_resp = [[NSURLResponse alloc]
-                  initWithURL:[NSURL URLWithString:@"test.example.com"]
-                     MIMEType:@"text/plain"
-        expectedContentLength:128
-             textEncodingName:@"ascii"];
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ(grpc_support::kSimpleBodyValue,
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
 
-    [cronet_metrics setRequest:test_req];
-    [cronet_metrics setResponse:test_resp];
+    NSURLSessionTaskMetrics* task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* metrics =
+        task_metrics.transactionMetrics.firstObject;
+    EXPECT_TRUE([metrics isMemberOfClass:[CronetTransactionMetrics class]]);
 
-    [cronet_metrics setFetchStartDate:test_date];
-    [cronet_metrics setDomainLookupStartDate:test_date];
-    [cronet_metrics setDomainLookupEndDate:test_date];
-    [cronet_metrics setConnectStartDate:test_date];
-    [cronet_metrics setSecureConnectionStartDate:test_date];
-    [cronet_metrics setSecureConnectionEndDate:test_date];
-    [cronet_metrics setConnectEndDate:test_date];
-    [cronet_metrics setRequestStartDate:test_date];
-    [cronet_metrics setRequestEndDate:test_date];
-    [cronet_metrics setResponseStartDate:test_date];
-    [cronet_metrics setResponseEndDate:test_date];
+    // Confirm that metrics data is the correct type.
+    EXPECT_TRUE([metrics.fetchStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.domainLookupStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.domainLookupEndDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.connectStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE(
+        [metrics.secureConnectionStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.secureConnectionEndDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.connectEndDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.requestStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.requestEndDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.responseStartDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.responseEndDate isKindOfClass:[NSDate class]]);
+    EXPECT_TRUE([metrics.networkProtocolName isKindOfClass:[NSString class]]);
 
-    [cronet_metrics setNetworkProtocolName:@"http/2"];
-    [cronet_metrics setProxyConnection:YES];
-    [cronet_metrics setReusedConnection:YES];
-    [cronet_metrics setResourceFetchType:
-                        NSURLSessionTaskMetricsResourceFetchTypeNetworkLoad];
+    // Confirm that the metrics values are sane.
+    EXPECT_NE(NSOrderedDescending, [metrics.domainLookupStartDate
+                                       compare:metrics.domainLookupEndDate]);
+    EXPECT_NE(NSOrderedDescending,
+              [metrics.connectStartDate compare:metrics.connectEndDate]);
+    EXPECT_NE(NSOrderedDescending,
+              [metrics.secureConnectionStartDate
+                  compare:metrics.secureConnectionEndDate]);
+    EXPECT_NE(NSOrderedDescending,
+              [metrics.requestStartDate compare:metrics.requestEndDate]);
+    EXPECT_NE(NSOrderedDescending,
+              [metrics.responseStartDate compare:metrics.responseEndDate]);
 
-    NSURLSessionTaskTransactionMetrics* metrics = cronet_metrics;
+    EXPECT_FALSE(metrics.proxyConnection);
 
-    EXPECT_EQ([metrics request], test_req);
-    EXPECT_EQ([metrics response], test_resp);
-
-    EXPECT_EQ([metrics fetchStartDate], test_date);
-    EXPECT_EQ([metrics domainLookupStartDate], test_date);
-    EXPECT_EQ([metrics domainLookupEndDate], test_date);
-    EXPECT_EQ([metrics connectStartDate], test_date);
-    EXPECT_EQ([metrics secureConnectionStartDate], test_date);
-    EXPECT_EQ([metrics secureConnectionEndDate], test_date);
-    EXPECT_EQ([metrics connectEndDate], test_date);
-    EXPECT_EQ([metrics requestStartDate], test_date);
-    EXPECT_EQ([metrics requestEndDate], test_date);
-    EXPECT_EQ([metrics responseStartDate], test_date);
-    EXPECT_EQ([metrics responseEndDate], test_date);
-
-    EXPECT_EQ([metrics networkProtocolName], @"http/2");
-    EXPECT_EQ([metrics isProxyConnection], YES);
-    EXPECT_EQ([metrics isReusedConnection], YES);
-    EXPECT_EQ([metrics resourceFetchType],
-              NSURLSessionTaskMetricsResourceFetchTypeNetworkLoad);
+    EXPECT_TRUE([metrics.networkProtocolName containsString:@"quic"]);
   }
 }
 
-TEST_F(CronetMetricsTest, Delegate) {
+// Tests that metrics data is sane for an HTTP/1.1 request.
+TEST_F(CronetEnabledMetricsTest, ProtocolIsNotQuic) {
   if (@available(iOS 10, *)) {
-    TestMetricsDelegate* metrics_delegate =
-        [[TestMetricsDelegate alloc] init];
-    EXPECT_TRUE([Cronet addMetricsDelegate:metrics_delegate]);
-    EXPECT_FALSE([Cronet addMetricsDelegate:metrics_delegate]);
-    EXPECT_TRUE([Cronet removeMetricsDelegate:metrics_delegate]);
-    EXPECT_FALSE([Cronet removeMetricsDelegate:metrics_delegate]);
+    NSURL* url = net::NSURLWithGURL(GURL(TestServer::GetSimpleURL()));
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ("The quick brown fox jumps over the lazy dog.",
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    NSURLSessionTaskMetrics* task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* metrics =
+        task_metrics.transactionMetrics.firstObject;
+    EXPECT_TRUE([metrics isMemberOfClass:[CronetTransactionMetrics class]]);
+
+    EXPECT_NSEQ(metrics.networkProtocolName, @"http/1.1");
   }
 }
 
+// Tests that Cronet provides similar metrics data to iOS.
+TEST_F(CronetEnabledMetricsTest, PlatformComparison) {
+  if (@available(iOS 10, *)) {
+    NSURL* url = net::NSURLWithGURL(GURL(TestServer::GetSimpleURL()));
+
+    // Perform a connection using Cronet.
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ("The quick brown fox jumps over the lazy dog.",
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    NSURLSessionTaskMetrics* cronet_task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(cronet_task_metrics);
+    ASSERT_EQ(1lU, cronet_task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* cronet_metrics =
+        cronet_task_metrics.transactionMetrics.firstObject;
+
+    // Perform a connection using the platform stack.
+
+    block_used = NO;
+    task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return NO;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ("The quick brown fox jumps over the lazy dog.",
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    NSURLSessionTaskMetrics* platform_task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(platform_task_metrics);
+    ASSERT_EQ(1lU, platform_task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* platform_metrics =
+        platform_task_metrics.transactionMetrics.firstObject;
+
+    // Compare platform and Cronet metrics data.
+
+    EXPECT_NSEQ(cronet_metrics.networkProtocolName,
+                platform_metrics.networkProtocolName);
+  }
+}
+
+// Tests that the metrics API behaves sanely when making a request to an
+// invalid URL.
+TEST_F(CronetEnabledMetricsTest, InvalidURL) {
+  if (@available(iOS 10, *)) {
+    NSURL* url = net::NSURLWithGURL(GURL("http://notfound.example.com"));
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_TRUE([delegate_ error]);
+
+    NSURLSessionTaskMetrics* task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* metrics =
+        task_metrics.transactionMetrics.firstObject;
+    EXPECT_TRUE([metrics isMemberOfClass:[CronetTransactionMetrics class]]);
+
+    EXPECT_TRUE(metrics.fetchStartDate);
+    EXPECT_FALSE(metrics.domainLookupStartDate);
+    EXPECT_FALSE(metrics.domainLookupEndDate);
+    EXPECT_FALSE(metrics.connectStartDate);
+    EXPECT_FALSE(metrics.secureConnectionStartDate);
+    EXPECT_FALSE(metrics.secureConnectionEndDate);
+    EXPECT_FALSE(metrics.connectEndDate);
+    EXPECT_FALSE(metrics.requestStartDate);
+    EXPECT_FALSE(metrics.requestEndDate);
+    EXPECT_FALSE(metrics.responseStartDate);
+  }
+}
+
+// Tests that the metrics API behaves sanely when the request is canceled.
+TEST_F(CronetEnabledMetricsTest, CanceledRequest) {
+  if (@available(iOS 10, *)) {
+    NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+
+    StartDataTaskAndWaitForCompletion(task, 1);
+    [task cancel];
+
+    EXPECT_TRUE(block_used);
+    EXPECT_NE(nil, [delegate_ error]);
+  }
+}
+
+// Tests the metrics data for a reused connection is correct.
+TEST_F(CronetEnabledMetricsTest, ReusedConnection) {
+  if (@available(iOS 10, *)) {
+    NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ(grpc_support::kSimpleBodyValue,
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    NSURLSessionTaskMetrics* task_metrics = [delegate_ taskMetrics];
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* metrics =
+        task_metrics.transactionMetrics.firstObject;
+    EXPECT_TRUE([metrics isMemberOfClass:[CronetTransactionMetrics class]]);
+
+    // Second connection
+
+    block_used = NO;
+    task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ(grpc_support::kSimpleBodyValue,
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    task_metrics = delegate_.taskMetrics;
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    metrics = task_metrics.transactionMetrics.firstObject;
+
+    EXPECT_TRUE(metrics.isReusedConnection);
+    EXPECT_FALSE(metrics.domainLookupStartDate);
+    EXPECT_FALSE(metrics.domainLookupEndDate);
+    EXPECT_FALSE(metrics.connectStartDate);
+    EXPECT_FALSE(metrics.secureConnectionStartDate);
+    EXPECT_FALSE(metrics.secureConnectionEndDate);
+    EXPECT_FALSE(metrics.connectEndDate);
+  }
+}
+
+// Tests that the metrics disable switch works.
+TEST_F(CronetDisabledMetricsTest, MetricsDisabled) {
+  if (@available(iOS 10, *)) {
+    NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
+
+    __block BOOL block_used = NO;
+    NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
+    [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+      block_used = YES;
+      EXPECT_EQ(request.URL, url);
+      return YES;
+    }];
+    StartDataTaskAndWaitForCompletion(task);
+    EXPECT_TRUE(block_used);
+    EXPECT_EQ(nil, [delegate_ error]);
+    EXPECT_STREQ(grpc_support::kSimpleBodyValue,
+                 base::SysNSStringToUTF8([delegate_ responseBody]).c_str());
+
+    NSURLSessionTaskMetrics* task_metrics = [delegate_ taskMetrics];
+    ASSERT_TRUE(task_metrics);
+    ASSERT_EQ(1lU, task_metrics.transactionMetrics.count);
+    NSURLSessionTaskTransactionMetrics* metrics =
+        task_metrics.transactionMetrics.firstObject;
+    EXPECT_FALSE([metrics isMemberOfClass:[CronetTransactionMetrics class]]);
+
+    EXPECT_TRUE(metrics.fetchStartDate);
+    EXPECT_FALSE(metrics.domainLookupStartDate);
+    EXPECT_FALSE(metrics.domainLookupEndDate);
+    EXPECT_FALSE(metrics.connectStartDate);
+    EXPECT_FALSE(metrics.secureConnectionStartDate);
+    EXPECT_FALSE(metrics.secureConnectionEndDate);
+    EXPECT_FALSE(metrics.connectEndDate);
+    EXPECT_FALSE(metrics.requestStartDate);
+    EXPECT_FALSE(metrics.requestEndDate);
+    EXPECT_FALSE(metrics.responseStartDate);
+    EXPECT_FALSE(metrics.responseEndDate);
+    EXPECT_FALSE(metrics.networkProtocolName);
+  }
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+TEST_F(CronetEnabledMetricsTest, LegacyApi) {
+  NSURL* url = net::NSURLWithGURL(GURL(grpc_support::kTestServerSimpleUrl));
+
+  __block BOOL block_used = NO;
+  [Cronet setRequestFilterBlock:^(NSURLRequest* request) {
+    block_used = YES;
+    EXPECT_EQ(request.URL, url);
+    return YES;
+  }];
+
+  NSURLRequest* request = [NSURLRequest requestWithURL:url];
+  NSError* err;
+  NSHTTPURLResponse* response;
+  [NSURLConnection sendSynchronousRequest:request
+                        returningResponse:&response
+                                    error:&err];
+
+  EXPECT_EQ(200, [response statusCode]);
+  EXPECT_TRUE(block_used);
+  EXPECT_FALSE(err);
+}
+#pragma clang diagnostic pop
+
 }  // namespace cronet
diff --git a/components/cronet/ios/test/cronet_netlog_test.mm b/components/cronet/ios/test/cronet_netlog_test.mm
index d765221..f2e7f81 100644
--- a/components/cronet/ios/test/cronet_netlog_test.mm
+++ b/components/cronet/ios/test/cronet_netlog_test.mm
@@ -5,14 +5,11 @@
 #import <Cronet/Cronet.h>
 #import <Foundation/Foundation.h>
 
+#include "components/cronet/ios/test/cronet_test_base.h"
 #include "components/cronet/ios/test/start_cronet.h"
 #include "components/grpc_support/test/quic_test_server.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-@interface Cronet (ExposedForTesting)
-+ (void)shutdownForTesting;
-@end
-
 namespace cronet {
 
 class NetLogTest : public ::testing::Test {
diff --git a/components/cronet/ios/test/cronet_test_base.h b/components/cronet/ios/test/cronet_test_base.h
index 10c6a11f..c5dfa3f 100644
--- a/components/cronet/ios/test/cronet_test_base.h
+++ b/components/cronet/ios/test/cronet_test_base.h
@@ -38,9 +38,13 @@
 @property(readonly) NSMutableDictionary<NSURLSessionDataTask*, NSNumber*>*
     totalBytesReceivedPerTask;
 
+// Contains the expected amount of received data.
 @property(readonly) NSMutableDictionary<NSURLSessionDataTask*, NSNumber*>*
     expectedContentLengthPerTask;
 
+// Contains metrics data.
+@property(readonly) NSURLSessionTaskMetrics* taskMetrics NS_AVAILABLE_IOS(10.0);
+
 // Resets the delegate, so it can be used again for another request.
 - (void)reset;
 
diff --git a/components/cronet/ios/test/cronet_test_base.mm b/components/cronet/ios/test/cronet_test_base.mm
index 4970459f..7f8113d 100644
--- a/components/cronet/ios/test/cronet_test_base.mm
+++ b/components/cronet/ios/test/cronet_test_base.mm
@@ -28,6 +28,7 @@
 @synthesize errorPerTask = _errorPerTask;
 @synthesize totalBytesReceivedPerTask = _totalBytesReceivedPerTask;
 @synthesize expectedContentLengthPerTask = _expectedContentLengthPerTask;
+@synthesize taskMetrics = _taskMetrics;
 
 - (id)init {
   if (self = [super init]) {
@@ -42,6 +43,7 @@
   _totalBytesReceivedPerTask = [NSMutableDictionary dictionaryWithCapacity:0];
   _expectedContentLengthPerTask =
       [NSMutableDictionary dictionaryWithCapacity:0];
+  _taskMetrics = nil;
 }
 
 - (NSError*)error {
@@ -145,6 +147,13 @@
 }
 
 - (void)URLSession:(NSURLSession*)session
+                          task:(NSURLSessionTask*)task
+    didFinishCollectingMetrics:(NSURLSessionTaskMetrics*)metrics
+    NS_AVAILABLE_IOS(10.0) {
+  _taskMetrics = metrics;
+}
+
+- (void)URLSession:(NSURLSession*)session
               dataTask:(NSURLSessionDataTask*)dataTask
     didReceiveResponse:(NSURLResponse*)response
      completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))
diff --git a/components/cronet/ios/test/test_server.cc b/components/cronet/ios/test/test_server.cc
index 24cf1c4e..224d5ee 100644
--- a/components/cronet/ios/test/test_server.cc
+++ b/components/cronet/ios/test/test_server.cc
@@ -20,16 +20,26 @@
 
 namespace {
 
+const char kSimplePath[] = "/Simple";
 const char kEchoHeaderPath[] = "/EchoHeader?";
 const char kSetCookiePath[] = "/SetCookie?";
 const char kBigDataPath[] = "/BigData?";
 const char kUseEncodingPath[] = "/UseEncoding?";
 const char kEchoRequestBodyPath[] = "/EchoRequestBody";
 
+const char kSimpleResponse[] = "The quick brown fox jumps over the lazy dog.";
+
 std::unique_ptr<net::EmbeddedTestServer> g_test_server;
 base::LazyInstance<std::string>::Leaky g_big_data_body =
     LAZY_INSTANCE_INITIALIZER;
 
+std::unique_ptr<net::test_server::HttpResponse> SimpleRequest() {
+  auto http_response = std::make_unique<net::test_server::BasicHttpResponse>();
+  http_response->set_code(net::HTTP_OK);
+  http_response->set_content(kSimpleResponse);
+  return std::move(http_response);
+}
+
 std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest(
     const net::test_server::HttpRequest& request) {
   std::string header_name;
@@ -109,6 +119,10 @@
 
 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler(
     const net::test_server::HttpRequest& request) {
+  if (base::StartsWith(request.relative_url, kSimplePath,
+                       base::CompareCase::INSENSITIVE_ASCII)) {
+    return SimpleRequest();
+  }
   if (base::StartsWith(request.relative_url, kEchoHeaderPath,
                        base::CompareCase::INSENSITIVE_ASCII)) {
     return EchoHeaderInRequest(request);
@@ -151,6 +165,11 @@
   g_test_server.reset();
 }
 
+std::string TestServer::GetSimpleURL() {
+  DCHECK(g_test_server);
+  return g_test_server->GetURL(kSimplePath).spec();
+}
+
 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) {
   DCHECK(g_test_server);
   return g_test_server->GetURL(kEchoHeaderPath + header_name).spec();
diff --git a/components/cronet/ios/test/test_server.h b/components/cronet/ios/test/test_server.h
index 61e4ffc..6e6e602 100644
--- a/components/cronet/ios/test/test_server.h
+++ b/components/cronet/ios/test/test_server.h
@@ -14,6 +14,9 @@
   static bool Start();
   static void Shutdown();
 
+  // Returns URL which responds with the body "The quick brown fox jumps over
+  // the lazy dog".
+  static std::string GetSimpleURL();
   // Returns URL which respond with echo of header with |header_name| in
   // response body.
   static std::string GetEchoHeaderURL(const std::string& header_name);
diff --git a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
index 2d8996f..e2df7c2 100644
--- a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
+++ b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
@@ -47,7 +47,7 @@
     // Turn off LitePage bit.
     updated_state &= ~(content::SERVER_LITE_PAGE_ON);
   }
-  if (!drp_data->lofi_requested()) {
+  if (!drp_data->lofi_policy_received()) {
     // Turn off LoFi bit(s).
     updated_state &= ~(content::SERVER_LOFI_ON);
     if (drp_data->used_data_reduction_proxy()) {
diff --git a/components/data_reduction_proxy/content/browser/content_lofi_decider_unittest.cc b/components/data_reduction_proxy/content/browser/content_lofi_decider_unittest.cc
index 5bfddab..1f1af66 100644
--- a/components/data_reduction_proxy/content/browser/content_lofi_decider_unittest.cc
+++ b/components/data_reduction_proxy/content/browser/content_lofi_decider_unittest.cc
@@ -548,7 +548,7 @@
           request.get());
   data_reduction_proxy_data->set_used_data_reduction_proxy(true);
   data_reduction_proxy_data->set_lite_page_received(true);
-  data_reduction_proxy_data->set_lofi_requested(false);
+  data_reduction_proxy_data->set_lofi_policy_received(false);
 
   // Verify selects LitePage bit but doesn't touch client-only NoScript bit.
   EXPECT_EQ(content::SERVER_LITE_PAGE_ON | content::NOSCRIPT_ON,
@@ -569,7 +569,7 @@
           request.get());
   data_reduction_proxy_data->set_used_data_reduction_proxy(true);
   data_reduction_proxy_data->set_lite_page_received(false);
-  data_reduction_proxy_data->set_lofi_requested(true);
+  data_reduction_proxy_data->set_lofi_policy_received(true);
 
   // Verify keeps LoFi bits and also doesn't touch client-only NoScript bit.
   EXPECT_EQ(
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
index 8d134ee..d9cc350 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.cc
@@ -17,6 +17,7 @@
       lofi_requested_(false),
       client_lofi_requested_(false),
       lite_page_received_(false),
+      lofi_policy_received_(false),
       lofi_received_(false),
       effective_connection_type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) {}
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
index c3f6d60..19e8d053 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h
@@ -51,7 +51,15 @@
     lite_page_received_ = lite_page_received;
   }
 
-  // Whether a lite page response was seen for the request or navigation.
+  // Whether a Lo-Fi (or empty-image) page policy directive was received for
+  // the navigation.
+  bool lofi_policy_received() const { return lofi_policy_received_; }
+  void set_lofi_policy_received(bool lofi_policy_received) {
+    lofi_policy_received_ = lofi_policy_received;
+  }
+
+  // Whether a server Lo-Fi page response was seen for the request or
+  // navigation.
   bool lofi_received() const { return lofi_received_; }
   void set_lofi_received(bool lofi_received) { lofi_received_ = lofi_received; }
 
@@ -124,6 +132,10 @@
   // Whether a lite page response was seen for the request or navigation.
   bool lite_page_received_;
 
+  // Whether server Lo-Fi directive was received for this navigation. True if
+  // the proxy returns the empty-image page-policy for the main frame response.
+  bool lofi_policy_received_;
+
   // Whether a lite page response was seen for the request or navigation.
   bool lofi_received_;
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
index 2796419..4e11978 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -551,14 +551,25 @@
   if (!original_response_headers ||
       original_response_headers->IsRedirect(nullptr))
     return;
-  if (IsEmptyImagePreview(*original_response_headers)) {
-    DataReductionProxyData* data =
-        DataReductionProxyData::GetDataAndCreateIfNecessary(request);
-    data->set_lofi_received(true);
-  } else if (IsLitePagePreview(*original_response_headers)) {
-    DataReductionProxyData* data =
-        DataReductionProxyData::GetDataAndCreateIfNecessary(request);
-    data->set_lite_page_received(true);
+
+  switch (ParseResponseTransform(*original_response_headers)) {
+    case TRANSFORM_LITE_PAGE:
+      DataReductionProxyData::GetDataAndCreateIfNecessary(request)
+          ->set_lite_page_received(true);
+      break;
+    case TRANSFORM_PAGE_POLICIES_EMPTY_IMAGE:
+      DataReductionProxyData::GetDataAndCreateIfNecessary(request)
+          ->set_lofi_policy_received(true);
+      break;
+    case TRANSFORM_EMPTY_IMAGE:
+      DataReductionProxyData::GetDataAndCreateIfNecessary(request)
+          ->set_lofi_received(true);
+      break;
+    case TRANSFORM_IDENTITY:
+    case TRANSFORM_COMPRESSED_VIDEO:
+    case TRANSFORM_NONE:
+    case TRANSFORM_UNKNOWN:
+      break;
   }
   if (data_reduction_proxy_io_data_ &&
       data_reduction_proxy_io_data_->lofi_decider() &&
diff --git a/components/infobars/core/infobar_manager.h b/components/infobars/core/infobar_manager.h
index bbf944f..2d44965 100644
--- a/components/infobars/core/infobar_manager.h
+++ b/components/infobars/core/infobar_manager.h
@@ -16,6 +16,7 @@
 
 class ConfirmInfoBarDelegate;
 class GURL;
+class InfoBarUiTest;
 
 namespace infobars {
 
@@ -119,6 +120,8 @@
   virtual void NotifyInfoBarRemoved(InfoBar* infobar, bool animate);
 
  private:
+  friend class ::InfoBarUiTest;
+
   // InfoBars associated with this InfoBarManager.  We own these pointers.
   // However, this is not a vector of unique_ptr, because we don't delete the
   // infobars directly once they've been added to this; instead, when we're
diff --git a/components/offline_pages/core/offline_page_metadata_store_sql.cc b/components/offline_pages/core/offline_page_metadata_store_sql.cc
index 391bb00d..ab03146 100644
--- a/components/offline_pages/core/offline_page_metadata_store_sql.cc
+++ b/components/offline_pages/core/offline_page_metadata_store_sql.cc
@@ -13,10 +13,12 @@
 #include "base/sequenced_task_runner.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/utf_string_conversions.h"
+#include "components/offline_pages/core/client_namespace_constants.h"
 #include "components/offline_pages/core/offline_page_item.h"
 #include "components/offline_pages/core/offline_store_types.h"
 #include "components/offline_pages/core/offline_store_utils.h"
 #include "sql/connection.h"
+#include "sql/meta_table.h"
 #include "sql/statement.h"
 #include "sql/transaction.h"
 
@@ -27,6 +29,13 @@
 // it can be used inline in other SQL statements below.
 #define OFFLINE_PAGES_TABLE_NAME "offlinepages_v1"
 
+// This is the first version saved in the meta table, which was introduced in
+// the store in M65. It is set once a legacy upgrade is run successfully for the
+// last time in |UpgradeFromLegacyVersion|.
+static const int kFirstPostLegacyVersion = 1;
+static const int kCurrentVersion = 2;
+static const int kCompatibleVersion = kFirstPostLegacyVersion;
+
 void ReportStoreEvent(OfflinePagesStoreEvent event) {
   UMA_HISTOGRAM_ENUMERATION("OfflinePages.SQLStorage.StoreEvent", event,
                             OfflinePagesStoreEvent::STORE_EVENT_COUNT);
@@ -166,19 +175,28 @@
   return UpgradeWithQuery(db, kSql);
 }
 
-bool CreateSchema(sql::Connection* db) {
-  // If you create a transaction but don't Commit() it is automatically
-  // rolled back by its destructor when it falls out of scope.
+bool CreateLatestSchema(sql::Connection* db) {
   sql::Transaction transaction(db);
   if (!transaction.Begin())
     return false;
 
-  if (!db->DoesTableExist(OFFLINE_PAGES_TABLE_NAME)) {
-    if (!CreateOfflinePagesTable(db))
-      return false;
-  }
+  // First time database initialization.
+  if (!CreateOfflinePagesTable(db))
+    return false;
 
-  // Upgrade section. Details are described in the header file.
+  sql::MetaTable meta_table;
+  if (!meta_table.Init(db, kCurrentVersion, kCompatibleVersion))
+    return false;
+
+  return transaction.Commit();
+}
+
+bool UpgradeFromLegacyVersion(sql::Connection* db) {
+  sql::Transaction transaction(db);
+  if (!transaction.Begin())
+    return false;
+
+  // Legacy upgrade section. Details are described in the header file.
   if (!db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "expiration_time") &&
       !db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "title")) {
     if (!UpgradeFrom52(db))
@@ -203,10 +221,58 @@
       return false;
   }
 
-  // This would be a great place to add indices when we need them.
+  sql::MetaTable meta_table;
+  if (!meta_table.Init(db, kFirstPostLegacyVersion, kCompatibleVersion))
+    return false;
+
   return transaction.Commit();
 }
 
+bool UpgradeFromVersion1ToVersion2(sql::Connection* db,
+                                   sql::MetaTable* meta_table) {
+  sql::Transaction transaction(db);
+  if (!transaction.Begin())
+    return false;
+
+  static const char kSql[] = "UPDATE " OFFLINE_PAGES_TABLE_NAME
+                             " SET upgrade_attempt = 5 "
+                             " WHERE client_namespace = 'async_loading'"
+                             " OR client_namespace = 'download'"
+                             " OR client_namespace = 'ntp_suggestions'"
+                             " OR client_namespace = 'browser_actions'";
+
+  sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
+  if (!statement.Run())
+    return false;
+
+  meta_table->SetVersionNumber(2);
+  return transaction.Commit();
+}
+
+bool CreateSchema(sql::Connection* db) {
+  if (!sql::MetaTable::DoesTableExist(db)) {
+    // If this looks like a completely empty DB, simply start from scratch.
+    if (!db->DoesTableExist(OFFLINE_PAGES_TABLE_NAME))
+      return CreateLatestSchema(db);
+
+    // Otherwise we need to run a legacy upgrade.
+    if (!UpgradeFromLegacyVersion(db))
+      return false;
+  }
+
+  sql::MetaTable meta_table;
+  if (!meta_table.Init(db, kCurrentVersion, kCompatibleVersion))
+    return false;
+
+  if (meta_table.GetVersionNumber() == 1) {
+    if (!UpgradeFromVersion1ToVersion2(db, &meta_table))
+      return false;
+  }
+
+  // This would be a great place to add indices when we need them.
+  return true;
+}
+
 bool DeleteByOfflineId(sql::Connection* db, int64_t offline_id) {
   static const char kSql[] =
       "DELETE FROM " OFFLINE_PAGES_TABLE_NAME " WHERE offline_id=?";
diff --git a/components/offline_pages/core/offline_page_metadata_store_unittest.cc b/components/offline_pages/core/offline_page_metadata_store_unittest.cc
index b7b414a..293fa61 100644
--- a/components/offline_pages/core/offline_page_metadata_store_unittest.cc
+++ b/components/offline_pages/core/offline_page_metadata_store_unittest.cc
@@ -15,10 +15,14 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "components/offline_pages/core/client_namespace_constants.h"
+#include "components/offline_pages/core/model/offline_page_item_generator.h"
 #include "components/offline_pages/core/offline_page_item.h"
 #include "components/offline_pages/core/offline_page_metadata_store_sql.h"
 #include "components/offline_pages/core/offline_page_model.h"
+#include "components/offline_pages/core/offline_store_utils.h"
 #include "sql/connection.h"
+#include "sql/meta_table.h"
 #include "sql/statement.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -360,6 +364,101 @@
   ASSERT_FALSE(connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "digest"));
 }
 
+void InjectItemInM62Store(sql::Connection* db, const OfflinePageItem& item) {
+  ASSERT_TRUE(db->BeginTransaction());
+  sql::Statement statement(db->GetUniqueStatement(
+      "INSERT INTO " OFFLINE_PAGES_TABLE_V1
+      "(offline_id, creation_time, file_size, "
+      "last_access_time, access_count, client_namespace, "
+      "client_id, online_url, file_path, title, original_url, "
+      "request_origin, system_download_id, file_missing_time, "
+      "upgrade_attempt, digest) "
+      "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
+  statement.BindInt64(0, item.offline_id);
+  statement.BindInt(1, store_utils::ToDatabaseTime(item.creation_time));
+  statement.BindInt64(2, item.file_size);
+  statement.BindInt(3, store_utils::ToDatabaseTime(item.last_access_time));
+  statement.BindInt(4, item.access_count);
+  statement.BindString(5, item.client_id.name_space);
+  statement.BindString(6, item.client_id.id);
+  statement.BindString(7, item.url.spec());
+  statement.BindString(8, store_utils::ToDatabaseFilePath(item.file_path));
+  statement.BindString16(9, item.title);
+  statement.BindString(10, item.original_url.spec());
+  statement.BindString(11, item.request_origin);
+  statement.BindInt64(12, item.system_download_id);
+  statement.BindInt(13, store_utils::ToDatabaseTime(item.file_missing_time));
+  statement.BindInt(14, item.upgrade_attempt);
+  statement.BindString(15, item.digest);
+  ASSERT_TRUE(statement.Run());
+  ASSERT_TRUE(db->CommitTransaction());
+}
+
+void BuildTestStoreWithSchemaFromM62(const base::FilePath& file) {
+  sql::Connection connection;
+  ASSERT_TRUE(
+      connection.Open(file.Append(FILE_PATH_LITERAL("OfflinePages.db"))));
+  ASSERT_TRUE(connection.is_open());
+  ASSERT_TRUE(connection.BeginTransaction());
+  ASSERT_TRUE(
+      connection.Execute("CREATE TABLE " OFFLINE_PAGES_TABLE_V1
+                         "(offline_id INTEGER PRIMARY KEY NOT NULL,"
+                         " creation_time INTEGER NOT NULL,"
+                         " file_size INTEGER NOT NULL,"
+                         " last_access_time INTEGER NOT NULL,"
+                         " access_count INTEGER NOT NULL,"
+                         " system_download_id INTEGER NOT NULL DEFAULT 0,"
+                         " file_missing_time INTEGER NOT NULL DEFAULT 0,"
+                         " upgrade_attempt INTEGER NOT NULL DEFAULT 0,"
+                         " client_namespace VARCHAR NOT NULL,"
+                         " client_id VARCHAR NOT NULL,"
+                         " online_url VARCHAR NOT NULL,"
+                         " file_path VARCHAR NOT NULL,"
+                         " title VARCHAR NOT NULL DEFAULT '',"
+                         " original_url VARCHAR NOT NULL DEFAULT '',"
+                         " request_origin VARCHAR NOT NULL DEFAULT '',"
+                         " digest VARCHAR NOT NULL DEFAULT ''"
+                         ")"));
+  ASSERT_TRUE(connection.CommitTransaction());
+
+  OfflinePageItemGenerator generator;
+  generator.SetNamespace(kTestClientNamespace);
+  generator.SetId(kTestClientId2.id);
+  generator.SetUrl(GURL(kTestURL));
+  generator.SetRequestOrigin(kTestRequestOrigin);
+  generator.SetFileSize(kFileSize);
+  OfflinePageItem test_item = generator.CreateItem();
+  test_item.offline_id = kOfflineId;
+  test_item.file_path = base::FilePath(kFilePath);
+  InjectItemInM62Store(&connection, test_item);
+}
+
+void BuildTestStoreWithSchemaVersion1(const base::FilePath& file) {
+  BuildTestStoreWithSchemaFromM62(file);
+  sql::Connection connection;
+  ASSERT_TRUE(
+      connection.Open(file.Append(FILE_PATH_LITERAL("OfflinePages.db"))));
+  ASSERT_TRUE(connection.is_open());
+  ASSERT_TRUE(connection.BeginTransaction());
+  sql::MetaTable meta_table;
+  ASSERT_TRUE(meta_table.Init(&connection, 1, 1));
+  ASSERT_TRUE(connection.CommitTransaction());
+
+  OfflinePageItemGenerator generator;
+  generator.SetUrl(GURL(kTestURL));
+  generator.SetRequestOrigin(kTestRequestOrigin);
+  generator.SetFileSize(kFileSize);
+
+  generator.SetNamespace(kAsyncNamespace);
+  InjectItemInM62Store(&connection, generator.CreateItem());
+  generator.SetNamespace(kDownloadNamespace);
+  InjectItemInM62Store(&connection, generator.CreateItem());
+  generator.SetNamespace(kBrowserActionsNamespace);
+  InjectItemInM62Store(&connection, generator.CreateItem());
+  generator.SetNamespace(kNTPSuggestionsNamespace);
+  InjectItemInM62Store(&connection, generator.CreateItem());
+}
+
 class OfflinePageMetadataStoreFactory {
  public:
   OfflinePageMetadataStore* BuildStore(const base::FilePath& file_path) {
@@ -416,6 +515,21 @@
         base::ThreadTaskRunnerHandle::Get(), file_path);
     return store;
   }
+
+  OfflinePageMetadataStore* BuildStoreM62(const base::FilePath& file_path) {
+    BuildTestStoreWithSchemaFromM62(file_path);
+    OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL(
+        base::ThreadTaskRunnerHandle::Get(), file_path);
+    return store;
+  }
+
+  OfflinePageMetadataStore* BuildStoreVersion1(
+      const base::FilePath& file_path) {
+    BuildTestStoreWithSchemaVersion1(file_path);
+    OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL(
+        base::ThreadTaskRunnerHandle::Get(), file_path);
+    return store;
+  }
 };
 
 enum CalledCallback { NONE, LOAD, ADD, UPDATE, REMOVE, RESET };
@@ -440,6 +554,11 @@
   std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM56();
   std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM57();
   std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM61();
+  std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM62();
+  std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaVersion1();
+
+  void VerifyMetaVersions(int expected_current_version,
+                          int expected_compatible_version);
 
   void PumpLoop();
   void FastForwardBy(base::TimeDelta time_delta);
@@ -457,6 +576,8 @@
   void CheckThatOfflinePageCanBeSaved(
       std::unique_ptr<OfflinePageMetadataStore> store);
 
+  void CheckStoreItemsPostUpgradeFromVersion1();
+
   OfflinePagesUpdateResult* last_update_result() {
     return last_update_result_.get();
   }
@@ -542,6 +663,25 @@
   return offline_pages_[0];
 }
 
+void OfflinePageMetadataStoreTest::CheckStoreItemsPostUpgradeFromVersion1() {
+  EXPECT_EQ(LOAD, last_called_callback_);
+  EXPECT_EQ(STATUS_TRUE, last_status_);
+  EXPECT_EQ(5U, offline_pages_.size());
+
+  // TODO(fgorski): Use persistent namespaces from the client policy controller
+  // once an appropriate method is available.
+  std::set<std::string> upgradeable_namespaces{
+      kAsyncNamespace, kDownloadNamespace, kBrowserActionsNamespace,
+      kNTPSuggestionsNamespace};
+
+  for (auto page : offline_pages_) {
+    if (upgradeable_namespaces.count(page.client_id.name_space) > 0)
+      EXPECT_EQ(5, page.upgrade_attempt);
+    else
+      EXPECT_EQ(0, page.upgrade_attempt);
+  }
+}
+
 void OfflinePageMetadataStoreTest::CheckThatOfflinePageCanBeSaved(
     std::unique_ptr<OfflinePageMetadataStore> store) {
   size_t store_size = offline_pages_.size();
@@ -710,6 +850,54 @@
   return store;
 }
 
+std::unique_ptr<OfflinePageMetadataStore>
+OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM62() {
+  std::unique_ptr<OfflinePageMetadataStore> store(
+      factory_.BuildStoreM62(temp_directory_.GetPath()));
+  PumpLoop();
+  store->Initialize(
+      base::BindRepeating(&OfflinePageMetadataStoreTest::InitializeCallback,
+                          base::Unretained(this)));
+  PumpLoop();
+  store->GetOfflinePages(base::BindRepeating(
+      &OfflinePageMetadataStoreTest::GetOfflinePagesCallback,
+      base::Unretained(this)));
+  PumpLoop();
+  return store;
+}
+
+std::unique_ptr<OfflinePageMetadataStore>
+OfflinePageMetadataStoreTest::BuildStoreWithSchemaVersion1() {
+  std::unique_ptr<OfflinePageMetadataStore> store(
+      factory_.BuildStoreVersion1(temp_directory_.GetPath()));
+  PumpLoop();
+  store->Initialize(
+      base::BindRepeating(&OfflinePageMetadataStoreTest::InitializeCallback,
+                          base::Unretained(this)));
+  PumpLoop();
+  store->GetOfflinePages(base::BindRepeating(
+      &OfflinePageMetadataStoreTest::GetOfflinePagesCallback,
+      base::Unretained(this)));
+  PumpLoop();
+  return store;
+}
+
+void OfflinePageMetadataStoreTest::VerifyMetaVersions(
+    int expected_current_version,
+    int expected_compatible_version) {
+  sql::Connection connection;
+  ASSERT_TRUE(connection.Open(
+      temp_directory_.GetPath().Append(FILE_PATH_LITERAL("OfflinePages.db"))));
+  ASSERT_TRUE(connection.is_open());
+  EXPECT_TRUE(sql::MetaTable::DoesTableExist(&connection));
+  sql::MetaTable meta_table;
+  EXPECT_TRUE(meta_table.Init(&connection, 1, 1));
+
+  EXPECT_EQ(expected_current_version, meta_table.GetVersionNumber());
+  EXPECT_EQ(expected_compatible_version,
+            meta_table.GetCompatibleVersionNumber());
+}
+
 // Loads empty store and makes sure that there are no offline pages stored in
 // it.
 TEST_F(OfflinePageMetadataStoreTest, LoadEmptyStore) {
@@ -801,6 +989,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a store which has an outdated schema.
@@ -812,6 +1001,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a string with schema from M54.
@@ -823,6 +1013,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a string with schema from M55.
@@ -834,6 +1025,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a string with schema from M56.
@@ -845,6 +1037,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a string with schema from M57.
@@ -856,6 +1049,7 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Loads a string with schema from M61.
@@ -867,6 +1061,27 @@
 
   OfflinePageItem item = CheckThatStoreHasOneItem();
   CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
+}
+
+// Loads a string with schema from M62.
+TEST_F(OfflinePageMetadataStoreTest, LoadVersion62Store) {
+  std::unique_ptr<OfflinePageMetadataStore> store(
+      BuildStoreWithSchemaFromM62());
+
+  OfflinePageItem item = CheckThatStoreHasOneItem();
+  CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
+}
+
+// Loads a string with schema from version 1 (as tracked by meta table).
+TEST_F(OfflinePageMetadataStoreTest, LoadStoreWithMetaVersion1) {
+  std::unique_ptr<OfflinePageMetadataStore> store(
+      BuildStoreWithSchemaVersion1());
+
+  CheckStoreItemsPostUpgradeFromVersion1();
+  CheckThatOfflinePageCanBeSaved(std::move(store));
+  VerifyMetaVersions(2, 1);
 }
 
 // Adds metadata of an offline page into a store and then opens the store
diff --git a/content/browser/android/selection_popup_controller.cc b/content/browser/android/selection_popup_controller.cc
index 8adc372f..0fbb90fc 100644
--- a/content/browser/android/selection_popup_controller.cc
+++ b/content/browser/android/selection_popup_controller.cc
@@ -99,7 +99,8 @@
 
 void SelectionPopupController::OnSelectionEvent(
     ui::SelectionEventType event,
-    const gfx::RectF& selection_rect) {
+    const gfx::RectF& selection_rect,
+    const gfx::PointF& bound_middle_point) {
   JNIEnv* env = AttachCurrentThread();
   ScopedJavaLocalRef<jobject> obj = java_obj_.get(env);
   if (obj.is_null())
@@ -107,7 +108,8 @@
 
   Java_SelectionPopupController_onSelectionEvent(
       env, obj, event, selection_rect.x(), selection_rect.y(),
-      selection_rect.right(), selection_rect.bottom());
+      selection_rect.right(), selection_rect.bottom(), bound_middle_point.x(),
+      bound_middle_point.y());
 }
 
 void SelectionPopupController::OnSelectionChanged(const std::string& text) {
diff --git a/content/browser/android/selection_popup_controller.h b/content/browser/android/selection_popup_controller.h
index f8211f8..a551de42 100644
--- a/content/browser/android/selection_popup_controller.h
+++ b/content/browser/android/selection_popup_controller.h
@@ -34,7 +34,8 @@
 
   // Called from native -> java
   void OnSelectionEvent(ui::SelectionEventType event,
-                        const gfx::RectF& selection_rect);
+                        const gfx::RectF& selection_rect,
+                        const gfx::PointF& bound_middle_point);
   void OnSelectionChanged(const std::string& text);
   bool ShowSelectionMenu(const ContextMenuParams& params, int handle_height);
   void OnShowUnhandledTapUIIfNeeded(int x_dip, int y_dip, float dip_scale);
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc
index 1b8d347..0e931230 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -993,8 +993,10 @@
 
 void RenderFrameDevToolsAgentHost::RenderFrameDeleted(RenderFrameHost* rfh) {
   if (IsBrowserSideNavigationEnabled()) {
-    if (rfh == frame_host_)
+    if (rfh == frame_host_) {
       render_frame_alive_ = false;
+      agent_ptr_.reset();
+    }
     DCHECK(CheckConsistency());
     return;
   }
@@ -1375,7 +1377,7 @@
 }
 
 bool RenderFrameDevToolsAgentHost::EnsureAgent() {
-  if (!frame_host_)
+  if (!frame_host_ || !render_frame_alive_)
     return false;
   if (!agent_ptr_)
     frame_host_->GetRemoteAssociatedInterfaces()->GetInterface(&agent_ptr_);
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index b285a3bf..c8660add 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -3672,9 +3672,30 @@
   // completing an unload handler.
   ResetWaitingState();
 
-  Send(new FrameMsg_FailedNavigation(routing_id_, common_params, request_params,
-                                     has_stale_copy_in_cache, error_code,
-                                     error_page_content));
+  StoragePartitionImpl* storage_partition =
+      static_cast<StoragePartitionImpl*>(BrowserContext::GetStoragePartition(
+          GetSiteInstance()->GetBrowserContext(), GetSiteInstance()));
+
+  mojom::URLLoaderFactoryPtr default_factory;
+  if (g_url_loader_factory_callback_for_test.Get().is_null()) {
+    storage_partition->GetNetworkContext()->CreateURLLoaderFactory(
+        mojo::MakeRequest(&default_factory), GetProcess()->GetID());
+  } else {
+    mojom::URLLoaderFactoryPtr original_factory;
+    storage_partition->GetNetworkContext()->CreateURLLoaderFactory(
+        mojo::MakeRequest(&original_factory), GetProcess()->GetID());
+    g_url_loader_factory_callback_for_test.Get().Run(
+        mojo::MakeRequest(&default_factory), GetProcess()->GetID(),
+        original_factory.PassInterface());
+  }
+
+  base::Optional<URLLoaderFactoryBundle> subresource_loader_factories;
+  subresource_loader_factories.emplace();
+  subresource_loader_factories->SetDefaultFactory(std::move(default_factory));
+
+  GetNavigationControl()->CommitFailedNavigation(
+      common_params, request_params, has_stale_copy_in_cache, error_code,
+      error_page_content, std::move(subresource_loader_factories));
 
   // An error page is expected to commit, hence why is_loading_ is set to true.
   is_loading_ = true;
diff --git a/content/browser/loader/resource_hints_impl.cc b/content/browser/loader/resource_hints_impl.cc
index a0ab5b2..6b1451c8 100644
--- a/content/browser/loader/resource_hints_impl.cc
+++ b/content/browser/loader/resource_hints_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
+#include "base/trace_event/trace_event.h"
 #include "content/browser/loader/resource_dispatcher_host_impl.h"
 #include "content/public/browser/resource_hints.h"
 #include "net/base/address_list.h"
@@ -55,6 +56,7 @@
              ->io_thread_task_runner()
              ->BelongsToCurrentThread());
   DCHECK(getter);
+  TRACE_EVENT2("net", "PreconnectUrl", "url", url.spec(), "count", count);
 
   net::URLRequestContext* request_context = getter->GetURLRequestContext();
   if (!request_context)
@@ -99,6 +101,7 @@
              ->io_thread_task_runner()
              ->BelongsToCurrentThread());
   DCHECK(getter);
+  TRACE_EVENT1("net", "PreresolveUrl", "url", url.spec());
 
   net::URLRequestContext* request_context = getter->GetURLRequestContext();
   if (!request_context)
diff --git a/content/browser/locks/lock_manager.cc b/content/browser/locks/lock_manager.cc
index f2613ef6b..d4d5ea6 100644
--- a/content/browser/locks/lock_manager.cc
+++ b/content/browser/locks/lock_manager.cc
@@ -15,15 +15,6 @@
 
 namespace {
 
-template <typename T>
-bool Intersects(const std::vector<T>& a, const std::unordered_set<T>& b) {
-  for (const auto& k : a) {
-    if (b.find(k) != b.end())
-      return true;
-  }
-  return false;
-}
-
 // A LockHandle is passed to the client when a lock is granted. As long as the
 // handle is held, the lock is held. Dropping the handle - either explicitly
 // by script or by process termination - causes the lock to be released.
@@ -63,18 +54,15 @@
 // and passed to the held callback. Eventually the client will drop the
 // handle, which will notify the context and remove this.
 struct LockManager::Lock {
-  Lock(std::vector<std::string> scope,
+  Lock(const std::string& name,
        LockMode mode,
        int64_t id,
        blink::mojom::LockRequestPtr request)
-      : scope(std::move(scope)),
-        mode(mode),
-        id(id),
-        request(std::move(request)) {}
+      : name(name), mode(mode), id(id), request(std::move(request)) {}
 
   ~Lock() = default;
 
-  const std::vector<std::string> scope;
+  const std::string name;
   const LockMode mode;
   const int64_t id;
   blink::mojom::LockRequestPtr request;
@@ -87,21 +75,18 @@
 LockManager::OriginState::OriginState() = default;
 LockManager::OriginState::~OriginState() = default;
 
-bool LockManager::OriginState::IsGrantable(
-    const std::vector<std::string>& scope,
-    LockMode mode) const {
+bool LockManager::OriginState::IsGrantable(const std::string& name,
+                                           LockMode mode) const {
   if (mode == LockMode::EXCLUSIVE) {
-    return !Intersects(scope, shared) && !Intersects(scope, exclusive);
+    return !shared.count(name) && !exclusive.count(name);
   } else {
-    return !Intersects(scope, exclusive);
+    return !exclusive.count(name);
   }
 }
 
-void LockManager::OriginState::MergeLockState(
-    const std::vector<std::string>& scope,
-    LockMode mode) {
-  (mode == LockMode::SHARED ? shared : exclusive)
-      .insert(scope.begin(), scope.end());
+void LockManager::OriginState::MergeLockState(const std::string& name,
+                                              LockMode mode) {
+  (mode == LockMode::SHARED ? shared : exclusive).insert(name);
 }
 
 void LockManager::CreateService(blink::mojom::LockManagerRequest request) {
@@ -110,13 +95,13 @@
 }
 
 void LockManager::RequestLock(const url::Origin& origin,
-                              const std::vector<std::string>& scope,
+                              const std::string& name,
                               LockMode mode,
                               WaitMode wait,
                               blink::mojom::LockRequestPtr request) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (wait == WaitMode::NO_WAIT && !IsGrantable(origin, scope, mode)) {
+  if (wait == WaitMode::NO_WAIT && !IsGrantable(origin, name, mode)) {
     request->Failed();
     return;
   }
@@ -127,8 +112,8 @@
       &LockManager::ReleaseLock, base::Unretained(this), origin, lock_id));
 
   origins_[origin].requested.emplace(std::make_pair(
-      lock_id, std::make_unique<Lock>(std::move(scope), mode, lock_id,
-                                      std::move(request))));
+      lock_id,
+      std::make_unique<Lock>(name, mode, lock_id, std::move(request))));
 
   ProcessRequests(origin);
 }
@@ -149,13 +134,13 @@
 }
 
 bool LockManager::IsGrantable(const url::Origin& origin,
-                              const std::vector<std::string>& scope,
+                              const std::string& name,
                               LockMode mode) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!base::ContainsKey(origins_, origin))
     return true;
 
-  return origins_[origin].IsGrantable(scope, mode);
+  return origins_[origin].IsGrantable(name, mode);
 }
 
 void LockManager::ProcessRequests(const url::Origin& origin) {
@@ -172,15 +157,15 @@
   state.exclusive.clear();
   for (const auto& id_lock_pair : state.held) {
     const auto& lock = id_lock_pair.second;
-    state.MergeLockState(lock->scope, lock->mode);
+    state.MergeLockState(lock->name, lock->mode);
   }
 
   for (auto it = state.requested.begin(); it != state.requested.end();) {
     auto& lock = it->second;
 
-    bool granted = state.IsGrantable(lock->scope, lock->mode);
+    bool granted = state.IsGrantable(lock->name, lock->mode);
 
-    state.MergeLockState(lock->scope, lock->mode);
+    state.MergeLockState(lock->name, lock->mode);
 
     if (granted) {
       std::unique_ptr<Lock> grantee = std::move(lock);
diff --git a/content/browser/locks/lock_manager.h b/content/browser/locks/lock_manager.h
index 9453a3e..2eec0df 100644
--- a/content/browser/locks/lock_manager.h
+++ b/content/browser/locks/lock_manager.h
@@ -8,7 +8,6 @@
 #include <memory>
 #include <string>
 #include <unordered_set>
-#include <vector>
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
@@ -33,7 +32,7 @@
   // Request a lock. When the lock is acquired, |callback| will be invoked with
   // a LockHandle.
   void RequestLock(const url::Origin& origin,
-                   const std::vector<std::string>& scope,
+                   const std::string& name,
                    LockMode mode,
                    WaitMode wait,
                    blink::mojom::LockRequestPtr request) override;
@@ -54,9 +53,8 @@
     OriginState();
     ~OriginState();
 
-    bool IsGrantable(const std::vector<std::string>& scope,
-                     LockMode mode) const;
-    void MergeLockState(const std::vector<std::string>& scope, LockMode mode);
+    bool IsGrantable(const std::string& name, LockMode mode) const;
+    void MergeLockState(const std::string& name, LockMode mode);
 
     std::map<int64_t, std::unique_ptr<Lock>> requested;
     std::map<int64_t, std::unique_ptr<Lock>> held;
@@ -68,7 +66,7 @@
   };
 
   bool IsGrantable(const url::Origin& origin,
-                   const std::vector<std::string>& scope,
+                   const std::string& name,
                    LockMode mode);
 
   // Called when a lock is requested and optionally when a lock is released,
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 8da9bd7..0edc633 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1436,7 +1436,8 @@
     ResetGestureDetection();
   }
   selection_popup_controller_->OnSelectionEvent(
-      event, GetSelectionRect(*touch_selection_controller_));
+      event, GetSelectionRect(*touch_selection_controller_),
+      touch_selection_controller_->GetActiveHandleBoundPoint());
 }
 
 ui::TouchSelectionControllerClient*
diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc
index bdaf373..8559624 100644
--- a/content/browser/service_manager/service_manager_context.cc
+++ b/content/browser/service_manager/service_manager_context.cc
@@ -445,6 +445,8 @@
   device_info.factory = base::Bind(
       &device::CreateDeviceService, device_blocking_task_runner,
       BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
+      base::BindRepeating(&GetGeolocationRequestContextFromContentClient),
+      GetContentClient()->browser()->GetGeolocationApiKey(),
       base::Bind(&WakeLockContextHost::GetNativeViewForContext),
       base::Bind(&ContentBrowserClient::OverrideSystemLocationProvider,
                  base::Unretained(GetContentClient()->browser())),
@@ -453,6 +455,8 @@
   device_info.factory = base::Bind(
       &device::CreateDeviceService, device_blocking_task_runner,
       BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
+      base::BindRepeating(&GetGeolocationRequestContextFromContentClient),
+      GetContentClient()->browser()->GetGeolocationApiKey(),
       base::Bind(&ContentBrowserClient::OverrideSystemLocationProvider,
                  base::Unretained(GetContentClient()->browser())));
 #endif
@@ -460,10 +464,10 @@
   packaged_services_connection_->AddEmbeddedService(device::mojom::kServiceName,
                                                     device_info);
 
-  // Pipe embedder-supplied API key through to GeolocationProvider.
-  // TODO(amoylan): Once GeolocationProvider hangs off DeviceService
-  // (https://crbug.com/709301), pass these via CreateDeviceService above
-  // instead.
+  // Pipe embedder-supplied API key & URL request context producer through to
+  // GeolocationProvider.
+  // TODO(amoylan): Remove these once GeolocationProvider hangs off
+  // DeviceService (https://crbug.com/709301).
   device::GeolocationProvider::SetRequestContextProducer(
       base::BindRepeating(&GetGeolocationRequestContextFromContentClient));
   device::GeolocationProvider::SetApiKey(
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index 08f9728c..0681334 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -79,6 +79,23 @@
       URLLoaderClientEndpoints? url_loader_client_endpoints,
       URLLoaderFactoryBundle? subresource_loader_factories,
       mojo.common.mojom.UnguessableToken devtools_navigation_token);
+
+  // Tells the renderer that a failed navigation is ready to commit.
+  //
+  // The result of this commit usually results in displaying an error page.
+  // Note |error_page_content| may contain the content of the error page
+  // (i.e. flattened HTML, JS, CSS).
+  //
+  // When the Network Service is enabled, |subresource_loader_factories| may
+  // also be provided by the browser as a a means for the renderer to load
+  // subresources where applicable.
+  CommitFailedNavigation(
+      CommonNavigationParams common_params,
+      RequestNavigationParams request_params,
+      bool has_stale_copy_in_cache,
+      int32 error_code,
+      string? error_page_content,
+      URLLoaderFactoryBundle? subresource_loader_factories);
 };
 
 // Implemented by the frame (e.g. renderer processes).
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 8ba6261..a315de27 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -951,16 +951,6 @@
 #endif
 
 // PlzNavigate
-// Tells the renderer that a navigation failed with the error code |error_code|
-// and that the renderer should display an appropriate error page.
-IPC_MESSAGE_ROUTED5(FrameMsg_FailedNavigation,
-                    content::CommonNavigationParams,  /* common_params */
-                    content::RequestNavigationParams, /* request_params */
-                    bool,                             /* stale_copy_in_cache */
-                    int,                              /* error_code */
-                    base::Optional<std::string> /* error_page_content */)
-
-// PlzNavigate
 // Tells the renderer that a navigation was blocked because a content security
 // policy was violated.
 IPC_MESSAGE_ROUTED1(FrameMsg_ReportContentSecurityPolicyViolation,
diff --git a/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java b/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java
index edbd18c..3d44258e 100644
--- a/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java
+++ b/content/public/android/java/src/org/chromium/content/browser/SelectionPopupController.java
@@ -1049,7 +1049,8 @@
 
     // All coordinates are in DIP.
     @CalledByNative
-    private void onSelectionEvent(int eventType, int left, int top, int right, int bottom) {
+    private void onSelectionEvent(int eventType, int left, int top, int right, int bottom,
+            float boundMiddlePointX, float boundMiddlePointY) {
         // Ensure the provided selection coordinates form a non-empty rect, as required by
         // the selection action mode.
         if (left == right) ++right;
diff --git a/content/renderer/devtools/devtools_agent.cc b/content/renderer/devtools/devtools_agent.cc
index 5250f191..37bd1f5 100644
--- a/content/renderer/devtools/devtools_agent.cc
+++ b/content/renderer/devtools/devtools_agent.cc
@@ -271,10 +271,6 @@
     GetWebAgent()->FailedToRequestDevTools(session_id);
 }
 
-void DevToolsAgent::ContinueProgram() {
-  GetWebAgent()->ContinueProgram();
-}
-
 WebDevToolsAgent* DevToolsAgent::GetWebAgent() {
   return frame_->GetWebFrame()->DevToolsAgent();
 }
@@ -287,16 +283,4 @@
   return weak_factory_.GetWeakPtr();
 }
 
-bool DevToolsAgent::IsAttached() {
-  return !hosts_.empty();
-}
-
-void DevToolsAgent::DetachAllSessions() {
-  for (auto& it : hosts_)
-    GetWebAgent()->Detach(it.first);
-  hosts_.clear();
-  io_sessions_.clear();
-  sessions_.clear();
-}
-
 }  // namespace content
diff --git a/content/renderer/devtools/devtools_agent.h b/content/renderer/devtools/devtools_agent.h
index 3703a90..04deb945 100644
--- a/content/renderer/devtools/devtools_agent.h
+++ b/content/renderer/devtools/devtools_agent.h
@@ -37,9 +37,6 @@
 
   void BindRequest(mojom::DevToolsAgentAssociatedRequest request);
   base::WeakPtr<DevToolsAgent> GetWeakPtr();
-  bool IsAttached();
-  void DetachAllSessions();
-  void ContinueProgram();
 
  private:
   class Session;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index d3bb3d87..cbc1a644 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1788,7 +1788,6 @@
     IPC_MESSAGE_HANDLER(FrameMsg_SetTextTrackSettings,
                         OnTextTrackSettingsChanged)
     IPC_MESSAGE_HANDLER(FrameMsg_PostMessageEvent, OnPostMessageEvent)
-    IPC_MESSAGE_HANDLER(FrameMsg_FailedNavigation, OnFailedNavigation)
     IPC_MESSAGE_HANDLER(FrameMsg_ReportContentSecurityPolicyViolation,
                         OnReportContentSecurityPolicyViolation)
     IPC_MESSAGE_HANDLER(FrameMsg_GetSavableResourceLinks,
@@ -1846,8 +1845,6 @@
   DCHECK(!IsBrowserSideNavigationEnabled());
   TRACE_EVENT2("navigation,rail", "RenderFrameImpl::OnNavigate", "id",
                routing_id_, "url", common_params.url.possibly_invalid_spec());
-  if (devtools_agent_)
-    devtools_agent_->ContinueProgram();
   NavigateInternal(common_params, start_params, request_params,
                    std::unique_ptr<StreamOverrideParameters>(),
                    /*subresource_loader_factories=*/base::nullopt,
@@ -2999,8 +2996,7 @@
 }
 
 void RenderFrameImpl::DetachDevToolsForTest() {
-  if (devtools_agent_)
-    devtools_agent_->DetachAllSessions();
+  frame_->DetachAllDevToolsSessionsForTesting();
 }
 
 void RenderFrameImpl::SetPreviewsState(PreviewsState previews_state) {
@@ -3131,6 +3127,128 @@
   // RenderFrameImpl.
 }
 
+void RenderFrameImpl::CommitFailedNavigation(
+    const CommonNavigationParams& common_params,
+    const RequestNavigationParams& request_params,
+    bool has_stale_copy_in_cache,
+    int error_code,
+    const base::Optional<std::string>& error_page_content,
+    base::Optional<URLLoaderFactoryBundle> subresource_loader_factories) {
+  DCHECK(IsBrowserSideNavigationEnabled());
+  bool is_reload =
+      FrameMsg_Navigate_Type::IsReload(common_params.navigation_type);
+  RenderFrameImpl::PrepareRenderViewForNavigation(common_params.url,
+                                                  request_params);
+
+  GetContentClient()->SetActiveURL(
+      common_params.url, frame_->Top()->GetSecurityOrigin().ToString().Utf8());
+
+  if (subresource_loader_factories)
+    subresource_loader_factories_ = std::move(subresource_loader_factories);
+
+  // If this frame is navigating cross-process, it may naively assume that this
+  // is the first navigation in the frame, but this may not actually be the
+  // case. Inform the frame's state machine if this frame has already committed
+  // other loads.
+  if (request_params.has_committed_real_load)
+    frame_->SetCommittedFirstRealLoad();
+
+  pending_navigation_params_.reset(new NavigationParams(
+      common_params, StartNavigationParams(), request_params));
+
+  // Send the provisional load failure.
+  WebURLError error(
+      error_code,
+      has_stale_copy_in_cache ? WebURLError::HasCopyInCache::kTrue
+                              : WebURLError::HasCopyInCache::kFalse,
+      WebURLError::IsWebSecurityViolation::kFalse, common_params.url);
+  WebURLRequest failed_request =
+      CreateURLRequestForNavigation(common_params, request_params,
+                                    std::unique_ptr<StreamOverrideParameters>(),
+                                    frame_->IsViewSourceModeEnabled(),
+                                    false);  // is_same_document_navigation
+
+  if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) {
+    // The browser expects this frame to be loading an error page. Inform it
+    // that the load stopped.
+    Send(new FrameHostMsg_DidStopLoading(routing_id_));
+    browser_side_navigation_pending_ = false;
+    browser_side_navigation_pending_url_ = GURL();
+    return;
+  }
+
+  // On load failure, a frame can ask its owner to render fallback content.
+  // When that happens, don't load an error page.
+  WebLocalFrame::FallbackContentResult fallback_result =
+      frame_->MaybeRenderFallbackContent(error);
+  if (fallback_result != WebLocalFrame::NoFallbackContent) {
+    if (fallback_result == WebLocalFrame::NoLoadInProgress) {
+      // If the frame wasn't loading but was fallback-eligible, the fallback
+      // content won't be shown. However, showing an error page isn't right
+      // either, as the frame has already been populated with something
+      // unrelated to this navigation failure. In that case, just send a stop
+      // IPC to the browser to unwind its state, and leave the frame as-is.
+      Send(new FrameHostMsg_DidStopLoading(routing_id_));
+    }
+    browser_side_navigation_pending_ = false;
+    browser_side_navigation_pending_url_ = GURL();
+    return;
+  }
+
+  // Make sure errors are not shown in view source mode.
+  frame_->EnableViewSourceMode(false);
+
+  // Replace the current history entry in reloads, and loads of the same url.
+  // This corresponds to Blink's notion of a standard commit.
+  // Also replace the current history entry if the browser asked for it
+  // specifically.
+  // TODO(clamy): see if initial commits in subframes should be handled
+  // separately.
+  bool replace = is_reload || common_params.url == GetLoadingUrl() ||
+                 common_params.should_replace_current_entry;
+  std::unique_ptr<HistoryEntry> history_entry;
+  if (request_params.page_state.IsValid())
+    history_entry = PageStateToHistoryEntry(request_params.page_state);
+
+  // The load of the error page can result in this frame being removed.
+  // Use a WeakPtr as an easy way to detect whether this has occured. If so,
+  // this method should return immediately and not touch any part of the object,
+  // otherwise it will result in a use-after-free bug.
+  base::WeakPtr<RenderFrameImpl> weak_this = weak_factory_.GetWeakPtr();
+
+  // For renderer initiated navigations, we send out a didFailProvisionalLoad()
+  // notification.
+  bool had_provisional_document_loader = frame_->GetProvisionalDocumentLoader();
+  if (request_params.nav_entry_id == 0) {
+    blink::WebHistoryCommitType commit_type =
+        replace ? blink::kWebHistoryInertCommit : blink::kWebStandardCommit;
+    if (error_page_content.has_value()) {
+      DidFailProvisionalLoadInternal(error, commit_type, error_page_content);
+    } else {
+      // TODO(https://crbug.com/778824): We only have this branch because a
+      // layout test expects DidFailProvisionalLoad() to be called directly,
+      // rather than DidFailProvisionalLoadInternal(). Once the bug is fixed, we
+      // should be able to call DidFailProvisionalLoadInternal() in all cases.
+      DidFailProvisionalLoad(error, commit_type);
+    }
+    if (!weak_this)
+      return;
+  }
+
+  // If we didn't call didFailProvisionalLoad or there wasn't a
+  // GetProvisionalDocumentLoader(), LoadNavigationErrorPage wasn't called, so
+  // do it now.
+  if (request_params.nav_entry_id != 0 || !had_provisional_document_loader) {
+    LoadNavigationErrorPage(failed_request, error, replace, history_entry.get(),
+                            error_page_content);
+    if (!weak_this)
+      return;
+  }
+
+  browser_side_navigation_pending_ = false;
+  browser_side_navigation_pending_url_ = GURL();
+}
+
 // mojom::HostZoom implementation ----------------------------------------------
 
 void RenderFrameImpl::SetHostZoomLevel(const GURL& url, double zoom_level) {
@@ -4207,11 +4325,6 @@
   if (!document_is_empty)
     return;
 
-  // Do not show error page when DevTools is attached.
-  const RenderFrameImpl* localRoot = GetLocalRoot();
-  if (localRoot->devtools_agent_ && localRoot->devtools_agent_->IsAttached())
-    return;
-
   // Display error page instead of a blank page, if appropriate.
   InternalDocumentStateData* internal_data =
       InternalDocumentStateData::FromDocumentLoader(
@@ -5495,124 +5608,6 @@
 }
 
 // PlzNavigate
-void RenderFrameImpl::OnFailedNavigation(
-    const CommonNavigationParams& common_params,
-    const RequestNavigationParams& request_params,
-    bool has_stale_copy_in_cache,
-    int error_code,
-    const base::Optional<std::string>& error_page_content) {
-  DCHECK(IsBrowserSideNavigationEnabled());
-  bool is_reload =
-      FrameMsg_Navigate_Type::IsReload(common_params.navigation_type);
-  RenderFrameImpl::PrepareRenderViewForNavigation(
-      common_params.url, request_params);
-
-  GetContentClient()->SetActiveURL(
-      common_params.url, frame_->Top()->GetSecurityOrigin().ToString().Utf8());
-
-  // If this frame is navigating cross-process, it may naively assume that this
-  // is the first navigation in the frame, but this may not actually be the
-  // case. Inform the frame's state machine if this frame has already committed
-  // other loads.
-  if (request_params.has_committed_real_load)
-    frame_->SetCommittedFirstRealLoad();
-
-  pending_navigation_params_.reset(new NavigationParams(
-      common_params, StartNavigationParams(), request_params));
-
-  // Send the provisional load failure.
-  WebURLError error(
-      error_code,
-      has_stale_copy_in_cache ? WebURLError::HasCopyInCache::kTrue
-                              : WebURLError::HasCopyInCache::kFalse,
-      WebURLError::IsWebSecurityViolation::kFalse, common_params.url);
-  WebURLRequest failed_request =
-      CreateURLRequestForNavigation(common_params, request_params,
-                                    std::unique_ptr<StreamOverrideParameters>(),
-                                    frame_->IsViewSourceModeEnabled(),
-                                    false);  // is_same_document_navigation
-
-  if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) {
-    // The browser expects this frame to be loading an error page. Inform it
-    // that the load stopped.
-    Send(new FrameHostMsg_DidStopLoading(routing_id_));
-    browser_side_navigation_pending_ = false;
-    browser_side_navigation_pending_url_ = GURL();
-    return;
-  }
-
-  // On load failure, a frame can ask its owner to render fallback content.
-  // When that happens, don't load an error page.
-  WebLocalFrame::FallbackContentResult fallback_result =
-      frame_->MaybeRenderFallbackContent(error);
-  if (fallback_result != WebLocalFrame::NoFallbackContent) {
-    if (fallback_result == WebLocalFrame::NoLoadInProgress) {
-      // If the frame wasn't loading but was fallback-eligible, the fallback
-      // content won't be shown. However, showing an error page isn't right
-      // either, as the frame has already been populated with something
-      // unrelated to this navigation failure. In that case, just send a stop
-      // IPC to the browser to unwind its state, and leave the frame as-is.
-      Send(new FrameHostMsg_DidStopLoading(routing_id_));
-    }
-    browser_side_navigation_pending_ = false;
-    browser_side_navigation_pending_url_ = GURL();
-    return;
-  }
-
-  // Make sure errors are not shown in view source mode.
-  frame_->EnableViewSourceMode(false);
-
-  // Replace the current history entry in reloads, and loads of the same url.
-  // This corresponds to Blink's notion of a standard commit.
-  // Also replace the current history entry if the browser asked for it
-  // specifically.
-  // TODO(clamy): see if initial commits in subframes should be handled
-  // separately.
-  bool replace = is_reload || common_params.url == GetLoadingUrl() ||
-                 common_params.should_replace_current_entry;
-  std::unique_ptr<HistoryEntry> history_entry;
-  if (request_params.page_state.IsValid())
-    history_entry = PageStateToHistoryEntry(request_params.page_state);
-
-  // The load of the error page can result in this frame being removed.
-  // Use a WeakPtr as an easy way to detect whether this has occured. If so,
-  // this method should return immediately and not touch any part of the object,
-  // otherwise it will result in a use-after-free bug.
-  base::WeakPtr<RenderFrameImpl> weak_this = weak_factory_.GetWeakPtr();
-
-  // For renderer initiated navigations, we send out a didFailProvisionalLoad()
-  // notification.
-  bool had_provisional_document_loader = frame_->GetProvisionalDocumentLoader();
-  if (request_params.nav_entry_id == 0) {
-    blink::WebHistoryCommitType commit_type =
-        replace ? blink::kWebHistoryInertCommit : blink::kWebStandardCommit;
-    if (error_page_content.has_value()) {
-      DidFailProvisionalLoadInternal(error, commit_type, error_page_content);
-    } else {
-      // TODO(crbug.com/778824): We only have this branch because a layout test
-      // expects DidFailProvisionalLoad() to be called directly, rather than
-      // DidFailProvisionalLoadInternal(). Once the bug is fixed, we should be
-      // able to call DidFailProvisionalLoadInternal() in all cases.
-      DidFailProvisionalLoad(error, commit_type);
-    }
-    if (!weak_this)
-      return;
-  }
-
-  // If we didn't call didFailProvisionalLoad or there wasn't a
-  // GetProvisionalDocumentLoader(), LoadNavigationErrorPage wasn't called, so
-  // do it now.
-  if (request_params.nav_entry_id != 0 || !had_provisional_document_loader) {
-    LoadNavigationErrorPage(failed_request, error, replace, history_entry.get(),
-                            error_page_content);
-    if (!weak_this)
-      return;
-  }
-
-  browser_side_navigation_pending_ = false;
-  browser_side_navigation_pending_url_ = GURL();
-}
-
 void RenderFrameImpl::OnReportContentSecurityPolicyViolation(
     const content::CSPViolationParams& violation_params) {
   frame_->ReportContentSecurityPolicyViolation(
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index a2c6b8d..1dc023e 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -532,6 +532,13 @@
       mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
       base::Optional<URLLoaderFactoryBundle> subresource_loaders,
       const base::UnguessableToken& devtools_navigation_token) override;
+  void CommitFailedNavigation(
+      const CommonNavigationParams& common_params,
+      const RequestNavigationParams& request_params,
+      bool has_stale_copy_in_cache,
+      int error_code,
+      const base::Optional<std::string>& error_page_content,
+      base::Optional<URLLoaderFactoryBundle> subresource_loaders) override;
 
   // mojom::HostZoom implementation:
   void SetHostZoomLevel(const GURL& url, double zoom_level) override;
@@ -1042,12 +1049,6 @@
   void OnTextTrackSettingsChanged(
       const FrameMsg_TextTrackSettings_Params& params);
   void OnPostMessageEvent(const FrameMsg_PostMessage_Params& params);
-  void OnFailedNavigation(
-      const CommonNavigationParams& common_params,
-      const RequestNavigationParams& request_params,
-      bool has_stale_copy_in_cache,
-      int error_code,
-      const base::Optional<std::string>& error_page_content);
   void OnReportContentSecurityPolicyViolation(
       const content::CSPViolationParams& violation_params);
   void OnGetSavableResourceLinks();
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 0681118..9e7e596d 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1746,6 +1746,7 @@
 
   data_deps = [
     "//components/filesystem:filesystem",
+    "//testing/buildbot/filters:content_unittests_filters",
     "//third_party/mesa:osmesa",
   ]
 
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index 4b4101d2..aab25a5 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -73,6 +73,15 @@
         std::move(subresource_loader_factories), devtools_navigation_token);
   }
 
+  void CommitFailedNavigation(
+      const content::CommonNavigationParams& common_params,
+      const content::RequestNavigationParams& request_params,
+      bool has_stale_copy_in_cache,
+      int32_t error_code,
+      const base::Optional<std::string>& error_page_content,
+      base::Optional<content::URLLoaderFactoryBundle>
+          subresource_loader_factories) override {}
+
  private:
   TestRenderFrameHost* const frame_host_;
 
diff --git a/docs/README.md b/docs/README.md
index 2e3f4ed..37e256bb 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -154,8 +154,7 @@
     Diagnosing and fixing layout test flakiness due to ordering dependencies.
 *   [Running Layout Tests using `content_shell`](testing/layout_tests_in_content_shell.md) -
     Running layout tests by hand.
-*   [Testing Browser Dialogs](testing/test_browser_dialog.md) - Using
-    TestBrowserDialog
+*   [Testing Browser UI](testing/test_browser_ui.md) - Using TestBrowserUi
 *   [Web Platform Tests](testing/web_platform_tests.md) - Shared tests across
     browser vendors
 *   [Using Breakpad with `content_shell`](testing/using_breakpad_with_content_shell.md) -
diff --git a/docs/adding_to_third_party.md b/docs/adding_to_third_party.md
index 8a41e72..8ae4693 100644
--- a/docs/adding_to_third_party.md
+++ b/docs/adding_to_third_party.md
@@ -74,7 +74,7 @@
 
 If the code is applicable and will be compiled on all supported Chromium
 platforms (Windows, Mac, Linux, Chrome OS, iOS, Android), check it in to
-[src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/). 
+[src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/).
 
 If the code is only applicable to certain platforms, check it in to
 [src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/)
@@ -95,6 +95,7 @@
 DEPS, please ask the infrastructure team before committing the change.
 
 ### Checking in large files
+
 _Accessible to Googlers only. Non-Googlers can email one of the people in
 third_party/OWNERS for help._
 
@@ -117,11 +118,13 @@
 following sign-offs. Some of these are accessible to Googlers only. Non-Googlers
 can email one of the people in third_party/OWNERS for help.
 
-* Chrome Eng Review. Googlers should see go/chrome-eng-review (please include information about the additional checkout size, build times, and binary sizes. Please also make sure that the motivation for your project is clear, e.g., a design doc has been circulated).
-* opensource-licensing@google.com (ping the list with relevant details and a
-  link to the CL).
+* Chrome Eng Review. Googlers should see go/chrome-eng-review. (Please include
+  information about the additional checkout size, build times, and binary sizes.
+  Please also make sure that the motivation for your project is clear, e.g.,
+  a design doc has been circulated.)
 * security@chromium.org (ping the list with relevant details and a link to the
   CL).
+* chromium-third-party@google.com (add the list as a reviewer on your change).
 
 Please send separate emails to the three lists.
 
@@ -135,8 +138,7 @@
 Subsequent changes don't require third-party-owners approval; you can modify the
 code as much as you want.
 
-## Ask the infrastructure team to add a git mirror for the dependency (or
-configure the git repo, if using googlesource.com)
+## Ask the infrastructure team to add a git mirror for the dependency
 
 Before committing the DEPS, you need to ask the infra team to create a git
 mirror for your dependency. [Create a
diff --git a/docs/testing/test_browser_dialog.md b/docs/testing/test_browser_dialog.md
index 44cf92a..270fc51c 100644
--- a/docs/testing/test_browser_dialog.md
+++ b/docs/testing/test_browser_dialog.md
@@ -1,100 +1,109 @@
-# Testing Chrome browser dialogs with TestBrowserDialog
+# Testing Chrome browser UI with TestBrowserUi
 
-\#include "[chrome/browser/ui/test/test_browser_dialog.h]"
+\#include "[chrome/browser/ui/test/test_browser_ui.h]"
 
-`TestBrowserDialog` provides a way to register an `InProcessBrowserTest` testing
-harness with a framework that invokes Chrome browser dialogs in a consistent
-way. It optionally provides a way to invoke dialogs "interactively". This allows
-screenshots to be generated easily, with the same test data, to assist with UI
-review. It also provides a registry of dialogs so they can be systematically
-checked for subtle changes and regressions.
+`TestBrowserUi` (and convenience class `TestBrowserDialog`) provide ways to
+register an `InProcessBrowserTest` testing harness with a framework that invokes
+Chrome browser UI in a consistent way. They optionally provide a way to invoke
+UI "interactively". This allows screenshots to be generated easily, with the
+same test data, to assist with UI review. `TestBrowserUi` also provides a UI
+registry so pieces of UI can be systematically checked for subtle changes and
+regressions.
 
 [TOC]
 
-## How to register a dialog
+## How to register UI
 
-If registering an existing dialog, there's a chance it already has a test
-harness inheriting, using, or with `typedef InProcessBrowserTest` (or a
-descendant of it). If so, using `TestBrowserDialog` is straightforward. Assume
-the existing InProcessBrowserTest is in `foo_dialog_browsertest.cc`:
+If registering existing UI, there's a chance it already has a test harness
+inheriting, using, or with `typedef InProcessBrowserTest` (or a descendant of
+it). If so, using `TestBrowserDialog` (for a dialog) is straightforward, and
+`TestBrowserUi` (for other types of UI) relatively so. Assume the existing
+`InProcessBrowserTest` is in `foo_browsertest.cc`:
 
-    class FooDialogTest : public InProcessBrowserTest { ...
+    class FooUiTest : public InProcessBrowserTest { ...
 
-Change this to inherit from DialogBrowserTest, and override
-`ShowDialog(std::string)`. See [Advanced Usage](#Advanced-Usage) for details.
+Change this to inherit from `DialogBrowserTest` (for dialogs) or `UiBrowserTest`
+(for non-dialogs), and override `ShowUi(std::string)`. For non-dialogs, also
+override `VerifyUi()` and `WaitForUserDismissal()`. See
+[Advanced Usage](#Advanced-Usage) for details.
 
 ```cpp
-class FooDialogTest : public DialogBrowserTest {
+class FooUiTest : public UiBrowserTest {
  public:
   ..
-  // DialogBrowserTest:
-  void ShowDialog(const std::string& name) override {
-    /* Show dialog attached to browser() and leave it open. */
+  // UiBrowserTest:
+  void ShowUi(const std::string& name) override {
+    /* Show Ui attached to browser() and leave it open. */
+  }
+  // These next two are not necessary if subclassing DialogBrowserTest.
+  bool VerifyUi() override {
+    /* Return true if the UI was successfully shown. */
+  }
+  void WaitForUserDismissal() override {
+    /* Block until the UI has been dismissed. */
   }
   ..
 };
 ```
 
-Then add test invocations using the usual GTest macros, in
-`foo_dialog_browsertest.cc`:
+Finally, add test invocations using the usual GTest macros, in
+`foo_browsertest.cc`:
 
 ```cpp
-IN_PROC_BROWSER_TEST_F(FooDialogTest, InvokeDialog_default) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(FooUiTest, InvokeUi_default) {
+  ShowAndVerifyUi();
 }
 ```
 
 Notes:
 
-*   The body of the test is always just "`RunDialog();`".
-*   "`default`" is the `std::string` passed to `ShowDialog()` and can be
+*   The body of the test is always just "`ShowAndVerifyUi();`".
+*   "`default`" is the `std::string` passed to `ShowUi()` and can be
     customized. See
-    [Testing additional dialog "styles"](#Testing-additional-dialog-styles).
-*   The text before `default` (in this case) must always be "`InvokeDialog_`".
+    [Testing additional UI "styles"](#Testing-additional-ui-styles).
+*   The text before `default` (in this case) must always be "`InvokeUi_`".
 
 ### Concrete examples
 
 *   [chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc]
-*   [chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc]
-*   [chrome/browser/ui/collected_cookies_browsertest.cc]
-*   [chrome/browser/ui/update_chrome_dialog_browsertest.cc]
+*   [chrome/browser/infobars/infobars_browsertest.cc]
 
 ##  Running the tests
 
-List the available dialogs with
+List the available pieces of UI with
 
-    $ ./browser_tests --gtest_filter=BrowserDialogTest.Invoke
+    $ ./browser_tests --gtest_filter=BrowserUiTest.Invoke
 
-E.g. `FooDialogTest.InvokeDialog_default` should be listed. To show the dialog
+E.g. `FooUiTest.InvokeUi_default` should be listed. To show the UI
 interactively, run
 
-    $ ./browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive \
-      --dialog=FooDialogTest.InvokeDialog_default
+    $ ./browser_tests --gtest_filter=BrowserUiTest.Invoke --interactive \
+      --ui=FooUiTest.InvokeUi_default
 
 ### Implementation
 
-`BrowserDialogTest.Invoke` searches for gtests that have "`InvokeDialog_`"  in
-their name, so they can be collected in a list. Providing a `--dialog` argument
-will invoke that test case in a subprocess. Including `--interactive` will set
-up an environment for that subprocess that allows interactivity, e.g., to take
-screenshots. The test ends once the dialog is dismissed.
+`BrowserUiTest.Invoke` searches for gtests that have "`InvokeUi_`"  in their
+names, so they can be collected in a list. Providing a `--ui` argument will
+invoke that test case in a subprocess. Including `--interactive` will set up an
+environment for that subprocess that allows interactivity, e.g., to take
+screenshots. The test ends once the UI is dismissed.
 
-The `FooDialogTest.InvokeDialog_default` test case **will still be run in the
-usual browser_tests test suite**. Ensure it passes, and isn’t flaky. This will
-give your dialog some regression test coverage. `RunDialog()` checks to ensure a
-dialog is actually created when it invokes `ShowDialog("default")`.
+The `FooUiTest.InvokeUi_default` test case **will still be run in the usual
+browser_tests test suite**. Ensure it passes, and isn’t flaky. This will
+give your UI some regression test coverage. `ShowAndVerifyUi()` checks to ensure
+UI is actually created when it invokes `ShowUi("default")`.
 
-### BrowserDialogTest.Invoke
+### BrowserUiTest.Invoke
 
 This is also run in browser_tests but, when run that way, the test case just
 lists the registered test harnesses (it does *not* iterate over them). A
-subprocess is never created unless --dialog is passed on the command line.
+subprocess is never created unless --ui is passed on the command line.
 
 ## Advanced Usage
 
 If your test harness inherits from a descendant of `InProcessBrowserTest` (one
-example: [ExtensionBrowserTest]) then the `SupportsTestDialog<>` template is
-provided. E.g.
+example: [ExtensionBrowserTest]) then the `SupportsTestUi<>` and
+`SupportsTestDialog` templates are provided. E.g.
 
 ```cpp
 class ExtensionInstallDialogViewTestBase : public ExtensionBrowserTest { ...
@@ -107,43 +116,47 @@
     public SupportsTestDialog<ExtensionBrowserTest> { ...
 ```
 
-### Testing additional dialog "styles"
+If you need to do any setup before `ShowUi()` is called, or any teardown in the
+non-interactive case, you can override the `PreShow()` and `DismissUi()
+methods.
 
-Add additional test cases, with a different string after "`InvokeDialog_`".
+### Testing additional UI "styles"
+
+Add additional test cases, with a different string after "`InvokeUi_`".
 Example:
 
 ```cpp
-IN_PROC_BROWSER_TEST_F(CardUnmaskViewBrowserTest, InvokeDialog_expired) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(CardUnmaskViewBrowserTest, InvokeUi_expired) {
+  ShowAndVerifyUi();
 }
 
-IN_PROC_BROWSER_TEST_F(CardUnmaskViewBrowserTest, InvokeDialog_valid) {
-  RunDialog();
+IN_PROC_BROWSER_TEST_F(CardUnmaskViewBrowserTest, InvokeUi_valid) {
+  ShowAndVerifyUi();
 }
 ```
 
 The strings "`expired`" or “`valid`” will be given as arguments to
-`ShowDialog(std::string)`.
+`ShowUi(std::string)`.
 
 ## Rationale
 
 Bug reference: [Issue 654151](http://crbug.com/654151).
 
-Chrome has a lot of browser dialogs; often for obscure use-cases and often hard
-to invoke. It has traditionally been difficult to be systematic while checking
-dialogs for possible regressions. For example, to investigate changes to shared
-layout parameters which are testable only with visual inspection.
+Chrome has a lot of browser UI; often for obscure use-cases and often hard to
+invoke. It has traditionally been difficult to be systematic while checking UI
+for possible regressions. For example, to investigate changes to shared layout
+parameters which are testable only with visual inspection.
 
 For Chrome UI review, screenshots need to be taken. Iterating over all the
-"styles" that a dialog may appear with is fiddly. E.g. a login or particular web
+"styles" that UI may appear with is fiddly. E.g. a login or particular web
 server setup may be required. It’s important to provide a consistent “look” for
 UI review (e.g. same test data, same browser size, anchoring position, etc.).
 
-Some dialogs lack tests. Some dialogs have zero coverage on the bots. Dialogs
-can have tricky lifetimes and common mistakes are repeated. TestBrowserDialog
-runs simple "Show dialog" regression tests and can be extended to do more.
+Some UI lacks tests. Some UI has zero coverage on the bots. UI elements can have
+tricky lifetimes and common mistakes are repeated. TestBrowserUi runs simple
+"Show UI" regression tests and can be extended to do more.
 
-Even discovering the full set of dialogs present for each platform in Chrome is
+Even discovering the full set of UI present for each platform in Chrome is
 [difficult](http://crbug.com/686239).
 
 ### Why browser_tests?
@@ -152,12 +165,12 @@
     size that can be used as a dialog anchor and to take screenshots for UI
     review.
     *   UI review have requested that screenshots be provided with the entire
-        browser window so that the relative size of the dialog/change under
+        browser window so that the relative size of the UI element/change under
         review can be assessed.
 
-*   Some dialogs already have a test harness with appropriate setup (e.g. test
-    data) running in browser_tests.
-    *   Supporting `BrowserDialogTest` should require minimal setup and minimal
+*   Some UI already has a test harness with appropriate setup (e.g. test data)
+    running in browser_tests.
+    *   Supporting `BrowserUiTest` should require minimal setup and minimal
         ongoing maintenance.
 
 *   An alternative is to maintain a working end-to-end build target executable
@@ -167,19 +180,18 @@
          `MaterialDesignController::Initialize()`, etc.).
 
 *   Why not chrome.exe?
-    *   E.g. a scrappy chrome:// page with links to invoke dialogs would be
-        great!
+    *   E.g. a scrappy chrome:// page with links to invoke UI would be great!
     *   But...
-        *   A dialog may have test data (e.g. credit card info) which shouldn’t
-        be in the release build.
-        *   A dialog may use EmbeddedTestServer.
+        *   UI may have test data (e.g. credit card info) which shouldn’t be in
+        the release build.
+        *   UI may use EmbeddedTestServer.
         *   Higher maintenance cost - can’t leverage existing test harnesses.
 
 ## Future Work
 
-*   Opt in more dialogs!
-    *    Eventually, all of them.
-    *    A `BrowserDialogTest` for every descendant of `views::DialogDelegate`.
+*   Opt in more UI!
+    *    Eventually, all of it.
+    *    A `DialogBrowserTest` for every descendant of `views::DialogDelegate`.
 
 *   Automatically generate screenshots (for each platform, in various languages)
     *    Build upon [CL 2008283002](https://codereview.chromium.org/2008283002/)
@@ -188,8 +200,8 @@
     *    Probably requires altering the browser_test suite code directly rather
          than just adding a test case as in the current approach
 
-*   An automated test suite for dialogs
-    *    Test various ways to dismiss or hide a dialog
+*   An automated test suite for UI
+    *    Test various ways to dismiss or hide UI, especially dialogs
          *    e.g. native close (via taskbar?)
          *    close parent window (possibly via task bar)
          *    close parent tab
@@ -200,8 +212,8 @@
     *    Drag tab off browser into a new window
     *    Fullscreen that may create a new window/parent
 
-*   Find obscure workflows for invoking dialogs that have no test coverage and
-    cause crashes (e.g. [http://crrev.com/426302](http://crrev.com/426302))
+*   Find obscure workflows for invoking UI that has no test coverage and causes
+    crashes (e.g. [http://crrev.com/426302](http://crrev.com/426302))
     *   Supporting window-modal dialogs with a null parent window.
 
 *   Find memory leaks, e.g. [http://crrev.com/432320](http://crrev.com/432320)
@@ -209,71 +221,69 @@
 
 ## Appendix: Sample output
 
-**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserDialogTest.Invoke**
+**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserUiTest.Invoke**
 ```
-Note: Google Test filter = BrowserDialogTest.Invoke
+Note: Google Test filter = BrowserUiTest.Invoke
 [==========] Running 1 test from 1 test case.
 [----------] Global test environment set-up.
-[----------] 1 test from BrowserDialogTest
-[ RUN      ] BrowserDialogTest.Invoke
-[26879:775:0207/134949.118352:30434675...:INFO:browser_dialog_browsertest.cc(46)
-Pass one of the following after --dialog=
-  AskGoogleForSuggestionsDialogTest.InvokeDialog_default
-  CardUnmaskPromptViewBrowserTest.InvokeDialog_expired
-  CardUnmaskPromptViewBrowserTest.InvokeDialog_valid
-  CollectedCookiesTestMd.InvokeDialog_default
-  UpdateRecommendedDialogTest.InvokeDialog_default
-/* lots more will eventually be listed here */
-[       OK ] BrowserDialogTest.Invoke (0 ms)
-[----------] 1 test from BrowserDialogTest (0 ms total)
+[----------] 1 test from BrowserUiTest
+[ RUN      ] BrowserUiTest.Invoke
+[26879:775:0207/134949.118352:30434675...:INFO:browser_ui_browsertest.cc(46)
+Pass one of the following after --ui=
+        AppInfoDialogBrowserTest.InvokeUi_default
+        AskGoogleForSuggestionsDialogTest.DISABLED_InvokeUi_default
+        BluetoothChooserBrowserTest.InvokeUi_ConnectedBubble
+        BluetoothChooserBrowserTest.InvokeUi_ConnectedModal
+/* and many more */
+[       OK ] BrowserUiTest.Invoke (0 ms)
+[----------] 1 test from BrowserUiTest (0 ms total)
 [----------] Global test environment tear-down
 [==========] 1 test from 1 test case ran. (1 ms total)
 [  PASSED  ] 1 test.
-[1/1] BrowserDialogTest.Invoke (334 ms)
+[1/1] BrowserUiTest.Invoke (334 ms)
 SUCCESS: all tests passed.
 ```
 
-**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserDialogTest.Invoke
---dialog=CardUnmaskPromptViewBrowserTest.InvokeDialog_expired**
+**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserUiTest.Invoke
+--ui=CardUnmaskPromptViewBrowserTest.InvokeUi_expired**
 
 ```
-Note: Google Test filter = BrowserDialogTest.Invoke
+Note: Google Test filter = BrowserUiTest.Invoke
 [==========] Running 1 test from 1 test case.
 [----------] Global test environment set-up.
-[----------] 1 test from BrowserDialogTest
-[ RUN      ] BrowserDialogTest.Invoke
+[----------] 1 test from BrowserUiTest
+[ RUN      ] BrowserUiTest.Invoke
 Note: Google Test filter = CardUnmaskPromptViewBrowserTest.InvokeDefault
 [==========] Running 1 test from 1 test case.
 [----------] Global test environment set-up.
 [----------] 1 test from CardUnmaskPromptViewBrowserTest, where TypeParam =
-[ RUN      ] CardUnmaskPromptViewBrowserTest.InvokeDialog_expired
+[ RUN      ] CardUnmaskPromptViewBrowserTest.InvokeUi_expired
 /* 7 lines of uninteresting log spam */
-[       OK ] CardUnmaskPromptViewBrowserTest.InvokeDialog_expired (1324 ms)
+[       OK ] CardUnmaskPromptViewBrowserTest.InvokeUi_expired (1324 ms)
 [----------] 1 test from CardUnmaskPromptViewBrowserTest (1324 ms total)
 [----------] Global test environment tear-down
 [==========] 1 test from 1 test case ran. (1325 ms total)
 [  PASSED  ] 1 test.
-[       OK ] BrowserDialogTest.Invoke (1642 ms)
-[----------] 1 test from BrowserDialogTest (1642 ms total)
+[       OK ] BrowserUiTest.Invoke (1642 ms)
+[----------] 1 test from BrowserUiTest (1642 ms total)
 [----------] Global test environment tear-down
 [==========] 1 test from 1 test case ran. (1642 ms total)
 [  PASSED  ] 1 test.
-[1/1] BrowserDialogTest.Invoke (2111 ms)
+[1/1] BrowserUiTest.Invoke (2111 ms)
 SUCCESS: all tests passed.
 ```
 
-**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserDialogTest.Invoke
---dialog=CardUnmaskPromptViewBrowserTest.InvokeDialog_expired --interactive**
+**$ ./out/gn_Debug/browser_tests --gtest_filter=BrowserUiTest.Invoke
+--dialog=CardUnmaskPromptViewBrowserTest.InvokeUi_expired --interactive**
 ```
 /*
  * Output as above, except the test are not interleaved, and the browser window
- * should remain open until the dialog is dismissed
+ * should remain open until the UI is dismissed
  */
 ```
 
+[chrome/browser/ui/test/test_browser_ui.h]: https://cs.chromium.org/chromium/src/chrome/browser/ui/test/test_browser_ui.h
 [chrome/browser/ui/test/test_browser_dialog.h]: https://cs.chromium.org/chromium/src/chrome/browser/ui/test/test_browser_dialog.h
-[chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/ui/autofill/card_unmask_prompt_view_browsertest.cc?l=104&q=ShowDialog
-[chrome/browser/ui/collected_cookies_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/ui/collected_cookies_browsertest.cc?l=26&q=ShowDialog
-[chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc?l=18&q=ShowDialog
-[chrome/browser/ui/update_chrome_dialog_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/ui/update_chrome_dialog_browsertest.cc?l=15&q=ShowDialog
+[chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/ui/ask_google_for_suggestions_dialog_browsertest.cc?l=18&q=ShowUi
+[chrome/browser/infobars/infobars_browsertest.cc]: https://cs.chromium.org/chromium/src/chrome/browser/infobars/infobars_browsertest.cc?l=134&q=UiBrowserTest
 [ExtensionBrowserTest]: https://cs.chromium.org/chromium/src/chrome/browser/extensions/extension_browsertest.h?q=extensionbrowsertest&l=40
diff --git a/extensions/browser/api/app_window/app_window_apitest.cc b/extensions/browser/api/app_window/app_window_apitest.cc
index b64801d..59ad2f92 100644
--- a/extensions/browser/api/app_window/app_window_apitest.cc
+++ b/extensions/browser/api/app_window/app_window_apitest.cc
@@ -66,18 +66,30 @@
 #endif  // defined(OS_LINUX)
 
 IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnMinimizedEvent) {
+#if defined(OS_MACOSX)
+  if (base::mac::IsOS10_10())
+    return;  // Fails when swarmed. http://crbug.com/660582,
+#endif
   EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties",
                                       "minimized"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnMaximizedEvent) {
+#if defined(OS_MACOSX)
+  if (base::mac::IsOS10_10())
+    return;  // Fails when swarmed. http://crbug.com/660582,
+#endif
   EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties",
                                       "maximized"))
       << message_;
 }
 
 IN_PROC_BROWSER_TEST_F(AppWindowApiTest, MAYBE_OnRestoredEvent) {
+#if defined(OS_MACOSX)
+  if (base::mac::IsOS10_10())
+    return;  // Fails when swarmed. http://crbug.com/660582,
+#endif
   EXPECT_TRUE(RunExtensionTestWithArg("platform_apps/windows_api_properties",
                                       "restored"))
       << message_;
diff --git a/ios/chrome/browser/ui/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view_controller_unittest.mm
index 324b13d..43b73d6 100644
--- a/ios/chrome/browser/ui/browser_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view_controller_unittest.mm
@@ -141,7 +141,6 @@
 @interface TestWebToolbarController : UIViewController
 - (void)setTabCount:(NSInteger)tabCount;
 - (void)updateToolbarState;
-- (void)adjustToolbarHeight;
 - (void)setShareButtonEnabled:(BOOL)enabled;
 - (id)toolsPopupController;
 - (BOOL)isOmniboxFirstResponder;
@@ -163,9 +162,6 @@
 - (void)updateToolbarState {
   return;
 }
-- (void)adjustToolbarHeight {
-  return;
-}
 - (void)setShareButtonEnabled:(BOOL)enabled {
   return;
 }
diff --git a/ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.mm b/ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.mm
index 0d246252..9af86174 100644
--- a/ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.mm
+++ b/ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.mm
@@ -255,14 +255,6 @@
                    name:kVoiceSearchWillHideNotification
                  object:nil];
     [center addObserver:self
-               selector:@selector(incrementFullScreenLock)
-                   name:kVoiceSearchBarViewButtonSelectedNotification
-                 object:nil];
-    [center addObserver:self
-               selector:@selector(decrementFullScreenLock)
-                   name:kVoiceSearchBarViewButtonDeselectedNotification
-                 object:nil];
-    [center addObserver:self
                selector:@selector(applicationWillEnterForeground:)
                    name:UIApplicationWillEnterForegroundNotification
                  object:nil];
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
index cc649725..1e8e8b3 100644
--- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
+++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -280,8 +280,6 @@
       kTabHistoryPopupWillHideNotification :
           kTabHistoryPopupWillShowNotification,
       kVoiceSearchWillHideNotification : kVoiceSearchWillShowNotification,
-      kVoiceSearchBarViewButtonDeselectedNotification :
-          kVoiceSearchBarViewButtonSelectedNotification,
       kPageInfoWillHideNotification : kPageInfoWillShowNotification,
       kLocationBarResignsFirstResponderNotification :
           kLocationBarBecomesFirstResponderNotification,
diff --git a/ios/chrome/browser/ui/qr_scanner/BUILD.gn b/ios/chrome/browser/ui/qr_scanner/BUILD.gn
index 5de39b0..299af9b 100644
--- a/ios/chrome/browser/ui/qr_scanner/BUILD.gn
+++ b/ios/chrome/browser/ui/qr_scanner/BUILD.gn
@@ -74,8 +74,6 @@
     "//ios/chrome/browser/ui/omnibox",
     "//ios/chrome/browser/ui/toolbar",
     "//ios/chrome/browser/ui/toolbar:test_support",
-    "//ios/chrome/browser/ui/toolbar/clean:toolbar",
-    "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/base",
     "//ios/chrome/test/earl_grey:test_support",
diff --git a/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm b/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm
index 9ae57ea0..01fb4039 100644
--- a/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller_egtest.mm
@@ -18,8 +18,6 @@
 #include "ios/chrome/browser/ui/qr_scanner/camera_controller.h"
 #include "ios/chrome/browser/ui/qr_scanner/qr_scanner_view.h"
 #include "ios/chrome/browser/ui/qr_scanner/qr_scanner_view_controller.h"
-#import "ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.h"
-#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h"
 #include "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
 #import "ios/chrome/browser/ui/toolbar/web_toolbar_controller_private.h"
 #include "ios/chrome/browser/ui/ui_util.h"
@@ -411,39 +409,21 @@
 // method to load |searchURL| instead of the generated search URL.
 - (void)swizzleWebToolbarControllerLoadGURLFromLocationBar:
     (const GURL&)searchURL {
-  if (base::FeatureList::IsEnabled(kCleanToolbar)) {
-    void (^loadGURLFromLocationBarBlock)(ToolbarCoordinator*, const GURL&,
-                                         ui::PageTransition) =
-        ^void(ToolbarCoordinator* self, const GURL& url,
-              ui::PageTransition transition) {
-          [self.URLLoader loadURL:searchURL
-                         referrer:web::Referrer()
-                       transition:transition
-                rendererInitiated:NO];
-          [self cancelOmniboxEdit];
-        };
+  void (^loadGURLFromLocationBarBlock)(WebToolbarController*, const GURL&,
+                                       ui::PageTransition) =
+      ^void(WebToolbarController* self, const GURL& url,
+            ui::PageTransition transition) {
+        [self.urlLoader loadURL:searchURL
+                       referrer:web::Referrer()
+                     transition:transition
+              rendererInitiated:NO];
+        [self cancelOmniboxEdit];
+      };
 
-    load_GURL_from_location_bar_swizzler_.reset(
-        new ScopedBlockSwizzler([ToolbarCoordinator class],
-                                @selector(loadGURLFromLocationBar:transition:),
-                                loadGURLFromLocationBarBlock));
-  } else {
-    void (^loadGURLFromLocationBarBlock)(WebToolbarController*, const GURL&,
-                                         ui::PageTransition) =
-        ^void(WebToolbarController* self, const GURL& url,
-              ui::PageTransition transition) {
-          [self.urlLoader loadURL:searchURL
-                         referrer:web::Referrer()
-                       transition:transition
-                rendererInitiated:NO];
-          [self cancelOmniboxEdit];
-        };
-
-    load_GURL_from_location_bar_swizzler_.reset(
-        new ScopedBlockSwizzler([WebToolbarController class],
-                                @selector(loadGURLFromLocationBar:transition:),
-                                loadGURLFromLocationBarBlock));
-  }
+  load_GURL_from_location_bar_swizzler_.reset(
+      new ScopedBlockSwizzler([WebToolbarController class],
+                              @selector(loadGURLFromLocationBar:transition:),
+                              loadGURLFromLocationBarBlock));
 }
 
 // Creates a new CameraController mock with camera permission granted if
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_transition_egtest.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_transition_egtest.mm
index 3ac55d3..b564143 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_transition_egtest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_transition_egtest.mm
@@ -95,8 +95,7 @@
         selectElementWithMatcher:grey_allOf(
                                      grey_kindOfClass(
                                          [TabSwitcherLocalSessionCell class]),
-                                     grey_descendant(grey_text(title)),
-                                     grey_sufficientlyVisible(), nil)]
+                                     grey_descendant(grey_text(title)), nil)]
         performAction:grey_tap()];
   } else {
     // On phone, tapping on the title UILabel will select the tab.
diff --git a/ios/chrome/browser/ui/toolbar/BUILD.gn b/ios/chrome/browser/ui/toolbar/BUILD.gn
index f98186e..2ed7742 100644
--- a/ios/chrome/browser/ui/toolbar/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar/BUILD.gn
@@ -243,7 +243,6 @@
     "//ios/chrome/browser/ui/ntp:ntp_controller",
     "//ios/chrome/browser/ui/ntp:ntp_internal",
     "//ios/chrome/browser/ui/omnibox:omnibox_internal",
-    "//ios/chrome/browser/ui/toolbar/clean:toolbar_ui",
     "//ios/chrome/browser/ui/tools_menu/public",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
diff --git a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn
index 356dec9..d827bf9 100644
--- a/ios/chrome/browser/ui/toolbar/clean/BUILD.gn
+++ b/ios/chrome/browser/ui/toolbar/clean/BUILD.gn
@@ -20,7 +20,6 @@
     "//components/bookmarks/browser",
     "//components/google/core/browser",
     "//components/search_engines",
-    "//components/strings",
     "//ios/chrome/browser",
     "//ios/chrome/browser/autocomplete",
     "//ios/chrome/browser/bookmarks",
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_button_factory.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_button_factory.mm
index 86085587..4d3fbb8 100644
--- a/ios/chrome/browser/ui/toolbar/clean/toolbar_button_factory.mm
+++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_button_factory.mm
@@ -103,9 +103,8 @@
                      imageForDisabledState:
                          NativeImage(
                              tabSwitcherButtonImages[self.style][DISABLED])];
-  SetA11yLabelAndUiAutomationName(tabSwitcherStripButton,
-                                  IDS_IOS_TOOLBAR_SHOW_TABS,
-                                  kToolbarStackButtonIdentifier);
+  tabSwitcherStripButton.accessibilityLabel =
+      l10n_util::GetNSString(IDS_IOS_TOOLBAR_SHOW_TABS);
   [tabSwitcherStripButton
       setTitleColor:[self.toolbarConfiguration buttonTitleNormalColor]
            forState:UIControlStateNormal];
@@ -133,8 +132,8 @@
   ToolbarToolsMenuButton* toolsMenuButton =
       [[ToolbarToolsMenuButton alloc] initWithFrame:CGRectZero style:style];
 
-  SetA11yLabelAndUiAutomationName(toolsMenuButton, IDS_IOS_TOOLBAR_SETTINGS,
-                                  kToolbarToolsMenuButtonIdentifier);
+  toolsMenuButton.accessibilityLabel =
+      l10n_util::GetNSString(IDS_IOS_TOOLBAR_SETTINGS);
   return toolsMenuButton;
 }
 
@@ -151,8 +150,8 @@
                      imageForDisabledState:NativeImage(
                                                shareButtonImages[self.style]
                                                                 [DISABLED])];
-  SetA11yLabelAndUiAutomationName(shareButton, IDS_IOS_TOOLS_MENU_SHARE,
-                                  kToolbarShareButtonIdentifier);
+  shareButton.accessibilityLabel =
+      l10n_util::GetNSString(IDS_IOS_TOOLS_MENU_SHARE);
   return shareButton;
 }
 
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm
index ef0dbd20..aeed1a0 100644
--- a/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm
+++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.mm
@@ -15,7 +15,6 @@
 #include "components/google/core/browser/google_util.h"
 #include "components/omnibox/browser/omnibox_edit_model.h"
 #include "components/search_engines/util.h"
-#include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/autocomplete/autocomplete_scheme_classifier_impl.h"
 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -45,7 +44,6 @@
 #import "ios/chrome/browser/ui/toolbar/public/web_toolbar_controller_constants.h"
 #include "ios/chrome/browser/ui/toolbar/toolbar_model_ios.h"
 #import "ios/chrome/browser/ui/toolbar/tools_menu_button_observer_bridge.h"
-#import "ios/chrome/browser/ui/uikit_ui_util.h"
 #import "ios/chrome/browser/ui/url_loader.h"
 #import "ios/chrome/browser/ui/voice/text_to_speech_player.h"
 #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h"
@@ -146,9 +144,6 @@
                                         font:[MDCTypography subheadFont]
                                    textColor:textColor
                                    tintColor:tintColor];
-
-  SetA11yLabelAndUiAutomationName(self.locationBarView.textField,
-                                  IDS_ACCNAME_LOCATION, @"Address");
   _locationBar = base::MakeUnique<LocationBarControllerImpl>(
       self.locationBarView, self.browserState, self, self.dispatcher);
   self.locationBarView.incognito = isIncognito;
diff --git a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm b/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm
index 78a9374..6ab790b 100644
--- a/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm
+++ b/ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.mm
@@ -9,4 +9,4 @@
 #endif
 
 const base::Feature kCleanToolbar{"CleanToolbar",
-                                  base::FEATURE_ENABLED_BY_DEFAULT};
+                                  base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm b/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
index 47ac43e..3d6f924 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
@@ -11,7 +11,6 @@
 #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_popup_row.h"
-#import "ios/chrome/browser/ui/toolbar/clean/toolbar_view.h"
 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h"
 #include "ios/chrome/browser/ui/tools_menu/public/tools_menu_constants.h"
 #include "ios/chrome/browser/ui/ui_util.h"
@@ -194,10 +193,10 @@
       chrome_test_util::ButtonWithAccessibilityLabelId(IDS_IOS_ACCNAME_RELOAD);
   id<GREYMatcher> bookmarkButton =
       chrome_test_util::ButtonWithAccessibilityLabelId(IDS_TOOLTIP_STAR);
-  id<GREYMatcher> voiceSearchButton =
-      grey_allOf(chrome_test_util::ButtonWithAccessibilityLabelId(
-                     IDS_IOS_ACCNAME_VOICE_SEARCH),
-                 grey_ancestor(grey_kindOfClass([ToolbarView class])), nil);
+  id<GREYMatcher> voiceSearchButton = grey_allOf(
+      chrome_test_util::ButtonWithAccessibilityLabelId(
+          IDS_IOS_ACCNAME_VOICE_SEARCH),
+      grey_ancestor(grey_kindOfClass([LegacyToolbarView class])), nil);
   NSString* ntpOmniboxLabel = l10n_util::GetNSString(IDS_OMNIBOX_EMPTY_HINT);
   NSString* focusedOmniboxLabel = l10n_util::GetNSString(IDS_ACCNAME_LOCATION);
   NSString* omniboxLabel =
diff --git a/ios/chrome/browser/ui/voice/voice_search_notification_names.h b/ios/chrome/browser/ui/voice/voice_search_notification_names.h
index 200a5ac8..37da043 100644
--- a/ios/chrome/browser/ui/voice/voice_search_notification_names.h
+++ b/ios/chrome/browser/ui/voice/voice_search_notification_names.h
@@ -24,11 +24,4 @@
 // Notification when TTS stops playing.
 extern NSString* const kTTSDidStopPlayingNotification;
 
-// VoiceSearchBar notifications.
-
-// Notification when a VoiceSearchBar button is selected.
-extern NSString* const kVoiceSearchBarViewButtonSelectedNotification;
-// Notification when a VoiceSearchBar button is deselected.
-extern NSString* const kVoiceSearchBarViewButtonDeselectedNotification;
-
 #endif  // IOS_CHROME_BROWSER_UI_VOICE_VOICE_SEARCH_NOTIFICATION_NAMES_H_
diff --git a/ios/chrome/browser/ui/voice/voice_search_notification_names.mm b/ios/chrome/browser/ui/voice/voice_search_notification_names.mm
index c3751d6..68a74bd 100644
--- a/ios/chrome/browser/ui/voice/voice_search_notification_names.mm
+++ b/ios/chrome/browser/ui/voice/voice_search_notification_names.mm
@@ -19,8 +19,3 @@
     @"kTTSWillStartPlayingNotification";
 NSString* const kTTSDidStopPlayingNotification =
     @"kTTSDidStopPlayingNotification";
-
-NSString* const kVoiceSearchBarViewButtonSelectedNotification =
-    @"kVoiceSearchBarViewButtonSelectedNotification";
-NSString* const kVoiceSearchBarViewButtonDeselectedNotification =
-    @"kVoiceSearchBarViewButtonDeselectedNotification";
diff --git a/ios/net/crn_http_protocol_handler.h b/ios/net/crn_http_protocol_handler.h
index 4247090..576a8ec8 100644
--- a/ios/net/crn_http_protocol_handler.h
+++ b/ios/net/crn_http_protocol_handler.h
@@ -7,6 +7,11 @@
 
 #import <Foundation/Foundation.h>
 
+#import "base/mac/scoped_nsobject.h"
+#include "base/macros.h"
+#include "net/base/load_timing_info.h"
+#include "net/http/http_response_info.h"
+
 namespace net {
 class URLRequestContextGetter;
 
@@ -31,6 +36,39 @@
   virtual URLRequestContextGetter* GetDefaultURLRequestContext() = 0;
 };
 
+// Delegate class which supplies a metrics callback that is invoked when a net
+// request is stopped.
+class MetricsDelegate {
+ public:
+  // Simple struct collecting all of the metrics data that is passed through to
+  // the MetricsDelegate callback.
+  struct Metrics {
+    Metrics();
+    ~Metrics();
+
+    base::scoped_nsobject<NSURLSessionTask> task;
+    LoadTimingInfo load_timing_info;
+    HttpResponseInfo response_info;
+    base::Time response_end_time;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(Metrics);
+  };
+
+  // Set the global instance of the MetricsDelegate.
+  static void SetInstance(MetricsDelegate* delegate);
+
+  virtual ~MetricsDelegate() = default;
+
+  // This is invoked once when the request begins, in order to set up things
+  // which may be needed by OnStopNetRequest.
+  virtual void OnStartNetRequest(NSURLSessionTask* task) = 0;
+
+  // This is invoked once the request is finally stopped, with metrics data
+  // collect by net passed in as an argument.
+  virtual void OnStopNetRequest(std::unique_ptr<Metrics> metrics) = 0;
+};
+
 }  // namespace net
 
 // Custom NSURLProtocol handling HTTP and HTTPS requests.
diff --git a/ios/net/crn_http_protocol_handler.mm b/ios/net/crn_http_protocol_handler.mm
index 91da5bf..f3ad4f2 100644
--- a/ios/net/crn_http_protocol_handler.mm
+++ b/ios/net/crn_http_protocol_handler.mm
@@ -60,6 +60,9 @@
 // Global instance of the HTTPProtocolHandlerDelegate.
 net::HTTPProtocolHandlerDelegate* g_protocol_handler_delegate = nullptr;
 
+// Global instance of the MetricsDelegate.
+net::MetricsDelegate* g_metrics_delegate = nullptr;
+
 // Empty callback.
 void DoNothing(bool flag) {}
 
@@ -83,12 +86,20 @@
 
 namespace net {
 
+MetricsDelegate::Metrics::Metrics() = default;
+MetricsDelegate::Metrics::~Metrics() = default;
+
 // static
 void HTTPProtocolHandlerDelegate::SetInstance(
     HTTPProtocolHandlerDelegate* delegate) {
   g_protocol_handler_delegate = delegate;
 }
 
+// static
+void MetricsDelegate::SetInstance(MetricsDelegate* delegate) {
+  g_metrics_delegate = delegate;
+}
+
 // The HttpProtocolHandlerCore class is the bridge between the URLRequest
 // and the NSURLProtocolClient.
 // Threading and ownership details:
@@ -138,7 +149,8 @@
                                         HttpProtocolHandlerCore>,
       public URLRequest::Delegate {
  public:
-  HttpProtocolHandlerCore(NSURLRequest* request);
+  explicit HttpProtocolHandlerCore(NSURLRequest* request);
+  explicit HttpProtocolHandlerCore(NSURLSessionTask* task);
   // Starts the network request, and forwards the data downloaded from the
   // network to |base_client|.
   void Start(id<CRNNetworkClientProtocol> base_client);
@@ -199,6 +211,7 @@
   int read_buffer_size_;
   scoped_refptr<WrappedIOBuffer> read_buffer_wrapper_;
   base::scoped_nsobject<NSMutableURLRequest> request_;
+  base::scoped_nsobject<NSURLSessionTask> task_;
   // Stream delegate to read the HTTPBodyStream.
   base::scoped_nsobject<CRWHTTPStreamDelegate> stream_delegate_;
   // Vector of readers used to accumulate a POST data stream.
@@ -225,10 +238,16 @@
   // from the absoluteString of the original URL, because mutableCopy only
   // shallowly copies the request, and just retains the non-threadsafe NSURL.
   thread_checker_.DetachFromThread();
+  task_.reset();
   request_.reset([request mutableCopy]);
   // Will allocate read buffer with size |kIOBufferMinSize|.
   AllocateReadBuffer(0);
-  [request_ setURL:[NSURL URLWithString:[[request URL] absoluteString]]];
+  [request_ setURL:request.URL];
+}
+
+HttpProtocolHandlerCore::HttpProtocolHandlerCore(NSURLSessionTask* task)
+    : HttpProtocolHandlerCore([task currentRequest]) {
+  task_.reset(task);
 }
 
 void HttpProtocolHandlerCore::HandleStreamEvent(NSStream* stream,
@@ -724,6 +743,18 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   if (tracker_)
     tracker_->StopRequest(net_request_);
+
+  if (g_metrics_delegate) {
+    auto metrics = std::make_unique<net::MetricsDelegate::Metrics>();
+
+    metrics->response_end_time = base::Time::Now();
+    metrics->task = task_;
+    metrics->response_info = net_request_->response_info();
+    net_request_->GetLoadTimingInfo(&metrics->load_timing_info);
+
+    g_metrics_delegate->OnStopNetRequest(std::move(metrics));
+  }
+
   delete net_request_;
   net_request_ = nullptr;
   if (stream_delegate_.get())
@@ -887,6 +918,7 @@
   base::scoped_nsprotocol<id<CRNHTTPProtocolHandlerProxy>> _protocolProxy;
   __weak NSThread* _clientThread;
   BOOL _supportedURL;
+  NSURLSessionTask* _task;
 }
 
 #pragma mark NSURLProtocol methods
@@ -917,6 +949,20 @@
   return self;
 }
 
+- (instancetype)initWithTask:(NSURLSessionTask*)task
+              cachedResponse:(NSCachedURLResponse*)cachedResponse
+                      client:(id<NSURLProtocolClient>)client {
+  DCHECK(!cachedResponse);
+  self = [super initWithTask:task cachedResponse:cachedResponse client:client];
+  if (self) {
+    _supportedURL =
+        g_protocol_handler_delegate->IsRequestSupported(task.currentRequest);
+    _core = new net::HttpProtocolHandlerCore(task);
+    _task = task;
+  }
+  return self;
+}
+
 #pragma mark NSURLProtocol overrides.
 
 - (NSCachedURLResponse*)cachedResponse {
@@ -945,6 +991,11 @@
 
   _clientThread = [NSThread currentThread];
 
+  if (g_metrics_delegate) {
+    g_metrics_delegate->OnStartNetRequest(
+        base::scoped_nsobject<NSURLSessionTask>(_task));
+  }
+
   // The closure passed to PostTask must to retain the _protocolProxy
   // scoped_nsobject. A call to getProtocolHandlerProxy before passing
   // _protocolProxy ensure that _protocolProxy is instanciated before passing
diff --git a/services/device/DEPS b/services/device/DEPS
index 6383a3f..ae6faf02 100644
--- a/services/device/DEPS
+++ b/services/device/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+device",
   "+jni",
+  "+net/url_request",
   "+ui/gfx/native_widget_types.h",
 ]
diff --git a/services/device/device_service.cc b/services/device/device_service.cc
index 739d07d..c25ec99 100644
--- a/services/device/device_service.cc
+++ b/services/device/device_service.cc
@@ -17,6 +17,8 @@
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "services/device/fingerprint/fingerprint.h"
 #include "services/device/generic_sensor/sensor_provider_impl.h"
+#include "services/device/geolocation/public_ip_address_geolocator.h"
+#include "services/device/geolocation/public_ip_address_location_notifier.h"
 #include "services/device/power_monitor/power_monitor_message_broadcaster.h"
 #include "services/device/public/interfaces/battery_monitor.mojom.h"
 #include "services/device/serial/serial_device_enumerator_impl.h"
@@ -46,6 +48,9 @@
 std::unique_ptr<service_manager::Service> CreateDeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    const GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key,
     const WakeLockContextCallback& wake_lock_context_callback,
     const CustomLocationProviderCallback& custom_location_provider_callback,
     const base::android::JavaRef<jobject>& java_nfc_delegate) {
@@ -53,17 +58,22 @@
       custom_location_provider_callback);
   return std::make_unique<DeviceService>(
       std::move(file_task_runner), std::move(io_task_runner),
+      std::move(geolocation_request_context_producer), geolocation_api_key,
       wake_lock_context_callback, java_nfc_delegate);
 }
 #else
 std::unique_ptr<service_manager::Service> CreateDeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    const GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key,
     const CustomLocationProviderCallback& custom_location_provider_callback) {
   GeolocationProviderImpl::SetCustomLocationProviderCallback(
       custom_location_provider_callback);
-  return std::make_unique<DeviceService>(std::move(file_task_runner),
-                                         std::move(io_task_runner));
+  return std::make_unique<DeviceService>(
+      std::move(file_task_runner), std::move(io_task_runner),
+      std::move(geolocation_request_context_producer), geolocation_api_key);
 }
 #endif
 
@@ -71,10 +81,16 @@
 DeviceService::DeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    const GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key,
     const WakeLockContextCallback& wake_lock_context_callback,
     const base::android::JavaRef<jobject>& java_nfc_delegate)
     : file_task_runner_(std::move(file_task_runner)),
       io_task_runner_(std::move(io_task_runner)),
+      geolocation_request_context_producer_(
+          geolocation_request_context_producer),
+      geolocation_api_key_(geolocation_api_key),
       wake_lock_context_callback_(wake_lock_context_callback),
       java_interface_provider_initialized_(false) {
   java_nfc_delegate_.Reset(java_nfc_delegate);
@@ -82,15 +98,26 @@
 #else
 DeviceService::DeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
+    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    const GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key)
     : file_task_runner_(std::move(file_task_runner)),
-      io_task_runner_(std::move(io_task_runner)) {}
+      io_task_runner_(std::move(io_task_runner)),
+      geolocation_request_context_producer_(
+          geolocation_request_context_producer),
+      geolocation_api_key_(geolocation_api_key) {}
 #endif
 
 DeviceService::~DeviceService() {
 #if !defined(OS_ANDROID)
   device::BatteryStatusService::GetInstance()->Shutdown();
 #endif
+  if (public_ip_address_geolocation_provider_) {
+    DCHECK(io_task_runner_);
+    io_task_runner_->DeleteSoon(
+        FROM_HERE, std::move(public_ip_address_geolocation_provider_));
+  }
 }
 
 void DeviceService::OnStart() {
@@ -102,6 +129,10 @@
       &DeviceService::BindGeolocationControlRequest, base::Unretained(this)));
   registry_.AddInterface<mojom::PowerMonitor>(base::Bind(
       &DeviceService::BindPowerMonitorRequest, base::Unretained(this)));
+  registry_.AddInterface<mojom::PublicIpAddressGeolocationProvider>(
+      base::Bind(&DeviceService::BindPublicIpAddressGeolocationProviderRequest,
+                 base::Unretained(this)),
+      io_task_runner_);
   registry_.AddInterface<mojom::ScreenOrientationListener>(
       base::Bind(&DeviceService::BindScreenOrientationListenerRequest,
                  base::Unretained(this)));
@@ -205,6 +236,21 @@
   power_monitor_message_broadcaster_->Bind(std::move(request));
 }
 
+void DeviceService::BindPublicIpAddressGeolocationProviderRequest(
+    mojom::PublicIpAddressGeolocationProviderRequest request) {
+  // This needs to run on IO thread because it uses URLRequestContextGetters
+  // which must not outlive that thread.
+  DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+
+  if (!public_ip_address_geolocation_provider_) {
+    public_ip_address_geolocation_provider_ =
+        std::make_unique<PublicIpAddressGeolocationProvider>(
+            geolocation_request_context_producer_, geolocation_api_key_);
+  }
+
+  public_ip_address_geolocation_provider_->Bind(std::move(request));
+}
+
 void DeviceService::BindScreenOrientationListenerRequest(
     mojom::ScreenOrientationListenerRequest request) {
 #if defined(OS_ANDROID)
diff --git a/services/device/device_service.h b/services/device/device_service.h
index 55f25480..5490637 100644
--- a/services/device/device_service.h
+++ b/services/device/device_service.h
@@ -7,11 +7,14 @@
 
 #include "base/memory/ref_counted.h"
 #include "build/build_config.h"
+#include "device/geolocation/geolocation_provider.h"
 #include "device/geolocation/geolocation_provider_impl.h"
+#include "device/geolocation/public/interfaces/geolocation.mojom.h"
 #include "device/geolocation/public/interfaces/geolocation_context.mojom.h"
 #include "device/geolocation/public/interfaces/geolocation_control.mojom.h"
 #include "device/screen_orientation/public/interfaces/screen_orientation.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/device/geolocation/public_ip_address_geolocation_provider.h"
 #include "services/device/public/interfaces/battery_monitor.mojom.h"
 #include "services/device/public/interfaces/fingerprint.mojom.h"
 #include "services/device/public/interfaces/nfc_provider.mojom.h"
@@ -47,15 +50,19 @@
 #endif
 
 class PowerMonitorMessageBroadcaster;
+class PublicIpAddressLocationNotifier;
 class TimeZoneMonitor;
 
 #if defined(OS_ANDROID)
-// NOTE: See the comments on the definitions of |WakeLockContextCallback|,
-// |CustomLocationProviderCallback| and NFCDelegate.java to understand the
-// semantics and usage of these parameters.
+// NOTE: See the comments on the definitions of PublicIpAddressLocationNotifier,
+// |WakeLockContextCallback|, |CustomLocationProviderCallback| and
+// NFCDelegate.java to understand the semantics and usage of these parameters.
 std::unique_ptr<service_manager::Service> CreateDeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key,
     const WakeLockContextCallback& wake_lock_context_callback,
     const CustomLocationProviderCallback& custom_location_provider_callback,
     const base::android::JavaRef<jobject>& java_nfc_delegate);
@@ -63,6 +70,9 @@
 std::unique_ptr<service_manager::Service> CreateDeviceService(
     scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+    GeolocationProvider::RequestContextProducer
+        geolocation_request_context_producer,
+    const std::string& geolocation_api_key,
     const CustomLocationProviderCallback& custom_location_provider_callback);
 #endif
 
@@ -71,11 +81,17 @@
 #if defined(OS_ANDROID)
   DeviceService(scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
                 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+                GeolocationProvider::RequestContextProducer
+                    geolocation_request_context_producer,
+                const std::string& geolocation_api_key,
                 const WakeLockContextCallback& wake_lock_context_callback,
                 const base::android::JavaRef<jobject>& java_nfc_delegate);
 #else
   DeviceService(scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
-                scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
+                scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+                GeolocationProvider::RequestContextProducer
+                    geolocation_request_context_producer,
+                const std::string& geolocation_api_key);
 #endif
   ~DeviceService() override;
 
@@ -103,6 +119,9 @@
 
   void BindPowerMonitorRequest(mojom::PowerMonitorRequest request);
 
+  void BindPublicIpAddressGeolocationProviderRequest(
+      mojom::PublicIpAddressGeolocationProviderRequest request);
+
   void BindScreenOrientationListenerRequest(
       mojom::ScreenOrientationListenerRequest request);
 
@@ -119,10 +138,15 @@
 
   std::unique_ptr<PowerMonitorMessageBroadcaster>
       power_monitor_message_broadcaster_;
+  std::unique_ptr<PublicIpAddressGeolocationProvider>
+      public_ip_address_geolocation_provider_;
   std::unique_ptr<TimeZoneMonitor> time_zone_monitor_;
   scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
 
+  GeolocationProvider::RequestContextProducer
+      geolocation_request_context_producer_;
+  const std::string geolocation_api_key_;
   WakeLockContextCallback wake_lock_context_callback_;
 
 #if defined(OS_ANDROID)
diff --git a/services/device/device_service_test_base.cc b/services/device/device_service_test_base.cc
index d850fd8..56d3744 100644
--- a/services/device/device_service_test_base.cc
+++ b/services/device/device_service_test_base.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted.h"
 #include "device/geolocation/public/cpp/location_provider.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "net/url_request/url_request_test_util.h"
 #include "services/device/device_service.h"
 #include "services/device/public/interfaces/constants.mojom.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
@@ -21,6 +22,18 @@
 namespace {
 
 const char kTestServiceName[] = "device_unittests";
+const char kTestGeolocationApiKey[] = "";
+
+// Simple request context producer that immediately produces a
+// TestURLRequestContextGetter.
+void TestRequestContextProducer(
+    const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner,
+    base::OnceCallback<void(scoped_refptr<net::URLRequestContextGetter>)>
+        response_callback) {
+  std::move(response_callback)
+      .Run(base::MakeRefCounted<net::TestURLRequestContextGetter>(
+          network_task_runner));
+}
 
 // Simply return a nullptr which means no CustomLocationProvider from embedder.
 std::unique_ptr<LocationProvider> GetCustomLocationProviderForTest() {
@@ -56,13 +69,18 @@
 #if defined(OS_ANDROID)
       device_service_context_.reset(new service_manager::ServiceContext(
           CreateDeviceService(
-              file_task_runner_, io_task_runner_, wake_lock_context_callback_,
+              file_task_runner_, io_task_runner_,
+              base::Bind(&TestRequestContextProducer, io_task_runner_),
+              kTestGeolocationApiKey, wake_lock_context_callback_,
               base::Bind(&GetCustomLocationProviderForTest), nullptr),
           std::move(request)));
 #else
       device_service_context_.reset(new service_manager::ServiceContext(
-          CreateDeviceService(file_task_runner_, io_task_runner_,
-                              base::Bind(&GetCustomLocationProviderForTest)),
+          CreateDeviceService(
+              file_task_runner_, io_task_runner_,
+              base::Bind(&TestRequestContextProducer, io_task_runner_),
+              kTestGeolocationApiKey,
+              base::Bind(&GetCustomLocationProviderForTest)),
           std::move(request)));
 #endif
     }
@@ -90,7 +108,8 @@
       file_thread_("DeviceServiceTestFileThread"),
       io_thread_("DeviceServiceTestIOThread") {
   file_thread_.Start();
-  io_thread_.Start();
+  io_thread_.StartWithOptions(
+      base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
 }
 
 DeviceServiceTestBase::~DeviceServiceTestBase() {}
diff --git a/services/device/geolocation/public_ip_address_geolocation_provider.cc b/services/device/geolocation/public_ip_address_geolocation_provider.cc
index 4c570ba..207556e 100644
--- a/services/device/geolocation/public_ip_address_geolocation_provider.cc
+++ b/services/device/geolocation/public_ip_address_geolocation_provider.cc
@@ -8,13 +8,7 @@
 
 namespace device {
 
-PublicIpAddressGeolocationProvider::PublicIpAddressGeolocationProvider() {
-  DETACH_FROM_SEQUENCE(sequence_checker_);
-}
-
-PublicIpAddressGeolocationProvider::~PublicIpAddressGeolocationProvider() {}
-
-void PublicIpAddressGeolocationProvider::Initialize(
+PublicIpAddressGeolocationProvider::PublicIpAddressGeolocationProvider(
     GeolocationProvider::RequestContextProducer request_context_producer,
     const std::string& api_key) {
   // Bind sequence_checker_ to the initialization sequence.
@@ -25,6 +19,8 @@
           request_context_producer, api_key);
 }
 
+PublicIpAddressGeolocationProvider::~PublicIpAddressGeolocationProvider() {}
+
 void PublicIpAddressGeolocationProvider::Bind(
     mojom::PublicIpAddressGeolocationProviderRequest request) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/services/device/geolocation/public_ip_address_geolocation_provider.h b/services/device/geolocation/public_ip_address_geolocation_provider.h
index 57ee445..a0a0e92 100644
--- a/services/device/geolocation/public_ip_address_geolocation_provider.h
+++ b/services/device/geolocation/public_ip_address_geolocation_provider.h
@@ -25,24 +25,16 @@
 // Sequencing:
 // * Must be used and destroyed on the same sequence.
 // * Provides mojom::Geolocation instances that are bound on the same sequence.
-// * Requires two-step construction: Construct on any sequence, then invoke
-//   Initialize() on the sequence on which this object will run.
 class PublicIpAddressGeolocationProvider
     : public mojom::PublicIpAddressGeolocationProvider {
  public:
-  // After construction, invoke Initialize() (on the appropriate sequence) to
-  // finish initialization.
-  PublicIpAddressGeolocationProvider();
-  ~PublicIpAddressGeolocationProvider() override;
-
-  // Finishes initialization, using the specified Google |api_key| and a URL
-  // request context produced by |request_context_producer| for network location
-  // requests.
-  // After this call is made, this object must be used only on the sequence on
-  // which this call was made.
-  void Initialize(
+  // Initialize PublicIpAddressGeolocationProvider using the specified Google
+  // |api_key| and a URL request context produced by |request_context_producer|
+  // for network location requests.
+  PublicIpAddressGeolocationProvider(
       GeolocationProvider::RequestContextProducer request_context_producer,
       const std::string& api_key);
+  ~PublicIpAddressGeolocationProvider() override;
 
   // Binds a PublicIpAddressGeolocationProvider request to this instance.
   void Bind(mojom::PublicIpAddressGeolocationProviderRequest request);
diff --git a/services/device/manifest.json b/services/device/manifest.json
index 55a05bc..ea020f60b 100644
--- a/services/device/manifest.json
+++ b/services/device/manifest.json
@@ -5,12 +5,13 @@
     "service_manager:connector": {
       "provides": {
         "device:battery_monitor": [ "device::mojom::BatteryMonitor" ],
-        "device:hid": [ "device::mojom::HidManager" ],
-        "device:input_service": [ "device::mojom::InputDeviceManager" ],
         "device:fingerprint": [ "device::mojom::Fingerprint" ],
         "device:generic_sensor": [ "device::mojom::SensorProvider" ],
         "device:geolocation": [ "device::mojom::GeolocationContext" ],
         "device:geolocation_control": [ "device::mojom::GeolocationControl" ],
+        "device:hid": [ "device::mojom::HidManager" ],
+        "device:input_service": [ "device::mojom::InputDeviceManager" ],
+	"device:ip_geolocator": [ "device::mojom::PublicIpAddressGeolocationProvider" ],
         "device:nfc": [ "device::mojom::NFCProvider" ],
         "device:power_monitor": [ "device::mojom::PowerMonitor" ],
         "device:screen_orientation": [ "device::mojom::ScreenOrientationListener" ],
diff --git a/services/service_manager/sandbox/linux/bpf_network_policy_linux.cc b/services/service_manager/sandbox/linux/bpf_network_policy_linux.cc
index bba98ed..731d180 100644
--- a/services/service_manager/sandbox/linux/bpf_network_policy_linux.cc
+++ b/services/service_manager/sandbox/linux/bpf_network_policy_linux.cc
@@ -35,56 +35,6 @@
 
 ResultExpr NetworkProcessPolicy::EvaluateSyscall(int sysno) const {
   switch (sysno) {
-// Allowed syscalls:
-#if defined(__NR_accept)
-    case __NR_accept:
-#endif
-#if defined(__NR_bind)
-    case __NR_bind:
-#endif
-#if defined(__NR_connect)
-    case __NR_connect:
-#endif
-#if defined(__NR_getsockname)
-    case __NR_getsockname:
-#endif
-#if defined(__NR_inotify_add_watch)
-    case __NR_inotify_add_watch:
-#endif
-#if defined(__NR_inotify_init)
-    case __NR_inotify_init:
-#endif
-#if defined(__NR_inotify_init1)
-    case __NR_inotify_init1:
-#endif
-#if defined(__NR_inotify_rm_watch)
-    case __NR_inotify_rm_watch:
-#endif
-#if defined(__NR_ioctl)
-    // TODO(tsepez): restrict based on arguments.
-    case __NR_ioctl:
-#endif
-#if defined(__NR_listen)
-    case __NR_listen:
-#endif
-#if defined(__NR_socket)
-    case __NR_socket:
-#endif
-#if defined(__NR_uname)
-    case __NR_uname:
-#endif
-#if defined(__NR_sysinfo)
-    case __NR_sysinfo:
-#endif
-      return Allow();
-
-// Restricted syscalls:
-#if defined(__NR_fcntl)
-    case __NR_fcntl:
-      return sandbox::RestrictFcntlCommands();
-#endif
-
-// Trapped syscalls:
 #if defined(__NR_access)
     case __NR_access:
 #endif
@@ -138,9 +88,9 @@
 #endif
       return Trap(BrokerProcess::SIGSYS_Handler,
                   SandboxLinux::GetInstance()->broker_process());
-
     default:
-      return BPFBasePolicy::EvaluateSyscall(errno);
+      // TODO(tsepez): FIX this.
+      return Allow();
   }
 }
 
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
index 600d2de1..92fc4693 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
@@ -40,7 +40,6 @@
     @Override
     public void onStart() {
         deletePrivateDataDirectory();
-        mTest.setEnvForNative(this);
         initializeBrowserProcess();
         super.onStart();
         mTest.postStart(this, false);
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTest.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTest.java
index e58af13..3e27274 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTest.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTest.java
@@ -7,12 +7,10 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.Process;
-import android.system.Os;
 
 import org.chromium.base.CommandLine;
 import org.chromium.base.Log;
@@ -40,8 +38,6 @@
             "org.chromium.native_test.NativeTest.Shard";
     public static final String EXTRA_STDOUT_FILE =
             "org.chromium.native_test.NativeTest.StdoutFile";
-    public static final String EXTRA_UBSAN_OPTIONS =
-            "org.chromium.native_test.NativeTest.UBSAN_OPTIONS";
 
     private static final String TAG = "cr_NativeTest";
 
@@ -183,19 +179,6 @@
         Log.e(TAG, "[ RUNNER_FAILED ] could not load native library");
     }
 
-    public void setEnvForNative(Activity activity) {
-        // The setenv API was added in L. On older versions of Android, we should still see ubsan
-        // reports, but they will not have stack traces.
-        String ubsanOptions = activity.getIntent().getStringExtra(EXTRA_UBSAN_OPTIONS);
-        if (ubsanOptions != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            try {
-                Os.setenv("UBSAN_OPTIONS", ubsanOptions, true);
-            } catch (Exception e) {
-                Log.w(TAG, "failed to set UBSAN_OPTIONS", e);
-            }
-        }
-    }
-
     private native void nativeRunTests(String commandLineFlags, String commandLineFilePath,
             String stdoutFilePath, Context appContext, String testDataDir);
 }
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTest.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTest.java
index ba7c464..89b6a56 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTest.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTest.java
@@ -11,6 +11,7 @@
 import org.chromium.base.Log;
 import org.chromium.base.PathUtils;
 import org.chromium.base.PowerMonitor;
+import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.NativeLibraries;
 
 /**
@@ -36,10 +37,6 @@
         // Needed by system_monitor_unittest.cc
         PowerMonitor.createForTests();
 
-        // Configure ubsan using $UBSAN_OPTIONS. This needs to happen here because ubsan reads its
-        // configuration from $UBSAN_OPTIONS when the native library is loaded.
-        setEnvForNative(activity);
-
         // For NativeActivity based tests,
         // dependency libraries must be loaded before NativeActivity::OnCreate,
         // otherwise loading android.app.lib_name will fail
@@ -47,6 +44,7 @@
     }
 
     private void loadLibraries() {
+        LibraryLoader.setEnvForNative();
         for (String library : NativeLibraries.LIBRARIES) {
             Log.i(TAG, "loading: %s", library);
             System.loadLibrary(library);
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index d606076..e42a756b 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -4256,6 +4256,18 @@
       {
         "args": [
           "--enable-viz",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter"
+        ],
+        "name": "viz_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 5
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
+          "--enable-viz",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.viz.content_browsertests.filter"
         ],
         "name": "viz_content_browsertests",
@@ -4264,6 +4276,17 @@
           "shards": 2
         },
         "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--enable-viz",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unitests.filter"
+        ],
+        "name": "viz_content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
       }
     ],
     "isolated_scripts": [
@@ -4489,6 +4512,18 @@
       },
       {
         "args": [
+          "--enable-viz",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter"
+        ],
+        "name": "viz_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 5
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
           "--mus"
         ],
         "name": "mus_content_browsertests",
@@ -4512,6 +4547,17 @@
         "test": "content_browsertests"
       },
       {
+        "args": [
+          "--enable-viz",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unitests.filter"
+        ],
+        "name": "viz_content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -4643,6 +4689,17 @@
         "test": "content_browsertests"
       },
       {
+        "args": [
+          "--enable-viz",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unitests.filter"
+        ],
+        "name": "viz_content_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn
index 61191ac..12f156f 100644
--- a/testing/buildbot/filters/BUILD.gn
+++ b/testing/buildbot/filters/BUILD.gn
@@ -50,6 +50,14 @@
   ]
 }
 
+source_set("content_unittests_filters") {
+  testonly = true
+
+  data = [
+    "//testing/buildbot/filters/viz.content_unittests.filter",
+  ]
+}
+
 source_set("interactive_ui_tests_filters") {
   testonly = true
 
diff --git a/testing/buildbot/filters/mash.browser_tests.filter b/testing/buildbot/filters/mash.browser_tests.filter
index 875d362..c6b1b04 100644
--- a/testing/buildbot/filters/mash.browser_tests.filter
+++ b/testing/buildbot/filters/mash.browser_tests.filter
@@ -45,7 +45,7 @@
 VolumeControllerTest.*
 
 # Tests from elsewhere.
-BrowserDialogTest.*
+BrowserUiTest.*
 CastSessionBrowserTest.*
 ChromeContentBrowserClientMashTest.*
 ChromeContentRendererClientSearchBoxTest.*
diff --git a/testing/buildbot/filters/viz.content_unittests.filter b/testing/buildbot/filters/viz.content_unittests.filter
new file mode 100644
index 0000000..84be21af
--- /dev/null
+++ b/testing/buildbot/filters/viz.content_unittests.filter
@@ -0,0 +1,27 @@
+-RenderWidgetHostInitialSizeTest.InitialSize
+-RenderWidgetHostTest.FrameToken_RendererCrash
+-RenderWidgetHostTest.NewContentRenderingTimeout
+-RenderWidgetHostTest.Resize
+-RenderWidgetHostTest.ResizeThenCrash
+-RenderWidgetHostTest.SwapCompositorFrameWithBadSourceId
+-RenderWidgetHostViewAuraCopyRequestTest.DedupeFrameSubscriberRequests
+-RenderWidgetHostViewAuraCopyRequestTest.DestroyedAfterCopyRequest
+-RenderWidgetHostViewAuraCopyRequestTest.PresentTime
+-RenderWidgetHostViewAuraSurfaceSynchronizationTest.CompositorFrameSinkChange
+-RenderWidgetHostViewAuraSurfaceSynchronizationTest.DiscardDelegatedFrames
+-RenderWidgetHostViewAuraSurfaceSynchronizationTest.DropFallbackWhenHidden
+-RenderWidgetHostViewAuraSurfaceSynchronizationTest.SurfaceChanges
+-RenderWidgetHostViewAuraTest.DelegatedFrameGutter
+-RenderWidgetHostViewAuraTest.DiscardDelegatedFrames
+-RenderWidgetHostViewAuraTest.DiscardDelegatedFramesWithLocking
+-RenderWidgetHostViewAuraTest.DiscardDelegatedFramesWithMemoryPressure
+-RenderWidgetHostViewAuraTest.ForwardsBeginFrameAcks
+-RenderWidgetHostViewAuraTest.HitTestRegionListSubmitted
+-RenderWidgetHostViewAuraTest.MissingFramesDontLock
+-RenderWidgetHostViewAuraTest.OutputSurfaceIdChange
+-RenderWidgetHostViewAuraTest.ResizeAfterReceivingFrame
+-RenderWidgetHostViewAuraTest.SkippedDelegatedFrames
+-RenderWidgetHostViewAuraTest.TwoOutputSurfaces
+-RenderWidgetHostViewChildFrameTest.FrameEviction
+-RenderWidgetHostViewChildFrameTest.SwapCompositorFrame
+-RenderWidgetHostViewGuestSurfaceTest.TestGuestSurface
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index c36f5d88..82b41be 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -1017,21 +1017,6 @@
      },
    },
 
-  'linux_viz_gtests': {
-    # TODO(jonross): merge all viz tests into one config, use exceptions to
-    # differentiate between the fyi and cq filters.
-    'viz_content_browsertests': {
-      'args': [
-        '--enable-viz',
-        '--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.viz.content_browsertests.filter',
-      ],
-      'swarming': {
-        'shards': 2,
-      },
-      'test': 'content_browsertests',
-    },
-  },
-
   'mash_chromium_gtests': {
     'ash_unittests-mash': {
       'test': 'ash_unittests',
@@ -1129,30 +1114,10 @@
     },
   },
 
-  'mojo_windows_gtests': {
+  'mojo_windows_specific_gtests': {
     'media_service_unittests': {},
     'services_unittests': {},
     'views_mus_interactive_ui_tests': {},
-    'viz_browser_tests': {
-      'args': [
-        '--enable-viz',
-        '--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter'
-      ],
-      'swarming': {
-        'shards': 5,
-      },
-      'test': 'browser_tests',
-    },
-    'viz_content_browsertests': {
-      'args': [
-        '--enable-viz',
-        '--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.viz.content_browsertests.filter',
-      ],
-      'swarming': {
-        'shards': 2,
-      },
-      'test': 'content_browsertests',
-    },
   },
 
   'mus_chromium_gtests': {
@@ -1241,16 +1206,6 @@
     'ozone_x11_unittests': {},
     'views_mus_unittests': {},
     'views_mus_interactive_ui_tests': {},
-    'viz_content_browsertests': {
-      'test': 'content_browsertests',
-      'args': [
-         '--enable-viz',
-         '--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter',
-      ],
-      'swarming': {
-        'shards': 2,
-      },
-    },
     'wayland_client_perftests': {},
   },
 
@@ -1287,16 +1242,6 @@
     'filesystem_service_unittests': {},
     'leveldb_service_unittests': {},
     'traffic_annotation_auditor_unittests': {},
-    'viz_content_browsertests': {
-      'swarming': {
-        'shards': 2,
-      },
-      'test': 'content_browsertests',
-      'args': [
-         '--enable-viz',
-         '--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_browsertests.filter'
-      ],
-    },
   },
 
   'linux_specific_chromium_isolated_scripts': {
@@ -1342,16 +1287,6 @@
   },
 
   'mojo_chromiumos_specific_gtests': {
-    'viz_content_browsertests': {
-      'args': [
-        '--enable-viz',
-        '--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.viz.content_browsertests.filter',
-      ],
-      'swarming': {
-        'shards': 2,
-      },
-      'test': 'content_browsertests',
-    },
     'wayland_client_perftests': {},
   },
 
@@ -1729,6 +1664,36 @@
     }
   },
 
+  'viz_fyi_gtests': {
+    'viz_browser_tests': {
+      'args': [
+        '--enable-viz',
+        '--test-launcher-filter-file=../../testing/buildbot/filters/viz.browser_tests.filter'
+      ],
+      'swarming': {
+        'shards': 5,
+      },
+      'test': 'browser_tests',
+    },
+    'viz_content_browsertests': {
+      'args': [
+        '--enable-viz',
+        '--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.viz.content_browsertests.filter',
+      ],
+      'swarming': {
+        'shards': 2,
+      },
+      'test': 'content_browsertests',
+    },
+    'viz_content_unittests': {
+      'args': [
+        '--enable-viz',
+        '--test-launcher-filter-file=../../testing/buildbot/filters/viz.content_unitests.filter',
+      ],
+      'test': 'content_unittests',
+    }
+  },
+
   'viz_gtests': {
     'viz_content_browsertests': {
       'args': [
@@ -2027,6 +1992,7 @@
     'non_android_and_clang_win_chromium_gtests',
     'non_clang_mac_win_chromium_gtests',
     'non_mac_non_clang_win_chromium_gtests',
+    'viz_gtests',
   ],
 
   'chromium_linux_isolated_scripts': [
@@ -2289,11 +2255,17 @@
     'win_specific_chromium_gtests',
   ],
 
+  'mojo_windows_gtests': [
+    'mojo_windows_specific_gtests',
+    'viz_fyi_gtests',
+  ],
+
   'mojo_chromiumos_gtests': [
     'aura_non_clang_gtests',
     'mash_chromium_gtests',
     'mojo_chromiumos_specific_gtests',
     'mus_chromium_chromiumos_gtests',
+    'viz_fyi_gtests',
   ],
 
   'sandboxed_chromium_memory_linux_gtests': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index 60a6350..aab1979 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -1080,7 +1080,7 @@
           'all',
         ],
         'test_suites': {
-          'gtest_tests': 'linux_viz_gtests',
+          'gtest_tests': 'viz_fyi_gtests',
           'isolated_scripts': 'linux_viz_isolated_scripts',
         },
       },
diff --git a/testing/scripts/common.py b/testing/scripts/common.py
index da3e3446..d436452 100644
--- a/testing/scripts/common.py
+++ b/testing/scripts/common.py
@@ -92,6 +92,9 @@
 
 
 def run_runtest(cmd_args, runtest_args):
+  env = os.environ.copy()
+  env['CHROME_HEADLESS'] = '1'
+
   if cmd_args.use_src_side_runtest_py:
     cmd = [
       sys.executable,
@@ -114,7 +117,7 @@
       '--slave-name', cmd_args.properties['slavename'],
       '--build-number', str(cmd_args.properties['buildnumber']),
       '--build-properties', json.dumps(cmd_args.properties),
-  ] + runtest_args)
+  ] + runtest_args, env=env)
 
 
 @contextlib.contextmanager
diff --git a/testing/scripts/content_shell_crash_test.py b/testing/scripts/content_shell_crash_test.py
index b278eaf..e83ba22 100755
--- a/testing/scripts/content_shell_crash_test.py
+++ b/testing/scripts/content_shell_crash_test.py
@@ -55,6 +55,7 @@
     exe = os.path.join('.', 'content_shell')
 
   with common.temporary_file() as tempfile_path:
+    env['CHROME_HEADLESS'] = '1'
     rc = xvfb.run_executable([
         sys.executable,
         os.path.join(common.SRC_DIR, 'content', 'shell', 'tools',
diff --git a/testing/scripts/run_gpu_integration_test_as_googletest.py b/testing/scripts/run_gpu_integration_test_as_googletest.py
index 994fd02..3163bdf 100755
--- a/testing/scripts/run_gpu_integration_test_as_googletest.py
+++ b/testing/scripts/run_gpu_integration_test_as_googletest.py
@@ -103,6 +103,7 @@
     valid = True
     rc = 0
     try:
+      env['CHROME_HEADLESS'] = '1'
       rc = common.run_command([sys.executable] + rest_args + sharding_args + [
         '--write-full-results-to', args.isolated_script_test_output
       ], env=env)
diff --git a/testing/scripts/run_gtest_perf_test.py b/testing/scripts/run_gtest_perf_test.py
index 74d3e72..ce439759 100755
--- a/testing/scripts/run_gtest_perf_test.py
+++ b/testing/scripts/run_gtest_perf_test.py
@@ -117,6 +117,7 @@
       else:
         executable = './%s' % executable
       with common.temporary_file() as tempfile_path:
+        env['CHROME_HEADLESS'] = '1'
         rc = common.run_command_with_output([executable] + extra_flags,
             env=env, stdoutfile=tempfile_path)
         # Now get the correct json format from the stdout to write to the
diff --git a/testing/scripts/run_isolated_script_test.py b/testing/scripts/run_isolated_script_test.py
index 646631f..2567e37 100755
--- a/testing/scripts/run_isolated_script_test.py
+++ b/testing/scripts/run_isolated_script_test.py
@@ -61,7 +61,8 @@
 
   args, rest_args = parser.parse_known_args()
 
-  env = os.environ
+  env = os.environ.copy()
+  env['CHROME_HEADLESS'] = '1'
   cmd = [sys.executable] + rest_args
   cmd += ['--write-full-results-to', args.isolated_script_test_output]
   temp_filter_file = None
diff --git a/testing/scripts/run_telemetry_as_googletest.py b/testing/scripts/run_telemetry_as_googletest.py
index 70e9223..d561357 100755
--- a/testing/scripts/run_telemetry_as_googletest.py
+++ b/testing/scripts/run_telemetry_as_googletest.py
@@ -72,6 +72,8 @@
   total_shards = None
   shard_index = None
   env = os.environ.copy()
+  env['CHROME_HEADLESS'] = '1'
+
   if 'GTEST_TOTAL_SHARDS' in env:
     total_shards = int(env['GTEST_TOTAL_SHARDS'])
     del env['GTEST_TOTAL_SHARDS']
diff --git a/testing/scripts/run_telemetry_benchmark_as_googletest.py b/testing/scripts/run_telemetry_benchmark_as_googletest.py
index e5f539a..cbde77b3 100755
--- a/testing/scripts/run_telemetry_benchmark_as_googletest.py
+++ b/testing/scripts/run_telemetry_benchmark_as_googletest.py
@@ -85,6 +85,8 @@
 
 def run_benchmark(args, rest_args):
   env = os.environ.copy()
+  env['CHROME_HEADLESS'] = '1'
+
   # Assume we want to set up the sandbox environment variables all the
   # time; doing so is harmless on non-Linux platforms and is needed
   # all the time on Linux.
diff --git a/third_party/OWNERS b/third_party/OWNERS
index 7b36d33..109a874 100644
--- a/third_party/OWNERS
+++ b/third_party/OWNERS
@@ -14,6 +14,9 @@
 # Eng reviewer
 file://ENG_REVIEW_OWNERS
 
+# Automatic round-robin assignment of reviewer for third-party licenses.
+chromium-third-party@google.com
+
 thakis@chromium.org
 
 per-file .gitignore=*
diff --git a/third_party/README.chromium b/third_party/README.chromium
index 08a82cb..d19364d 100644
--- a/third_party/README.chromium
+++ b/third_party/README.chromium
@@ -1,10 +1,14 @@
 The third_party directory contains sources from other projects.
 
-Code in third_party must document the license under which the source is being 
+Code in third_party must document the license under which the source is being
 used. If the source itself does not include a license header or file, create
 an entry in this file that refers to reliable documentation of the project's
-license terms on the web (and add a note pointing here in the README file in 
+license terms on the web (and add a note pointing here in the README file in
 that directory).
 
+When adding a new directory, or updating a directory to a version which has
+a different license from before, please add chromium-third-party@google.com
+as a reviewer on the change.
+
 <Include table of license information here, once it is available>
 
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index f7f9a66..d553c4b 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -1965,6 +1965,11 @@
 crbug.com/751952 virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Pass Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/svg/path/bearing/zero.svg [ Failure ]
+crbug.com/626703 external/wpt/svg/path/bearing/relative.svg [ Failure ]
+crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html [ Skip ]
+crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html [ Skip ]
+crbug.com/626703 external/wpt/svg/path/bearing/absolute.svg [ Failure ]
 crbug.com/626703 [ Android Win7 ] external/wpt/longtask-timing/longtask-in-sibling-iframe.html [ Timeout ]
 crbug.com/626703 [ Linux Win ] external/wpt/css/css-color/t425-hsla-onscreen-b.xht [ Failure ]
 crbug.com/626703 external/wpt/css/css-color/t32-opacity-offscreen-b.xht [ Failure ]
@@ -3181,8 +3186,6 @@
 crbug.com/717643 external/wpt/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml [ Failure ]
 
 # known bug: import() inside set{Timeout,Interval}
-crbug.com/773622 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html [ Failure ]
-crbug.com/773622 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html [ Failure ]
 
 # import.meta.url is under development.
 crbug.com/773713 external/wpt/html/semantics/scripting-1/the-script-element/module/import-meta [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index ac890dc..e7d283a 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -33989,18 +33989,6 @@
      {}
     ]
    ],
-   "css/css-display/display-contents-replaced-001.html": [
-    [
-     "/css/css-display/display-contents-replaced-001.html",
-     [
-      [
-       "/css/css-display/display-contents-replaced-001-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
    "css/css-display/display-contents-state-change-001.html": [
     [
      "/css/css-display/display-contents-state-change-001.html",
@@ -34013,6 +34001,18 @@
      {}
     ]
    ],
+   "css/css-display/display-contents-svg-elements.html": [
+    [
+     "/css/css-display/display-contents-svg-elements.html",
+     [
+      [
+       "/css/css-display/display-contents-svg-elements-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-display/display-contents-table-001.html": [
     [
      "/css/css-display/display-contents-table-001.html",
@@ -47526,7 +47526,7 @@
      "/css/css-text-decor/line-through-vertical.html",
      [
       [
-       "/css/css-text-decor/line-through-vertical-ref.html",
+       "/css/css-text-decor/reference/line-through-vertical-ref.html",
        "=="
       ]
      ],
@@ -47538,7 +47538,7 @@
      "/css/css-text-decor/text-decoration-color-recalc.html",
      [
       [
-       "/css/css-text-decor/text-decoration-color-recalc-ref.html",
+       "/css/css-text-decor/reference/text-decoration-color-recalc-ref.html",
        "=="
       ]
      ],
@@ -47550,7 +47550,7 @@
      "/css/css-text-decor/text-decoration-color.html",
      [
       [
-       "/css/css-text-decor/text-decoration-color-ref.html",
+       "/css/css-text-decor/reference/text-decoration-color-ref.html",
        "=="
       ]
      ],
@@ -47610,7 +47610,7 @@
      "/css/css-text-decor/text-decoration-line-recalc.html",
      [
       [
-       "/css/css-text-decor/text-decoration-line-recalc-ref.html",
+       "/css/css-text-decor/reference/text-decoration-line-recalc-ref.html",
        "=="
       ]
      ],
@@ -47622,7 +47622,7 @@
      "/css/css-text-decor/text-decoration-line.html",
      [
       [
-       "/css/css-text-decor/text-decoration-line-ref.html",
+       "/css/css-text-decor/reference/text-decoration-line-ref.html",
        "=="
       ]
      ],
@@ -47634,7 +47634,7 @@
      "/css/css-text-decor/text-decoration-style-multiple.html",
      [
       [
-       "/css/css-text-decor/text-decoration-style-multiple-ref.html",
+       "/css/css-text-decor/reference/text-decoration-style-multiple-ref.html",
        "=="
       ]
      ],
@@ -47646,7 +47646,7 @@
      "/css/css-text-decor/text-decoration-style-recalc.html",
      [
       [
-       "/css/css-text-decor/text-decoration-style-recalc-ref.html",
+       "/css/css-text-decor/reference/text-decoration-style-recalc-ref.html",
        "=="
       ]
      ],
@@ -85589,6 +85589,18 @@
      {}
     ]
    ],
+   "html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html": [
+    [
+     "/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html",
+     [
+      [
+       "/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html",
+       "!="
+      ]
+     ],
+     {}
+    ]
+   ],
    "html/semantics/text-level-semantics/the-wbr-element/wbr-element.html": [
     [
      "/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html",
@@ -85769,6 +85781,18 @@
      {}
     ]
    ],
+   "svg/foreignobject/position-svg-root-in-foreign-object.html": [
+    [
+     "/svg/foreignobject/position-svg-root-in-foreign-object.html",
+     [
+      [
+       "/svg/foreignobject/position-svg-root-in-foreign-object-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "svg/linking/reftests/href-a-element-attr-change.html": [
     [
      "/svg/linking/reftests/href-a-element-attr-change.html",
@@ -85889,6 +85913,42 @@
      {}
     ]
    ],
+   "svg/path/bearing/absolute.svg": [
+    [
+     "/svg/path/bearing/absolute.svg",
+     [
+      [
+       "/svg/path/bearing/absolute-ref.svg",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "svg/path/bearing/relative.svg": [
+    [
+     "/svg/path/bearing/relative.svg",
+     [
+      [
+       "/svg/path/bearing/absolute-ref.svg",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "svg/path/bearing/zero.svg": [
+    [
+     "/svg/path/bearing/zero.svg",
+     [
+      [
+       "/svg/path/bearing/zero-ref.svg",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "svg/path/property/priority.svg": [
     [
      "/svg/path/property/priority.svg",
@@ -91775,11 +91835,6 @@
      {}
     ]
    ],
-   "XMLHttpRequest/interfaces-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "XMLHttpRequest/no-utf16-json-expected.txt": [
     [
      {}
@@ -100155,12 +100210,12 @@
      {}
     ]
    ],
-   "css/css-display/display-contents-replaced-001-ref.html": [
+   "css/css-display/display-contents-state-change-001-ref.html": [
     [
      {}
     ]
    ],
-   "css/css-display/display-contents-state-change-001-ref.html": [
+   "css/css-display/display-contents-svg-elements-ref.html": [
     [
      {}
     ]
@@ -112205,7 +112260,17 @@
      {}
     ]
    ],
-   "css/css-text-decor/line-through-vertical-ref.html": [
+   "css/css-text-decor/reference/line-through-vertical-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-decor/reference/text-decoration-color-recalc-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-decor/reference/text-decoration-color-ref.html": [
     [
      {}
     ]
@@ -112230,6 +112295,26 @@
      {}
     ]
    ],
+   "css/css-text-decor/reference/text-decoration-line-recalc-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-decor/reference/text-decoration-line-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-decor/reference/text-decoration-style-multiple-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-decor/reference/text-decoration-style-recalc-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-text-decor/reference/text-emphasis-color-001-ref.xht": [
     [
      {}
@@ -112340,41 +112425,11 @@
      {}
     ]
    ],
-   "css/css-text-decor/text-decoration-color-recalc-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "css/css-text-decor/text-decoration-color-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "css/css-text-decor/text-decoration-line-recalc-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "css/css-text-decor/text-decoration-line-ref.html": [
-    [
-     {}
-    ]
-   ],
    "css/css-text-decor/text-decoration-serialization.tentative-expected.txt": [
     [
      {}
     ]
    ],
-   "css/css-text-decor/text-decoration-style-multiple-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "css/css-text-decor/text-decoration-style-recalc-ref.html": [
-    [
-     {}
-    ]
-   ],
    "css/css-text/OWNERS": [
     [
      {}
@@ -127805,11 +127860,6 @@
      {}
     ]
    ],
-   "generic-sensor/idlharness.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "geolocation-API/OWNERS": [
     [
      {}
@@ -127935,11 +127985,6 @@
      {}
     ]
    ],
-   "gyroscope/idlharness.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "hr-time/OWNERS": [
     [
      {}
@@ -136800,6 +136845,21 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt": [
     [
      {}
@@ -136835,6 +136895,16 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt": [
     [
      {}
@@ -136845,6 +136915,11 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt": [
     [
      {}
@@ -136945,6 +137020,11 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt": [
     [
      {}
@@ -136965,6 +137045,11 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt": [
     [
      {}
@@ -136985,6 +137070,16 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt": [
     [
      {}
@@ -138700,6 +138795,61 @@
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/module/errorhandling-parseerror-common.js": [
     [
      {}
@@ -139800,6 +139950,11 @@
      {}
     ]
    ],
+   "html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/text-level-semantics/the-s-element/.gitkeep": [
     [
      {}
@@ -142750,11 +142905,6 @@
      {}
     ]
    ],
-   "orientation-sensor/idlharness.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "page-visibility/OWNERS": [
     [
      {}
@@ -147985,16 +148135,6 @@
      {}
     ]
    ],
-   "storage/interfaces.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "storage/interfaces.https.worker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "storage/interfaces.idl": [
     [
      {}
@@ -148740,6 +148880,11 @@
      {}
     ]
    ],
+   "svg/foreignobject/position-svg-root-in-foreign-object-ref.html": [
+    [
+     {}
+    ]
+   ],
    "svg/interfaces-expected.txt": [
     [
      {}
@@ -148790,6 +148935,21 @@
      {}
     ]
    ],
+   "svg/path/bearing/absolute-ref.svg": [
+    [
+     {}
+    ]
+   ],
+   "svg/path/bearing/relative-ref.svg": [
+    [
+     {}
+    ]
+   ],
+   "svg/path/bearing/zero-ref.svg": [
+    [
+     {}
+    ]
+   ],
    "svg/path/property/priority-ref.svg": [
     [
      {}
@@ -148890,11 +149050,6 @@
      {}
     ]
    ],
-   "uievents/interfaces-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "uievents/keyboard/README.md": [
     [
      {}
@@ -150210,6 +150365,11 @@
      {}
     ]
    ],
+   "webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/RTCPeerConnection-generateCertificate-expected.txt": [
     [
      {}
@@ -182488,6 +182648,12 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html",
@@ -182500,6 +182666,18 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html",
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html",
@@ -182512,6 +182690,12 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html",
@@ -182572,6 +182756,18 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html",
+     {}
+    ]
+   ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html",
@@ -182584,6 +182780,12 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/user-interface/muted.html": [
     [
      "/html/semantics/embedded-content/media-elements/user-interface/muted.html",
@@ -186310,15 +186512,27 @@
      {}
     ]
    ],
-   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html": [
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html": [
     [
-     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html",
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html",
      {}
     ]
    ],
-   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html": [
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html": [
     [
-     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html",
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html",
      {}
     ]
    ],
@@ -186328,12 +186542,36 @@
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html",
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html": [
     [
      "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html",
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html",
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html": [
     [
      "/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html",
@@ -215632,6 +215870,12 @@
      {}
     ]
    ],
+   "webrtc/RTCPeerConnection-createOffer-offerToReceive.html": [
+    [
+     "/webrtc/RTCPeerConnection-createOffer-offerToReceive.html",
+     {}
+    ]
+   ],
    "webrtc/RTCPeerConnection-createOffer.html": [
     [
      "/webrtc/RTCPeerConnection-createOffer.html",
@@ -227624,7 +227868,7 @@
    "testharness"
   ],
   "2dcontext/imagebitmap/createImageBitmap-invalid-args.html": [
-   "e839d537057d03f55108b871d2d32272cac7bc7f",
+   "badef04a0354c9e41f99370b86e5f757b1926ea7",
    "testharness"
   ],
   "2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [
@@ -229440,7 +229684,7 @@
    "testharness"
   ],
   "FileAPI/idlharness.html": [
-   "0eb0d3b2f6c394a6b30f71102bd002ae6e339283",
+   "66720cf090912985b9ea4e9cfe01126778f61e36",
    "testharness"
   ],
   "FileAPI/idlharness.idl": [
@@ -230772,7 +231016,7 @@
    "testharness"
   ],
   "IndexedDB/interfaces.html": [
-   "d2ff3cf10fbaf798d3bf5868699979829703d859",
+   "ad40586fec970a4907546e3a33aef14f23e378ff",
    "testharness"
   ],
   "IndexedDB/interfaces.idl": [
@@ -231472,11 +231716,11 @@
    "support"
   ],
   "WebCryptoAPI/idlharness.html": [
-   "52b5381311cc0e2595d251273e054fa826de9765",
+   "f97da6e12fbd08b0fe93a6bc0fb9724053d147a8",
    "testharness"
   ],
   "WebCryptoAPI/idlharness.https.html": [
-   "52b5381311cc0e2595d251273e054fa826de9765",
+   "f97da6e12fbd08b0fe93a6bc0fb9724053d147a8",
    "testharness"
   ],
   "WebCryptoAPI/idlharness.worker.js": [
@@ -232183,10 +232427,6 @@
    "1cb82348a9d6f3be34da762267cce7389f715f7c",
    "testharness"
   ],
-  "XMLHttpRequest/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
-   "support"
-  ],
   "XMLHttpRequest/interfaces.html": [
    "a4c597d2bdb85e37ffe5f5ebba961d7f8a3aeb29",
    "testharness"
@@ -233456,7 +233696,7 @@
    "support"
   ],
   "accelerometer/idlharness.https-expected.txt": [
-   "72a411d6c3167f8b92ac3397ef8b7a2879613561",
+   "e5d98b3a501e3029a71598c796046b0dc6d555ac",
    "support"
   ],
   "accelerometer/idlharness.https.html": [
@@ -255059,14 +255299,6 @@
    "f9d1eaa996cfe84ba9600383bd6c38d179fcbe91",
    "support"
   ],
-  "css/css-display/display-contents-replaced-001-ref.html": [
-   "09008a1d912eb30702be95db99b8e5fd6604a768",
-   "support"
-  ],
-  "css/css-display/display-contents-replaced-001.html": [
-   "4030618381ad36d2c03be81b3b97cdb87977ddec",
-   "reftest"
-  ],
   "css/css-display/display-contents-state-change-001-ref.html": [
    "f7e25855cc7ef1896a9a52005d3c1379bf74746b",
    "support"
@@ -255075,6 +255307,14 @@
    "0a689fbe90be794772c66d59b033d15336e6dfe3",
    "reftest"
   ],
+  "css/css-display/display-contents-svg-elements-ref.html": [
+   "3e4ddf5f740d8fa688bcbb24201be0a6d4349017",
+   "support"
+  ],
+  "css/css-display/display-contents-svg-elements.html": [
+   "93573e17090a860bb09c2a208d925afac9cb17fd",
+   "reftest"
+  ],
   "css/css-display/display-contents-table-001-ref.html": [
    "9de4ee8151dbfa3c8e2c381ddd213e51b04f70c1",
    "support"
@@ -271499,13 +271739,21 @@
    "b28556fe458fac65f6a168b98e78597688f32a6e",
    "support"
   ],
-  "css/css-text-decor/line-through-vertical-ref.html": [
+  "css/css-text-decor/line-through-vertical.html": [
+   "d3fb9b272eafcfd36cefcc6a030c6ae3795a669c",
+   "reftest"
+  ],
+  "css/css-text-decor/reference/line-through-vertical-ref.html": [
    "f38d583fbcd41470cefb566d7b18c49758b2ebd2",
    "support"
   ],
-  "css/css-text-decor/line-through-vertical.html": [
-   "a0aee46cedb667c8906acb59254e6be2906947ce",
-   "reftest"
+  "css/css-text-decor/reference/text-decoration-color-recalc-ref.html": [
+   "f97bae89c262da57e45294db7638159114047da3",
+   "support"
+  ],
+  "css/css-text-decor/reference/text-decoration-color-ref.html": [
+   "4ef765ae8d80ac3eab177109e9bd5b2b7142880f",
+   "support"
   ],
   "css/css-text-decor/reference/text-decoration-line-010-ref.xht": [
    "ba55218db818b208176448c9ae0adb4ee101ea53",
@@ -271523,6 +271771,22 @@
    "065a1c1af6c12c7d2043c3d318330ba3028cdd87",
    "support"
   ],
+  "css/css-text-decor/reference/text-decoration-line-recalc-ref.html": [
+   "8e8c434546c5f4b6184d935f16b8e1479c39eb11",
+   "support"
+  ],
+  "css/css-text-decor/reference/text-decoration-line-ref.html": [
+   "3612462ad5a2c5447adf1fc80f6aa2b4ee5cb001",
+   "support"
+  ],
+  "css/css-text-decor/reference/text-decoration-style-multiple-ref.html": [
+   "e23906652f3abb2123d70b11a7002262ba661f8b",
+   "support"
+  ],
+  "css/css-text-decor/reference/text-decoration-style-recalc-ref.html": [
+   "6c6057bb2fd3e94e6141426a9de282120e354bb5",
+   "support"
+  ],
   "css/css-text-decor/reference/text-emphasis-color-001-ref.xht": [
    "999f10b2466d839871ca9e974de158b84f5e2a90",
    "support"
@@ -271611,20 +271875,12 @@
    "fa665f1520b2148805c182feda36860ef5647c65",
    "support"
   ],
-  "css/css-text-decor/text-decoration-color-recalc-ref.html": [
-   "f97bae89c262da57e45294db7638159114047da3",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-color-recalc.html": [
-   "90b474101ea3f862c4b25541de7eceab6f400657",
+   "333110782c52aa29f0ac547164cf754025a285b9",
    "reftest"
   ],
-  "css/css-text-decor/text-decoration-color-ref.html": [
-   "4ef765ae8d80ac3eab177109e9bd5b2b7142880f",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-color.html": [
-   "1680790f5a026f1a40a09b956303a5caa1d14db9",
+   "7a11633ef29f67fc2242a265a63749bd9e5c1cfe",
    "reftest"
   ],
   "css/css-text-decor/text-decoration-line-010.xht": [
@@ -271647,20 +271903,12 @@
    "e0d6dbb039133f5aee07cc8dd3d96942727bdec0",
    "manual"
   ],
-  "css/css-text-decor/text-decoration-line-recalc-ref.html": [
-   "8e8c434546c5f4b6184d935f16b8e1479c39eb11",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-line-recalc.html": [
-   "b2ecb8985db8138af208630adc912d489872ac01",
+   "ab48a5baca2e14a4618dc57f2b96badf98dfd077",
    "reftest"
   ],
-  "css/css-text-decor/text-decoration-line-ref.html": [
-   "3612462ad5a2c5447adf1fc80f6aa2b4ee5cb001",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-line.html": [
-   "e75f9dd8329e7a7464ead41db58965f09f9897d3",
+   "2b56bc3ac545e449d4beff61d5c7c1fd97060042",
    "reftest"
   ],
   "css/css-text-decor/text-decoration-serialization.tentative-expected.txt": [
@@ -271675,20 +271923,12 @@
    "a633a231d8fd6b5408add5fab972046651889b09",
    "testharness"
   ],
-  "css/css-text-decor/text-decoration-style-multiple-ref.html": [
-   "e23906652f3abb2123d70b11a7002262ba661f8b",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-style-multiple.html": [
-   "dbf494f252e5f98a17734ffad96462f4b665d8c6",
+   "4f6e24cfb87dd4b8efb51154e70fbc14e35124da",
    "reftest"
   ],
-  "css/css-text-decor/text-decoration-style-recalc-ref.html": [
-   "6c6057bb2fd3e94e6141426a9de282120e354bb5",
-   "support"
-  ],
   "css/css-text-decor/text-decoration-style-recalc.html": [
-   "6fb5a8423c86ef7c2b4741787c710cce6fbf2a95",
+   "9dbfa25a35ae3959b51b28f71a29cbd9188322b3",
    "reftest"
   ],
   "css/css-text-decor/text-decoration-visibility-001.xht": [
@@ -290472,7 +290712,7 @@
    "support"
   ],
   "css/cssom-view/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "55c90c3c73a74c324d1fbf482a64018f5c32f1ac",
    "support"
   ],
   "css/cssom-view/interfaces.html": [
@@ -290944,7 +291184,7 @@
    "testharness"
   ],
   "css/cssom/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "172fc989f80c1a122597e1d21046715d0ee72dd4",
    "support"
   ],
   "css/cssom/interfaces.html": [
@@ -296676,7 +296916,7 @@
    "testharness"
   ],
   "dom/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "45954d3c4a372a3fe4ca89ba476f7c0573d5bf42",
    "support"
   ],
   "dom/interfaces.html": [
@@ -300312,7 +300552,7 @@
    "testharness"
   ],
   "encrypted-media/idlharness.https.html": [
-   "69456d56a5485b04465f4f6ee4abc80388703fd9",
+   "eece848c772a39b29d6d8ece532e7807d737f50d",
    "testharness"
   ],
   "encrypted-media/polyfill/cast-polyfill.js": [
@@ -301780,7 +302020,7 @@
    "support"
   ],
   "fetch/api/request/request-idl.html": [
-   "b2f1431738bd7f389ab43cf8c10aed3b0d12abb8",
+   "679ff0c44a0ece1c480f5296e738b7a15f4c79cb",
    "testharness"
   ],
   "fetch/api/request/request-init-001.sub-expected.txt": [
@@ -301976,7 +302216,7 @@
    "support"
   ],
   "fetch/api/response/response-idl.html": [
-   "e0e32634b7e0271ff3566cb66b358e46c9fb8d21",
+   "d94cfadf60dc146f80f7c1dc9937d7841600f9ef",
    "testharness"
   ],
   "fetch/api/response/response-init-001.html": [
@@ -302400,7 +302640,7 @@
    "support"
   ],
   "fullscreen/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "0f3c64689d0335035540da90f1cbfafb4bfc996a",
    "support"
   ],
   "fullscreen/interfaces.html": [
@@ -302483,10 +302723,6 @@
    "2209b4cc293aefecded2d325b664d494820d38af",
    "support"
   ],
-  "generic-sensor/idlharness.https-expected.txt": [
-   "65aa9577c7e504c6b21321c93e9aab90bfcd4d66",
-   "support"
-  ],
   "generic-sensor/idlharness.https.html": [
    "22f96f98d5349b430f9b6fe9fcb3213c73376fd7",
    "testharness"
@@ -302711,10 +302947,6 @@
    "4f1c57a6bfbceaea2e725ce40ab449b5a687d611",
    "support"
   ],
-  "gyroscope/idlharness.https-expected.txt": [
-   "08c4eb140944f6a61544b5269d539a61e782ab2e",
-   "support"
-  ],
   "gyroscope/idlharness.https.html": [
    "c7080ff63868e28bebd6fe982e13e88d756977ae",
    "testharness"
@@ -307300,7 +307532,7 @@
    "support"
   ],
   "html/dom/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "1f66724f72c4e52ca66a9b828f07cb4e698394ef",
    "support"
   ],
   "html/dom/interfaces.html": [
@@ -307308,7 +307540,7 @@
    "testharness"
   ],
   "html/dom/interfaces.worker-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "4610698c744b6dcb05c79b7d5b943af78b19a703",
    "support"
   ],
   "html/dom/interfaces.worker.js": [
@@ -313927,6 +314159,18 @@
    "6954c71972bfbdab36c94c44190cc2259971adb0",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt": [
+   "befc0d2b1bfb79cd79c2b09af9d35f1db02e59ff",
+   "support"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt": [
+   "8ba9c1290b73e11a46b983c10848d14c82a70062",
+   "support"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt": [
+   "842da18a789e67bd1dd78c3389581552e0e23c68",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt": [
    "a1bf60ed37f7bce2e3a5bec919664633780e60ed",
    "support"
@@ -313955,6 +314199,14 @@
    "db041f1a659ab39530144bb68e0ab76d14ca9b90",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt": [
+   "01c28a312767c6ca41751a58b227dc80bbff54dc",
+   "support"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt": [
+   "65fdbcdc5a88cc9208cfd5b0bf2e1396b23432a7",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt": [
    "9941f3c18ac34d852ab7f882c06d10a874453c14",
    "support"
@@ -313963,6 +314215,10 @@
    "5913b038e7d6341b19c21d0bb81008057656d929",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt": [
+   "bfe46bfea8af95d5dc54324ac9e202eb9e5e0b2b",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt": [
    "e929f8e1755f72ecae96dd40430bc07c5a4a433c",
    "support"
@@ -314043,6 +314299,10 @@
    "09948fb59cd9e1702ba869f0b444ca36d1ec0bf2",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt": [
+   "2d9b2479193680a334da8001254f17105b7a13aa",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt": [
    "f83f36449d6a7e9db28bba9e39dc7a4bf7458927",
    "support"
@@ -314059,6 +314319,10 @@
    "329c3f585e5e89dfc1f44fde85a1d9601e61aef2",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt": [
+   "e6f5fddd1ff13f6e9f81931af691a0ad1c9a55a9",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt": [
    "b15aef44ae1726c362448bc561899c7dc554a767",
    "support"
@@ -314075,6 +314339,14 @@
    "357f4306f5b5c83b712d0a0bbb098827c3802196",
    "support"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt": [
+   "f80e328090068ef96781468e107de3afe947d840",
+   "support"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt": [
+   "61997c207efb09802c9022fcea544f4196094df6",
+   "support"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt": [
    "943c4ca7d7ba197815ad5732222558e30195b022",
    "support"
@@ -314151,6 +314423,10 @@
    "f12b9b7384f445b817f1d049d7bff05ec0f2d3d9",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html": [
+   "ba273b161cbdd6cfeec6be75f08bb510a13bf9e1",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html": [
    "519039bd4e00da6802f03f9a9695b96019ef6df0",
    "testharness"
@@ -314159,6 +314435,14 @@
    "5f91fd3c078343aee9ee72c1b60bf8a8f82682e2",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html": [
+   "bcc7f1b103a7d0896ba19a84de6b41f4758a8837",
+   "testharness"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html": [
+   "d8b948ecac4da42f43896cda9902718130a5a0e6",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html": [
    "b995f43c4dfef791a95bc0dfcd30721e955fce85",
    "testharness"
@@ -314167,6 +314451,10 @@
    "3e83c514cb2d18b2238f03e3d85a21f69a60d5c0",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html": [
+   "ee7e65642ed06f89c2413278fad652dcfb78d740",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html": [
    "410feb59cf264571fb347bbfcb1f14150bbaea8f",
    "testharness"
@@ -314207,6 +314495,14 @@
    "ebae3e9d5dc11b91b53439ee4871df86c3a80822",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html": [
+   "c42b3e45318e167bf00edf77528d56e2d107d5e8",
+   "testharness"
+  ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html": [
+   "c43ab0c10e1de3af01f6137c044c73cfcbc6d339",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html": [
    "65241920becf512c35f78b335de90c00af03195d",
    "testharness"
@@ -314215,6 +314511,10 @@
    "4f6e049d97dc81065df13e66e40cf945ff0914dd",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html": [
+   "c016678eb1f14aad834d4e6e3bbca1818760284a",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/user-interface/muted.html": [
    "74deefbbc4b8f96ff4856db1c32c6428183cc040",
    "testharness"
@@ -318323,22 +318623,90 @@
    "997859fce8ed8854053d089a78ab999b3f88a072",
    "testharness"
   ],
-  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html": [
-   "c5e3bf053403a49ee72c7464b1c1d0758f0fc8be",
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js": [
+   "be1ecd94299f35bb000eb5e9df53e9c057231982",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js": [
+   "686728d887fbb65f9b5c7498edf1a1dfc6611ebd",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js": [
+   "b2f41c32fc88183500ab3069a51894d62873dd7b",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js": [
+   "15125c9e98e59d191acee4dcadece1b2986d7ec1",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js": [
+   "03ee5763c6e62da7d49e058edb58292f4f496a3f",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt": [
+   "f15dee3678e629a3fa9c39be6719dc6a64121bd1",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html": [
+   "70f97beb38cf958bd2234e3b580712c8436b8095",
    "testharness"
   ],
-  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html": [
-   "a33d3b405b1a826f51dadb18431c855b13aee612",
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt": [
+   "f15dee3678e629a3fa9c39be6719dc6a64121bd1",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html": [
+   "7386a90307c33bdaad34002c865b4ad8793c10a2",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt": [
+   "ef0e42ddf8c98920970e15c05a979ecd0444b2d9",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html": [
+   "928c333bf9c50213175095ceb06f1afdd690bd8a",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt": [
+   "ca207a7146b326f11712a5462ee1022748194058",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html": [
+   "1daf837d2d9ee258dfc5c9648b1a0f5b0b6e93e4",
    "testharness"
   ],
   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-classic.html": [
    "e22e6f200162000f043d114c89def6667097d13d",
    "testharness"
   ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html": [
+   "0295db34d953b716151726188ac467a948f0d955",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html": [
+   "cfc2375f7a8abe67eae4213b2f0c5224ba25337d",
+   "testharness"
+  ],
   "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-module.html": [
    "b332499d43e0768b5ddf1d5dbb5cd8ca702c3c64",
    "testharness"
   ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic-expected.txt": [
+   "6399a325fd1570f28c6c365d8dd02345e3963bba",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html": [
+   "20a6c6de42fe72fe375ccd8c9c8763191afa78f9",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module-expected.txt": [
+   "6399a325fd1570f28c6c365d8dd02345e3963bba",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html": [
+   "93f2cc8f3e88e0cbf508acd64f9a28bdcaff25b0",
+   "testharness"
+  ],
   "html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html": [
    "32455a1418d94fa68368bae3b1c0291204f6b4e3",
    "testharness"
@@ -319895,6 +320263,14 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
+  "html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html": [
+   "2db31a9c9bb7a301dbb579332a7870315e4521f8",
+   "support"
+  ],
+  "html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html": [
+   "c20a6cff72623ce86f1139dff58faa88f42673f4",
+   "reftest"
+  ],
   "html/semantics/text-level-semantics/the-s-element/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
@@ -320732,7 +321108,7 @@
    "testharness"
   ],
   "html/webappapis/animation-frames/idlharness.html": [
-   "03aebad24e8289a02f8336931825dc34039e83cc",
+   "8210ec5e16b79035472198220d39596404dab310",
    "testharness"
   ],
   "html/webappapis/animation-frames/same-dispatch-time.html": [
@@ -321604,7 +321980,7 @@
    "support"
   ],
   "infrastructure/OWNERS": [
-   "8eaa91e24975c11fcab9dee15d10d0c9c391c889",
+   "d8b686f268bd0e90125568deefba63e4fecbf322",
    "support"
   ],
   "infrastructure/README.md": [
@@ -321800,7 +322176,7 @@
    "support"
   ],
   "interfaces/html.idl": [
-   "73fb0f91c2af1e5d5f1a1605acc0e633011b252d",
+   "87b930d786c7ceb7f10c7975971bdf36a3388095",
    "support"
   ],
   "interfaces/magnetometer.idl": [
@@ -322144,7 +322520,7 @@
    "support"
   ],
   "magnetometer/idlharness.https-expected.txt": [
-   "9e98f55cd270e77673dc9cf48e9ace030572508a",
+   "fde163c52e1b18818542855c01231c44daf5d001",
    "support"
   ],
   "magnetometer/idlharness.https.html": [
@@ -322168,7 +322544,7 @@
    "support"
   ],
   "media-capabilities/idlharness.html": [
-   "0c34bb1872cc16b21c8c1f33d6dfd796f59500c8",
+   "396430dee8bc806e95a218e03f767b34efe8fe83",
    "testharness"
   ],
   "media-source/OWNERS": [
@@ -322964,7 +323340,7 @@
    "testharness"
   ],
   "mediacapture-streams/MediaStreamTrack-idl.https-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "031371338a5803d1e66f57d33d1ef60653e3f2c3",
    "support"
   ],
   "mediacapture-streams/MediaStreamTrack-idl.https.html": [
@@ -323000,11 +323376,11 @@
    "support"
   ],
   "mediasession/idlharness-expected.txt": [
-   "a50799514e35d344089c5533637d2cad282d812f",
+   "2368ccca24b197f2d4cabddc50edd64cb3cc219a",
    "support"
   ],
   "mediasession/idlharness.html": [
-   "9aa84a0143daf03d9a95108d0407fda2443c9849",
+   "8db3276ecfd3f02e55b89171f61e45e6af540614",
    "testharness"
   ],
   "mediasession/mediametadata.html": [
@@ -330971,10 +331347,6 @@
    "e6e93a77c618e8477d79f6cf1ff05d0f5865821c",
    "support"
   ],
-  "orientation-sensor/idlharness.https-expected.txt": [
-   "5b182761d7779f5c4ad3709a196c8268f101c303",
-   "support"
-  ],
   "orientation-sensor/idlharness.https.html": [
    "30f9a5f56c1eb360be09b2a7f2fd1d5148469e12",
    "testharness"
@@ -331268,7 +331640,7 @@
    "testharness"
   ],
   "payment-request/interfaces.https-expected.txt": [
-   "002d6e8592cfeca2b4f6a301f13215363fedb848",
+   "97dfd3932af16c46273033c5547696e2f3435877",
    "support"
   ],
   "payment-request/interfaces.https.html": [
@@ -331496,7 +331868,7 @@
    "manual"
   ],
   "pointerevents/extension/idlharness.html": [
-   "64ed6d6c201773f0b5ab4b81369a2d601fe3363a",
+   "83ee5397ece0126d71c235cecb554b024e3515d1",
    "testharness"
   ],
   "pointerevents/extension/pointerevent_coalesced_events_attributes-manual-expected.txt": [
@@ -331516,7 +331888,7 @@
    "manual"
   ],
   "pointerevents/idlharness.html": [
-   "6ca74eb661910c27ed6cb8bbbb819b749007a75f",
+   "7db1757e519a8ebb9123dd150f17bf5c6f23e311",
    "testharness"
   ],
   "pointerevents/pointerevent_attributes_hoverable_pointers-manual.html": [
@@ -339872,7 +340244,7 @@
    "testharness"
   ],
   "requestidlecallback/idlharness.html": [
-   "970dac3de43bddedb88e22c438fc01f76a6b9a41",
+   "99fabb2abdc8aef189bd8c972a7501223517f932",
    "testharness"
   ],
   "requestidlecallback/resources/post_name_on_load.html": [
@@ -340400,7 +340772,7 @@
    "testharness"
   ],
   "selection/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
+   "4610698c744b6dcb05c79b7d5b943af78b19a703",
    "support"
   ],
   "selection/interfaces.html": [
@@ -343215,18 +343587,10 @@
    "6018a8d5ecb29b6c011b20a3afb38669e41f9323",
    "testharness"
   ],
-  "storage/interfaces.https-expected.txt": [
-   "5f98fbf9aa1ea45f22e017d76710645b8a57745b",
-   "support"
-  ],
   "storage/interfaces.https.html": [
    "76fa61c3a87485266a7f9d6f66e5d08bb7881ff7",
    "testharness"
   ],
-  "storage/interfaces.https.worker-expected.txt": [
-   "5f98fbf9aa1ea45f22e017d76710645b8a57745b",
-   "support"
-  ],
   "storage/interfaces.https.worker.js": [
    "da11cf56486fe08214f91d181b3a19775f6aa59c",
    "testharness"
@@ -344735,6 +345099,14 @@
    "16a7ef4c64dab3706120a2221dd6bec5ca8e9062",
    "testharness"
   ],
+  "svg/foreignobject/position-svg-root-in-foreign-object-ref.html": [
+   "1dc201dc096298f81fd21646fd3bc018c127d0c1",
+   "support"
+  ],
+  "svg/foreignobject/position-svg-root-in-foreign-object.html": [
+   "c14ce9ff2df60975888de9c5cc31755325701d71",
+   "reftest"
+  ],
   "svg/historical.html": [
    "f18f89f68fdf1266768700235f08e7181ce0e0e1",
    "testharness"
@@ -344744,7 +345116,7 @@
    "support"
   ],
   "svg/interfaces.html": [
-   "3f659056fc469cb96bccd516a596fb183f005e9f",
+   "6045de5e5dc7810f89ca2c9a526f9e4380ae365c",
    "testharness"
   ],
   "svg/linking/reftests/href-a-element-attr-change.html": [
@@ -344823,6 +345195,30 @@
    "fb8aec792684b97151d2964b85d1e70829e141ad",
    "support"
   ],
+  "svg/path/bearing/absolute-ref.svg": [
+   "6ad5320a05fcc31fd2af98d2bbd0bd6fbc558daa",
+   "support"
+  ],
+  "svg/path/bearing/absolute.svg": [
+   "e1c8d4bca5ab9519936a96521006baa176296c27",
+   "reftest"
+  ],
+  "svg/path/bearing/relative-ref.svg": [
+   "6ad5320a05fcc31fd2af98d2bbd0bd6fbc558daa",
+   "support"
+  ],
+  "svg/path/bearing/relative.svg": [
+   "75322c3ce1cc60339014301518a966e2e9f35360",
+   "reftest"
+  ],
+  "svg/path/bearing/zero-ref.svg": [
+   "8a192b68d131f467d291b277c55c205972db1738",
+   "support"
+  ],
+  "svg/path/bearing/zero.svg": [
+   "e7e8508ebb527e97e1f4e289652121b1d070c219",
+   "reftest"
+  ],
   "svg/path/property/d-interpolation-discrete.svg": [
    "6e27bfe4467b16b9e8c29bb66894bbb9dfbaf077",
    "testharness"
@@ -345135,10 +345531,6 @@
    "551486b9882d33a0ce31740809eaec0352403d69",
    "manual"
   ],
-  "uievents/interfaces-expected.txt": [
-   "c00dd816ba626616b2d02f3cfa2c5d0c79e0456b",
-   "support"
-  ],
   "uievents/interfaces.html": [
    "e755618e522288e9bf6dc4fc592fd6658dc97aba",
    "testharness"
@@ -347703,6 +348095,14 @@
    "7ae04088ab239964b6f934b747af3645f5d89d81",
    "support"
   ],
+  "webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt": [
+   "def6ac654a2620c82ba9565f81c978058ecf9eb7",
+   "support"
+  ],
+  "webrtc/RTCPeerConnection-createOffer-offerToReceive.html": [
+   "ae14ed4e3ffc7ef17de61e3e1a0b594cafdfa50a",
+   "testharness"
+  ],
   "webrtc/RTCPeerConnection-createOffer.html": [
    "5b3d38072afd9bbb3e95925c3959ff3f4268a347",
    "testharness"
@@ -349236,7 +349636,7 @@
    "support"
   ],
   "webstorage/idlharness.html": [
-   "9eec3559fc7cfba33bbeb280c392ee0af9d6755b",
+   "e57413a1868e8d84ba7c500ff13b7e68675cbe66",
    "testharness"
   ],
   "webstorage/missing_arguments.html": [
@@ -349496,7 +349896,7 @@
    "support"
   ],
   "webvr/idlharness.html": [
-   "ef6ad8bff43a6423b9b3e7deb8017a8b3fa0c112",
+   "3505e27e1b2668010bf61f05f6b8a759cf42cece",
    "testharness"
   ],
   "webvr/webvr-disabled-by-feature-policy.https.sub.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-invalid-args.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-invalid-args.html
index a0bcf48..ad8618a 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-invalid-args.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-invalid-args.html
@@ -1,10 +1,6 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
+<!doctype html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
 <script>
 
 function makeCanvas() {
@@ -86,6 +82,22 @@
   });
 }
 
+function makeBrokenImage() {
+  return new Promise(resolve => {
+    const image = new Image();
+    image.src = "data,x";
+    image.onerror = () => resolve(image);
+  });
+}
+
+function makeAvailableButBrokenImage() {
+  return new Promise(resolve => {
+    const image = new Image();
+    image.src = "/images/broken.png";
+    image.onload = () => resolve(image);
+  });
+}
+
 imageSourceTypes = [
   { name: 'HTMLImageElement',  factory: makeImage },
   { name: 'HTMLVideoElement',  factory: makeVideo },
@@ -152,36 +164,48 @@
 }, "createImageBitmap with null image source rejects with a TypeError.");
 
 promise_test( t => {
-  return promise_rejects(t, new DOMException('', 'InvalidStateError'),
+  return promise_rejects(t, "InvalidStateError",
     createImageBitmap(new Image()));
 }, "createImageBitmap with empty image source rejects with a InvalidStateError.");
 
 promise_test( t => {
-  return promise_rejects(t, new DOMException('', 'InvalidStateError'),
+  return promise_rejects(t, "InvalidStateError",
     createImageBitmap(document.createElement('video')));
 }, "createImageBitmap with empty video source rejects with a InvalidStateError.");
 
 promise_test( t => {
   return makeOversizedCanvas().then(canvas => {
-    return promise_rejects(t, new DOMException('', 'InvalidStateError'),
+    return promise_rejects(t, "InvalidStateError",
         createImageBitmap(canvas));
   });
 }, "createImageBitmap with an oversized canvas source rejects with a RangeError.");
 
 promise_test( t => {
   return makeOversizedOffscreenCanvas().then(offscreenCanvas => {
-    return promise_rejects(t, new DOMException('', 'InvalidStateError'),
+    return promise_rejects(t, "InvalidStateError",
         createImageBitmap(offscreenCanvas));
   });
 }, "createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError.");
 
 promise_test( t => {
   return makeInvalidBlob().then(blob => {
-    return promise_rejects(t, new DOMException('', 'InvalidStateError'),
+    return promise_rejects(t, "InvalidStateError",
         createImageBitmap(blob));
   });
 }, "createImageBitmap with an undecodable blob source rejects with an InvalidStateError.");
 
+promise_test( t => {
+  return makeBrokenImage().then(image => {
+    return promise_rejects(t, "InvalidStateError",
+        createImageBitmap(image));
+  });
+}, "createImageBitmap with a broken image source rejects with an InvalidStateError.");
+
+promise_test( t => {
+  return makeAvailableButBrokenImage().then(image => {
+    return promise_rejects(t, "InvalidStateError",
+        createImageBitmap(image));
+  });
+}, "createImageBitmap with an available but undecodable image source rejects with an InvalidStateError.");
+
 </script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/idlharness.html
index b88a752..7b706ad 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/idlharness.html
@@ -30,8 +30,6 @@
     request.onload = function() {
         var idls = request.responseText;
 
-        idl_array.add_untested_idls("[PrimaryGlobal] interface Window { };");
-
         idl_array.add_untested_idls("[Exposed=(Window,Worker)] interface ArrayBuffer {};");
         idl_array.add_untested_idls("interface URL {};");
         idl_array.add_untested_idls("[Exposed=(Window,Worker)] interface EventTarget {};");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/interfaces.html
index 6fb37f8..30372b6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/interfaces.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/interfaces.html
@@ -20,7 +20,7 @@
     var idls = request.responseText;
 
     // https://html.spec.whatwg.org/multipage/browsers.html#window
-    idlArray.add_untested_idls("[PrimaryGlobal] interface Window { };");
+    idlArray.add_untested_idls("[Global=Window, Exposed=Window] interface Window { };");
 
     // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin
     idlArray.add_untested_idls(`[NoInterfaceObject, Exposed=(Window,Worker)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.html
index 81e1e04f..53faef26 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.html
@@ -29,11 +29,6 @@
     request.onload = function() {
         var idls = request.responseText;
 
-        idl_array.add_untested_idls("[PrimaryGlobal] interface Window { };");
-
-        idl_array.add_untested_idls("interface ArrayBuffer {};");
-        idl_array.add_untested_idls("interface ArrayBufferView {};");
-
         idl_array.add_idls(idls);
 
         idl_array.add_objects({"Crypto":["crypto"], "SubtleCrypto":["crypto.subtle"]});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.https.html b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.https.html
index 81e1e04f..53faef26 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/WebCryptoAPI/idlharness.https.html
@@ -29,11 +29,6 @@
     request.onload = function() {
         var idls = request.responseText;
 
-        idl_array.add_untested_idls("[PrimaryGlobal] interface Window { };");
-
-        idl_array.add_untested_idls("interface ArrayBuffer {};");
-        idl_array.add_untested_idls("interface ArrayBufferView {};");
-
         idl_array.add_idls(idls);
 
         idl_array.add_objects({"Crypto":["crypto"], "SubtleCrypto":["crypto.subtle"]});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/XMLHttpRequest/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/XMLHttpRequest/interfaces-expected.txt
deleted file mode 100644
index 1fd50f1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/XMLHttpRequest/interfaces-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/accelerometer/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/accelerometer/idlharness.https-expected.txt
index 41d71e9..dba6f07 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/accelerometer/idlharness.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/accelerometer/idlharness.https-expected.txt
@@ -1,4 +1,74 @@
 This is a testharness.js-based test.
-FAIL Test IDL implementation of Accelerometer Sensor promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test IDL implementation of Accelerometer Sensor
+PASS Sensor interface: existence and properties of interface object
+PASS Sensor interface object length
+PASS Sensor interface object name
+PASS Sensor interface: existence and properties of interface prototype object
+PASS Sensor interface: existence and properties of interface prototype object's "constructor" property
+PASS Sensor interface: attribute activated
+PASS Sensor interface: attribute hasReading
+PASS Sensor interface: attribute timestamp
+PASS Sensor interface: operation start()
+PASS Sensor interface: operation stop()
+PASS Sensor interface: attribute onreading
+PASS Sensor interface: attribute onactivate
+PASS Sensor interface: attribute onerror
+PASS Accelerometer interface: existence and properties of interface object
+PASS Accelerometer interface object length
+PASS Accelerometer interface object name
+PASS Accelerometer interface: existence and properties of interface prototype object
+PASS Accelerometer interface: existence and properties of interface prototype object's "constructor" property
+PASS Accelerometer interface: attribute x
+PASS Accelerometer interface: attribute y
+PASS Accelerometer interface: attribute z
+PASS Accelerometer must be primary interface of new Accelerometer();
+PASS Stringification of new Accelerometer();
+PASS Accelerometer interface: new Accelerometer(); must inherit property "x" with the proper type
+PASS Accelerometer interface: new Accelerometer(); must inherit property "y" with the proper type
+PASS Accelerometer interface: new Accelerometer(); must inherit property "z" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "activated" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "hasReading" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "timestamp" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "start()" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "stop()" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "onreading" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "onactivate" with the proper type
+PASS Sensor interface: new Accelerometer(); must inherit property "onerror" with the proper type
+PASS LinearAccelerationSensor interface: existence and properties of interface object
+PASS LinearAccelerationSensor interface object length
+PASS LinearAccelerationSensor interface object name
+PASS LinearAccelerationSensor interface: existence and properties of interface prototype object
+PASS LinearAccelerationSensor interface: existence and properties of interface prototype object's "constructor" property
+PASS LinearAccelerationSensor must be primary interface of new LinearAccelerationSensor();
+PASS Stringification of new LinearAccelerationSensor();
+PASS Accelerometer interface: new LinearAccelerationSensor(); must inherit property "x" with the proper type
+PASS Accelerometer interface: new LinearAccelerationSensor(); must inherit property "y" with the proper type
+PASS Accelerometer interface: new LinearAccelerationSensor(); must inherit property "z" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "activated" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "hasReading" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "timestamp" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "start()" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "stop()" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "onreading" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "onactivate" with the proper type
+PASS Sensor interface: new LinearAccelerationSensor(); must inherit property "onerror" with the proper type
+FAIL GravitySensor interface: existence and properties of interface object assert_own_property: self does not have own property "GravitySensor" expected property "GravitySensor" missing
+FAIL GravitySensor interface object length assert_own_property: self does not have own property "GravitySensor" expected property "GravitySensor" missing
+FAIL GravitySensor interface object name assert_own_property: self does not have own property "GravitySensor" expected property "GravitySensor" missing
+FAIL GravitySensor interface: existence and properties of interface prototype object assert_own_property: self does not have own property "GravitySensor" expected property "GravitySensor" missing
+FAIL GravitySensor interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "GravitySensor" expected property "GravitySensor" missing
+FAIL GravitySensor must be primary interface of new GravitySensor(); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Stringification of new GravitySensor(); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Accelerometer interface: new GravitySensor(); must inherit property "x" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Accelerometer interface: new GravitySensor(); must inherit property "y" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Accelerometer interface: new GravitySensor(); must inherit property "z" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "activated" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "hasReading" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "timestamp" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "start()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "stop()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "onreading" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "onactivate" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
+FAIL Sensor interface: new GravitySensor(); must inherit property "onerror" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: GravitySensor is not defined"
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.window.js
similarity index 89%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.window.js
index 962f13a1..8f3f6f56 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_delete_arguments.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.delete() arguments and options</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -76,7 +68,7 @@
 }, 'cookieStore.delete with expires in options');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   await cookieStore.set(
       'cookie-name', 'cookie-value', { domain: currentDomain });
@@ -91,7 +83,7 @@
 }, 'cookieStore.delete with domain set to the current hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   const subDomain = `sub.${currentDomain}`;
   await cookieStore.set(
@@ -108,7 +100,7 @@
 }, 'cookieStore.delete with domain set to a subdomain of the current hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   await cookieStore.set(
       'cookie-name', 'cookie-value', { domain: currentDomain });
@@ -124,7 +116,7 @@
    'hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   const subDomain = `sub.${currentDomain}`;
   await cookieStore.set(
@@ -143,7 +135,7 @@
 
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentPath = currentUrl.pathname;
   const currentDirectory =
       currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
@@ -160,7 +152,7 @@
 }, 'cookieStore.delete with path set to the current directory');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentPath = currentUrl.pathname;
   const currentDirectory =
       currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
@@ -177,5 +169,3 @@
     await cookieStore.delete('cookie-name', { path: currentDirectory })
   });
 }, 'cookieStore.delete with path set to subdirectory of the current directory');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.window.js
similarity index 92%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.window.js
index 3066a99b..650d6eb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.getAll() arguments and options</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -125,5 +117,3 @@
   await async_cleanup(() => cookieStore.delete('cookie-name'));
   await async_cleanup(() => cookieStore.delete('cookie-name-2'));
 }, 'cookieStore.getAll with matchType set to startsWith and name in options');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_getAll_set.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_set_basic.tentative.window.js
similarity index 66%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_getAll_set.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_set_basic.tentative.window.js
index 05a794b..a70c1197 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_getAll_set.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_getAll_set_basic.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.getAll() sees cookieStore.set() cookie</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -28,5 +20,3 @@
 
   await async_cleanup(() => cookieStore.delete('cookie-name'));
 }, 'cookieStore.getAll returns the cookie written by cookieStore.set');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.window.js
similarity index 88%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.window.js
index 469cf4b..f50bb51 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_arguments.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.get() arguments and options</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -92,5 +84,3 @@
 
   async_cleanup(() => cookieStore.delete('cookie-name'));
 }, 'cookieStore.get with matchType set to startsWith and name in options');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_get_delete.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_delete_basic.tentative.window.js
similarity index 64%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_get_delete.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_delete_basic.tentative.window.js
index ebb2c8f..e039d817 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_get_delete.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_delete_basic.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.delete() impacts cookieStore.get()</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -25,6 +17,4 @@
   assert_equals(cookie, null);
 
   await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.get returns null for a cookie deleted by cookieStore.delete');
-
-</script>
+}, 'cookieStore.get returns null for a cookie deleted by cookieStore.delete');
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/get_set.tentative.window.js b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_set_basic.tentative.window.js
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/get_set.tentative.window.js
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_get_set_basic.tentative.window.js
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.window.js
similarity index 89%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.window.js
index c5d8d0b4..443341e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_arguments.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.has() arguments and options</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -98,5 +90,3 @@
 
   await async_cleanup(() => cookieStore.delete('cookie-name'));
 }, 'cookieStore.has with matchType set to startsWith and name in options');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_has.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_basic.tentative.window.js
similarity index 72%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_has.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_basic.tentative.window.js
index 9c2eb5b..0774a71 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/document_has.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_has_basic.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.has()</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -31,5 +23,3 @@
 
   await async_cleanup(() => cookieStore.delete('cookie-name'));
 }, 'cookieStore.has returns false for cookie deleted by cookieStore.delete()');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.window.js
similarity index 92%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.window.js
index 7a16162..c256430 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/cookieStore_set_arguments.tentative.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.set() arguments and options</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
 'use strict';
 
 // Workaround because add_cleanup doesn't support async functions yet.
@@ -118,7 +110,7 @@
 }, 'cookieStore.set with name and value in options and expires in the past');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   await cookieStore.delete('cookie-name', { domain: currentDomain });
 
@@ -134,7 +126,7 @@
 }, 'cookieStore.set with domain set to the current hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   const subDomain = `sub.${currentDomain}`;
   await cookieStore.delete('cookie-name', { domain: currentDomain });
@@ -151,7 +143,7 @@
 }, 'cookieStore.set with domain set to a subdomain of the current hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentDomain = currentUrl.hostname;
   await cookieStore.delete('cookie-name');
 
@@ -171,7 +163,7 @@
 }, 'cookieStore.set default domain is current hostname');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentPath = currentUrl.pathname;
   const currentDirectory =
       currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
@@ -189,7 +181,7 @@
 }, 'cookieStore.set with path set to the current directory');
 
 promise_test(async testCase => {
-  const currentUrl = new URL(window.location.href);
+  const currentUrl = new URL(self.location.href);
   const currentPath = currentUrl.pathname;
   const currentDirectory =
       currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
@@ -221,5 +213,3 @@
   await async_cleanup(() => cookieStore.delete('cookie-name'));
   await async_cleanup(() => cookieStore.delete('cookie-name', { path: '/' }));
 }, 'cookieStore.set default path is /');
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.js b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.js
new file mode 100644
index 0000000..0ffe6f8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.js
@@ -0,0 +1,14 @@
+self.GLOBAL = {
+  isWindow: function() { return false; },
+  isWorker: function() { return true; },
+};
+importScripts("/resources/testharness.js");
+
+importScripts(
+    "cookieStore_delete_arguments.tentative.window.js",
+    "cookieStore_get_arguments.tentative.window.js",
+    "cookieStore_getAll_arguments.tentative.window.js",
+    "cookieStore_has_arguments.tentative.window.js",
+    "cookieStore_set_arguments.tentative.window.js");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html
similarity index 63%
copy from third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html
copy to third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html
index 0c3f6819..06c9501 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html
@@ -1,6 +1,8 @@
 <!doctype html>
 <meta charset="utf-8">
-<title>Async Cookies: cookieStore.get() sees cookieStore.set() cookie in ServiceWorker</title>
+<title>Async Cookies: cookieStore API argument handling in ServiceWorker</title>
+<link rel="help" href="https://github.com/WICG/cookie-store">
+<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script>
@@ -13,7 +15,7 @@
   if (registration)
     await registration.unregister();
   registration = await navigator.serviceWorker.register(
-      'serviceworker_cookiestore_basic.js', {scope});
+      'serviceworker_cookieStore_arguments.js', {scope});
 
   fetch_tests_from_worker(registration.installing);
 })();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.js b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.js
new file mode 100644
index 0000000..0d8039f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.js
@@ -0,0 +1,13 @@
+self.GLOBAL = {
+  isWindow: function() { return false; },
+  isWorker: function() { return true; },
+};
+importScripts("/resources/testharness.js");
+
+importScripts(
+    "cookieStore_get_delete_basic.tentative.window.js",
+    "cookieStore_get_set_basic.tentative.window.js",
+    "cookieStore_getAll_set_basic.tentative.window.js",
+    "cookieStore_has_basic.tentative.window.js");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.tentative.https.html
similarity index 65%
rename from third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html
rename to third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.tentative.https.html
index 0c3f6819..d4385d64 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.tentative.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookieStore_basic.tentative.https.html
@@ -1,6 +1,8 @@
 <!doctype html>
 <meta charset="utf-8">
-<title>Async Cookies: cookieStore.get() sees cookieStore.set() cookie in ServiceWorker</title>
+<title>Async Cookies: cookieStore basic API in ServiceWorker</title>
+<link rel="help" href="https://github.com/WICG/cookie-store">
+<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script>
@@ -13,7 +15,7 @@
   if (registration)
     await registration.unregister();
   registration = await navigator.serviceWorker.register(
-      'serviceworker_cookiestore_basic.js', {scope});
+      'serviceworker_cookieStore_basic.js', {scope});
 
   fetch_tests_from_worker(registration.installing);
 })();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.js b/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.js
deleted file mode 100644
index 13b973e1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/cookie-store/serviceworker_cookiestore_basic.js
+++ /dev/null
@@ -1,9 +0,0 @@
-self.GLOBAL = {
-  isWindow: function() { return false; },
-  isWorker: function() { return true; },
-};
-importScripts("/resources/testharness.js");
-
-importScripts("get_set.tentative.window.js");
-
-done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom-view/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/cssom-view/interfaces-expected.txt
index 1fd50f1..436bd416 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/cssom-view/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom-view/interfaces-expected.txt
@@ -1,4 +1,304 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+Found 300 tests; 226 PASS, 74 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Test driver
+PASS HTMLElement interface: attribute offsetParent
+PASS HTMLElement interface: attribute offsetTop
+PASS HTMLElement interface: attribute offsetLeft
+PASS HTMLElement interface: attribute offsetWidth
+PASS HTMLElement interface: attribute offsetHeight
+PASS HTMLElement interface: document.createElement('div') must inherit property "offsetParent" with the proper type
+PASS HTMLElement interface: document.createElement('div') must inherit property "offsetTop" with the proper type
+PASS HTMLElement interface: document.createElement('div') must inherit property "offsetLeft" with the proper type
+PASS HTMLElement interface: document.createElement('div') must inherit property "offsetWidth" with the proper type
+PASS HTMLElement interface: document.createElement('div') must inherit property "offsetHeight" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "getClientRects()" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "getBoundingClientRect()" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "scrollIntoView([object Object],[object Object])" with the proper type
+PASS Element interface: calling scrollIntoView([object Object],[object Object]) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scroll(ScrollToOptions)" with the proper type
+PASS Element interface: calling scroll(ScrollToOptions) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scroll(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scroll(unrestricted double, unrestricted double) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scrollTo(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollTo(ScrollToOptions) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scrollTo(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollTo(unrestricted double, unrestricted double) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scrollBy(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollBy(ScrollToOptions) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scrollBy(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollBy(unrestricted double, unrestricted double) on document.createElement('div') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('div') must inherit property "scrollTop" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "scrollLeft" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "scrollWidth" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "scrollHeight" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "clientTop" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "clientLeft" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "clientWidth" with the proper type
+PASS Element interface: document.createElement('div') must inherit property "clientHeight" with the proper type
+FAIL Element interface: document.createElement('div') must inherit property "getBoxQuads(BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: calling getBoxQuads(BoxQuadOptions) on document.createElement('div') with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: document.createElement('div') must inherit property "convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: calling convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) on document.createElement('div') with too few arguments must throw TypeError assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: document.createElement('div') must inherit property "convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: calling convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) on document.createElement('div') with too few arguments must throw TypeError assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: document.createElement('div') must inherit property "convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Element interface: calling convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) on document.createElement('div') with too few arguments must throw TypeError assert_inherits: property "convertPointFromNode" not found in prototype chain
+PASS HTMLImageElement interface: attribute x
+PASS HTMLImageElement interface: attribute y
+PASS HTMLImageElement interface: document.createElement('img') must inherit property "x" with the proper type
+PASS HTMLImageElement interface: document.createElement('img') must inherit property "y" with the proper type
+PASS HTMLElement interface: document.createElement('img') must inherit property "offsetParent" with the proper type
+PASS HTMLElement interface: document.createElement('img') must inherit property "offsetTop" with the proper type
+PASS HTMLElement interface: document.createElement('img') must inherit property "offsetLeft" with the proper type
+PASS HTMLElement interface: document.createElement('img') must inherit property "offsetWidth" with the proper type
+PASS HTMLElement interface: document.createElement('img') must inherit property "offsetHeight" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "getClientRects()" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "getBoundingClientRect()" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "scrollIntoView([object Object],[object Object])" with the proper type
+PASS Element interface: calling scrollIntoView([object Object],[object Object]) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scroll(ScrollToOptions)" with the proper type
+PASS Element interface: calling scroll(ScrollToOptions) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scroll(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scroll(unrestricted double, unrestricted double) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scrollTo(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollTo(ScrollToOptions) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scrollTo(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollTo(unrestricted double, unrestricted double) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scrollBy(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollBy(ScrollToOptions) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scrollBy(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollBy(unrestricted double, unrestricted double) on document.createElement('img') with too few arguments must throw TypeError
+PASS Element interface: document.createElement('img') must inherit property "scrollTop" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "scrollLeft" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "scrollWidth" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "scrollHeight" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "clientTop" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "clientLeft" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "clientWidth" with the proper type
+PASS Element interface: document.createElement('img') must inherit property "clientHeight" with the proper type
+FAIL Element interface: document.createElement('img') must inherit property "getBoxQuads(BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: calling getBoxQuads(BoxQuadOptions) on document.createElement('img') with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: document.createElement('img') must inherit property "convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: calling convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) on document.createElement('img') with too few arguments must throw TypeError assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: document.createElement('img') must inherit property "convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: calling convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) on document.createElement('img') with too few arguments must throw TypeError assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: document.createElement('img') must inherit property "convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Element interface: calling convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) on document.createElement('img') with too few arguments must throw TypeError assert_inherits: property "convertPointFromNode" not found in prototype chain
+PASS Window interface: operation matchMedia(CSSOMString)
+PASS Window interface: attribute screen
+PASS Window interface: operation moveTo(long, long)
+PASS Window interface: operation moveBy(long, long)
+PASS Window interface: operation resizeTo(long, long)
+PASS Window interface: operation resizeBy(long, long)
+PASS Window interface: attribute innerWidth
+PASS Window interface: attribute innerHeight
+PASS Window interface: attribute scrollX
+PASS Window interface: attribute pageXOffset
+PASS Window interface: attribute scrollY
+PASS Window interface: attribute pageYOffset
+FAIL Window interface: operation scroll(ScrollToOptions) assert_equals: property has wrong .length expected 0 but got 2
+FAIL Window interface: operation scroll(unrestricted double, unrestricted double) assert_equals: property has wrong .length expected 0 but got 2
+FAIL Window interface: operation scrollTo(ScrollToOptions) assert_equals: property has wrong .length expected 0 but got 2
+FAIL Window interface: operation scrollTo(unrestricted double, unrestricted double) assert_equals: property has wrong .length expected 0 but got 2
+FAIL Window interface: operation scrollBy(ScrollToOptions) assert_equals: property has wrong .length expected 0 but got 2
+FAIL Window interface: operation scrollBy(unrestricted double, unrestricted double) assert_equals: property has wrong .length expected 0 but got 2
+PASS Window interface: attribute screenX
+PASS Window interface: attribute screenY
+PASS Window interface: attribute outerWidth
+PASS Window interface: attribute outerHeight
+PASS Window interface: attribute devicePixelRatio
+PASS Window interface: window must inherit property "matchMedia(CSSOMString)" with the proper type
+PASS Window interface: calling matchMedia(CSSOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "screen" with the proper type
+PASS Window interface: window must inherit property "moveTo(long, long)" with the proper type
+PASS Window interface: calling moveTo(long, long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "moveBy(long, long)" with the proper type
+PASS Window interface: calling moveBy(long, long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "resizeTo(long, long)" with the proper type
+PASS Window interface: calling resizeTo(long, long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "resizeBy(long, long)" with the proper type
+PASS Window interface: calling resizeBy(long, long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "innerWidth" with the proper type
+PASS Window interface: window must inherit property "innerHeight" with the proper type
+PASS Window interface: window must inherit property "scrollX" with the proper type
+PASS Window interface: window must inherit property "pageXOffset" with the proper type
+PASS Window interface: window must inherit property "scrollY" with the proper type
+PASS Window interface: window must inherit property "pageYOffset" with the proper type
+PASS Window interface: window must inherit property "scroll(ScrollToOptions)" with the proper type
+PASS Window interface: calling scroll(ScrollToOptions) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "scroll(unrestricted double, unrestricted double)" with the proper type
+PASS Window interface: calling scroll(unrestricted double, unrestricted double) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "scrollTo(ScrollToOptions)" with the proper type
+PASS Window interface: calling scrollTo(ScrollToOptions) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "scrollTo(unrestricted double, unrestricted double)" with the proper type
+PASS Window interface: calling scrollTo(unrestricted double, unrestricted double) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "scrollBy(ScrollToOptions)" with the proper type
+PASS Window interface: calling scrollBy(ScrollToOptions) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "scrollBy(unrestricted double, unrestricted double)" with the proper type
+PASS Window interface: calling scrollBy(unrestricted double, unrestricted double) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "screenX" with the proper type
+PASS Window interface: window must inherit property "screenY" with the proper type
+PASS Window interface: window must inherit property "outerWidth" with the proper type
+PASS Window interface: window must inherit property "outerHeight" with the proper type
+PASS Window interface: window must inherit property "devicePixelRatio" with the proper type
+PASS WorkerGlobalScope interface: existence and properties of interface object
+PASS DedicatedWorkerGlobalScope interface: existence and properties of interface object
+PASS SharedWorkerGlobalScope interface: existence and properties of interface object
+PASS WorkerNavigator interface: existence and properties of interface object
+PASS WorkerLocation interface: existence and properties of interface object
+PASS Document interface: operation elementFromPoint(double, double)
+PASS Document interface: operation elementsFromPoint(double, double)
+FAIL Document interface: operation caretPositionFromPoint(double, double) assert_own_property: interface prototype object missing non-static operation expected property "caretPositionFromPoint" missing
+PASS Document interface: attribute scrollingElement
+FAIL Document interface: operation getBoxQuads(BoxQuadOptions) assert_own_property: interface prototype object missing non-static operation expected property "getBoxQuads" missing
+FAIL Document interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertQuadFromNode" missing
+FAIL Document interface: operation convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertRectFromNode" missing
+FAIL Document interface: operation convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertPointFromNode" missing
+PASS Document interface: document must inherit property "elementFromPoint(double, double)" with the proper type
+PASS Document interface: calling elementFromPoint(double, double) on document with too few arguments must throw TypeError
+PASS Document interface: document must inherit property "elementsFromPoint(double, double)" with the proper type
+PASS Document interface: calling elementsFromPoint(double, double) on document with too few arguments must throw TypeError
+FAIL Document interface: document must inherit property "caretPositionFromPoint(double, double)" with the proper type assert_inherits: property "caretPositionFromPoint" not found in prototype chain
+FAIL Document interface: calling caretPositionFromPoint(double, double) on document with too few arguments must throw TypeError assert_inherits: property "caretPositionFromPoint" not found in prototype chain
+PASS Document interface: document must inherit property "scrollingElement" with the proper type
+FAIL Document interface: document must inherit property "getBoxQuads(BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Document interface: calling getBoxQuads(BoxQuadOptions) on document with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Document interface: document must inherit property "convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Document interface: calling convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) on document with too few arguments must throw TypeError assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Document interface: document must inherit property "convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Document interface: calling convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) on document with too few arguments must throw TypeError assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Document interface: document must inherit property "convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Document interface: calling convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) on document with too few arguments must throw TypeError assert_inherits: property "convertPointFromNode" not found in prototype chain
+PASS Element interface: operation getClientRects()
+PASS Element interface: operation getBoundingClientRect()
+PASS Element interface: operation scrollIntoView([object Object],[object Object])
+PASS Element interface: operation scroll(ScrollToOptions)
+PASS Element interface: operation scroll(unrestricted double, unrestricted double)
+PASS Element interface: operation scrollTo(ScrollToOptions)
+PASS Element interface: operation scrollTo(unrestricted double, unrestricted double)
+PASS Element interface: operation scrollBy(ScrollToOptions)
+PASS Element interface: operation scrollBy(unrestricted double, unrestricted double)
+PASS Element interface: attribute scrollTop
+PASS Element interface: attribute scrollLeft
+PASS Element interface: attribute scrollWidth
+PASS Element interface: attribute scrollHeight
+PASS Element interface: attribute clientTop
+PASS Element interface: attribute clientLeft
+PASS Element interface: attribute clientWidth
+PASS Element interface: attribute clientHeight
+FAIL Element interface: operation getBoxQuads(BoxQuadOptions) assert_own_property: interface prototype object missing non-static operation expected property "getBoxQuads" missing
+FAIL Element interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertQuadFromNode" missing
+FAIL Element interface: operation convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertRectFromNode" missing
+FAIL Element interface: operation convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertPointFromNode" missing
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "getClientRects()" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "getBoundingClientRect()" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollIntoView([object Object],[object Object])" with the proper type
+PASS Element interface: calling scrollIntoView([object Object],[object Object]) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scroll(ScrollToOptions)" with the proper type
+PASS Element interface: calling scroll(ScrollToOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scroll(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scroll(unrestricted double, unrestricted double) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollTo(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollTo(ScrollToOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollTo(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollTo(unrestricted double, unrestricted double) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollBy(ScrollToOptions)" with the proper type
+PASS Element interface: calling scrollBy(ScrollToOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollBy(unrestricted double, unrestricted double)" with the proper type
+PASS Element interface: calling scrollBy(unrestricted double, unrestricted double) on document.createElementNS('x', 'y') with too few arguments must throw TypeError
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollTop" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollLeft" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollWidth" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "scrollHeight" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "clientTop" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "clientLeft" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "clientWidth" with the proper type
+PASS Element interface: document.createElementNS('x', 'y') must inherit property "clientHeight" with the proper type
+FAIL Element interface: document.createElementNS('x', 'y') must inherit property "getBoxQuads(BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: calling getBoxQuads(BoxQuadOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Element interface: document.createElementNS('x', 'y') must inherit property "convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: calling convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Element interface: document.createElementNS('x', 'y') must inherit property "convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: calling convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Element interface: document.createElementNS('x', 'y') must inherit property "convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Element interface: calling convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) on document.createElementNS('x', 'y') with too few arguments must throw TypeError assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Text interface: operation getBoxQuads(BoxQuadOptions) assert_own_property: interface prototype object missing non-static operation expected property "getBoxQuads" missing
+FAIL Text interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertQuadFromNode" missing
+FAIL Text interface: operation convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertRectFromNode" missing
+FAIL Text interface: operation convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertPointFromNode" missing
+FAIL Text interface: document.createTextNode('x') must inherit property "getBoxQuads(BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Text interface: calling getBoxQuads(BoxQuadOptions) on document.createTextNode('x') with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain
+FAIL Text interface: document.createTextNode('x') must inherit property "convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Text interface: calling convertQuadFromNode(DOMQuadInit, GeometryNode, ConvertCoordinateOptions) on document.createTextNode('x') with too few arguments must throw TypeError assert_inherits: property "convertQuadFromNode" not found in prototype chain
+FAIL Text interface: document.createTextNode('x') must inherit property "convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Text interface: calling convertRectFromNode(DOMRectReadOnly, GeometryNode, ConvertCoordinateOptions) on document.createTextNode('x') with too few arguments must throw TypeError assert_inherits: property "convertRectFromNode" not found in prototype chain
+FAIL Text interface: document.createTextNode('x') must inherit property "convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions)" with the proper type assert_inherits: property "convertPointFromNode" not found in prototype chain
+FAIL Text interface: calling convertPointFromNode(DOMPointInit, GeometryNode, ConvertCoordinateOptions) on document.createTextNode('x') with too few arguments must throw TypeError assert_inherits: property "convertPointFromNode" not found in prototype chain
+PASS Range interface: operation getClientRects()
+PASS Range interface: operation getBoundingClientRect()
+PASS Range interface: new Range() must inherit property "getClientRects()" with the proper type
+PASS Range interface: new Range() must inherit property "getBoundingClientRect()" with the proper type
+PASS MediaQueryList interface: existence and properties of interface object
+PASS MediaQueryList interface object length
+PASS MediaQueryList interface object name
+PASS MediaQueryList interface: existence and properties of interface prototype object
+PASS MediaQueryList interface: existence and properties of interface prototype object's "constructor" property
+PASS MediaQueryList interface: attribute media
+PASS MediaQueryList interface: attribute matches
+PASS MediaQueryList interface: operation addListener(EventListener)
+PASS MediaQueryList interface: operation removeListener(EventListener)
+PASS MediaQueryList interface: attribute onchange
+PASS MediaQueryList must be primary interface of matchMedia('all')
+PASS Stringification of matchMedia('all')
+PASS MediaQueryList interface: matchMedia('all') must inherit property "media" with the proper type
+PASS MediaQueryList interface: matchMedia('all') must inherit property "matches" with the proper type
+PASS MediaQueryList interface: matchMedia('all') must inherit property "addListener(EventListener)" with the proper type
+PASS MediaQueryList interface: calling addListener(EventListener) on matchMedia('all') with too few arguments must throw TypeError
+PASS MediaQueryList interface: matchMedia('all') must inherit property "removeListener(EventListener)" with the proper type
+PASS MediaQueryList interface: calling removeListener(EventListener) on matchMedia('all') with too few arguments must throw TypeError
+PASS MediaQueryList interface: matchMedia('all') must inherit property "onchange" with the proper type
+PASS MediaQueryListEvent interface: existence and properties of interface object
+PASS MediaQueryListEvent interface object length
+PASS MediaQueryListEvent interface object name
+PASS MediaQueryListEvent interface: existence and properties of interface prototype object
+PASS MediaQueryListEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS MediaQueryListEvent interface: attribute media
+PASS MediaQueryListEvent interface: attribute matches
+PASS MediaQueryListEvent must be primary interface of new MediaQueryListEvent('change')
+PASS Stringification of new MediaQueryListEvent('change')
+PASS MediaQueryListEvent interface: new MediaQueryListEvent('change') must inherit property "media" with the proper type
+PASS MediaQueryListEvent interface: new MediaQueryListEvent('change') must inherit property "matches" with the proper type
+PASS Screen interface: existence and properties of interface object
+PASS Screen interface object length
+PASS Screen interface object name
+PASS Screen interface: existence and properties of interface prototype object
+PASS Screen interface: existence and properties of interface prototype object's "constructor" property
+PASS Screen interface: attribute availWidth
+PASS Screen interface: attribute availHeight
+PASS Screen interface: attribute width
+PASS Screen interface: attribute height
+PASS Screen interface: attribute colorDepth
+PASS Screen interface: attribute pixelDepth
+PASS Screen must be primary interface of screen
+PASS Stringification of screen
+PASS Screen interface: screen must inherit property "availWidth" with the proper type
+PASS Screen interface: screen must inherit property "availHeight" with the proper type
+PASS Screen interface: screen must inherit property "width" with the proper type
+PASS Screen interface: screen must inherit property "height" with the proper type
+PASS Screen interface: screen must inherit property "colorDepth" with the proper type
+PASS Screen interface: screen must inherit property "pixelDepth" with the proper type
+FAIL CaretPosition interface: existence and properties of interface object assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface object length assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface object name assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface: attribute offsetNode assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface: attribute offset assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition interface: operation getClientRect() assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing
+FAIL CaretPosition must be primary interface of document.caretPositionFromPoint(5, 5) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function"
+FAIL Stringification of document.caretPositionFromPoint(5, 5) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function"
+FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offsetNode" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function"
+FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offset" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function"
+FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "getClientRect()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function"
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/interfaces-expected.txt
index 1fd50f1..7097b80 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/interfaces-expected.txt
@@ -1,4 +1,403 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+Found 399 tests; 313 PASS, 86 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Test driver
+PASS HTMLElement interface: attribute style
+PASS HTMLElement interface: style_element must inherit property "style" with the proper type
+PASS HTMLElement interface: document.createElement('unknownelement') must inherit property "style" with the proper type
+PASS HTMLLinkElement interface: attribute sheet
+PASS HTMLStyleElement interface: attribute sheet
+PASS Window interface: operation getComputedStyle(Element, CSSOMString)
+PASS Window interface: window must inherit property "getComputedStyle(Element, CSSOMString)" with the proper type
+PASS Window interface: calling getComputedStyle(Element, CSSOMString) on window with too few arguments must throw TypeError
+PASS WorkerGlobalScope interface: existence and properties of interface object
+PASS DedicatedWorkerGlobalScope interface: existence and properties of interface object
+PASS SharedWorkerGlobalScope interface: existence and properties of interface object
+PASS WorkerNavigator interface: existence and properties of interface object
+PASS WorkerLocation interface: existence and properties of interface object
+PASS Document interface: attribute styleSheets
+PASS Document interface: document must inherit property "styleSheets" with the proper type
+PASS Document interface: new Document() must inherit property "styleSheets" with the proper type
+PASS ProcessingInstruction interface: attribute sheet
+PASS ProcessingInstruction interface: xmlss_pi must inherit property "sheet" with the proper type
+PASS SVGElement interface: attribute style
+PASS SVGElement interface: svg_element must inherit property "style" with the proper type
+PASS MediaList interface: existence and properties of interface object
+PASS MediaList interface object length
+PASS MediaList interface object name
+FAIL MediaList interface: existence and properties of interface prototype object assert_equals: prototype of MediaList.prototype is not Array.prototype expected [] but got object "[object Object]"
+PASS MediaList interface: existence and properties of interface prototype object's "constructor" property
+PASS MediaList interface: attribute mediaText
+FAIL MediaList interface: stringifier assert_own_property: interface prototype object missing non-static operation expected property "toString" missing
+PASS MediaList interface: attribute length
+PASS MediaList interface: operation item(unsigned long)
+PASS MediaList interface: operation appendMedium(CSSOMString)
+PASS MediaList interface: operation deleteMedium(CSSOMString)
+PASS MediaList must be primary interface of style_element.sheet.media
+PASS Stringification of style_element.sheet.media
+PASS MediaList interface: style_element.sheet.media must inherit property "mediaText" with the proper type
+PASS MediaList interface: style_element.sheet.media must inherit property "length" with the proper type
+PASS MediaList interface: style_element.sheet.media must inherit property "item(unsigned long)" with the proper type
+PASS MediaList interface: calling item(unsigned long) on style_element.sheet.media with too few arguments must throw TypeError
+PASS MediaList interface: style_element.sheet.media must inherit property "appendMedium(CSSOMString)" with the proper type
+PASS MediaList interface: calling appendMedium(CSSOMString) on style_element.sheet.media with too few arguments must throw TypeError
+PASS MediaList interface: style_element.sheet.media must inherit property "deleteMedium(CSSOMString)" with the proper type
+PASS MediaList interface: calling deleteMedium(CSSOMString) on style_element.sheet.media with too few arguments must throw TypeError
+PASS StyleSheet interface: existence and properties of interface object
+PASS StyleSheet interface object length
+PASS StyleSheet interface object name
+PASS StyleSheet interface: existence and properties of interface prototype object
+PASS StyleSheet interface: existence and properties of interface prototype object's "constructor" property
+PASS StyleSheet interface: attribute type
+PASS StyleSheet interface: attribute href
+PASS StyleSheet interface: attribute ownerNode
+PASS StyleSheet interface: attribute parentStyleSheet
+PASS StyleSheet interface: attribute title
+FAIL StyleSheet interface: attribute media assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+PASS StyleSheet interface: attribute disabled
+PASS CSSStyleSheet interface: existence and properties of interface object
+PASS CSSStyleSheet interface object length
+PASS CSSStyleSheet interface object name
+PASS CSSStyleSheet interface: existence and properties of interface prototype object
+PASS CSSStyleSheet interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSStyleSheet interface: attribute ownerRule
+PASS CSSStyleSheet interface: attribute cssRules
+PASS CSSStyleSheet interface: operation insertRule(CSSOMString, unsigned long)
+PASS CSSStyleSheet interface: operation deleteRule(unsigned long)
+PASS CSSStyleSheet must be primary interface of style_element.sheet
+PASS Stringification of style_element.sheet
+PASS CSSStyleSheet interface: style_element.sheet must inherit property "ownerRule" with the proper type
+PASS CSSStyleSheet interface: style_element.sheet must inherit property "cssRules" with the proper type
+PASS CSSStyleSheet interface: style_element.sheet must inherit property "insertRule(CSSOMString, unsigned long)" with the proper type
+PASS CSSStyleSheet interface: calling insertRule(CSSOMString, unsigned long) on style_element.sheet with too few arguments must throw TypeError
+PASS CSSStyleSheet interface: style_element.sheet must inherit property "deleteRule(unsigned long)" with the proper type
+PASS CSSStyleSheet interface: calling deleteRule(unsigned long) on style_element.sheet with too few arguments must throw TypeError
+PASS StyleSheet interface: style_element.sheet must inherit property "type" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "href" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "ownerNode" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "parentStyleSheet" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "title" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "media" with the proper type
+PASS StyleSheet interface: style_element.sheet must inherit property "disabled" with the proper type
+PASS StyleSheetList interface: existence and properties of interface object
+PASS StyleSheetList interface object length
+PASS StyleSheetList interface object name
+FAIL StyleSheetList interface: existence and properties of interface prototype object assert_equals: prototype of StyleSheetList.prototype is not Array.prototype expected [] but got object "[object Object]"
+PASS StyleSheetList interface: existence and properties of interface prototype object's "constructor" property
+PASS StyleSheetList interface: operation item(unsigned long)
+PASS StyleSheetList interface: attribute length
+PASS StyleSheetList must be primary interface of document.styleSheets
+PASS Stringification of document.styleSheets
+PASS StyleSheetList interface: document.styleSheets must inherit property "item(unsigned long)" with the proper type
+PASS StyleSheetList interface: calling item(unsigned long) on document.styleSheets with too few arguments must throw TypeError
+PASS StyleSheetList interface: document.styleSheets must inherit property "length" with the proper type
+PASS CSSRuleList interface: existence and properties of interface object
+PASS CSSRuleList interface object length
+PASS CSSRuleList interface object name
+FAIL CSSRuleList interface: existence and properties of interface prototype object assert_equals: prototype of CSSRuleList.prototype is not Array.prototype expected [] but got object "[object Object]"
+PASS CSSRuleList interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSRuleList interface: operation item(unsigned long)
+PASS CSSRuleList interface: attribute length
+PASS CSSRuleList must be primary interface of style_element.sheet.cssRules
+PASS Stringification of style_element.sheet.cssRules
+PASS CSSRuleList interface: style_element.sheet.cssRules must inherit property "item(unsigned long)" with the proper type
+PASS CSSRuleList interface: calling item(unsigned long) on style_element.sheet.cssRules with too few arguments must throw TypeError
+PASS CSSRuleList interface: style_element.sheet.cssRules must inherit property "length" with the proper type
+PASS CSSRule interface: existence and properties of interface object
+PASS CSSRule interface object length
+PASS CSSRule interface object name
+PASS CSSRule interface: existence and properties of interface prototype object
+PASS CSSRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSRule interface: constant STYLE_RULE on interface object
+PASS CSSRule interface: constant STYLE_RULE on interface prototype object
+PASS CSSRule interface: constant CHARSET_RULE on interface object
+PASS CSSRule interface: constant CHARSET_RULE on interface prototype object
+PASS CSSRule interface: constant IMPORT_RULE on interface object
+PASS CSSRule interface: constant IMPORT_RULE on interface prototype object
+PASS CSSRule interface: constant MEDIA_RULE on interface object
+PASS CSSRule interface: constant MEDIA_RULE on interface prototype object
+PASS CSSRule interface: constant FONT_FACE_RULE on interface object
+PASS CSSRule interface: constant FONT_FACE_RULE on interface prototype object
+PASS CSSRule interface: constant PAGE_RULE on interface object
+PASS CSSRule interface: constant PAGE_RULE on interface prototype object
+FAIL CSSRule interface: constant MARGIN_RULE on interface object assert_own_property: expected property "MARGIN_RULE" missing
+FAIL CSSRule interface: constant MARGIN_RULE on interface prototype object assert_own_property: expected property "MARGIN_RULE" missing
+PASS CSSRule interface: constant NAMESPACE_RULE on interface object
+PASS CSSRule interface: constant NAMESPACE_RULE on interface prototype object
+PASS CSSRule interface: attribute type
+PASS CSSRule interface: attribute cssText
+PASS CSSRule interface: attribute parentRule
+PASS CSSRule interface: attribute parentStyleSheet
+PASS CSSStyleRule interface: existence and properties of interface object
+PASS CSSStyleRule interface object length
+PASS CSSStyleRule interface object name
+PASS CSSStyleRule interface: existence and properties of interface prototype object
+PASS CSSStyleRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSStyleRule interface: attribute selectorText
+PASS CSSStyleRule interface: attribute style
+PASS CSSStyleRule must be primary interface of style_element.sheet.cssRules[4]
+PASS Stringification of style_element.sheet.cssRules[4]
+PASS CSSStyleRule interface: style_element.sheet.cssRules[4] must inherit property "selectorText" with the proper type
+PASS CSSStyleRule interface: style_element.sheet.cssRules[4] must inherit property "style" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "STYLE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "CHARSET_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "IMPORT_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "MEDIA_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "FONT_FACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "PAGE_RULE" with the proper type
+FAIL CSSRule interface: style_element.sheet.cssRules[4] must inherit property "MARGIN_RULE" with the proper type assert_inherits: property "MARGIN_RULE" not found in prototype chain
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "NAMESPACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "type" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "cssText" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "parentRule" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[4] must inherit property "parentStyleSheet" with the proper type
+PASS CSSImportRule interface: existence and properties of interface object
+PASS CSSImportRule interface object length
+PASS CSSImportRule interface object name
+PASS CSSImportRule interface: existence and properties of interface prototype object
+PASS CSSImportRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSImportRule interface: attribute href
+FAIL CSSImportRule interface: attribute media assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+PASS CSSImportRule interface: attribute styleSheet
+PASS CSSImportRule must be primary interface of style_element.sheet.cssRules[0]
+PASS Stringification of style_element.sheet.cssRules[0]
+PASS CSSImportRule interface: style_element.sheet.cssRules[0] must inherit property "href" with the proper type
+PASS CSSImportRule interface: style_element.sheet.cssRules[0] must inherit property "media" with the proper type
+PASS CSSImportRule interface: style_element.sheet.cssRules[0] must inherit property "styleSheet" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "STYLE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "CHARSET_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "IMPORT_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "MEDIA_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "FONT_FACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "PAGE_RULE" with the proper type
+FAIL CSSRule interface: style_element.sheet.cssRules[0] must inherit property "MARGIN_RULE" with the proper type assert_inherits: property "MARGIN_RULE" not found in prototype chain
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "NAMESPACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "type" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "cssText" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "parentRule" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[0] must inherit property "parentStyleSheet" with the proper type
+PASS CSSGroupingRule interface: existence and properties of interface object
+PASS CSSGroupingRule interface object length
+PASS CSSGroupingRule interface object name
+PASS CSSGroupingRule interface: existence and properties of interface prototype object
+PASS CSSGroupingRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSGroupingRule interface: attribute cssRules
+FAIL CSSGroupingRule interface: operation insertRule(CSSOMString, unsigned long) assert_equals: property has wrong .length expected 1 but got 2
+PASS CSSGroupingRule interface: operation deleteRule(unsigned long)
+FAIL CSSPageRule interface: existence and properties of interface object assert_equals: prototype of CSSPageRule is not CSSGroupingRule expected function "function CSSGroupingRule() { [native code] }" but got function "function CSSRule() { [native code] }"
+PASS CSSPageRule interface object length
+PASS CSSPageRule interface object name
+FAIL CSSPageRule interface: existence and properties of interface prototype object assert_equals: prototype of CSSPageRule.prototype is not CSSGroupingRule.prototype expected object "[object CSSGroupingRule]" but got object "[object CSSRule]"
+PASS CSSPageRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSPageRule interface: attribute selectorText
+FAIL CSSPageRule interface: attribute style assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+PASS CSSPageRule must be primary interface of style_element.sheet.cssRules[2]
+PASS Stringification of style_element.sheet.cssRules[2]
+PASS CSSPageRule interface: style_element.sheet.cssRules[2] must inherit property "selectorText" with the proper type
+PASS CSSPageRule interface: style_element.sheet.cssRules[2] must inherit property "style" with the proper type
+FAIL CSSGroupingRule interface: style_element.sheet.cssRules[2] must inherit property "cssRules" with the proper type assert_inherits: property "cssRules" not found in prototype chain
+FAIL CSSGroupingRule interface: style_element.sheet.cssRules[2] must inherit property "insertRule(CSSOMString, unsigned long)" with the proper type assert_inherits: property "insertRule" not found in prototype chain
+FAIL CSSGroupingRule interface: calling insertRule(CSSOMString, unsigned long) on style_element.sheet.cssRules[2] with too few arguments must throw TypeError assert_inherits: property "insertRule" not found in prototype chain
+FAIL CSSGroupingRule interface: style_element.sheet.cssRules[2] must inherit property "deleteRule(unsigned long)" with the proper type assert_inherits: property "deleteRule" not found in prototype chain
+FAIL CSSGroupingRule interface: calling deleteRule(unsigned long) on style_element.sheet.cssRules[2] with too few arguments must throw TypeError assert_inherits: property "deleteRule" not found in prototype chain
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "STYLE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "CHARSET_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "IMPORT_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "MEDIA_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "FONT_FACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "PAGE_RULE" with the proper type
+FAIL CSSRule interface: style_element.sheet.cssRules[2] must inherit property "MARGIN_RULE" with the proper type assert_inherits: property "MARGIN_RULE" not found in prototype chain
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "NAMESPACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "type" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "cssText" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "parentRule" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[2] must inherit property "parentStyleSheet" with the proper type
+FAIL CSSMarginRule interface: existence and properties of interface object assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface object length assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface object name assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface: attribute name assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule interface: attribute style assert_own_property: self does not have own property "CSSMarginRule" expected property "CSSMarginRule" missing
+FAIL CSSMarginRule must be primary interface of style_element.sheet.cssRules[2].cssRules[0] assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL Stringification of style_element.sheet.cssRules[2].cssRules[0] assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSMarginRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "name" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSMarginRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "style" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "STYLE_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "CHARSET_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "IMPORT_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "MEDIA_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "FONT_FACE_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "PAGE_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "MARGIN_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "NAMESPACE_RULE" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "type" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "cssText" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "parentRule" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSRule interface: style_element.sheet.cssRules[2].cssRules[0] must inherit property "parentStyleSheet" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+PASS CSSNamespaceRule interface: existence and properties of interface object
+PASS CSSNamespaceRule interface object length
+PASS CSSNamespaceRule interface object name
+PASS CSSNamespaceRule interface: existence and properties of interface prototype object
+PASS CSSNamespaceRule interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSNamespaceRule interface: attribute namespaceURI
+PASS CSSNamespaceRule interface: attribute prefix
+PASS CSSNamespaceRule must be primary interface of style_element.sheet.cssRules[1]
+PASS Stringification of style_element.sheet.cssRules[1]
+PASS CSSNamespaceRule interface: style_element.sheet.cssRules[1] must inherit property "namespaceURI" with the proper type
+PASS CSSNamespaceRule interface: style_element.sheet.cssRules[1] must inherit property "prefix" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "STYLE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "CHARSET_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "IMPORT_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "MEDIA_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "FONT_FACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "PAGE_RULE" with the proper type
+FAIL CSSRule interface: style_element.sheet.cssRules[1] must inherit property "MARGIN_RULE" with the proper type assert_inherits: property "MARGIN_RULE" not found in prototype chain
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "NAMESPACE_RULE" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "type" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "cssText" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "parentRule" with the proper type
+PASS CSSRule interface: style_element.sheet.cssRules[1] must inherit property "parentStyleSheet" with the proper type
+PASS CSSStyleDeclaration interface: existence and properties of interface object
+PASS CSSStyleDeclaration interface object length
+PASS CSSStyleDeclaration interface object name
+PASS CSSStyleDeclaration interface: existence and properties of interface prototype object
+PASS CSSStyleDeclaration interface: existence and properties of interface prototype object's "constructor" property
+PASS CSSStyleDeclaration interface: attribute cssText
+PASS CSSStyleDeclaration interface: attribute length
+PASS CSSStyleDeclaration interface: operation item(unsigned long)
+PASS CSSStyleDeclaration interface: operation getPropertyValue(CSSOMString)
+PASS CSSStyleDeclaration interface: operation getPropertyPriority(CSSOMString)
+PASS CSSStyleDeclaration interface: operation setProperty(CSSOMString, CSSOMString, CSSOMString)
+FAIL CSSStyleDeclaration interface: operation setPropertyValue(CSSOMString, CSSOMString) assert_own_property: interface prototype object missing non-static operation expected property "setPropertyValue" missing
+FAIL CSSStyleDeclaration interface: operation setPropertyPriority(CSSOMString, CSSOMString) assert_own_property: interface prototype object missing non-static operation expected property "setPropertyPriority" missing
+PASS CSSStyleDeclaration interface: operation removeProperty(CSSOMString)
+PASS CSSStyleDeclaration interface: attribute parentRule
+PASS CSSStyleDeclaration interface: attribute cssFloat
+PASS CSSStyleDeclaration must be primary interface of style_element.sheet.cssRules[4].style
+PASS Stringification of style_element.sheet.cssRules[4].style
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "cssText" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "length" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "item(unsigned long)" with the proper type
+PASS CSSStyleDeclaration interface: calling item(unsigned long) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "getPropertyValue(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "getPropertyPriority(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyPriority" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError assert_inherits: property "setPropertyPriority" not found in prototype chain
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "removeProperty(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on style_element.sheet.cssRules[4].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "parentRule" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[4].style must inherit property "cssFloat" with the proper type
+PASS CSSStyleDeclaration must be primary interface of style_element.sheet.cssRules[2].style
+PASS Stringification of style_element.sheet.cssRules[2].style
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "cssText" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "length" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "item(unsigned long)" with the proper type
+PASS CSSStyleDeclaration interface: calling item(unsigned long) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "getPropertyValue(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "getPropertyPriority(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyPriority" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError assert_inherits: property "setPropertyPriority" not found in prototype chain
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "removeProperty(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on style_element.sheet.cssRules[2].style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "parentRule" with the proper type
+PASS CSSStyleDeclaration interface: style_element.sheet.cssRules[2].style must inherit property "cssFloat" with the proper type
+FAIL CSSStyleDeclaration must be primary interface of style_element.sheet.cssRules[2].cssRules[0].style assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL Stringification of style_element.sheet.cssRules[2].cssRules[0].style assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "cssText" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "length" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "item(unsigned long)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling item(unsigned long) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "getPropertyValue(CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "getPropertyPriority(CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "removeProperty(CSSOMString)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on style_element.sheet.cssRules[2].cssRules[0].style with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "parentRule" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+FAIL CSSStyleDeclaration interface: style_element.sheet.cssRules[2].cssRules[0].style must inherit property "cssFloat" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: Cannot read property '0' of undefined"
+PASS CSSStyleDeclaration must be primary interface of style_element.style
+PASS Stringification of style_element.style
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "cssText" with the proper type
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "length" with the proper type
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "item(unsigned long)" with the proper type
+PASS CSSStyleDeclaration interface: calling item(unsigned long) on style_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "getPropertyValue(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on style_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "getPropertyPriority(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on style_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on style_element.style with too few arguments must throw TypeError
+FAIL CSSStyleDeclaration interface: style_element.style must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on style_element.style with too few arguments must throw TypeError assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: style_element.style must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyPriority" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on style_element.style with too few arguments must throw TypeError assert_inherits: property "setPropertyPriority" not found in prototype chain
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "removeProperty(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on style_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "parentRule" with the proper type
+PASS CSSStyleDeclaration interface: style_element.style must inherit property "cssFloat" with the proper type
+PASS CSSStyleDeclaration must be primary interface of svg_element.style
+PASS Stringification of svg_element.style
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "cssText" with the proper type
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "length" with the proper type
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "item(unsigned long)" with the proper type
+PASS CSSStyleDeclaration interface: calling item(unsigned long) on svg_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "getPropertyValue(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on svg_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "getPropertyPriority(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on svg_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on svg_element.style with too few arguments must throw TypeError
+FAIL CSSStyleDeclaration interface: svg_element.style must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on svg_element.style with too few arguments must throw TypeError assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: svg_element.style must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyPriority" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on svg_element.style with too few arguments must throw TypeError assert_inherits: property "setPropertyPriority" not found in prototype chain
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "removeProperty(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on svg_element.style with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "parentRule" with the proper type
+PASS CSSStyleDeclaration interface: svg_element.style must inherit property "cssFloat" with the proper type
+PASS CSSStyleDeclaration must be primary interface of getComputedStyle(svg_element)
+PASS Stringification of getComputedStyle(svg_element)
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "cssText" with the proper type
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "length" with the proper type
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "item(unsigned long)" with the proper type
+PASS CSSStyleDeclaration interface: calling item(unsigned long) on getComputedStyle(svg_element) with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "getPropertyValue(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyValue(CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "getPropertyPriority(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling getPropertyPriority(CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "setProperty(CSSOMString, CSSOMString, CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling setProperty(CSSOMString, CSSOMString, CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError
+FAIL CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "setPropertyValue(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyValue(CSSOMString, CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError assert_inherits: property "setPropertyValue" not found in prototype chain
+FAIL CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "setPropertyPriority(CSSOMString, CSSOMString)" with the proper type assert_inherits: property "setPropertyPriority" not found in prototype chain
+FAIL CSSStyleDeclaration interface: calling setPropertyPriority(CSSOMString, CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError assert_inherits: property "setPropertyPriority" not found in prototype chain
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "removeProperty(CSSOMString)" with the proper type
+PASS CSSStyleDeclaration interface: calling removeProperty(CSSOMString) on getComputedStyle(svg_element) with too few arguments must throw TypeError
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "parentRule" with the proper type
+PASS CSSStyleDeclaration interface: getComputedStyle(svg_element) must inherit property "cssFloat" with the proper type
+PASS CSS interface: existence and properties of interface object
+PASS CSS interface object length
+PASS CSS interface object name
+PASS CSS interface: existence and properties of interface prototype object
+PASS CSS interface: existence and properties of interface prototype object's "constructor" property
+PASS CSS interface: operation escape(CSSOMString)
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt
index 1fd50f1..4296044 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/dom/interfaces-expected.txt
@@ -1,4 +1,1650 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+Found 1646 tests; 1618 PASS, 28 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Test driver
+PASS Event interface: existence and properties of interface object
+PASS Event interface object length
+PASS Event interface object name
+PASS Event interface: existence and properties of interface prototype object
+PASS Event interface: existence and properties of interface prototype object's "constructor" property
+PASS Event interface: attribute type
+PASS Event interface: attribute target
+PASS Event interface: attribute currentTarget
+PASS Event interface: constant NONE on interface object
+PASS Event interface: constant NONE on interface prototype object
+PASS Event interface: constant CAPTURING_PHASE on interface object
+PASS Event interface: constant CAPTURING_PHASE on interface prototype object
+PASS Event interface: constant AT_TARGET on interface object
+PASS Event interface: constant AT_TARGET on interface prototype object
+PASS Event interface: constant BUBBLING_PHASE on interface object
+PASS Event interface: constant BUBBLING_PHASE on interface prototype object
+PASS Event interface: attribute eventPhase
+PASS Event interface: operation stopPropagation()
+PASS Event interface: operation stopImmediatePropagation()
+PASS Event interface: attribute bubbles
+PASS Event interface: attribute cancelable
+PASS Event interface: operation preventDefault()
+PASS Event interface: attribute defaultPrevented
+PASS Event interface: attribute timeStamp
+PASS Event interface: operation initEvent(DOMString, boolean, boolean)
+PASS Event must be primary interface of document.createEvent("Event")
+PASS Stringification of document.createEvent("Event")
+PASS Event interface: document.createEvent("Event") must inherit property "type" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "target" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "currentTarget" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "NONE" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "CAPTURING_PHASE" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "AT_TARGET" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "BUBBLING_PHASE" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "eventPhase" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "stopPropagation()" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "stopImmediatePropagation()" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "bubbles" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "cancelable" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "preventDefault()" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "defaultPrevented" with the proper type
+PASS Event interface: document.createEvent("Event") must have own property "isTrusted"
+PASS Event interface: document.createEvent("Event") must inherit property "timeStamp" with the proper type
+PASS Event interface: document.createEvent("Event") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type
+PASS Event interface: calling initEvent(DOMString, boolean, boolean) on document.createEvent("Event") with too few arguments must throw TypeError
+PASS Event must be primary interface of new Event("foo")
+PASS Stringification of new Event("foo")
+PASS Event interface: new Event("foo") must inherit property "type" with the proper type
+PASS Event interface: new Event("foo") must inherit property "target" with the proper type
+PASS Event interface: new Event("foo") must inherit property "currentTarget" with the proper type
+PASS Event interface: new Event("foo") must inherit property "NONE" with the proper type
+PASS Event interface: new Event("foo") must inherit property "CAPTURING_PHASE" with the proper type
+PASS Event interface: new Event("foo") must inherit property "AT_TARGET" with the proper type
+PASS Event interface: new Event("foo") must inherit property "BUBBLING_PHASE" with the proper type
+PASS Event interface: new Event("foo") must inherit property "eventPhase" with the proper type
+PASS Event interface: new Event("foo") must inherit property "stopPropagation()" with the proper type
+PASS Event interface: new Event("foo") must inherit property "stopImmediatePropagation()" with the proper type
+PASS Event interface: new Event("foo") must inherit property "bubbles" with the proper type
+PASS Event interface: new Event("foo") must inherit property "cancelable" with the proper type
+PASS Event interface: new Event("foo") must inherit property "preventDefault()" with the proper type
+PASS Event interface: new Event("foo") must inherit property "defaultPrevented" with the proper type
+PASS Event interface: new Event("foo") must have own property "isTrusted"
+PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type
+PASS Event interface: new Event("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type
+PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new Event("foo") with too few arguments must throw TypeError
+PASS CustomEvent interface: existence and properties of interface object
+PASS CustomEvent interface object length
+PASS CustomEvent interface object name
+PASS CustomEvent interface: existence and properties of interface prototype object
+PASS CustomEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS CustomEvent interface: attribute detail
+PASS CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any)
+PASS CustomEvent must be primary interface of new CustomEvent("foo")
+PASS Stringification of new CustomEvent("foo")
+PASS CustomEvent interface: new CustomEvent("foo") must inherit property "detail" with the proper type
+PASS CustomEvent interface: new CustomEvent("foo") must inherit property "initCustomEvent(DOMString, boolean, boolean, any)" with the proper type
+PASS CustomEvent interface: calling initCustomEvent(DOMString, boolean, boolean, any) on new CustomEvent("foo") with too few arguments must throw TypeError
+PASS Event interface: new CustomEvent("foo") must inherit property "type" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "target" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "currentTarget" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "NONE" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "CAPTURING_PHASE" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "AT_TARGET" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "BUBBLING_PHASE" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "eventPhase" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "stopPropagation()" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "stopImmediatePropagation()" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "bubbles" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "cancelable" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "preventDefault()" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "defaultPrevented" with the proper type
+PASS Event interface: new CustomEvent("foo") must have own property "isTrusted"
+PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type
+PASS Event interface: new CustomEvent("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type
+PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new CustomEvent("foo") with too few arguments must throw TypeError
+PASS EventTarget interface: existence and properties of interface object
+PASS EventTarget interface object length
+PASS EventTarget interface object name
+PASS EventTarget interface: existence and properties of interface prototype object
+PASS EventTarget interface: existence and properties of interface prototype object's "constructor" property
+PASS EventTarget interface: operation addEventListener(DOMString, EventListener, [object Object],[object Object])
+PASS EventTarget interface: operation removeEventListener(DOMString, EventListener, [object Object],[object Object])
+PASS EventTarget interface: operation dispatchEvent(Event)
+PASS EventTarget must be primary interface of new EventTarget()
+PASS Stringification of new EventTarget()
+PASS EventTarget interface: new EventTarget() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError
+PASS EventTarget interface: new EventTarget() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError
+PASS EventTarget interface: new EventTarget() must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on new EventTarget() with too few arguments must throw TypeError
+PASS EventListener interface: existence and properties of interface object
+PASS EventListener interface: existence and properties of interface prototype object
+PASS EventListener interface: existence and properties of interface prototype object's "constructor" property
+PASS EventListener interface: operation handleEvent(Event)
+FAIL AbortController interface: existence and properties of interface object assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface object length assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface object name assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: attribute signal assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: operation abort() assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController must be primary interface of new AbortController() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL Stringification of new AbortController() assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL AbortController interface: new AbortController() must inherit property "signal" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL AbortController interface: new AbortController() must inherit property "abort()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL AbortSignal interface: existence and properties of interface object assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface object length assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface object name assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: attribute aborted assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: attribute onabort assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal must be primary interface of new AbortController().signal assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL Stringification of new AbortController().signal assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL AbortSignal interface: new AbortController().signal must inherit property "aborted" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: new AbortController().signal must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: new AbortController().signal must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: new AbortController().signal must inherit property "dispatchEvent(Event)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+FAIL EventTarget interface: calling dispatchEvent(Event) on new AbortController().signal with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: AbortController is not defined"
+PASS NodeList interface: existence and properties of interface object
+PASS NodeList interface object length
+PASS NodeList interface object name
+PASS NodeList interface: existence and properties of interface prototype object
+PASS NodeList interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeList interface: operation item(unsigned long)
+PASS NodeList interface: attribute length
+PASS NodeList must be primary interface of document.querySelectorAll("script")
+PASS Stringification of document.querySelectorAll("script")
+PASS NodeList interface: document.querySelectorAll("script") must inherit property "item(unsigned long)" with the proper type
+PASS NodeList interface: calling item(unsigned long) on document.querySelectorAll("script") with too few arguments must throw TypeError
+PASS NodeList interface: document.querySelectorAll("script") must inherit property "length" with the proper type
+PASS HTMLCollection interface: existence and properties of interface object
+PASS HTMLCollection interface object length
+PASS HTMLCollection interface object name
+PASS HTMLCollection interface: existence and properties of interface prototype object
+PASS HTMLCollection interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLCollection interface: attribute length
+PASS HTMLCollection interface: operation item(unsigned long)
+PASS HTMLCollection interface: operation namedItem(DOMString)
+PASS HTMLCollection must be primary interface of document.body.children
+PASS Stringification of document.body.children
+PASS HTMLCollection interface: document.body.children must inherit property "length" with the proper type
+PASS HTMLCollection interface: document.body.children must inherit property "item(unsigned long)" with the proper type
+PASS HTMLCollection interface: calling item(unsigned long) on document.body.children with too few arguments must throw TypeError
+PASS HTMLCollection interface: document.body.children must inherit property "namedItem(DOMString)" with the proper type
+PASS HTMLCollection interface: calling namedItem(DOMString) on document.body.children with too few arguments must throw TypeError
+PASS MutationObserver interface: existence and properties of interface object
+PASS MutationObserver interface object length
+PASS MutationObserver interface object name
+PASS MutationObserver interface: existence and properties of interface prototype object
+PASS MutationObserver interface: existence and properties of interface prototype object's "constructor" property
+PASS MutationObserver interface: operation observe(Node, MutationObserverInit)
+PASS MutationObserver interface: operation disconnect()
+PASS MutationObserver interface: operation takeRecords()
+PASS MutationRecord interface: existence and properties of interface object
+PASS MutationRecord interface object length
+PASS MutationRecord interface object name
+PASS MutationRecord interface: existence and properties of interface prototype object
+PASS MutationRecord interface: existence and properties of interface prototype object's "constructor" property
+PASS MutationRecord interface: attribute type
+PASS MutationRecord interface: attribute target
+PASS MutationRecord interface: attribute addedNodes
+PASS MutationRecord interface: attribute removedNodes
+PASS MutationRecord interface: attribute previousSibling
+PASS MutationRecord interface: attribute nextSibling
+PASS MutationRecord interface: attribute attributeName
+PASS MutationRecord interface: attribute attributeNamespace
+PASS MutationRecord interface: attribute oldValue
+PASS Node interface: existence and properties of interface object
+PASS Node interface object length
+PASS Node interface object name
+PASS Node interface: existence and properties of interface prototype object
+PASS Node interface: existence and properties of interface prototype object's "constructor" property
+PASS Node interface: constant ELEMENT_NODE on interface object
+PASS Node interface: constant ELEMENT_NODE on interface prototype object
+PASS Node interface: constant ATTRIBUTE_NODE on interface object
+PASS Node interface: constant ATTRIBUTE_NODE on interface prototype object
+PASS Node interface: constant TEXT_NODE on interface object
+PASS Node interface: constant TEXT_NODE on interface prototype object
+PASS Node interface: constant CDATA_SECTION_NODE on interface object
+PASS Node interface: constant CDATA_SECTION_NODE on interface prototype object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface prototype object
+PASS Node interface: constant ENTITY_NODE on interface object
+PASS Node interface: constant ENTITY_NODE on interface prototype object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface prototype object
+PASS Node interface: constant COMMENT_NODE on interface object
+PASS Node interface: constant COMMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface prototype object
+PASS Node interface: constant NOTATION_NODE on interface object
+PASS Node interface: constant NOTATION_NODE on interface prototype object
+PASS Node interface: attribute nodeType
+PASS Node interface: attribute nodeName
+PASS Node interface: attribute baseURI
+PASS Node interface: attribute isConnected
+PASS Node interface: attribute ownerDocument
+PASS Node interface: operation getRootNode(GetRootNodeOptions)
+PASS Node interface: attribute parentNode
+PASS Node interface: attribute parentElement
+PASS Node interface: operation hasChildNodes()
+PASS Node interface: attribute childNodes
+PASS Node interface: attribute firstChild
+PASS Node interface: attribute lastChild
+PASS Node interface: attribute previousSibling
+PASS Node interface: attribute nextSibling
+PASS Node interface: attribute nodeValue
+PASS Node interface: attribute textContent
+PASS Node interface: operation normalize()
+PASS Node interface: operation cloneNode(boolean)
+PASS Node interface: operation isEqualNode(Node)
+PASS Node interface: operation isSameNode(Node)
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface object
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface prototype object
+PASS Node interface: operation compareDocumentPosition(Node)
+PASS Node interface: operation contains(Node)
+PASS Node interface: operation lookupPrefix(DOMString)
+PASS Node interface: operation lookupNamespaceURI(DOMString)
+PASS Node interface: operation isDefaultNamespace(DOMString)
+PASS Node interface: operation insertBefore(Node, Node)
+PASS Node interface: operation appendChild(Node)
+PASS Node interface: operation replaceChild(Node, Node)
+PASS Node interface: operation removeChild(Node)
+PASS Document interface: existence and properties of interface object
+PASS Document interface object length
+PASS Document interface object name
+PASS Document interface: existence and properties of interface prototype object
+PASS Document interface: existence and properties of interface prototype object's "constructor" property
+PASS Document interface: attribute implementation
+PASS Document interface: attribute URL
+PASS Document interface: attribute documentURI
+PASS Document interface: attribute origin
+PASS Document interface: attribute compatMode
+PASS Document interface: attribute characterSet
+PASS Document interface: attribute charset
+PASS Document interface: attribute inputEncoding
+PASS Document interface: attribute contentType
+PASS Document interface: attribute doctype
+PASS Document interface: attribute documentElement
+PASS Document interface: operation getElementsByTagName(DOMString)
+PASS Document interface: operation getElementsByTagNameNS(DOMString, DOMString)
+PASS Document interface: operation getElementsByClassName(DOMString)
+PASS Document interface: operation createElement(DOMString, ElementCreationOptions)
+PASS Document interface: operation createElementNS(DOMString, DOMString, ElementCreationOptions)
+PASS Document interface: operation createDocumentFragment()
+PASS Document interface: operation createTextNode(DOMString)
+PASS Document interface: operation createCDATASection(DOMString)
+PASS Document interface: operation createComment(DOMString)
+PASS Document interface: operation createProcessingInstruction(DOMString, DOMString)
+PASS Document interface: operation importNode(Node, boolean)
+PASS Document interface: operation adoptNode(Node)
+PASS Document interface: operation createAttribute(DOMString)
+PASS Document interface: operation createAttributeNS(DOMString, DOMString)
+PASS Document interface: operation createEvent(DOMString)
+PASS Document interface: operation createRange()
+PASS Document interface: operation createNodeIterator(Node, unsigned long, NodeFilter)
+PASS Document interface: operation createTreeWalker(Node, unsigned long, NodeFilter)
+PASS Document interface: operation getElementById(DOMString)
+PASS Document interface: attribute children
+PASS Document interface: attribute firstElementChild
+PASS Document interface: attribute lastElementChild
+PASS Document interface: attribute childElementCount
+PASS Document interface: operation prepend([object Object],[object Object])
+PASS Document interface: operation append([object Object],[object Object])
+PASS Document interface: operation querySelector(DOMString)
+PASS Document interface: operation querySelectorAll(DOMString)
+PASS Document must be primary interface of new Document()
+PASS Stringification of new Document()
+PASS Document interface: new Document() must inherit property "implementation" with the proper type
+PASS Document interface: new Document() must inherit property "URL" with the proper type
+PASS Document interface: new Document() must inherit property "documentURI" with the proper type
+PASS Document interface: new Document() must inherit property "origin" with the proper type
+PASS Document interface: new Document() must inherit property "compatMode" with the proper type
+PASS Document interface: new Document() must inherit property "characterSet" with the proper type
+PASS Document interface: new Document() must inherit property "charset" with the proper type
+PASS Document interface: new Document() must inherit property "inputEncoding" with the proper type
+PASS Document interface: new Document() must inherit property "contentType" with the proper type
+PASS Document interface: new Document() must inherit property "doctype" with the proper type
+PASS Document interface: new Document() must inherit property "documentElement" with the proper type
+PASS Document interface: new Document() must inherit property "getElementsByTagName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByTagName(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type
+PASS Document interface: calling getElementsByTagNameNS(DOMString, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "getElementsByClassName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByClassName(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createElement(DOMString, ElementCreationOptions)" with the proper type
+PASS Document interface: calling createElement(DOMString, ElementCreationOptions) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createElementNS(DOMString, DOMString, ElementCreationOptions)" with the proper type
+PASS Document interface: calling createElementNS(DOMString, DOMString, ElementCreationOptions) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createDocumentFragment()" with the proper type
+PASS Document interface: new Document() must inherit property "createTextNode(DOMString)" with the proper type
+PASS Document interface: calling createTextNode(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createCDATASection(DOMString)" with the proper type
+PASS Document interface: calling createCDATASection(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createComment(DOMString)" with the proper type
+PASS Document interface: calling createComment(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createProcessingInstruction(DOMString, DOMString)" with the proper type
+PASS Document interface: calling createProcessingInstruction(DOMString, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "importNode(Node, boolean)" with the proper type
+PASS Document interface: calling importNode(Node, boolean) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "adoptNode(Node)" with the proper type
+PASS Document interface: calling adoptNode(Node) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createAttribute(DOMString)" with the proper type
+PASS Document interface: calling createAttribute(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createAttributeNS(DOMString, DOMString)" with the proper type
+PASS Document interface: calling createAttributeNS(DOMString, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createEvent(DOMString)" with the proper type
+PASS Document interface: calling createEvent(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createRange()" with the proper type
+PASS Document interface: new Document() must inherit property "createNodeIterator(Node, unsigned long, NodeFilter)" with the proper type
+PASS Document interface: calling createNodeIterator(Node, unsigned long, NodeFilter) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "createTreeWalker(Node, unsigned long, NodeFilter)" with the proper type
+PASS Document interface: calling createTreeWalker(Node, unsigned long, NodeFilter) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "getElementById(DOMString)" with the proper type
+PASS Document interface: calling getElementById(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "children" with the proper type
+PASS Document interface: new Document() must inherit property "firstElementChild" with the proper type
+PASS Document interface: new Document() must inherit property "lastElementChild" with the proper type
+PASS Document interface: new Document() must inherit property "childElementCount" with the proper type
+PASS Document interface: new Document() must inherit property "prepend([object Object],[object Object])" with the proper type
+PASS Document interface: calling prepend([object Object],[object Object]) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "append([object Object],[object Object])" with the proper type
+PASS Document interface: calling append([object Object],[object Object]) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "querySelector(DOMString)" with the proper type
+PASS Document interface: calling querySelector(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "querySelectorAll(DOMString)" with the proper type
+PASS Document interface: calling querySelectorAll(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: new Document() must inherit property "nodeType" with the proper type
+PASS Node interface: new Document() must inherit property "nodeName" with the proper type
+PASS Node interface: new Document() must inherit property "baseURI" with the proper type
+PASS Node interface: new Document() must inherit property "isConnected" with the proper type
+PASS Node interface: new Document() must inherit property "ownerDocument" with the proper type
+PASS Node interface: new Document() must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "parentNode" with the proper type
+PASS Node interface: new Document() must inherit property "parentElement" with the proper type
+PASS Node interface: new Document() must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: new Document() must inherit property "childNodes" with the proper type
+PASS Node interface: new Document() must inherit property "firstChild" with the proper type
+PASS Node interface: new Document() must inherit property "lastChild" with the proper type
+PASS Node interface: new Document() must inherit property "previousSibling" with the proper type
+PASS Node interface: new Document() must inherit property "nextSibling" with the proper type
+PASS Node interface: new Document() must inherit property "nodeValue" with the proper type
+PASS Node interface: new Document() must inherit property "textContent" with the proper type
+PASS Node interface: new Document() must inherit property "normalize()" with the proper type
+PASS Node interface: new Document() must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: new Document() must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on new Document() with too few arguments must throw TypeError
+PASS Node interface: new Document() must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on new Document() with too few arguments must throw TypeError
+PASS EventTarget interface: new Document() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError
+PASS EventTarget interface: new Document() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError
+PASS EventTarget interface: new Document() must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on new Document() with too few arguments must throw TypeError
+PASS XMLDocument interface: existence and properties of interface object
+PASS XMLDocument interface object length
+PASS XMLDocument interface object name
+PASS XMLDocument interface: existence and properties of interface prototype object
+PASS XMLDocument interface: existence and properties of interface prototype object's "constructor" property
+PASS XMLDocument must be primary interface of xmlDoc
+PASS Stringification of xmlDoc
+PASS Document interface: xmlDoc must inherit property "implementation" with the proper type
+PASS Document interface: xmlDoc must inherit property "URL" with the proper type
+PASS Document interface: xmlDoc must inherit property "documentURI" with the proper type
+PASS Document interface: xmlDoc must inherit property "origin" with the proper type
+PASS Document interface: xmlDoc must inherit property "compatMode" with the proper type
+PASS Document interface: xmlDoc must inherit property "characterSet" with the proper type
+PASS Document interface: xmlDoc must inherit property "charset" with the proper type
+PASS Document interface: xmlDoc must inherit property "inputEncoding" with the proper type
+PASS Document interface: xmlDoc must inherit property "contentType" with the proper type
+PASS Document interface: xmlDoc must inherit property "doctype" with the proper type
+PASS Document interface: xmlDoc must inherit property "documentElement" with the proper type
+PASS Document interface: xmlDoc must inherit property "getElementsByTagName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByTagName(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type
+PASS Document interface: calling getElementsByTagNameNS(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "getElementsByClassName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByClassName(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createElement(DOMString, ElementCreationOptions)" with the proper type
+PASS Document interface: calling createElement(DOMString, ElementCreationOptions) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createElementNS(DOMString, DOMString, ElementCreationOptions)" with the proper type
+PASS Document interface: calling createElementNS(DOMString, DOMString, ElementCreationOptions) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createDocumentFragment()" with the proper type
+PASS Document interface: xmlDoc must inherit property "createTextNode(DOMString)" with the proper type
+PASS Document interface: calling createTextNode(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createCDATASection(DOMString)" with the proper type
+PASS Document interface: calling createCDATASection(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createComment(DOMString)" with the proper type
+PASS Document interface: calling createComment(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createProcessingInstruction(DOMString, DOMString)" with the proper type
+PASS Document interface: calling createProcessingInstruction(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "importNode(Node, boolean)" with the proper type
+PASS Document interface: calling importNode(Node, boolean) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "adoptNode(Node)" with the proper type
+PASS Document interface: calling adoptNode(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createAttribute(DOMString)" with the proper type
+PASS Document interface: calling createAttribute(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createAttributeNS(DOMString, DOMString)" with the proper type
+PASS Document interface: calling createAttributeNS(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createEvent(DOMString)" with the proper type
+PASS Document interface: calling createEvent(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createRange()" with the proper type
+PASS Document interface: xmlDoc must inherit property "createNodeIterator(Node, unsigned long, NodeFilter)" with the proper type
+PASS Document interface: calling createNodeIterator(Node, unsigned long, NodeFilter) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createTreeWalker(Node, unsigned long, NodeFilter)" with the proper type
+PASS Document interface: calling createTreeWalker(Node, unsigned long, NodeFilter) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "getElementById(DOMString)" with the proper type
+PASS Document interface: calling getElementById(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "children" with the proper type
+PASS Document interface: xmlDoc must inherit property "firstElementChild" with the proper type
+PASS Document interface: xmlDoc must inherit property "lastElementChild" with the proper type
+PASS Document interface: xmlDoc must inherit property "childElementCount" with the proper type
+PASS Document interface: xmlDoc must inherit property "prepend([object Object],[object Object])" with the proper type
+PASS Document interface: calling prepend([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "append([object Object],[object Object])" with the proper type
+PASS Document interface: calling append([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "querySelector(DOMString)" with the proper type
+PASS Document interface: calling querySelector(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "querySelectorAll(DOMString)" with the proper type
+PASS Document interface: calling querySelectorAll(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: xmlDoc must inherit property "nodeType" with the proper type
+PASS Node interface: xmlDoc must inherit property "nodeName" with the proper type
+PASS Node interface: xmlDoc must inherit property "baseURI" with the proper type
+PASS Node interface: xmlDoc must inherit property "isConnected" with the proper type
+PASS Node interface: xmlDoc must inherit property "ownerDocument" with the proper type
+PASS Node interface: xmlDoc must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "parentNode" with the proper type
+PASS Node interface: xmlDoc must inherit property "parentElement" with the proper type
+PASS Node interface: xmlDoc must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: xmlDoc must inherit property "childNodes" with the proper type
+PASS Node interface: xmlDoc must inherit property "firstChild" with the proper type
+PASS Node interface: xmlDoc must inherit property "lastChild" with the proper type
+PASS Node interface: xmlDoc must inherit property "previousSibling" with the proper type
+PASS Node interface: xmlDoc must inherit property "nextSibling" with the proper type
+PASS Node interface: xmlDoc must inherit property "nodeValue" with the proper type
+PASS Node interface: xmlDoc must inherit property "textContent" with the proper type
+PASS Node interface: xmlDoc must inherit property "normalize()" with the proper type
+PASS Node interface: xmlDoc must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: xmlDoc must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on xmlDoc with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc with too few arguments must throw TypeError
+PASS DOMImplementation interface: existence and properties of interface object
+PASS DOMImplementation interface object length
+PASS DOMImplementation interface object name
+PASS DOMImplementation interface: existence and properties of interface prototype object
+PASS DOMImplementation interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMImplementation interface: operation createDocumentType(DOMString, DOMString, DOMString)
+PASS DOMImplementation interface: operation createDocument(DOMString, DOMString, DocumentType)
+PASS DOMImplementation interface: operation createHTMLDocument(DOMString)
+PASS DOMImplementation interface: operation hasFeature()
+PASS DOMImplementation must be primary interface of document.implementation
+PASS Stringification of document.implementation
+PASS DOMImplementation interface: document.implementation must inherit property "createDocumentType(DOMString, DOMString, DOMString)" with the proper type
+PASS DOMImplementation interface: calling createDocumentType(DOMString, DOMString, DOMString) on document.implementation with too few arguments must throw TypeError
+PASS DOMImplementation interface: document.implementation must inherit property "createDocument(DOMString, DOMString, DocumentType)" with the proper type
+PASS DOMImplementation interface: calling createDocument(DOMString, DOMString, DocumentType) on document.implementation with too few arguments must throw TypeError
+PASS DOMImplementation interface: document.implementation must inherit property "createHTMLDocument(DOMString)" with the proper type
+PASS DOMImplementation interface: calling createHTMLDocument(DOMString) on document.implementation with too few arguments must throw TypeError
+PASS DOMImplementation interface: document.implementation must inherit property "hasFeature()" with the proper type
+PASS DocumentType interface: existence and properties of interface object
+PASS DocumentType interface object length
+PASS DocumentType interface object name
+PASS DocumentType interface: existence and properties of interface prototype object
+PASS DocumentType interface: existence and properties of interface prototype object's "constructor" property
+PASS DocumentType interface: attribute name
+PASS DocumentType interface: attribute publicId
+PASS DocumentType interface: attribute systemId
+PASS DocumentType interface: operation before([object Object],[object Object])
+PASS DocumentType interface: operation after([object Object],[object Object])
+PASS DocumentType interface: operation replaceWith([object Object],[object Object])
+PASS DocumentType interface: operation remove()
+PASS DocumentType must be primary interface of document.doctype
+PASS Stringification of document.doctype
+PASS DocumentType interface: document.doctype must inherit property "name" with the proper type
+PASS DocumentType interface: document.doctype must inherit property "publicId" with the proper type
+PASS DocumentType interface: document.doctype must inherit property "systemId" with the proper type
+PASS DocumentType interface: document.doctype must inherit property "before([object Object],[object Object])" with the proper type
+PASS DocumentType interface: calling before([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "after([object Object],[object Object])" with the proper type
+PASS DocumentType interface: calling after([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "replaceWith([object Object],[object Object])" with the proper type
+PASS DocumentType interface: calling replaceWith([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "remove()" with the proper type
+PASS Node interface: document.doctype must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: document.doctype must inherit property "nodeType" with the proper type
+PASS Node interface: document.doctype must inherit property "nodeName" with the proper type
+PASS Node interface: document.doctype must inherit property "baseURI" with the proper type
+PASS Node interface: document.doctype must inherit property "isConnected" with the proper type
+PASS Node interface: document.doctype must inherit property "ownerDocument" with the proper type
+PASS Node interface: document.doctype must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "parentNode" with the proper type
+PASS Node interface: document.doctype must inherit property "parentElement" with the proper type
+PASS Node interface: document.doctype must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: document.doctype must inherit property "childNodes" with the proper type
+PASS Node interface: document.doctype must inherit property "firstChild" with the proper type
+PASS Node interface: document.doctype must inherit property "lastChild" with the proper type
+PASS Node interface: document.doctype must inherit property "previousSibling" with the proper type
+PASS Node interface: document.doctype must inherit property "nextSibling" with the proper type
+PASS Node interface: document.doctype must inherit property "nodeValue" with the proper type
+PASS Node interface: document.doctype must inherit property "textContent" with the proper type
+PASS Node interface: document.doctype must inherit property "normalize()" with the proper type
+PASS Node interface: document.doctype must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: document.doctype must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on document.doctype with too few arguments must throw TypeError
+PASS EventTarget interface: document.doctype must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS EventTarget interface: document.doctype must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS EventTarget interface: document.doctype must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on document.doctype with too few arguments must throw TypeError
+PASS DocumentFragment interface: existence and properties of interface object
+PASS DocumentFragment interface object length
+PASS DocumentFragment interface object name
+PASS DocumentFragment interface: existence and properties of interface prototype object
+PASS DocumentFragment interface: existence and properties of interface prototype object's "constructor" property
+PASS DocumentFragment interface: operation getElementById(DOMString)
+PASS DocumentFragment interface: attribute children
+PASS DocumentFragment interface: attribute firstElementChild
+PASS DocumentFragment interface: attribute lastElementChild
+PASS DocumentFragment interface: attribute childElementCount
+PASS DocumentFragment interface: operation prepend([object Object],[object Object])
+PASS DocumentFragment interface: operation append([object Object],[object Object])
+PASS DocumentFragment interface: operation querySelector(DOMString)
+PASS DocumentFragment interface: operation querySelectorAll(DOMString)
+PASS DocumentFragment must be primary interface of document.createDocumentFragment()
+PASS Stringification of document.createDocumentFragment()
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "getElementById(DOMString)" with the proper type
+PASS DocumentFragment interface: calling getElementById(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "children" with the proper type
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "firstElementChild" with the proper type
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "lastElementChild" with the proper type
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "childElementCount" with the proper type
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "prepend([object Object],[object Object])" with the proper type
+PASS DocumentFragment interface: calling prepend([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "append([object Object],[object Object])" with the proper type
+PASS DocumentFragment interface: calling append([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelector(DOMString)" with the proper type
+PASS DocumentFragment interface: calling querySelector(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelectorAll(DOMString)" with the proper type
+PASS DocumentFragment interface: calling querySelectorAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeType" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeName" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "baseURI" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "isConnected" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "ownerDocument" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "parentNode" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "parentElement" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "childNodes" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "firstChild" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "lastChild" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "previousSibling" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "nextSibling" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeValue" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "textContent" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "normalize()" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: document.createDocumentFragment() must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS ShadowRoot interface: existence and properties of interface object
+PASS ShadowRoot interface object length
+PASS ShadowRoot interface object name
+PASS ShadowRoot interface: existence and properties of interface prototype object
+PASS ShadowRoot interface: existence and properties of interface prototype object's "constructor" property
+PASS ShadowRoot interface: attribute mode
+PASS ShadowRoot interface: attribute host
+PASS Element interface: existence and properties of interface object
+PASS Element interface object length
+PASS Element interface object name
+PASS Element interface: existence and properties of interface prototype object
+PASS Element interface: existence and properties of interface prototype object's "constructor" property
+PASS Element interface: attribute namespaceURI
+PASS Element interface: attribute prefix
+PASS Element interface: attribute localName
+PASS Element interface: attribute tagName
+PASS Element interface: attribute id
+PASS Element interface: attribute className
+PASS Element interface: attribute classList
+PASS Element interface: attribute slot
+PASS Element interface: operation hasAttributes()
+PASS Element interface: attribute attributes
+PASS Element interface: operation getAttributeNames()
+PASS Element interface: operation getAttribute(DOMString)
+PASS Element interface: operation getAttributeNS(DOMString, DOMString)
+PASS Element interface: operation setAttribute(DOMString, DOMString)
+PASS Element interface: operation setAttributeNS(DOMString, DOMString, DOMString)
+PASS Element interface: operation removeAttribute(DOMString)
+PASS Element interface: operation removeAttributeNS(DOMString, DOMString)
+PASS Element interface: operation hasAttribute(DOMString)
+PASS Element interface: operation hasAttributeNS(DOMString, DOMString)
+PASS Element interface: operation getAttributeNode(DOMString)
+PASS Element interface: operation getAttributeNodeNS(DOMString, DOMString)
+PASS Element interface: operation setAttributeNode(Attr)
+PASS Element interface: operation setAttributeNodeNS(Attr)
+PASS Element interface: operation removeAttributeNode(Attr)
+PASS Element interface: operation attachShadow(ShadowRootInit)
+PASS Element interface: attribute shadowRoot
+PASS Element interface: operation closest(DOMString)
+PASS Element interface: operation matches(DOMString)
+PASS Element interface: operation webkitMatchesSelector(DOMString)
+PASS Element interface: operation getElementsByTagName(DOMString)
+PASS Element interface: operation getElementsByTagNameNS(DOMString, DOMString)
+PASS Element interface: operation getElementsByClassName(DOMString)
+PASS Element interface: operation insertAdjacentElement(DOMString, Element)
+PASS Element interface: operation insertAdjacentText(DOMString, DOMString)
+PASS Element interface: attribute children
+PASS Element interface: attribute firstElementChild
+PASS Element interface: attribute lastElementChild
+PASS Element interface: attribute childElementCount
+PASS Element interface: operation prepend([object Object],[object Object])
+PASS Element interface: operation append([object Object],[object Object])
+PASS Element interface: operation querySelector(DOMString)
+PASS Element interface: operation querySelectorAll(DOMString)
+PASS Element interface: attribute previousElementSibling
+PASS Element interface: attribute nextElementSibling
+PASS Element interface: operation before([object Object],[object Object])
+PASS Element interface: operation after([object Object],[object Object])
+PASS Element interface: operation replaceWith([object Object],[object Object])
+PASS Element interface: operation remove()
+PASS Element interface: attribute assignedSlot
+PASS Element must be primary interface of element
+PASS Stringification of element
+PASS Element interface: element must inherit property "namespaceURI" with the proper type
+PASS Element interface: element must inherit property "prefix" with the proper type
+PASS Element interface: element must inherit property "localName" with the proper type
+PASS Element interface: element must inherit property "tagName" with the proper type
+PASS Element interface: element must inherit property "id" with the proper type
+PASS Element interface: element must inherit property "className" with the proper type
+PASS Element interface: element must inherit property "classList" with the proper type
+PASS Element interface: element must inherit property "slot" with the proper type
+PASS Element interface: element must inherit property "hasAttributes()" with the proper type
+PASS Element interface: element must inherit property "attributes" with the proper type
+PASS Element interface: element must inherit property "getAttributeNames()" with the proper type
+PASS Element interface: element must inherit property "getAttribute(DOMString)" with the proper type
+PASS Element interface: calling getAttribute(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getAttributeNS(DOMString, DOMString)" with the proper type
+PASS Element interface: calling getAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "setAttribute(DOMString, DOMString)" with the proper type
+PASS Element interface: calling setAttribute(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "setAttributeNS(DOMString, DOMString, DOMString)" with the proper type
+PASS Element interface: calling setAttributeNS(DOMString, DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "removeAttribute(DOMString)" with the proper type
+PASS Element interface: calling removeAttribute(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "removeAttributeNS(DOMString, DOMString)" with the proper type
+PASS Element interface: calling removeAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "hasAttribute(DOMString)" with the proper type
+PASS Element interface: calling hasAttribute(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "hasAttributeNS(DOMString, DOMString)" with the proper type
+PASS Element interface: calling hasAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getAttributeNode(DOMString)" with the proper type
+PASS Element interface: calling getAttributeNode(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getAttributeNodeNS(DOMString, DOMString)" with the proper type
+PASS Element interface: calling getAttributeNodeNS(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "setAttributeNode(Attr)" with the proper type
+PASS Element interface: calling setAttributeNode(Attr) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "setAttributeNodeNS(Attr)" with the proper type
+PASS Element interface: calling setAttributeNodeNS(Attr) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "removeAttributeNode(Attr)" with the proper type
+PASS Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "attachShadow(ShadowRootInit)" with the proper type
+PASS Element interface: calling attachShadow(ShadowRootInit) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "shadowRoot" with the proper type
+PASS Element interface: element must inherit property "closest(DOMString)" with the proper type
+PASS Element interface: calling closest(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "matches(DOMString)" with the proper type
+PASS Element interface: calling matches(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "webkitMatchesSelector(DOMString)" with the proper type
+PASS Element interface: calling webkitMatchesSelector(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getElementsByTagName(DOMString)" with the proper type
+PASS Element interface: calling getElementsByTagName(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type
+PASS Element interface: calling getElementsByTagNameNS(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getElementsByClassName(DOMString)" with the proper type
+PASS Element interface: calling getElementsByClassName(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "insertAdjacentElement(DOMString, Element)" with the proper type
+PASS Element interface: calling insertAdjacentElement(DOMString, Element) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "insertAdjacentText(DOMString, DOMString)" with the proper type
+PASS Element interface: calling insertAdjacentText(DOMString, DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "children" with the proper type
+PASS Element interface: element must inherit property "firstElementChild" with the proper type
+PASS Element interface: element must inherit property "lastElementChild" with the proper type
+PASS Element interface: element must inherit property "childElementCount" with the proper type
+PASS Element interface: element must inherit property "prepend([object Object],[object Object])" with the proper type
+PASS Element interface: calling prepend([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "append([object Object],[object Object])" with the proper type
+PASS Element interface: calling append([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "querySelector(DOMString)" with the proper type
+PASS Element interface: calling querySelector(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "querySelectorAll(DOMString)" with the proper type
+PASS Element interface: calling querySelectorAll(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "previousElementSibling" with the proper type
+PASS Element interface: element must inherit property "nextElementSibling" with the proper type
+PASS Element interface: element must inherit property "before([object Object],[object Object])" with the proper type
+PASS Element interface: calling before([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "after([object Object],[object Object])" with the proper type
+PASS Element interface: calling after([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "replaceWith([object Object],[object Object])" with the proper type
+PASS Element interface: calling replaceWith([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "remove()" with the proper type
+PASS Element interface: element must inherit property "assignedSlot" with the proper type
+PASS Node interface: element must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: element must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: element must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: element must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: element must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: element must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: element must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: element must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: element must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: element must inherit property "nodeType" with the proper type
+PASS Node interface: element must inherit property "nodeName" with the proper type
+PASS Node interface: element must inherit property "baseURI" with the proper type
+PASS Node interface: element must inherit property "isConnected" with the proper type
+PASS Node interface: element must inherit property "ownerDocument" with the proper type
+PASS Node interface: element must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "parentNode" with the proper type
+PASS Node interface: element must inherit property "parentElement" with the proper type
+PASS Node interface: element must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: element must inherit property "childNodes" with the proper type
+PASS Node interface: element must inherit property "firstChild" with the proper type
+PASS Node interface: element must inherit property "lastChild" with the proper type
+PASS Node interface: element must inherit property "previousSibling" with the proper type
+PASS Node interface: element must inherit property "nextSibling" with the proper type
+PASS Node interface: element must inherit property "nodeValue" with the proper type
+PASS Node interface: element must inherit property "textContent" with the proper type
+PASS Node interface: element must inherit property "normalize()" with the proper type
+PASS Node interface: element must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: element must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on element with too few arguments must throw TypeError
+PASS EventTarget interface: element must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS EventTarget interface: element must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS EventTarget interface: element must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on element with too few arguments must throw TypeError
+PASS NamedNodeMap interface: existence and properties of interface object
+PASS NamedNodeMap interface object length
+PASS NamedNodeMap interface object name
+PASS NamedNodeMap interface: existence and properties of interface prototype object
+PASS NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property
+PASS NamedNodeMap interface: attribute length
+PASS NamedNodeMap interface: operation item(unsigned long)
+PASS NamedNodeMap interface: operation getNamedItem(DOMString)
+PASS NamedNodeMap interface: operation getNamedItemNS(DOMString, DOMString)
+PASS NamedNodeMap interface: operation setNamedItem(Attr)
+PASS NamedNodeMap interface: operation setNamedItemNS(Attr)
+PASS NamedNodeMap interface: operation removeNamedItem(DOMString)
+PASS NamedNodeMap interface: operation removeNamedItemNS(DOMString, DOMString)
+PASS Attr interface: existence and properties of interface object
+PASS Attr interface object length
+PASS Attr interface object name
+PASS Attr interface: existence and properties of interface prototype object
+PASS Attr interface: existence and properties of interface prototype object's "constructor" property
+PASS Attr interface: attribute namespaceURI
+PASS Attr interface: attribute prefix
+PASS Attr interface: attribute localName
+PASS Attr interface: attribute name
+PASS Attr interface: attribute value
+PASS Attr interface: attribute ownerElement
+PASS Attr interface: attribute specified
+PASS Attr must be primary interface of document.querySelector("[id]").attributes[0]
+PASS Stringification of document.querySelector("[id]").attributes[0]
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "namespaceURI" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "prefix" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "localName" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "name" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "value" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "ownerElement" with the proper type
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "specified" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeType" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeName" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "baseURI" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isConnected" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ownerDocument" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentNode" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentElement" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "childNodes" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "firstChild" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lastChild" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "previousSibling" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nextSibling" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeValue" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "textContent" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "normalize()" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError
+PASS CharacterData interface: existence and properties of interface object
+PASS CharacterData interface object length
+PASS CharacterData interface object name
+PASS CharacterData interface: existence and properties of interface prototype object
+PASS CharacterData interface: existence and properties of interface prototype object's "constructor" property
+PASS CharacterData interface: attribute data
+PASS CharacterData interface: attribute length
+PASS CharacterData interface: operation substringData(unsigned long, unsigned long)
+PASS CharacterData interface: operation appendData(DOMString)
+PASS CharacterData interface: operation insertData(unsigned long, DOMString)
+PASS CharacterData interface: operation deleteData(unsigned long, unsigned long)
+PASS CharacterData interface: operation replaceData(unsigned long, unsigned long, DOMString)
+PASS CharacterData interface: attribute previousElementSibling
+PASS CharacterData interface: attribute nextElementSibling
+PASS CharacterData interface: operation before([object Object],[object Object])
+PASS CharacterData interface: operation after([object Object],[object Object])
+PASS CharacterData interface: operation replaceWith([object Object],[object Object])
+PASS CharacterData interface: operation remove()
+PASS Text interface: existence and properties of interface object
+PASS Text interface object length
+PASS Text interface object name
+PASS Text interface: existence and properties of interface prototype object
+PASS Text interface: existence and properties of interface prototype object's "constructor" property
+PASS Text interface: operation splitText(unsigned long)
+PASS Text interface: attribute wholeText
+PASS Text interface: attribute assignedSlot
+PASS Text must be primary interface of document.createTextNode("abc")
+PASS Stringification of document.createTextNode("abc")
+PASS Text interface: document.createTextNode("abc") must inherit property "splitText(unsigned long)" with the proper type
+PASS Text interface: calling splitText(unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Text interface: document.createTextNode("abc") must inherit property "wholeText" with the proper type
+PASS Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "data" with the proper type
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "length" with the proper type
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "substringData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "appendData(DOMString)" with the proper type
+PASS CharacterData interface: calling appendData(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "insertData(unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling insertData(unsigned long, DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "previousElementSibling" with the proper type
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "nextElementSibling" with the proper type
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "before([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling before([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "after([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling after([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceWith([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "remove()" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeType" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeName" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "baseURI" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "isConnected" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "ownerDocument" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "parentNode" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "parentElement" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "childNodes" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "firstChild" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "lastChild" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "previousSibling" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "nextSibling" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeValue" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "textContent" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "normalize()" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: document.createTextNode("abc") must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CDATASection interface: existence and properties of interface object
+PASS CDATASection interface object length
+PASS CDATASection interface object name
+PASS CDATASection interface: existence and properties of interface prototype object
+PASS CDATASection interface: existence and properties of interface prototype object's "constructor" property
+PASS ProcessingInstruction interface: existence and properties of interface object
+PASS ProcessingInstruction interface object length
+PASS ProcessingInstruction interface object name
+PASS ProcessingInstruction interface: existence and properties of interface prototype object
+PASS ProcessingInstruction interface: existence and properties of interface prototype object's "constructor" property
+PASS ProcessingInstruction interface: attribute target
+PASS ProcessingInstruction must be primary interface of xmlDoc.createProcessingInstruction("abc", "def")
+PASS Stringification of xmlDoc.createProcessingInstruction("abc", "def")
+PASS ProcessingInstruction interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "target" with the proper type
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "data" with the proper type
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "length" with the proper type
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "substringData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendData(DOMString)" with the proper type
+PASS CharacterData interface: calling appendData(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertData(unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling insertData(unsigned long, DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousElementSibling" with the proper type
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextElementSibling" with the proper type
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "before([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling before([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "after([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling after([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceWith([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "remove()" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeType" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeName" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "baseURI" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isConnected" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ownerDocument" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentNode" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentElement" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "childNodes" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "firstChild" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lastChild" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousSibling" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextSibling" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeValue" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "textContent" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "normalize()" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Comment interface: existence and properties of interface object
+PASS Comment interface object length
+PASS Comment interface object name
+PASS Comment interface: existence and properties of interface prototype object
+PASS Comment interface: existence and properties of interface prototype object's "constructor" property
+PASS Comment must be primary interface of document.createComment("abc")
+PASS Stringification of document.createComment("abc")
+PASS CharacterData interface: document.createComment("abc") must inherit property "data" with the proper type
+PASS CharacterData interface: document.createComment("abc") must inherit property "length" with the proper type
+PASS CharacterData interface: document.createComment("abc") must inherit property "substringData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "appendData(DOMString)" with the proper type
+PASS CharacterData interface: calling appendData(DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "insertData(unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling insertData(unsigned long, DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type
+PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type
+PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "previousElementSibling" with the proper type
+PASS CharacterData interface: document.createComment("abc") must inherit property "nextElementSibling" with the proper type
+PASS CharacterData interface: document.createComment("abc") must inherit property "before([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling before([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "after([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling after([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "replaceWith([object Object],[object Object])" with the proper type
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "remove()" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "ELEMENT_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "ATTRIBUTE_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "TEXT_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "CDATA_SECTION_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "ENTITY_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "COMMENT_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "NOTATION_NODE" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "nodeType" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "nodeName" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "baseURI" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "isConnected" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "ownerDocument" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type
+PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "parentNode" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "parentElement" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "hasChildNodes()" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "childNodes" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "firstChild" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "lastChild" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "previousSibling" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "nextSibling" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "nodeValue" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "textContent" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "normalize()" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "cloneNode(boolean)" with the proper type
+PASS Node interface: calling cloneNode(boolean) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "isEqualNode(Node)" with the proper type
+PASS Node interface: calling isEqualNode(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "isSameNode(Node)" with the proper type
+PASS Node interface: calling isSameNode(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type
+PASS Node interface: document.createComment("abc") must inherit property "compareDocumentPosition(Node)" with the proper type
+PASS Node interface: calling compareDocumentPosition(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "contains(Node)" with the proper type
+PASS Node interface: calling contains(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "lookupPrefix(DOMString)" with the proper type
+PASS Node interface: calling lookupPrefix(DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "lookupNamespaceURI(DOMString)" with the proper type
+PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "isDefaultNamespace(DOMString)" with the proper type
+PASS Node interface: calling isDefaultNamespace(DOMString) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "insertBefore(Node, Node)" with the proper type
+PASS Node interface: calling insertBefore(Node, Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "appendChild(Node)" with the proper type
+PASS Node interface: calling appendChild(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "replaceChild(Node, Node)" with the proper type
+PASS Node interface: calling replaceChild(Node, Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "removeChild(Node)" with the proper type
+PASS Node interface: calling removeChild(Node) on document.createComment("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createComment("abc") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createComment("abc") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS EventTarget interface: document.createComment("abc") must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Range interface: existence and properties of interface object
+PASS Range interface object length
+PASS Range interface object name
+PASS Range interface: existence and properties of interface prototype object
+PASS Range interface: existence and properties of interface prototype object's "constructor" property
+PASS Range interface: attribute startContainer
+PASS Range interface: attribute startOffset
+PASS Range interface: attribute endContainer
+PASS Range interface: attribute endOffset
+PASS Range interface: attribute collapsed
+PASS Range interface: attribute commonAncestorContainer
+PASS Range interface: operation setStart(Node, unsigned long)
+PASS Range interface: operation setEnd(Node, unsigned long)
+PASS Range interface: operation setStartBefore(Node)
+PASS Range interface: operation setStartAfter(Node)
+PASS Range interface: operation setEndBefore(Node)
+PASS Range interface: operation setEndAfter(Node)
+PASS Range interface: operation collapse(boolean)
+PASS Range interface: operation selectNode(Node)
+PASS Range interface: operation selectNodeContents(Node)
+PASS Range interface: constant START_TO_START on interface object
+PASS Range interface: constant START_TO_START on interface prototype object
+PASS Range interface: constant START_TO_END on interface object
+PASS Range interface: constant START_TO_END on interface prototype object
+PASS Range interface: constant END_TO_END on interface object
+PASS Range interface: constant END_TO_END on interface prototype object
+PASS Range interface: constant END_TO_START on interface object
+PASS Range interface: constant END_TO_START on interface prototype object
+PASS Range interface: operation compareBoundaryPoints(unsigned short, Range)
+PASS Range interface: operation deleteContents()
+PASS Range interface: operation extractContents()
+PASS Range interface: operation cloneContents()
+PASS Range interface: operation insertNode(Node)
+PASS Range interface: operation surroundContents(Node)
+PASS Range interface: operation cloneRange()
+PASS Range interface: operation detach()
+PASS Range interface: operation isPointInRange(Node, unsigned long)
+PASS Range interface: operation comparePoint(Node, unsigned long)
+PASS Range interface: operation intersectsNode(Node)
+PASS Range interface: stringifier
+PASS Range must be primary interface of document.createRange()
+PASS Stringification of document.createRange()
+PASS Range interface: document.createRange() must inherit property "startContainer" with the proper type
+PASS Range interface: document.createRange() must inherit property "startOffset" with the proper type
+PASS Range interface: document.createRange() must inherit property "endContainer" with the proper type
+PASS Range interface: document.createRange() must inherit property "endOffset" with the proper type
+PASS Range interface: document.createRange() must inherit property "collapsed" with the proper type
+PASS Range interface: document.createRange() must inherit property "commonAncestorContainer" with the proper type
+PASS Range interface: document.createRange() must inherit property "setStart(Node, unsigned long)" with the proper type
+PASS Range interface: calling setStart(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "setEnd(Node, unsigned long)" with the proper type
+PASS Range interface: calling setEnd(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "setStartBefore(Node)" with the proper type
+PASS Range interface: calling setStartBefore(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "setStartAfter(Node)" with the proper type
+PASS Range interface: calling setStartAfter(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "setEndBefore(Node)" with the proper type
+PASS Range interface: calling setEndBefore(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "setEndAfter(Node)" with the proper type
+PASS Range interface: calling setEndAfter(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "collapse(boolean)" with the proper type
+PASS Range interface: calling collapse(boolean) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "selectNode(Node)" with the proper type
+PASS Range interface: calling selectNode(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "selectNodeContents(Node)" with the proper type
+PASS Range interface: calling selectNodeContents(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "START_TO_START" with the proper type
+PASS Range interface: document.createRange() must inherit property "START_TO_END" with the proper type
+PASS Range interface: document.createRange() must inherit property "END_TO_END" with the proper type
+PASS Range interface: document.createRange() must inherit property "END_TO_START" with the proper type
+PASS Range interface: document.createRange() must inherit property "compareBoundaryPoints(unsigned short, Range)" with the proper type
+PASS Range interface: calling compareBoundaryPoints(unsigned short, Range) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "deleteContents()" with the proper type
+PASS Range interface: document.createRange() must inherit property "extractContents()" with the proper type
+PASS Range interface: document.createRange() must inherit property "cloneContents()" with the proper type
+PASS Range interface: document.createRange() must inherit property "insertNode(Node)" with the proper type
+PASS Range interface: calling insertNode(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "surroundContents(Node)" with the proper type
+PASS Range interface: calling surroundContents(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "cloneRange()" with the proper type
+PASS Range interface: document.createRange() must inherit property "detach()" with the proper type
+PASS Range interface: document.createRange() must inherit property "isPointInRange(Node, unsigned long)" with the proper type
+PASS Range interface: calling isPointInRange(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "comparePoint(Node, unsigned long)" with the proper type
+PASS Range interface: calling comparePoint(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "intersectsNode(Node)" with the proper type
+PASS Range interface: calling intersectsNode(Node) on document.createRange() with too few arguments must throw TypeError
+PASS Range must be primary interface of detachedRange
+PASS Stringification of detachedRange
+PASS Range interface: detachedRange must inherit property "startContainer" with the proper type
+PASS Range interface: detachedRange must inherit property "startOffset" with the proper type
+PASS Range interface: detachedRange must inherit property "endContainer" with the proper type
+PASS Range interface: detachedRange must inherit property "endOffset" with the proper type
+PASS Range interface: detachedRange must inherit property "collapsed" with the proper type
+PASS Range interface: detachedRange must inherit property "commonAncestorContainer" with the proper type
+PASS Range interface: detachedRange must inherit property "setStart(Node, unsigned long)" with the proper type
+PASS Range interface: calling setStart(Node, unsigned long) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "setEnd(Node, unsigned long)" with the proper type
+PASS Range interface: calling setEnd(Node, unsigned long) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "setStartBefore(Node)" with the proper type
+PASS Range interface: calling setStartBefore(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "setStartAfter(Node)" with the proper type
+PASS Range interface: calling setStartAfter(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "setEndBefore(Node)" with the proper type
+PASS Range interface: calling setEndBefore(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "setEndAfter(Node)" with the proper type
+PASS Range interface: calling setEndAfter(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "collapse(boolean)" with the proper type
+PASS Range interface: calling collapse(boolean) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "selectNode(Node)" with the proper type
+PASS Range interface: calling selectNode(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "selectNodeContents(Node)" with the proper type
+PASS Range interface: calling selectNodeContents(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "START_TO_START" with the proper type
+PASS Range interface: detachedRange must inherit property "START_TO_END" with the proper type
+PASS Range interface: detachedRange must inherit property "END_TO_END" with the proper type
+PASS Range interface: detachedRange must inherit property "END_TO_START" with the proper type
+PASS Range interface: detachedRange must inherit property "compareBoundaryPoints(unsigned short, Range)" with the proper type
+PASS Range interface: calling compareBoundaryPoints(unsigned short, Range) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "deleteContents()" with the proper type
+PASS Range interface: detachedRange must inherit property "extractContents()" with the proper type
+PASS Range interface: detachedRange must inherit property "cloneContents()" with the proper type
+PASS Range interface: detachedRange must inherit property "insertNode(Node)" with the proper type
+PASS Range interface: calling insertNode(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "surroundContents(Node)" with the proper type
+PASS Range interface: calling surroundContents(Node) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "cloneRange()" with the proper type
+PASS Range interface: detachedRange must inherit property "detach()" with the proper type
+PASS Range interface: detachedRange must inherit property "isPointInRange(Node, unsigned long)" with the proper type
+PASS Range interface: calling isPointInRange(Node, unsigned long) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "comparePoint(Node, unsigned long)" with the proper type
+PASS Range interface: calling comparePoint(Node, unsigned long) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "intersectsNode(Node)" with the proper type
+PASS Range interface: calling intersectsNode(Node) on detachedRange with too few arguments must throw TypeError
+PASS NodeIterator interface: existence and properties of interface object
+PASS NodeIterator interface object length
+PASS NodeIterator interface object name
+PASS NodeIterator interface: existence and properties of interface prototype object
+PASS NodeIterator interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeIterator interface: attribute root
+PASS NodeIterator interface: attribute referenceNode
+PASS NodeIterator interface: attribute pointerBeforeReferenceNode
+PASS NodeIterator interface: attribute whatToShow
+PASS NodeIterator interface: attribute filter
+PASS NodeIterator interface: operation nextNode()
+PASS NodeIterator interface: operation previousNode()
+PASS NodeIterator interface: operation detach()
+PASS NodeIterator must be primary interface of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS Stringification of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "referenceNode" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "pointerBeforeReferenceNode" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode()" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode()" with the proper type
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "detach()" with the proper type
+PASS TreeWalker interface: existence and properties of interface object
+PASS TreeWalker interface object length
+PASS TreeWalker interface object name
+PASS TreeWalker interface: existence and properties of interface prototype object
+PASS TreeWalker interface: existence and properties of interface prototype object's "constructor" property
+PASS TreeWalker interface: attribute root
+PASS TreeWalker interface: attribute whatToShow
+PASS TreeWalker interface: attribute filter
+PASS TreeWalker interface: attribute currentNode
+PASS TreeWalker interface: operation parentNode()
+PASS TreeWalker interface: operation firstChild()
+PASS TreeWalker interface: operation lastChild()
+PASS TreeWalker interface: operation previousSibling()
+PASS TreeWalker interface: operation nextSibling()
+PASS TreeWalker interface: operation previousNode()
+PASS TreeWalker interface: operation nextNode()
+PASS TreeWalker must be primary interface of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS Stringification of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "currentNode" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "parentNode()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "firstChild()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "lastChild()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousSibling()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextSibling()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode()" with the proper type
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode()" with the proper type
+PASS NodeFilter interface: existence and properties of interface object
+PASS NodeFilter interface object name
+PASS NodeFilter interface: existence and properties of interface prototype object
+PASS NodeFilter interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeFilter interface: constant FILTER_ACCEPT on interface object
+PASS NodeFilter interface: constant FILTER_ACCEPT on interface prototype object
+PASS NodeFilter interface: constant FILTER_REJECT on interface object
+PASS NodeFilter interface: constant FILTER_REJECT on interface prototype object
+PASS NodeFilter interface: constant FILTER_SKIP on interface object
+PASS NodeFilter interface: constant FILTER_SKIP on interface prototype object
+PASS NodeFilter interface: constant SHOW_ALL on interface object
+PASS NodeFilter interface: constant SHOW_ALL on interface prototype object
+PASS NodeFilter interface: constant SHOW_ELEMENT on interface object
+PASS NodeFilter interface: constant SHOW_ELEMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface object
+PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface prototype object
+PASS NodeFilter interface: constant SHOW_TEXT on interface object
+PASS NodeFilter interface: constant SHOW_TEXT on interface prototype object
+PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface object
+PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface prototype object
+PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface object
+PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface prototype object
+PASS NodeFilter interface: constant SHOW_ENTITY on interface object
+PASS NodeFilter interface: constant SHOW_ENTITY on interface prototype object
+PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface object
+PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface prototype object
+PASS NodeFilter interface: constant SHOW_COMMENT on interface object
+PASS NodeFilter interface: constant SHOW_COMMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_NOTATION on interface object
+PASS NodeFilter interface: constant SHOW_NOTATION on interface prototype object
+PASS NodeFilter interface: operation acceptNode(Node)
+PASS DOMTokenList interface: existence and properties of interface object
+PASS DOMTokenList interface object length
+PASS DOMTokenList interface object name
+PASS DOMTokenList interface: existence and properties of interface prototype object
+PASS DOMTokenList interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMTokenList interface: attribute length
+PASS DOMTokenList interface: operation item(unsigned long)
+PASS DOMTokenList interface: operation contains(DOMString)
+PASS DOMTokenList interface: operation add(DOMString)
+PASS DOMTokenList interface: operation remove(DOMString)
+PASS DOMTokenList interface: operation toggle(DOMString, boolean)
+PASS DOMTokenList interface: operation replace(DOMString, DOMString)
+PASS DOMTokenList interface: operation supports(DOMString)
+PASS DOMTokenList interface: attribute value
+PASS DOMTokenList interface: stringifier
+PASS DOMTokenList must be primary interface of document.body.classList
+PASS Stringification of document.body.classList
+PASS DOMTokenList interface: document.body.classList must inherit property "length" with the proper type
+PASS DOMTokenList interface: document.body.classList must inherit property "item(unsigned long)" with the proper type
+PASS DOMTokenList interface: calling item(unsigned long) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "contains(DOMString)" with the proper type
+PASS DOMTokenList interface: calling contains(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "add(DOMString)" with the proper type
+PASS DOMTokenList interface: calling add(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "remove(DOMString)" with the proper type
+PASS DOMTokenList interface: calling remove(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "toggle(DOMString, boolean)" with the proper type
+PASS DOMTokenList interface: calling toggle(DOMString, boolean) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "replace(DOMString, DOMString)" with the proper type
+PASS DOMTokenList interface: calling replace(DOMString, DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "supports(DOMString)" with the proper type
+PASS DOMTokenList interface: calling supports(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "value" with the proper type
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/encrypted-media/idlharness.https.html b/third_party/WebKit/LayoutTests/external/wpt/encrypted-media/idlharness.https.html
index e65ad5e3..e7e035e 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/encrypted-media/idlharness.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/encrypted-media/idlharness.https.html
@@ -30,9 +30,7 @@
             .then( function( idls ) {
 
                 var idl_array = new IdlArray();
-                idl_array.add_untested_idls("[PrimaryGlobal] interface Window {};");
                 idl_array.add_untested_idls("interface Navigator {};");
-                idl_array.add_untested_idls("interface ArrayBuffer {};");
                 idl_array.add_untested_idls("interface HTMLMediaElement {};");
                 idl_array.add_untested_idls("interface Event {};");
                 idl_array.add_untested_idls("interface EventTarget {};");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/request-idl.html b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/request-idl.html
index f78f0ca..f783377 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/request-idl.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/request-idl.html
@@ -15,9 +15,7 @@
       typedef any JSON;
       typedef (Blob or BufferSource or FormData or URLSearchParams or USVString) BodyInit;
 
-      [NoInterfaceObject,
-      Exposed=(Window,Worker)]
-      interface Body {
+      interface mixin Body {
         readonly attribute ReadableStream? body;
         readonly attribute boolean bodyUsed;
         [NewObject] Promise<ArrayBuffer> arrayBuffer();
@@ -48,7 +46,7 @@
 
         [NewObject] Request clone();
       };
-      Request implements Body;
+      Request includes Body;
 
       dictionary RequestInit {
         ByteString method;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/response/response-idl.html b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/response/response-idl.html
index 3bbf54e..bd265fa 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/response/response-idl.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/response/response-idl.html
@@ -15,9 +15,7 @@
       typedef any JSON;
       typedef (Blob or BufferSource or FormData or URLSearchParams or USVString) BodyInit;
 
-      [NoInterfaceObject,
-      Exposed=(Window,Worker)]
-      interface Body {
+      interface mixin Body {
         readonly attribute ReadableStream? body;
         readonly attribute boolean bodyUsed;
         [NewObject] Promise<ArrayBuffer> arrayBuffer();
@@ -45,7 +43,7 @@
 
         [NewObject] Response clone();
       };
-      Response implements Body;
+      Response includes Body;
 
       dictionary ResponseInit {
         unsigned short status = 200;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces-expected.txt
index 1fd50f1..341d80b3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces-expected.txt
@@ -1,4 +1,23 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test driver
+FAIL Document interface: attribute fullscreenEnabled assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+FAIL Document interface: attribute fullscreen assert_true: The prototype object must have a property "fullscreen" expected true got false
+FAIL Document interface: operation exitFullscreen() assert_unreached: Throws "TypeError: Illegal invocation" instead of rejecting promise Reached unreachable code
+PASS Document interface: attribute onfullscreenchange
+PASS Document interface: attribute onfullscreenerror
+FAIL Document interface: attribute fullscreenElement assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+PASS Document interface: new Document must inherit property "fullscreenEnabled" with the proper type
+FAIL Document interface: new Document must inherit property "fullscreen" with the proper type assert_inherits: property "fullscreen" not found in prototype chain
+PASS Document interface: new Document must inherit property "exitFullscreen()" with the proper type
+PASS Document interface: new Document must inherit property "onfullscreenchange" with the proper type
+PASS Document interface: new Document must inherit property "onfullscreenerror" with the proper type
+PASS Document interface: new Document must inherit property "fullscreenElement" with the proper type
+FAIL ShadowRoot interface: attribute fullscreenElement assert_equals: setter must be function for PutForwards, Replaceable, or non-readonly attributes expected "function" but got "undefined"
+FAIL Element interface: operation requestFullscreen() assert_unreached: Throws "TypeError: Illegal invocation" instead of rejecting promise Reached unreachable code
+PASS Element interface: attribute onfullscreenchange
+PASS Element interface: attribute onfullscreenerror
+PASS Element interface: document.createElementNS(null, "test") must inherit property "requestFullscreen()" with the proper type
+PASS Element interface: document.createElementNS(null, "test") must inherit property "onfullscreenchange" with the proper type
+PASS Element interface: document.createElementNS(null, "test") must inherit property "onfullscreenerror" with the proper type
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/generic-sensor/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/generic-sensor/idlharness.https-expected.txt
deleted file mode 100644
index 6038252..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/generic-sensor/idlharness.https-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test IDL implementation of Generic Sensor promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/gyroscope/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/gyroscope/idlharness.https-expected.txt
deleted file mode 100644
index f864d4e6..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/gyroscope/idlharness.https-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test IDL implementation of Gyroscope Sensor promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces-expected.txt
index 1fd50f1..2f15fa99 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces-expected.txt
@@ -1,4 +1,5295 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+Found 5287 tests; 5165 PASS, 122 FAIL, 0 TIMEOUT, 0 NOTRUN.
+PASS Test driver
+PASS Document interface: attribute domain
+PASS Document interface: attribute referrer
+PASS Document interface: attribute cookie
+PASS Document interface: attribute lastModified
+PASS Document interface: attribute readyState
+PASS Document interface: attribute title
+PASS Document interface: attribute dir
+PASS Document interface: attribute body
+PASS Document interface: attribute head
+PASS Document interface: attribute images
+PASS Document interface: attribute embeds
+PASS Document interface: attribute plugins
+PASS Document interface: attribute links
+PASS Document interface: attribute forms
+PASS Document interface: attribute scripts
+PASS Document interface: operation getElementsByName(DOMString)
+PASS Document interface: attribute currentScript
+PASS Document interface: operation open(DOMString, DOMString)
+PASS Document interface: operation open(USVString, DOMString, DOMString)
+PASS Document interface: operation close()
+PASS Document interface: operation write(DOMString)
+PASS Document interface: operation writeln(DOMString)
+PASS Document interface: attribute defaultView
+PASS Document interface: attribute activeElement
+PASS Document interface: operation hasFocus()
+PASS Document interface: attribute designMode
+PASS Document interface: operation execCommand(DOMString, boolean, DOMString)
+PASS Document interface: operation queryCommandEnabled(DOMString)
+PASS Document interface: operation queryCommandIndeterm(DOMString)
+PASS Document interface: operation queryCommandState(DOMString)
+PASS Document interface: operation queryCommandSupported(DOMString)
+PASS Document interface: operation queryCommandValue(DOMString)
+PASS Document interface: attribute onreadystatechange
+PASS Document interface: attribute fgColor
+PASS Document interface: attribute linkColor
+PASS Document interface: attribute vlinkColor
+PASS Document interface: attribute alinkColor
+PASS Document interface: attribute bgColor
+PASS Document interface: attribute anchors
+PASS Document interface: attribute applets
+PASS Document interface: operation clear()
+PASS Document interface: operation captureEvents()
+PASS Document interface: operation releaseEvents()
+FAIL Document interface: attribute all assert_equals: setter must be undefined for readonly attributes expected (undefined) undefined but got (function) function "function () { [native code] }"
+PASS Document interface: attribute onabort
+PASS Document interface: attribute onauxclick
+PASS Document interface: attribute onblur
+PASS Document interface: attribute oncancel
+PASS Document interface: attribute oncanplay
+PASS Document interface: attribute oncanplaythrough
+PASS Document interface: attribute onchange
+PASS Document interface: attribute onclick
+PASS Document interface: attribute onclose
+PASS Document interface: attribute oncontextmenu
+PASS Document interface: attribute oncuechange
+PASS Document interface: attribute ondblclick
+PASS Document interface: attribute ondrag
+PASS Document interface: attribute ondragend
+PASS Document interface: attribute ondragenter
+FAIL Document interface: attribute ondragexit assert_true: The prototype object must have a property "ondragexit" expected true got false
+PASS Document interface: attribute ondragleave
+PASS Document interface: attribute ondragover
+PASS Document interface: attribute ondragstart
+PASS Document interface: attribute ondrop
+PASS Document interface: attribute ondurationchange
+PASS Document interface: attribute onemptied
+PASS Document interface: attribute onended
+PASS Document interface: attribute onerror
+PASS Document interface: attribute onfocus
+PASS Document interface: attribute oninput
+PASS Document interface: attribute oninvalid
+PASS Document interface: attribute onkeydown
+PASS Document interface: attribute onkeypress
+PASS Document interface: attribute onkeyup
+PASS Document interface: attribute onload
+PASS Document interface: attribute onloadeddata
+PASS Document interface: attribute onloadedmetadata
+FAIL Document interface: attribute onloadend assert_true: The prototype object must have a property "onloadend" expected true got false
+PASS Document interface: attribute onloadstart
+PASS Document interface: attribute onmousedown
+PASS Document interface: attribute onmouseenter
+PASS Document interface: attribute onmouseleave
+PASS Document interface: attribute onmousemove
+PASS Document interface: attribute onmouseout
+PASS Document interface: attribute onmouseover
+PASS Document interface: attribute onmouseup
+PASS Document interface: attribute onwheel
+PASS Document interface: attribute onpause
+PASS Document interface: attribute onplay
+PASS Document interface: attribute onplaying
+PASS Document interface: attribute onprogress
+PASS Document interface: attribute onratechange
+PASS Document interface: attribute onreset
+PASS Document interface: attribute onresize
+PASS Document interface: attribute onscroll
+PASS Document interface: attribute onsecuritypolicyviolation
+PASS Document interface: attribute onseeked
+PASS Document interface: attribute onseeking
+PASS Document interface: attribute onselect
+PASS Document interface: attribute onstalled
+PASS Document interface: attribute onsubmit
+PASS Document interface: attribute onsuspend
+PASS Document interface: attribute ontimeupdate
+PASS Document interface: attribute ontoggle
+PASS Document interface: attribute onvolumechange
+PASS Document interface: attribute onwaiting
+PASS Document interface: attribute oncopy
+PASS Document interface: attribute oncut
+PASS Document interface: attribute onpaste
+PASS Document interface: iframe.contentDocument must have own property "location"
+PASS Document interface: iframe.contentDocument must inherit property "domain" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "referrer" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "cookie" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "lastModified" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "readyState" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "title" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "dir" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "body" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "head" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "images" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "embeds" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "plugins" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "links" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "forms" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "scripts" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "getElementsByName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByName(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "currentScript" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "open(DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(DOMString, DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "open(USVString, DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(USVString, DOMString, DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "close()" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "write(DOMString)" with the proper type
+PASS Document interface: calling write(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "writeln(DOMString)" with the proper type
+PASS Document interface: calling writeln(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+FAIL Document interface: iframe.contentDocument must inherit property "defaultView" with the proper type Unrecognized type WindowProxy
+PASS Document interface: iframe.contentDocument must inherit property "activeElement" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "hasFocus()" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "designMode" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "execCommand(DOMString, boolean, DOMString)" with the proper type
+PASS Document interface: calling execCommand(DOMString, boolean, DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "queryCommandEnabled(DOMString)" with the proper type
+PASS Document interface: calling queryCommandEnabled(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "queryCommandIndeterm(DOMString)" with the proper type
+PASS Document interface: calling queryCommandIndeterm(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "queryCommandState(DOMString)" with the proper type
+PASS Document interface: calling queryCommandState(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "queryCommandSupported(DOMString)" with the proper type
+PASS Document interface: calling queryCommandSupported(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "queryCommandValue(DOMString)" with the proper type
+PASS Document interface: calling queryCommandValue(DOMString) on iframe.contentDocument with too few arguments must throw TypeError
+PASS Document interface: iframe.contentDocument must inherit property "onreadystatechange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "fgColor" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "linkColor" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "vlinkColor" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "alinkColor" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "bgColor" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "anchors" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "applets" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "clear()" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "captureEvents()" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "releaseEvents()" with the proper type
+FAIL Document interface: iframe.contentDocument must inherit property "all" with the proper type assert_in_array: wrong type: not object or function value "undefined" not in array ["object", "function"]
+PASS Document interface: iframe.contentDocument must inherit property "onabort" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onauxclick" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onblur" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncancel" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncanplay" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncanplaythrough" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onchange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onclick" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onclose" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncontextmenu" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncuechange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondblclick" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondrag" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondragend" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondragenter" with the proper type
+FAIL Document interface: iframe.contentDocument must inherit property "ondragexit" with the proper type assert_inherits: property "ondragexit" not found in prototype chain
+PASS Document interface: iframe.contentDocument must inherit property "ondragleave" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondragover" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondragstart" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondrop" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ondurationchange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onemptied" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onended" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onerror" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onfocus" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oninput" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oninvalid" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onkeydown" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onkeypress" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onkeyup" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onload" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onloadeddata" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onloadedmetadata" with the proper type
+FAIL Document interface: iframe.contentDocument must inherit property "onloadend" with the proper type assert_inherits: property "onloadend" not found in prototype chain
+PASS Document interface: iframe.contentDocument must inherit property "onloadstart" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmousedown" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmouseenter" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmouseleave" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmousemove" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmouseout" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmouseover" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onmouseup" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onwheel" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onpause" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onplay" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onplaying" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onprogress" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onratechange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onreset" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onresize" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onscroll" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onsecuritypolicyviolation" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onseeked" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onseeking" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onselect" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onstalled" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onsubmit" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onsuspend" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ontimeupdate" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "ontoggle" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onvolumechange" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onwaiting" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncopy" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "oncut" with the proper type
+PASS Document interface: iframe.contentDocument must inherit property "onpaste" with the proper type
+PASS Document interface: new Document() must have own property "location"
+PASS Document interface: new Document() must inherit property "domain" with the proper type
+PASS Document interface: new Document() must inherit property "referrer" with the proper type
+PASS Document interface: new Document() must inherit property "cookie" with the proper type
+PASS Document interface: new Document() must inherit property "lastModified" with the proper type
+PASS Document interface: new Document() must inherit property "readyState" with the proper type
+PASS Document interface: new Document() must inherit property "title" with the proper type
+PASS Document interface: new Document() must inherit property "dir" with the proper type
+PASS Document interface: new Document() must inherit property "body" with the proper type
+PASS Document interface: new Document() must inherit property "head" with the proper type
+PASS Document interface: new Document() must inherit property "images" with the proper type
+PASS Document interface: new Document() must inherit property "embeds" with the proper type
+PASS Document interface: new Document() must inherit property "plugins" with the proper type
+PASS Document interface: new Document() must inherit property "links" with the proper type
+PASS Document interface: new Document() must inherit property "forms" with the proper type
+PASS Document interface: new Document() must inherit property "scripts" with the proper type
+PASS Document interface: new Document() must inherit property "getElementsByName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByName(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "currentScript" with the proper type
+PASS Document interface: new Document() must inherit property "open(DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(DOMString, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "open(USVString, DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(USVString, DOMString, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "close()" with the proper type
+PASS Document interface: new Document() must inherit property "write(DOMString)" with the proper type
+PASS Document interface: calling write(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "writeln(DOMString)" with the proper type
+PASS Document interface: calling writeln(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "defaultView" with the proper type
+PASS Document interface: new Document() must inherit property "activeElement" with the proper type
+PASS Document interface: new Document() must inherit property "hasFocus()" with the proper type
+PASS Document interface: new Document() must inherit property "designMode" with the proper type
+PASS Document interface: new Document() must inherit property "execCommand(DOMString, boolean, DOMString)" with the proper type
+PASS Document interface: calling execCommand(DOMString, boolean, DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "queryCommandEnabled(DOMString)" with the proper type
+PASS Document interface: calling queryCommandEnabled(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "queryCommandIndeterm(DOMString)" with the proper type
+PASS Document interface: calling queryCommandIndeterm(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "queryCommandState(DOMString)" with the proper type
+PASS Document interface: calling queryCommandState(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "queryCommandSupported(DOMString)" with the proper type
+PASS Document interface: calling queryCommandSupported(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "queryCommandValue(DOMString)" with the proper type
+PASS Document interface: calling queryCommandValue(DOMString) on new Document() with too few arguments must throw TypeError
+PASS Document interface: new Document() must inherit property "onreadystatechange" with the proper type
+PASS Document interface: new Document() must inherit property "fgColor" with the proper type
+PASS Document interface: new Document() must inherit property "linkColor" with the proper type
+PASS Document interface: new Document() must inherit property "vlinkColor" with the proper type
+PASS Document interface: new Document() must inherit property "alinkColor" with the proper type
+PASS Document interface: new Document() must inherit property "bgColor" with the proper type
+PASS Document interface: new Document() must inherit property "anchors" with the proper type
+PASS Document interface: new Document() must inherit property "applets" with the proper type
+PASS Document interface: new Document() must inherit property "clear()" with the proper type
+PASS Document interface: new Document() must inherit property "captureEvents()" with the proper type
+PASS Document interface: new Document() must inherit property "releaseEvents()" with the proper type
+FAIL Document interface: new Document() must inherit property "all" with the proper type assert_in_array: wrong type: not object or function value "undefined" not in array ["object", "function"]
+PASS Document interface: new Document() must inherit property "onabort" with the proper type
+PASS Document interface: new Document() must inherit property "onauxclick" with the proper type
+PASS Document interface: new Document() must inherit property "onblur" with the proper type
+PASS Document interface: new Document() must inherit property "oncancel" with the proper type
+PASS Document interface: new Document() must inherit property "oncanplay" with the proper type
+PASS Document interface: new Document() must inherit property "oncanplaythrough" with the proper type
+PASS Document interface: new Document() must inherit property "onchange" with the proper type
+PASS Document interface: new Document() must inherit property "onclick" with the proper type
+PASS Document interface: new Document() must inherit property "onclose" with the proper type
+PASS Document interface: new Document() must inherit property "oncontextmenu" with the proper type
+PASS Document interface: new Document() must inherit property "oncuechange" with the proper type
+PASS Document interface: new Document() must inherit property "ondblclick" with the proper type
+PASS Document interface: new Document() must inherit property "ondrag" with the proper type
+PASS Document interface: new Document() must inherit property "ondragend" with the proper type
+PASS Document interface: new Document() must inherit property "ondragenter" with the proper type
+FAIL Document interface: new Document() must inherit property "ondragexit" with the proper type assert_inherits: property "ondragexit" not found in prototype chain
+PASS Document interface: new Document() must inherit property "ondragleave" with the proper type
+PASS Document interface: new Document() must inherit property "ondragover" with the proper type
+PASS Document interface: new Document() must inherit property "ondragstart" with the proper type
+PASS Document interface: new Document() must inherit property "ondrop" with the proper type
+PASS Document interface: new Document() must inherit property "ondurationchange" with the proper type
+PASS Document interface: new Document() must inherit property "onemptied" with the proper type
+PASS Document interface: new Document() must inherit property "onended" with the proper type
+PASS Document interface: new Document() must inherit property "onerror" with the proper type
+PASS Document interface: new Document() must inherit property "onfocus" with the proper type
+PASS Document interface: new Document() must inherit property "oninput" with the proper type
+PASS Document interface: new Document() must inherit property "oninvalid" with the proper type
+PASS Document interface: new Document() must inherit property "onkeydown" with the proper type
+PASS Document interface: new Document() must inherit property "onkeypress" with the proper type
+PASS Document interface: new Document() must inherit property "onkeyup" with the proper type
+PASS Document interface: new Document() must inherit property "onload" with the proper type
+PASS Document interface: new Document() must inherit property "onloadeddata" with the proper type
+PASS Document interface: new Document() must inherit property "onloadedmetadata" with the proper type
+FAIL Document interface: new Document() must inherit property "onloadend" with the proper type assert_inherits: property "onloadend" not found in prototype chain
+PASS Document interface: new Document() must inherit property "onloadstart" with the proper type
+PASS Document interface: new Document() must inherit property "onmousedown" with the proper type
+PASS Document interface: new Document() must inherit property "onmouseenter" with the proper type
+PASS Document interface: new Document() must inherit property "onmouseleave" with the proper type
+PASS Document interface: new Document() must inherit property "onmousemove" with the proper type
+PASS Document interface: new Document() must inherit property "onmouseout" with the proper type
+PASS Document interface: new Document() must inherit property "onmouseover" with the proper type
+PASS Document interface: new Document() must inherit property "onmouseup" with the proper type
+PASS Document interface: new Document() must inherit property "onwheel" with the proper type
+PASS Document interface: new Document() must inherit property "onpause" with the proper type
+PASS Document interface: new Document() must inherit property "onplay" with the proper type
+PASS Document interface: new Document() must inherit property "onplaying" with the proper type
+PASS Document interface: new Document() must inherit property "onprogress" with the proper type
+PASS Document interface: new Document() must inherit property "onratechange" with the proper type
+PASS Document interface: new Document() must inherit property "onreset" with the proper type
+PASS Document interface: new Document() must inherit property "onresize" with the proper type
+PASS Document interface: new Document() must inherit property "onscroll" with the proper type
+PASS Document interface: new Document() must inherit property "onsecuritypolicyviolation" with the proper type
+PASS Document interface: new Document() must inherit property "onseeked" with the proper type
+PASS Document interface: new Document() must inherit property "onseeking" with the proper type
+PASS Document interface: new Document() must inherit property "onselect" with the proper type
+PASS Document interface: new Document() must inherit property "onstalled" with the proper type
+PASS Document interface: new Document() must inherit property "onsubmit" with the proper type
+PASS Document interface: new Document() must inherit property "onsuspend" with the proper type
+PASS Document interface: new Document() must inherit property "ontimeupdate" with the proper type
+PASS Document interface: new Document() must inherit property "ontoggle" with the proper type
+PASS Document interface: new Document() must inherit property "onvolumechange" with the proper type
+PASS Document interface: new Document() must inherit property "onwaiting" with the proper type
+PASS Document interface: new Document() must inherit property "oncopy" with the proper type
+PASS Document interface: new Document() must inherit property "oncut" with the proper type
+PASS Document interface: new Document() must inherit property "onpaste" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must have own property "location"
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "domain" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "referrer" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "cookie" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "lastModified" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "readyState" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "title" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "dir" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "body" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "head" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "images" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "embeds" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "plugins" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "links" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "forms" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "scripts" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "getElementsByName(DOMString)" with the proper type
+PASS Document interface: calling getElementsByName(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "currentScript" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "open(DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(DOMString, DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "open(USVString, DOMString, DOMString)" with the proper type
+PASS Document interface: calling open(USVString, DOMString, DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "close()" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "write(DOMString)" with the proper type
+PASS Document interface: calling write(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "writeln(DOMString)" with the proper type
+PASS Document interface: calling writeln(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "defaultView" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "activeElement" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "hasFocus()" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "designMode" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "execCommand(DOMString, boolean, DOMString)" with the proper type
+PASS Document interface: calling execCommand(DOMString, boolean, DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "queryCommandEnabled(DOMString)" with the proper type
+PASS Document interface: calling queryCommandEnabled(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "queryCommandIndeterm(DOMString)" with the proper type
+PASS Document interface: calling queryCommandIndeterm(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "queryCommandState(DOMString)" with the proper type
+PASS Document interface: calling queryCommandState(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "queryCommandSupported(DOMString)" with the proper type
+PASS Document interface: calling queryCommandSupported(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "queryCommandValue(DOMString)" with the proper type
+PASS Document interface: calling queryCommandValue(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onreadystatechange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "fgColor" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "linkColor" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "vlinkColor" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "alinkColor" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "bgColor" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "anchors" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "applets" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "clear()" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "captureEvents()" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "releaseEvents()" with the proper type
+FAIL Document interface: document.implementation.createDocument(null, "", null) must inherit property "all" with the proper type assert_in_array: wrong type: not object or function value "undefined" not in array ["object", "function"]
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onabort" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onauxclick" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onblur" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncancel" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncanplay" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncanplaythrough" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onchange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onclick" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onclose" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncontextmenu" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncuechange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondblclick" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondrag" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragend" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragenter" with the proper type
+FAIL Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragexit" with the proper type assert_inherits: property "ondragexit" not found in prototype chain
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragleave" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragover" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondragstart" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondrop" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ondurationchange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onemptied" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onended" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onerror" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onfocus" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oninput" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oninvalid" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onkeydown" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onkeypress" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onkeyup" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onload" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onloadeddata" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onloadedmetadata" with the proper type
+FAIL Document interface: document.implementation.createDocument(null, "", null) must inherit property "onloadend" with the proper type assert_inherits: property "onloadend" not found in prototype chain
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onloadstart" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmousedown" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmouseenter" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmouseleave" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmousemove" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmouseout" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmouseover" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onmouseup" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onwheel" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onpause" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onplay" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onplaying" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onprogress" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onratechange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onreset" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onresize" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onscroll" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onsecuritypolicyviolation" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onseeked" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onseeking" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onselect" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onstalled" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onsubmit" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onsuspend" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ontimeupdate" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "ontoggle" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onvolumechange" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onwaiting" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncopy" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "oncut" with the proper type
+PASS Document interface: document.implementation.createDocument(null, "", null) must inherit property "onpaste" with the proper type
+PASS HTMLAllCollection interface: existence and properties of interface object
+PASS HTMLAllCollection interface object length
+PASS HTMLAllCollection interface object name
+PASS HTMLAllCollection interface: existence and properties of interface prototype object
+PASS HTMLAllCollection interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLAllCollection interface: attribute length
+PASS HTMLAllCollection interface: operation namedItem(DOMString)
+PASS HTMLAllCollection interface: operation item(DOMString)
+FAIL HTMLAllCollection must be primary interface of document.all assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL Stringification of document.all assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL HTMLAllCollection interface: document.all must inherit property "length" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL HTMLAllCollection interface: document.all must inherit property "namedItem(DOMString)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL HTMLAllCollection interface: calling namedItem(DOMString) on document.all with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL HTMLAllCollection interface: document.all must inherit property "item(DOMString)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
+FAIL HTMLAllCollection interface: calling item(DOMString) on document.all with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
+PASS HTMLFormControlsCollection interface: existence and properties of interface object
+PASS HTMLFormControlsCollection interface object length
+PASS HTMLFormControlsCollection interface object name
+PASS HTMLFormControlsCollection interface: existence and properties of interface prototype object
+PASS HTMLFormControlsCollection interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFormControlsCollection interface: operation namedItem(DOMString)
+PASS HTMLFormControlsCollection must be primary interface of document.createElement("form").elements
+PASS Stringification of document.createElement("form").elements
+PASS HTMLFormControlsCollection interface: document.createElement("form").elements must inherit property "namedItem(DOMString)" with the proper type
+PASS HTMLFormControlsCollection interface: calling namedItem(DOMString) on document.createElement("form").elements with too few arguments must throw TypeError
+PASS RadioNodeList interface: existence and properties of interface object
+PASS RadioNodeList interface object length
+PASS RadioNodeList interface object name
+PASS RadioNodeList interface: existence and properties of interface prototype object
+PASS RadioNodeList interface: existence and properties of interface prototype object's "constructor" property
+PASS RadioNodeList interface: attribute value
+PASS HTMLOptionsCollection interface: existence and properties of interface object
+PASS HTMLOptionsCollection interface object length
+PASS HTMLOptionsCollection interface object name
+PASS HTMLOptionsCollection interface: existence and properties of interface prototype object
+PASS HTMLOptionsCollection interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLOptionsCollection interface: attribute length
+PASS HTMLOptionsCollection interface: operation add([object Object],[object Object], [object Object],[object Object])
+PASS HTMLOptionsCollection interface: operation remove(long)
+PASS HTMLOptionsCollection interface: attribute selectedIndex
+PASS HTMLOptionsCollection must be primary interface of document.createElement("select").options
+PASS Stringification of document.createElement("select").options
+PASS HTMLOptionsCollection interface: document.createElement("select").options must inherit property "length" with the proper type
+PASS HTMLOptionsCollection interface: document.createElement("select").options must inherit property "add([object Object],[object Object], [object Object],[object Object])" with the proper type
+PASS HTMLOptionsCollection interface: calling add([object Object],[object Object], [object Object],[object Object]) on document.createElement("select").options with too few arguments must throw TypeError
+PASS HTMLOptionsCollection interface: document.createElement("select").options must inherit property "remove(long)" with the proper type
+PASS HTMLOptionsCollection interface: calling remove(long) on document.createElement("select").options with too few arguments must throw TypeError
+PASS HTMLOptionsCollection interface: document.createElement("select").options must inherit property "selectedIndex" with the proper type
+PASS DOMStringList interface: existence and properties of interface object
+PASS DOMStringList interface object length
+PASS DOMStringList interface object name
+PASS DOMStringList interface: existence and properties of interface prototype object
+PASS DOMStringList interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMStringList interface: attribute length
+PASS DOMStringList interface: operation item(unsigned long)
+PASS DOMStringList interface: operation contains(DOMString)
+PASS HTMLElement interface: existence and properties of interface object
+PASS HTMLElement interface object length
+PASS HTMLElement interface object name
+PASS HTMLElement interface: existence and properties of interface prototype object
+PASS HTMLElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLElement interface: attribute title
+PASS HTMLElement interface: attribute lang
+PASS HTMLElement interface: attribute translate
+PASS HTMLElement interface: attribute dir
+PASS HTMLElement interface: attribute dataset
+PASS HTMLElement interface: attribute hidden
+PASS HTMLElement interface: operation click()
+PASS HTMLElement interface: attribute tabIndex
+PASS HTMLElement interface: operation focus(FocusOptions)
+PASS HTMLElement interface: operation blur()
+PASS HTMLElement interface: attribute accessKey
+FAIL HTMLElement interface: attribute accessKeyLabel assert_true: The prototype object must have a property "accessKeyLabel" expected true got false
+PASS HTMLElement interface: attribute draggable
+PASS HTMLElement interface: attribute spellcheck
+PASS HTMLElement interface: attribute innerText
+PASS HTMLElement interface: attribute onabort
+PASS HTMLElement interface: attribute onauxclick
+PASS HTMLElement interface: attribute onblur
+PASS HTMLElement interface: attribute oncancel
+PASS HTMLElement interface: attribute oncanplay
+PASS HTMLElement interface: attribute oncanplaythrough
+PASS HTMLElement interface: attribute onchange
+PASS HTMLElement interface: attribute onclick
+PASS HTMLElement interface: attribute onclose
+PASS HTMLElement interface: attribute oncontextmenu
+PASS HTMLElement interface: attribute oncuechange
+PASS HTMLElement interface: attribute ondblclick
+PASS HTMLElement interface: attribute ondrag
+PASS HTMLElement interface: attribute ondragend
+PASS HTMLElement interface: attribute ondragenter
+FAIL HTMLElement interface: attribute ondragexit assert_true: The prototype object must have a property "ondragexit" expected true got false
+PASS HTMLElement interface: attribute ondragleave
+PASS HTMLElement interface: attribute ondragover
+PASS HTMLElement interface: attribute ondragstart
+PASS HTMLElement interface: attribute ondrop
+PASS HTMLElement interface: attribute ondurationchange
+PASS HTMLElement interface: attribute onemptied
+PASS HTMLElement interface: attribute onended
+PASS HTMLElement interface: attribute onerror
+PASS HTMLElement interface: attribute onfocus
+PASS HTMLElement interface: attribute oninput
+PASS HTMLElement interface: attribute oninvalid
+PASS HTMLElement interface: attribute onkeydown
+PASS HTMLElement interface: attribute onkeypress
+PASS HTMLElement interface: attribute onkeyup
+PASS HTMLElement interface: attribute onload
+PASS HTMLElement interface: attribute onloadeddata
+PASS HTMLElement interface: attribute onloadedmetadata
+FAIL HTMLElement interface: attribute onloadend assert_true: The prototype object must have a property "onloadend" expected true got false
+PASS HTMLElement interface: attribute onloadstart
+PASS HTMLElement interface: attribute onmousedown
+PASS HTMLElement interface: attribute onmouseenter
+PASS HTMLElement interface: attribute onmouseleave
+PASS HTMLElement interface: attribute onmousemove
+PASS HTMLElement interface: attribute onmouseout
+PASS HTMLElement interface: attribute onmouseover
+PASS HTMLElement interface: attribute onmouseup
+PASS HTMLElement interface: attribute onwheel
+PASS HTMLElement interface: attribute onpause
+PASS HTMLElement interface: attribute onplay
+PASS HTMLElement interface: attribute onplaying
+PASS HTMLElement interface: attribute onprogress
+PASS HTMLElement interface: attribute onratechange
+PASS HTMLElement interface: attribute onreset
+PASS HTMLElement interface: attribute onresize
+PASS HTMLElement interface: attribute onscroll
+FAIL HTMLElement interface: attribute onsecuritypolicyviolation assert_true: The prototype object must have a property "onsecuritypolicyviolation" expected true got false
+PASS HTMLElement interface: attribute onseeked
+PASS HTMLElement interface: attribute onseeking
+PASS HTMLElement interface: attribute onselect
+PASS HTMLElement interface: attribute onstalled
+PASS HTMLElement interface: attribute onsubmit
+PASS HTMLElement interface: attribute onsuspend
+PASS HTMLElement interface: attribute ontimeupdate
+PASS HTMLElement interface: attribute ontoggle
+PASS HTMLElement interface: attribute onvolumechange
+PASS HTMLElement interface: attribute onwaiting
+FAIL HTMLElement interface: attribute oncopy assert_own_property: expected property "oncopy" missing
+FAIL HTMLElement interface: attribute oncut assert_own_property: expected property "oncut" missing
+FAIL HTMLElement interface: attribute onpaste assert_own_property: expected property "onpaste" missing
+PASS HTMLElement interface: attribute contentEditable
+PASS HTMLElement interface: attribute isContentEditable
+PASS HTMLElement must be primary interface of document.createElement("noscript")
+PASS Stringification of document.createElement("noscript")
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "title" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "lang" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "translate" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "dir" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "dataset" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "hidden" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "click()" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "tabIndex" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "focus(FocusOptions)" with the proper type
+PASS HTMLElement interface: calling focus(FocusOptions) on document.createElement("noscript") with too few arguments must throw TypeError
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "blur()" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "accessKey" with the proper type
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "accessKeyLabel" with the proper type assert_inherits: property "accessKeyLabel" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "draggable" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "spellcheck" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "innerText" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onabort" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onauxclick" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onblur" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncancel" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplay" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplaythrough" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onchange" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onclick" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onclose" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncontextmenu" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncuechange" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondblclick" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrag" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragend" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragenter" with the proper type
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "ondragexit" with the proper type assert_inherits: property "ondragexit" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragleave" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragover" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragstart" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrop" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondurationchange" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onemptied" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onended" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onerror" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onfocus" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninput" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninvalid" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeydown" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeypress" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeyup" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onload" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadeddata" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadedmetadata" with the proper type
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onloadend" with the proper type assert_inherits: property "onloadend" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadstart" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousedown" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseenter" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseleave" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousemove" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseout" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseover" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseup" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onwheel" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpause" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplay" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplaying" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onprogress" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onratechange" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onreset" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onresize" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onscroll" with the proper type
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onsecuritypolicyviolation" with the proper type assert_inherits: property "onsecuritypolicyviolation" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeked" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeking" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onselect" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onstalled" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsubmit" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsuspend" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontimeupdate" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontoggle" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onvolumechange" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncopy" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncut" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpaste" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "contentEditable" with the proper type
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "isContentEditable" with the proper type
+PASS HTMLUnknownElement interface: existence and properties of interface object
+PASS HTMLUnknownElement interface object length
+PASS HTMLUnknownElement interface object name
+PASS HTMLUnknownElement interface: existence and properties of interface prototype object
+PASS HTMLUnknownElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLUnknownElement must be primary interface of document.createElement("bgsound")
+PASS Stringification of document.createElement("bgsound")
+PASS DOMStringMap interface: existence and properties of interface object
+PASS DOMStringMap interface object length
+PASS DOMStringMap interface object name
+PASS DOMStringMap interface: existence and properties of interface prototype object
+PASS DOMStringMap interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMStringMap must be primary interface of document.head.dataset
+PASS Stringification of document.head.dataset
+PASS HTMLHtmlElement interface: existence and properties of interface object
+PASS HTMLHtmlElement interface object length
+PASS HTMLHtmlElement interface object name
+PASS HTMLHtmlElement interface: existence and properties of interface prototype object
+PASS HTMLHtmlElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLHtmlElement interface: attribute version
+PASS HTMLHtmlElement must be primary interface of document.createElement("html")
+PASS Stringification of document.createElement("html")
+PASS HTMLHtmlElement interface: document.createElement("html") must inherit property "version" with the proper type
+PASS HTMLHeadElement interface: existence and properties of interface object
+PASS HTMLHeadElement interface object length
+PASS HTMLHeadElement interface object name
+PASS HTMLHeadElement interface: existence and properties of interface prototype object
+PASS HTMLHeadElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLHeadElement must be primary interface of document.createElement("head")
+PASS Stringification of document.createElement("head")
+PASS HTMLTitleElement interface: existence and properties of interface object
+PASS HTMLTitleElement interface object length
+PASS HTMLTitleElement interface object name
+PASS HTMLTitleElement interface: existence and properties of interface prototype object
+PASS HTMLTitleElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTitleElement interface: attribute text
+PASS HTMLTitleElement must be primary interface of document.createElement("title")
+PASS Stringification of document.createElement("title")
+PASS HTMLTitleElement interface: document.createElement("title") must inherit property "text" with the proper type
+PASS HTMLBaseElement interface: existence and properties of interface object
+PASS HTMLBaseElement interface object length
+PASS HTMLBaseElement interface object name
+PASS HTMLBaseElement interface: existence and properties of interface prototype object
+PASS HTMLBaseElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLBaseElement interface: attribute href
+PASS HTMLBaseElement interface: attribute target
+PASS HTMLBaseElement must be primary interface of document.createElement("base")
+PASS Stringification of document.createElement("base")
+PASS HTMLBaseElement interface: document.createElement("base") must inherit property "href" with the proper type
+PASS HTMLBaseElement interface: document.createElement("base") must inherit property "target" with the proper type
+PASS HTMLLinkElement interface: existence and properties of interface object
+PASS HTMLLinkElement interface object length
+PASS HTMLLinkElement interface object name
+PASS HTMLLinkElement interface: existence and properties of interface prototype object
+PASS HTMLLinkElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLLinkElement interface: attribute href
+PASS HTMLLinkElement interface: attribute crossOrigin
+PASS HTMLLinkElement interface: attribute rel
+PASS HTMLLinkElement interface: attribute as
+PASS HTMLLinkElement interface: attribute relList
+PASS HTMLLinkElement interface: attribute media
+FAIL HTMLLinkElement interface: attribute nonce assert_own_property: expected property "nonce" missing
+PASS HTMLLinkElement interface: attribute integrity
+PASS HTMLLinkElement interface: attribute hreflang
+PASS HTMLLinkElement interface: attribute type
+PASS HTMLLinkElement interface: attribute sizes
+PASS HTMLLinkElement interface: attribute referrerPolicy
+FAIL HTMLLinkElement interface: attribute workerType assert_true: The prototype object must have a property "workerType" expected true got false
+FAIL HTMLLinkElement interface: attribute updateViaCache assert_true: The prototype object must have a property "updateViaCache" expected true got false
+PASS HTMLLinkElement interface: attribute charset
+PASS HTMLLinkElement interface: attribute rev
+PASS HTMLLinkElement interface: attribute target
+PASS HTMLLinkElement must be primary interface of document.createElement("link")
+PASS Stringification of document.createElement("link")
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "href" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "crossOrigin" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "rel" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "as" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "relList" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "media" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "nonce" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "integrity" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "hreflang" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "type" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "sizes" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "referrerPolicy" with the proper type
+FAIL HTMLLinkElement interface: document.createElement("link") must inherit property "workerType" with the proper type assert_inherits: property "workerType" not found in prototype chain
+FAIL HTMLLinkElement interface: document.createElement("link") must inherit property "updateViaCache" with the proper type assert_inherits: property "updateViaCache" not found in prototype chain
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "charset" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "rev" with the proper type
+PASS HTMLLinkElement interface: document.createElement("link") must inherit property "target" with the proper type
+PASS HTMLMetaElement interface: existence and properties of interface object
+PASS HTMLMetaElement interface object length
+PASS HTMLMetaElement interface object name
+PASS HTMLMetaElement interface: existence and properties of interface prototype object
+PASS HTMLMetaElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMetaElement interface: attribute name
+PASS HTMLMetaElement interface: attribute httpEquiv
+PASS HTMLMetaElement interface: attribute content
+PASS HTMLMetaElement interface: attribute scheme
+PASS HTMLMetaElement must be primary interface of document.createElement("meta")
+PASS Stringification of document.createElement("meta")
+PASS HTMLMetaElement interface: document.createElement("meta") must inherit property "name" with the proper type
+PASS HTMLMetaElement interface: document.createElement("meta") must inherit property "httpEquiv" with the proper type
+PASS HTMLMetaElement interface: document.createElement("meta") must inherit property "content" with the proper type
+PASS HTMLMetaElement interface: document.createElement("meta") must inherit property "scheme" with the proper type
+PASS HTMLStyleElement interface: existence and properties of interface object
+PASS HTMLStyleElement interface object length
+PASS HTMLStyleElement interface object name
+PASS HTMLStyleElement interface: existence and properties of interface prototype object
+PASS HTMLStyleElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLStyleElement interface: attribute media
+FAIL HTMLStyleElement interface: attribute nonce assert_own_property: expected property "nonce" missing
+PASS HTMLStyleElement interface: attribute type
+PASS HTMLStyleElement must be primary interface of document.createElement("style")
+PASS Stringification of document.createElement("style")
+PASS HTMLStyleElement interface: document.createElement("style") must inherit property "media" with the proper type
+PASS HTMLStyleElement interface: document.createElement("style") must inherit property "nonce" with the proper type
+PASS HTMLStyleElement interface: document.createElement("style") must inherit property "type" with the proper type
+PASS HTMLBodyElement interface: existence and properties of interface object
+PASS HTMLBodyElement interface object length
+PASS HTMLBodyElement interface object name
+PASS HTMLBodyElement interface: existence and properties of interface prototype object
+PASS HTMLBodyElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLBodyElement interface: attribute text
+PASS HTMLBodyElement interface: attribute link
+PASS HTMLBodyElement interface: attribute vLink
+PASS HTMLBodyElement interface: attribute aLink
+PASS HTMLBodyElement interface: attribute bgColor
+PASS HTMLBodyElement interface: attribute background
+PASS HTMLBodyElement interface: attribute onafterprint
+PASS HTMLBodyElement interface: attribute onbeforeprint
+PASS HTMLBodyElement interface: attribute onbeforeunload
+PASS HTMLBodyElement interface: attribute onhashchange
+PASS HTMLBodyElement interface: attribute onlanguagechange
+PASS HTMLBodyElement interface: attribute onmessage
+PASS HTMLBodyElement interface: attribute onmessageerror
+PASS HTMLBodyElement interface: attribute onoffline
+PASS HTMLBodyElement interface: attribute ononline
+PASS HTMLBodyElement interface: attribute onpagehide
+PASS HTMLBodyElement interface: attribute onpageshow
+PASS HTMLBodyElement interface: attribute onpopstate
+PASS HTMLBodyElement interface: attribute onrejectionhandled
+PASS HTMLBodyElement interface: attribute onstorage
+PASS HTMLBodyElement interface: attribute onunhandledrejection
+PASS HTMLBodyElement interface: attribute onunload
+PASS HTMLBodyElement must be primary interface of document.createElement("body")
+PASS Stringification of document.createElement("body")
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "text" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "link" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "vLink" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "aLink" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "bgColor" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "background" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onafterprint" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onbeforeprint" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onbeforeunload" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onhashchange" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onlanguagechange" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onmessage" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onmessageerror" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onoffline" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "ononline" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onpagehide" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onpageshow" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onpopstate" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onrejectionhandled" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onstorage" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onunhandledrejection" with the proper type
+PASS HTMLBodyElement interface: document.createElement("body") must inherit property "onunload" with the proper type
+PASS HTMLHeadingElement interface: existence and properties of interface object
+PASS HTMLHeadingElement interface object length
+PASS HTMLHeadingElement interface object name
+PASS HTMLHeadingElement interface: existence and properties of interface prototype object
+PASS HTMLHeadingElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLHeadingElement interface: attribute align
+PASS HTMLHeadingElement must be primary interface of document.createElement("h1")
+PASS Stringification of document.createElement("h1")
+PASS HTMLHeadingElement interface: document.createElement("h1") must inherit property "align" with the proper type
+PASS HTMLParagraphElement interface: existence and properties of interface object
+PASS HTMLParagraphElement interface object length
+PASS HTMLParagraphElement interface object name
+PASS HTMLParagraphElement interface: existence and properties of interface prototype object
+PASS HTMLParagraphElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLParagraphElement interface: attribute align
+PASS HTMLParagraphElement must be primary interface of document.createElement("p")
+PASS Stringification of document.createElement("p")
+PASS HTMLParagraphElement interface: document.createElement("p") must inherit property "align" with the proper type
+PASS HTMLHRElement interface: existence and properties of interface object
+PASS HTMLHRElement interface object length
+PASS HTMLHRElement interface object name
+PASS HTMLHRElement interface: existence and properties of interface prototype object
+PASS HTMLHRElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLHRElement interface: attribute align
+PASS HTMLHRElement interface: attribute color
+PASS HTMLHRElement interface: attribute noShade
+PASS HTMLHRElement interface: attribute size
+PASS HTMLHRElement interface: attribute width
+PASS HTMLHRElement must be primary interface of document.createElement("hr")
+PASS Stringification of document.createElement("hr")
+PASS HTMLHRElement interface: document.createElement("hr") must inherit property "align" with the proper type
+PASS HTMLHRElement interface: document.createElement("hr") must inherit property "color" with the proper type
+PASS HTMLHRElement interface: document.createElement("hr") must inherit property "noShade" with the proper type
+PASS HTMLHRElement interface: document.createElement("hr") must inherit property "size" with the proper type
+PASS HTMLHRElement interface: document.createElement("hr") must inherit property "width" with the proper type
+PASS HTMLPreElement interface: existence and properties of interface object
+PASS HTMLPreElement interface object length
+PASS HTMLPreElement interface object name
+PASS HTMLPreElement interface: existence and properties of interface prototype object
+PASS HTMLPreElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLPreElement interface: attribute width
+PASS HTMLPreElement must be primary interface of document.createElement("pre")
+PASS Stringification of document.createElement("pre")
+PASS HTMLPreElement interface: document.createElement("pre") must inherit property "width" with the proper type
+PASS HTMLPreElement must be primary interface of document.createElement("listing")
+PASS Stringification of document.createElement("listing")
+PASS HTMLPreElement interface: document.createElement("listing") must inherit property "width" with the proper type
+PASS HTMLPreElement must be primary interface of document.createElement("xmp")
+PASS Stringification of document.createElement("xmp")
+PASS HTMLPreElement interface: document.createElement("xmp") must inherit property "width" with the proper type
+PASS HTMLQuoteElement interface: existence and properties of interface object
+PASS HTMLQuoteElement interface object length
+PASS HTMLQuoteElement interface object name
+PASS HTMLQuoteElement interface: existence and properties of interface prototype object
+PASS HTMLQuoteElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLQuoteElement interface: attribute cite
+PASS HTMLQuoteElement must be primary interface of document.createElement("blockquote")
+PASS Stringification of document.createElement("blockquote")
+PASS HTMLQuoteElement interface: document.createElement("blockquote") must inherit property "cite" with the proper type
+PASS HTMLQuoteElement must be primary interface of document.createElement("q")
+PASS Stringification of document.createElement("q")
+PASS HTMLQuoteElement interface: document.createElement("q") must inherit property "cite" with the proper type
+PASS HTMLOListElement interface: existence and properties of interface object
+PASS HTMLOListElement interface object length
+PASS HTMLOListElement interface object name
+PASS HTMLOListElement interface: existence and properties of interface prototype object
+PASS HTMLOListElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLOListElement interface: attribute reversed
+PASS HTMLOListElement interface: attribute start
+PASS HTMLOListElement interface: attribute type
+PASS HTMLOListElement interface: attribute compact
+PASS HTMLUListElement interface: existence and properties of interface object
+PASS HTMLUListElement interface object length
+PASS HTMLUListElement interface object name
+PASS HTMLUListElement interface: existence and properties of interface prototype object
+PASS HTMLUListElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLUListElement interface: attribute compact
+PASS HTMLUListElement interface: attribute type
+PASS HTMLMenuElement interface: existence and properties of interface object
+PASS HTMLMenuElement interface object length
+PASS HTMLMenuElement interface object name
+PASS HTMLMenuElement interface: existence and properties of interface prototype object
+PASS HTMLMenuElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMenuElement interface: attribute compact
+PASS HTMLMenuElement must be primary interface of document.createElement("menu")
+PASS Stringification of document.createElement("menu")
+PASS HTMLMenuElement interface: document.createElement("menu") must inherit property "compact" with the proper type
+PASS HTMLLIElement interface: existence and properties of interface object
+PASS HTMLLIElement interface object length
+PASS HTMLLIElement interface object name
+PASS HTMLLIElement interface: existence and properties of interface prototype object
+PASS HTMLLIElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLLIElement interface: attribute value
+PASS HTMLLIElement interface: attribute type
+PASS HTMLLIElement must be primary interface of document.createElement("li")
+PASS Stringification of document.createElement("li")
+PASS HTMLLIElement interface: document.createElement("li") must inherit property "value" with the proper type
+PASS HTMLLIElement interface: document.createElement("li") must inherit property "type" with the proper type
+PASS HTMLDListElement interface: existence and properties of interface object
+PASS HTMLDListElement interface object length
+PASS HTMLDListElement interface object name
+PASS HTMLDListElement interface: existence and properties of interface prototype object
+PASS HTMLDListElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDListElement interface: attribute compact
+PASS HTMLDivElement interface: existence and properties of interface object
+PASS HTMLDivElement interface object length
+PASS HTMLDivElement interface object name
+PASS HTMLDivElement interface: existence and properties of interface prototype object
+PASS HTMLDivElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDivElement interface: attribute align
+PASS HTMLDivElement must be primary interface of document.createElement("div")
+PASS Stringification of document.createElement("div")
+PASS HTMLDivElement interface: document.createElement("div") must inherit property "align" with the proper type
+PASS HTMLAnchorElement interface: existence and properties of interface object
+PASS HTMLAnchorElement interface object length
+PASS HTMLAnchorElement interface object name
+PASS HTMLAnchorElement interface: existence and properties of interface prototype object
+PASS HTMLAnchorElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLAnchorElement interface: attribute target
+PASS HTMLAnchorElement interface: attribute download
+PASS HTMLAnchorElement interface: attribute ping
+PASS HTMLAnchorElement interface: attribute rel
+FAIL HTMLAnchorElement interface: attribute relList assert_true: The prototype object must have a property "relList" expected true got false
+PASS HTMLAnchorElement interface: attribute hreflang
+PASS HTMLAnchorElement interface: attribute type
+PASS HTMLAnchorElement interface: attribute text
+PASS HTMLAnchorElement interface: attribute referrerPolicy
+PASS HTMLAnchorElement interface: attribute coords
+PASS HTMLAnchorElement interface: attribute charset
+PASS HTMLAnchorElement interface: attribute name
+PASS HTMLAnchorElement interface: attribute rev
+PASS HTMLAnchorElement interface: attribute shape
+PASS HTMLAnchorElement interface: attribute href
+PASS HTMLAnchorElement interface: stringifier
+PASS HTMLAnchorElement interface: attribute origin
+PASS HTMLAnchorElement interface: attribute protocol
+PASS HTMLAnchorElement interface: attribute username
+PASS HTMLAnchorElement interface: attribute password
+PASS HTMLAnchorElement interface: attribute host
+PASS HTMLAnchorElement interface: attribute hostname
+PASS HTMLAnchorElement interface: attribute port
+PASS HTMLAnchorElement interface: attribute pathname
+PASS HTMLAnchorElement interface: attribute search
+PASS HTMLAnchorElement interface: attribute hash
+PASS HTMLAnchorElement must be primary interface of document.createElement("a")
+PASS Stringification of document.createElement("a")
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "target" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "download" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "ping" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "rel" with the proper type
+FAIL HTMLAnchorElement interface: document.createElement("a") must inherit property "relList" with the proper type assert_inherits: property "relList" not found in prototype chain
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "hreflang" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "type" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "text" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "referrerPolicy" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "coords" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "charset" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "name" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "rev" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "shape" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "href" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "origin" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "protocol" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "username" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "password" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "host" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "hostname" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "port" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "pathname" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "search" with the proper type
+PASS HTMLAnchorElement interface: document.createElement("a") must inherit property "hash" with the proper type
+PASS HTMLDataElement interface: existence and properties of interface object
+PASS HTMLDataElement interface object length
+PASS HTMLDataElement interface object name
+PASS HTMLDataElement interface: existence and properties of interface prototype object
+PASS HTMLDataElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDataElement interface: attribute value
+PASS HTMLDataElement must be primary interface of document.createElement("data")
+PASS Stringification of document.createElement("data")
+PASS HTMLDataElement interface: document.createElement("data") must inherit property "value" with the proper type
+PASS HTMLTimeElement interface: existence and properties of interface object
+PASS HTMLTimeElement interface object length
+PASS HTMLTimeElement interface object name
+PASS HTMLTimeElement interface: existence and properties of interface prototype object
+PASS HTMLTimeElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTimeElement interface: attribute dateTime
+PASS HTMLTimeElement must be primary interface of document.createElement("time")
+PASS Stringification of document.createElement("time")
+PASS HTMLTimeElement interface: document.createElement("time") must inherit property "dateTime" with the proper type
+PASS HTMLSpanElement interface: existence and properties of interface object
+PASS HTMLSpanElement interface object length
+PASS HTMLSpanElement interface object name
+PASS HTMLSpanElement interface: existence and properties of interface prototype object
+PASS HTMLSpanElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLSpanElement must be primary interface of document.createElement("span")
+PASS Stringification of document.createElement("span")
+PASS HTMLBRElement interface: existence and properties of interface object
+PASS HTMLBRElement interface object length
+PASS HTMLBRElement interface object name
+PASS HTMLBRElement interface: existence and properties of interface prototype object
+PASS HTMLBRElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLBRElement interface: attribute clear
+PASS HTMLBRElement must be primary interface of document.createElement("br")
+PASS Stringification of document.createElement("br")
+PASS HTMLBRElement interface: document.createElement("br") must inherit property "clear" with the proper type
+PASS HTMLModElement interface: existence and properties of interface object
+PASS HTMLModElement interface object length
+PASS HTMLModElement interface object name
+PASS HTMLModElement interface: existence and properties of interface prototype object
+PASS HTMLModElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLModElement interface: attribute cite
+PASS HTMLModElement interface: attribute dateTime
+PASS HTMLModElement must be primary interface of document.createElement("ins")
+PASS Stringification of document.createElement("ins")
+PASS HTMLModElement interface: document.createElement("ins") must inherit property "cite" with the proper type
+PASS HTMLModElement interface: document.createElement("ins") must inherit property "dateTime" with the proper type
+PASS HTMLModElement must be primary interface of document.createElement("del")
+PASS Stringification of document.createElement("del")
+PASS HTMLModElement interface: document.createElement("del") must inherit property "cite" with the proper type
+PASS HTMLModElement interface: document.createElement("del") must inherit property "dateTime" with the proper type
+PASS HTMLPictureElement interface: existence and properties of interface object
+PASS HTMLPictureElement interface object length
+PASS HTMLPictureElement interface object name
+PASS HTMLPictureElement interface: existence and properties of interface prototype object
+PASS HTMLPictureElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLPictureElement must be primary interface of document.createElement("picture")
+PASS Stringification of document.createElement("picture")
+PASS HTMLSourceElement interface: existence and properties of interface object
+PASS HTMLSourceElement interface object length
+PASS HTMLSourceElement interface object name
+PASS HTMLSourceElement interface: existence and properties of interface prototype object
+PASS HTMLSourceElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLSourceElement interface: attribute src
+PASS HTMLSourceElement interface: attribute type
+PASS HTMLSourceElement interface: attribute srcset
+PASS HTMLSourceElement interface: attribute sizes
+PASS HTMLSourceElement interface: attribute media
+PASS HTMLSourceElement must be primary interface of document.createElement("source")
+PASS Stringification of document.createElement("source")
+PASS HTMLSourceElement interface: document.createElement("source") must inherit property "src" with the proper type
+PASS HTMLSourceElement interface: document.createElement("source") must inherit property "type" with the proper type
+PASS HTMLSourceElement interface: document.createElement("source") must inherit property "srcset" with the proper type
+PASS HTMLSourceElement interface: document.createElement("source") must inherit property "sizes" with the proper type
+PASS HTMLSourceElement interface: document.createElement("source") must inherit property "media" with the proper type
+PASS HTMLImageElement interface: existence and properties of interface object
+PASS HTMLImageElement interface object length
+PASS HTMLImageElement interface object name
+PASS HTMLImageElement interface: existence and properties of interface prototype object
+PASS HTMLImageElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLImageElement interface: attribute alt
+PASS HTMLImageElement interface: attribute src
+PASS HTMLImageElement interface: attribute srcset
+PASS HTMLImageElement interface: attribute sizes
+PASS HTMLImageElement interface: attribute crossOrigin
+PASS HTMLImageElement interface: attribute useMap
+PASS HTMLImageElement interface: attribute isMap
+PASS HTMLImageElement interface: attribute width
+PASS HTMLImageElement interface: attribute height
+PASS HTMLImageElement interface: attribute naturalWidth
+PASS HTMLImageElement interface: attribute naturalHeight
+PASS HTMLImageElement interface: attribute complete
+PASS HTMLImageElement interface: attribute currentSrc
+PASS HTMLImageElement interface: attribute referrerPolicy
+PASS HTMLImageElement interface: operation decode()
+PASS HTMLImageElement interface: attribute name
+PASS HTMLImageElement interface: attribute lowsrc
+PASS HTMLImageElement interface: attribute align
+PASS HTMLImageElement interface: attribute hspace
+PASS HTMLImageElement interface: attribute vspace
+PASS HTMLImageElement interface: attribute longDesc
+PASS HTMLImageElement interface: attribute border
+PASS HTMLImageElement must be primary interface of document.createElement("img")
+PASS Stringification of document.createElement("img")
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "alt" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "src" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "srcset" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "sizes" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "crossOrigin" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "useMap" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "isMap" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "width" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "height" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "naturalWidth" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "naturalHeight" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "complete" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "currentSrc" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "referrerPolicy" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "decode()" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "name" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "lowsrc" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "align" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "hspace" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "vspace" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "longDesc" with the proper type
+PASS HTMLImageElement interface: document.createElement("img") must inherit property "border" with the proper type
+PASS HTMLImageElement must be primary interface of new Image()
+PASS Stringification of new Image()
+PASS HTMLImageElement interface: new Image() must inherit property "alt" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "src" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "srcset" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "sizes" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "crossOrigin" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "useMap" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "isMap" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "width" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "height" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "naturalWidth" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "naturalHeight" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "complete" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "currentSrc" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "referrerPolicy" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "decode()" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "name" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "lowsrc" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "align" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "hspace" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "vspace" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "longDesc" with the proper type
+PASS HTMLImageElement interface: new Image() must inherit property "border" with the proper type
+PASS HTMLIFrameElement interface: existence and properties of interface object
+PASS HTMLIFrameElement interface object length
+PASS HTMLIFrameElement interface object name
+PASS HTMLIFrameElement interface: existence and properties of interface prototype object
+PASS HTMLIFrameElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLIFrameElement interface: attribute src
+PASS HTMLIFrameElement interface: attribute srcdoc
+PASS HTMLIFrameElement interface: attribute name
+PASS HTMLIFrameElement interface: attribute sandbox
+PASS HTMLIFrameElement interface: attribute allowFullscreen
+PASS HTMLIFrameElement interface: attribute allowPaymentRequest
+FAIL HTMLIFrameElement interface: attribute allowUserMedia assert_true: The prototype object must have a property "allowUserMedia" expected true got false
+PASS HTMLIFrameElement interface: attribute width
+PASS HTMLIFrameElement interface: attribute height
+PASS HTMLIFrameElement interface: attribute referrerPolicy
+PASS HTMLIFrameElement interface: attribute contentDocument
+PASS HTMLIFrameElement interface: attribute contentWindow
+PASS HTMLIFrameElement interface: operation getSVGDocument()
+FAIL HTMLIFrameElement interface: attribute delegateStickyUserActivation assert_true: The prototype object must have a property "delegateStickyUserActivation" expected true got false
+PASS HTMLIFrameElement interface: attribute align
+PASS HTMLIFrameElement interface: attribute scrolling
+PASS HTMLIFrameElement interface: attribute frameBorder
+PASS HTMLIFrameElement interface: attribute longDesc
+PASS HTMLIFrameElement interface: attribute marginHeight
+PASS HTMLIFrameElement interface: attribute marginWidth
+PASS HTMLEmbedElement interface: existence and properties of interface object
+PASS HTMLEmbedElement interface object length
+PASS HTMLEmbedElement interface object name
+PASS HTMLEmbedElement interface: existence and properties of interface prototype object
+PASS HTMLEmbedElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLEmbedElement interface: attribute src
+PASS HTMLEmbedElement interface: attribute type
+PASS HTMLEmbedElement interface: attribute width
+PASS HTMLEmbedElement interface: attribute height
+PASS HTMLEmbedElement interface: operation getSVGDocument()
+PASS HTMLEmbedElement interface: attribute align
+PASS HTMLEmbedElement interface: attribute name
+PASS HTMLEmbedElement must be primary interface of document.createElement("embed")
+PASS Stringification of document.createElement("embed")
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "src" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "type" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "width" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "height" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "getSVGDocument()" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "align" with the proper type
+PASS HTMLEmbedElement interface: document.createElement("embed") must inherit property "name" with the proper type
+PASS HTMLObjectElement interface: existence and properties of interface object
+PASS HTMLObjectElement interface object length
+PASS HTMLObjectElement interface object name
+PASS HTMLObjectElement interface: existence and properties of interface prototype object
+PASS HTMLObjectElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLObjectElement interface: attribute data
+PASS HTMLObjectElement interface: attribute type
+FAIL HTMLObjectElement interface: attribute typeMustMatch assert_true: The prototype object must have a property "typeMustMatch" expected true got false
+PASS HTMLObjectElement interface: attribute name
+PASS HTMLObjectElement interface: attribute useMap
+PASS HTMLObjectElement interface: attribute form
+PASS HTMLObjectElement interface: attribute width
+PASS HTMLObjectElement interface: attribute height
+PASS HTMLObjectElement interface: attribute contentDocument
+PASS HTMLObjectElement interface: attribute contentWindow
+PASS HTMLObjectElement interface: operation getSVGDocument()
+PASS HTMLObjectElement interface: attribute willValidate
+PASS HTMLObjectElement interface: attribute validity
+PASS HTMLObjectElement interface: attribute validationMessage
+PASS HTMLObjectElement interface: operation checkValidity()
+PASS HTMLObjectElement interface: operation reportValidity()
+PASS HTMLObjectElement interface: operation setCustomValidity(DOMString)
+PASS HTMLObjectElement interface: attribute align
+PASS HTMLObjectElement interface: attribute archive
+PASS HTMLObjectElement interface: attribute code
+PASS HTMLObjectElement interface: attribute declare
+PASS HTMLObjectElement interface: attribute hspace
+PASS HTMLObjectElement interface: attribute standby
+PASS HTMLObjectElement interface: attribute vspace
+PASS HTMLObjectElement interface: attribute codeBase
+PASS HTMLObjectElement interface: attribute codeType
+PASS HTMLObjectElement interface: attribute border
+PASS HTMLObjectElement must be primary interface of document.createElement("object")
+PASS Stringification of document.createElement("object")
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "data" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "type" with the proper type
+FAIL HTMLObjectElement interface: document.createElement("object") must inherit property "typeMustMatch" with the proper type assert_inherits: property "typeMustMatch" not found in prototype chain
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "name" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "useMap" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "form" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "width" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "height" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "contentDocument" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "contentWindow" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "getSVGDocument()" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "willValidate" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "validity" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "validationMessage" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "checkValidity()" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "reportValidity()" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLObjectElement interface: calling setCustomValidity(DOMString) on document.createElement("object") with too few arguments must throw TypeError
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "align" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "archive" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "code" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "declare" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "hspace" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "standby" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "vspace" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "codeBase" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "codeType" with the proper type
+PASS HTMLObjectElement interface: document.createElement("object") must inherit property "border" with the proper type
+PASS HTMLParamElement interface: existence and properties of interface object
+PASS HTMLParamElement interface object length
+PASS HTMLParamElement interface object name
+PASS HTMLParamElement interface: existence and properties of interface prototype object
+PASS HTMLParamElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLParamElement interface: attribute name
+PASS HTMLParamElement interface: attribute value
+PASS HTMLParamElement interface: attribute type
+PASS HTMLParamElement interface: attribute valueType
+PASS HTMLParamElement must be primary interface of document.createElement("param")
+PASS Stringification of document.createElement("param")
+PASS HTMLParamElement interface: document.createElement("param") must inherit property "name" with the proper type
+PASS HTMLParamElement interface: document.createElement("param") must inherit property "value" with the proper type
+PASS HTMLParamElement interface: document.createElement("param") must inherit property "type" with the proper type
+PASS HTMLParamElement interface: document.createElement("param") must inherit property "valueType" with the proper type
+PASS HTMLVideoElement interface: existence and properties of interface object
+PASS HTMLVideoElement interface object length
+PASS HTMLVideoElement interface object name
+PASS HTMLVideoElement interface: existence and properties of interface prototype object
+PASS HTMLVideoElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLVideoElement interface: attribute width
+PASS HTMLVideoElement interface: attribute height
+PASS HTMLVideoElement interface: attribute videoWidth
+PASS HTMLVideoElement interface: attribute videoHeight
+PASS HTMLVideoElement interface: attribute poster
+FAIL HTMLVideoElement interface: attribute playsInline assert_true: The prototype object must have a property "playsInline" expected true got false
+PASS HTMLVideoElement must be primary interface of document.createElement("video")
+PASS Stringification of document.createElement("video")
+PASS HTMLVideoElement interface: document.createElement("video") must inherit property "width" with the proper type
+PASS HTMLVideoElement interface: document.createElement("video") must inherit property "height" with the proper type
+PASS HTMLVideoElement interface: document.createElement("video") must inherit property "videoWidth" with the proper type
+PASS HTMLVideoElement interface: document.createElement("video") must inherit property "videoHeight" with the proper type
+PASS HTMLVideoElement interface: document.createElement("video") must inherit property "poster" with the proper type
+FAIL HTMLVideoElement interface: document.createElement("video") must inherit property "playsInline" with the proper type assert_inherits: property "playsInline" not found in prototype chain
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "error" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "src" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("video") must inherit property "srcObject" with the proper type Unrecognized type MediaStream
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "currentSrc" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "crossOrigin" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "NETWORK_EMPTY" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "NETWORK_IDLE" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "NETWORK_LOADING" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "NETWORK_NO_SOURCE" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "networkState" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "preload" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "buffered" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "load()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "canPlayType(DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling canPlayType(DOMString) on document.createElement("video") with too few arguments must throw TypeError
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "HAVE_NOTHING" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "HAVE_METADATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "HAVE_CURRENT_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "HAVE_FUTURE_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "HAVE_ENOUGH_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "readyState" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "seeking" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "currentTime" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("video") must inherit property "fastSeek(double)" with the proper type assert_inherits: property "fastSeek" not found in prototype chain
+FAIL HTMLMediaElement interface: calling fastSeek(double) on document.createElement("video") with too few arguments must throw TypeError assert_inherits: property "fastSeek" not found in prototype chain
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "duration" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("video") must inherit property "getStartDate()" with the proper type assert_inherits: property "getStartDate" not found in prototype chain
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "paused" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "defaultPlaybackRate" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "playbackRate" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "played" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "seekable" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "ended" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "autoplay" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "loop" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "play()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "pause()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "controls" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "volume" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "muted" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "defaultMuted" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "audioTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "videoTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "textTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("video") must inherit property "addTextTrack(TextTrackKind, DOMString, DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling addTextTrack(TextTrackKind, DOMString, DOMString) on document.createElement("video") with too few arguments must throw TypeError
+PASS HTMLAudioElement interface: existence and properties of interface object
+PASS HTMLAudioElement interface object length
+PASS HTMLAudioElement interface object name
+PASS HTMLAudioElement interface: existence and properties of interface prototype object
+PASS HTMLAudioElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLAudioElement must be primary interface of document.createElement("audio")
+PASS Stringification of document.createElement("audio")
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "error" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "src" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("audio") must inherit property "srcObject" with the proper type Unrecognized type MediaStream
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "currentSrc" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "crossOrigin" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "NETWORK_EMPTY" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "NETWORK_IDLE" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "NETWORK_LOADING" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "NETWORK_NO_SOURCE" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "networkState" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "preload" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "buffered" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "load()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "canPlayType(DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling canPlayType(DOMString) on document.createElement("audio") with too few arguments must throw TypeError
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "HAVE_NOTHING" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "HAVE_METADATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "HAVE_CURRENT_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "HAVE_FUTURE_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "HAVE_ENOUGH_DATA" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "readyState" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "seeking" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "currentTime" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("audio") must inherit property "fastSeek(double)" with the proper type assert_inherits: property "fastSeek" not found in prototype chain
+FAIL HTMLMediaElement interface: calling fastSeek(double) on document.createElement("audio") with too few arguments must throw TypeError assert_inherits: property "fastSeek" not found in prototype chain
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "duration" with the proper type
+FAIL HTMLMediaElement interface: document.createElement("audio") must inherit property "getStartDate()" with the proper type assert_inherits: property "getStartDate" not found in prototype chain
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "paused" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "defaultPlaybackRate" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "playbackRate" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "played" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "seekable" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "ended" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "autoplay" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "loop" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "play()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "pause()" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "controls" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "volume" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "muted" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "defaultMuted" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "audioTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "videoTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "textTracks" with the proper type
+PASS HTMLMediaElement interface: document.createElement("audio") must inherit property "addTextTrack(TextTrackKind, DOMString, DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling addTextTrack(TextTrackKind, DOMString, DOMString) on document.createElement("audio") with too few arguments must throw TypeError
+PASS HTMLAudioElement must be primary interface of new Audio()
+PASS Stringification of new Audio()
+PASS HTMLMediaElement interface: new Audio() must inherit property "error" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "src" with the proper type
+FAIL HTMLMediaElement interface: new Audio() must inherit property "srcObject" with the proper type Unrecognized type MediaStream
+PASS HTMLMediaElement interface: new Audio() must inherit property "currentSrc" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "crossOrigin" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "NETWORK_EMPTY" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "NETWORK_IDLE" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "NETWORK_LOADING" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "NETWORK_NO_SOURCE" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "networkState" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "preload" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "buffered" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "load()" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "canPlayType(DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling canPlayType(DOMString) on new Audio() with too few arguments must throw TypeError
+PASS HTMLMediaElement interface: new Audio() must inherit property "HAVE_NOTHING" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "HAVE_METADATA" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "HAVE_CURRENT_DATA" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "HAVE_FUTURE_DATA" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "HAVE_ENOUGH_DATA" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "readyState" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "seeking" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "currentTime" with the proper type
+FAIL HTMLMediaElement interface: new Audio() must inherit property "fastSeek(double)" with the proper type assert_inherits: property "fastSeek" not found in prototype chain
+FAIL HTMLMediaElement interface: calling fastSeek(double) on new Audio() with too few arguments must throw TypeError assert_inherits: property "fastSeek" not found in prototype chain
+PASS HTMLMediaElement interface: new Audio() must inherit property "duration" with the proper type
+FAIL HTMLMediaElement interface: new Audio() must inherit property "getStartDate()" with the proper type assert_inherits: property "getStartDate" not found in prototype chain
+PASS HTMLMediaElement interface: new Audio() must inherit property "paused" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "defaultPlaybackRate" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "playbackRate" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "played" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "seekable" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "ended" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "autoplay" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "loop" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "play()" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "pause()" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "controls" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "volume" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "muted" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "defaultMuted" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "audioTracks" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "videoTracks" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "textTracks" with the proper type
+PASS HTMLMediaElement interface: new Audio() must inherit property "addTextTrack(TextTrackKind, DOMString, DOMString)" with the proper type
+PASS HTMLMediaElement interface: calling addTextTrack(TextTrackKind, DOMString, DOMString) on new Audio() with too few arguments must throw TypeError
+PASS HTMLTrackElement interface: existence and properties of interface object
+PASS HTMLTrackElement interface object length
+PASS HTMLTrackElement interface object name
+PASS HTMLTrackElement interface: existence and properties of interface prototype object
+PASS HTMLTrackElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTrackElement interface: attribute kind
+PASS HTMLTrackElement interface: attribute src
+PASS HTMLTrackElement interface: attribute srclang
+PASS HTMLTrackElement interface: attribute label
+PASS HTMLTrackElement interface: attribute default
+PASS HTMLTrackElement interface: constant NONE on interface object
+PASS HTMLTrackElement interface: constant NONE on interface prototype object
+PASS HTMLTrackElement interface: constant LOADING on interface object
+PASS HTMLTrackElement interface: constant LOADING on interface prototype object
+PASS HTMLTrackElement interface: constant LOADED on interface object
+PASS HTMLTrackElement interface: constant LOADED on interface prototype object
+PASS HTMLTrackElement interface: constant ERROR on interface object
+PASS HTMLTrackElement interface: constant ERROR on interface prototype object
+PASS HTMLTrackElement interface: attribute readyState
+PASS HTMLTrackElement interface: attribute track
+PASS HTMLTrackElement must be primary interface of document.createElement("track")
+PASS Stringification of document.createElement("track")
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "kind" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "src" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "srclang" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "label" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "default" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "NONE" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "LOADING" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "LOADED" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "ERROR" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "readyState" with the proper type
+PASS HTMLTrackElement interface: document.createElement("track") must inherit property "track" with the proper type
+PASS HTMLMediaElement interface: existence and properties of interface object
+PASS HTMLMediaElement interface object length
+PASS HTMLMediaElement interface object name
+PASS HTMLMediaElement interface: existence and properties of interface prototype object
+PASS HTMLMediaElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMediaElement interface: attribute error
+PASS HTMLMediaElement interface: attribute src
+PASS HTMLMediaElement interface: attribute srcObject
+PASS HTMLMediaElement interface: attribute currentSrc
+PASS HTMLMediaElement interface: attribute crossOrigin
+PASS HTMLMediaElement interface: constant NETWORK_EMPTY on interface object
+PASS HTMLMediaElement interface: constant NETWORK_EMPTY on interface prototype object
+PASS HTMLMediaElement interface: constant NETWORK_IDLE on interface object
+PASS HTMLMediaElement interface: constant NETWORK_IDLE on interface prototype object
+PASS HTMLMediaElement interface: constant NETWORK_LOADING on interface object
+PASS HTMLMediaElement interface: constant NETWORK_LOADING on interface prototype object
+PASS HTMLMediaElement interface: constant NETWORK_NO_SOURCE on interface object
+PASS HTMLMediaElement interface: constant NETWORK_NO_SOURCE on interface prototype object
+PASS HTMLMediaElement interface: attribute networkState
+PASS HTMLMediaElement interface: attribute preload
+PASS HTMLMediaElement interface: attribute buffered
+PASS HTMLMediaElement interface: operation load()
+PASS HTMLMediaElement interface: operation canPlayType(DOMString)
+PASS HTMLMediaElement interface: constant HAVE_NOTHING on interface object
+PASS HTMLMediaElement interface: constant HAVE_NOTHING on interface prototype object
+PASS HTMLMediaElement interface: constant HAVE_METADATA on interface object
+PASS HTMLMediaElement interface: constant HAVE_METADATA on interface prototype object
+PASS HTMLMediaElement interface: constant HAVE_CURRENT_DATA on interface object
+PASS HTMLMediaElement interface: constant HAVE_CURRENT_DATA on interface prototype object
+PASS HTMLMediaElement interface: constant HAVE_FUTURE_DATA on interface object
+PASS HTMLMediaElement interface: constant HAVE_FUTURE_DATA on interface prototype object
+PASS HTMLMediaElement interface: constant HAVE_ENOUGH_DATA on interface object
+PASS HTMLMediaElement interface: constant HAVE_ENOUGH_DATA on interface prototype object
+PASS HTMLMediaElement interface: attribute readyState
+PASS HTMLMediaElement interface: attribute seeking
+PASS HTMLMediaElement interface: attribute currentTime
+FAIL HTMLMediaElement interface: operation fastSeek(double) assert_own_property: interface prototype object missing non-static operation expected property "fastSeek" missing
+PASS HTMLMediaElement interface: attribute duration
+FAIL HTMLMediaElement interface: operation getStartDate() assert_own_property: interface prototype object missing non-static operation expected property "getStartDate" missing
+PASS HTMLMediaElement interface: attribute paused
+PASS HTMLMediaElement interface: attribute defaultPlaybackRate
+PASS HTMLMediaElement interface: attribute playbackRate
+PASS HTMLMediaElement interface: attribute played
+PASS HTMLMediaElement interface: attribute seekable
+PASS HTMLMediaElement interface: attribute ended
+PASS HTMLMediaElement interface: attribute autoplay
+PASS HTMLMediaElement interface: attribute loop
+PASS HTMLMediaElement interface: operation play()
+PASS HTMLMediaElement interface: operation pause()
+PASS HTMLMediaElement interface: attribute controls
+PASS HTMLMediaElement interface: attribute volume
+PASS HTMLMediaElement interface: attribute muted
+PASS HTMLMediaElement interface: attribute defaultMuted
+PASS HTMLMediaElement interface: attribute audioTracks
+PASS HTMLMediaElement interface: attribute videoTracks
+PASS HTMLMediaElement interface: attribute textTracks
+PASS HTMLMediaElement interface: operation addTextTrack(TextTrackKind, DOMString, DOMString)
+PASS MediaError interface: existence and properties of interface object
+PASS MediaError interface object length
+PASS MediaError interface object name
+PASS MediaError interface: existence and properties of interface prototype object
+PASS MediaError interface: existence and properties of interface prototype object's "constructor" property
+PASS MediaError interface: constant MEDIA_ERR_ABORTED on interface object
+PASS MediaError interface: constant MEDIA_ERR_ABORTED on interface prototype object
+PASS MediaError interface: constant MEDIA_ERR_NETWORK on interface object
+PASS MediaError interface: constant MEDIA_ERR_NETWORK on interface prototype object
+PASS MediaError interface: constant MEDIA_ERR_DECODE on interface object
+PASS MediaError interface: constant MEDIA_ERR_DECODE on interface prototype object
+PASS MediaError interface: constant MEDIA_ERR_SRC_NOT_SUPPORTED on interface object
+PASS MediaError interface: constant MEDIA_ERR_SRC_NOT_SUPPORTED on interface prototype object
+PASS MediaError interface: attribute code
+PASS MediaError interface: attribute message
+PASS MediaError must be primary interface of errorVideo.error
+PASS Stringification of errorVideo.error
+PASS MediaError interface: errorVideo.error must inherit property "MEDIA_ERR_ABORTED" with the proper type
+PASS MediaError interface: errorVideo.error must inherit property "MEDIA_ERR_NETWORK" with the proper type
+PASS MediaError interface: errorVideo.error must inherit property "MEDIA_ERR_DECODE" with the proper type
+PASS MediaError interface: errorVideo.error must inherit property "MEDIA_ERR_SRC_NOT_SUPPORTED" with the proper type
+PASS MediaError interface: errorVideo.error must inherit property "code" with the proper type
+PASS MediaError interface: errorVideo.error must inherit property "message" with the proper type
+PASS AudioTrackList interface: existence and properties of interface object
+PASS AudioTrackList interface object length
+PASS AudioTrackList interface object name
+PASS AudioTrackList interface: existence and properties of interface prototype object
+PASS AudioTrackList interface: existence and properties of interface prototype object's "constructor" property
+PASS AudioTrackList interface: attribute length
+PASS AudioTrackList interface: operation getTrackById(DOMString)
+PASS AudioTrackList interface: attribute onchange
+PASS AudioTrackList interface: attribute onaddtrack
+PASS AudioTrackList interface: attribute onremovetrack
+PASS AudioTrack interface: existence and properties of interface object
+PASS AudioTrack interface object length
+PASS AudioTrack interface object name
+PASS AudioTrack interface: existence and properties of interface prototype object
+PASS AudioTrack interface: existence and properties of interface prototype object's "constructor" property
+PASS AudioTrack interface: attribute id
+PASS AudioTrack interface: attribute kind
+PASS AudioTrack interface: attribute label
+PASS AudioTrack interface: attribute language
+PASS AudioTrack interface: attribute enabled
+PASS VideoTrackList interface: existence and properties of interface object
+PASS VideoTrackList interface object length
+PASS VideoTrackList interface object name
+PASS VideoTrackList interface: existence and properties of interface prototype object
+PASS VideoTrackList interface: existence and properties of interface prototype object's "constructor" property
+PASS VideoTrackList interface: attribute length
+PASS VideoTrackList interface: operation getTrackById(DOMString)
+PASS VideoTrackList interface: attribute selectedIndex
+PASS VideoTrackList interface: attribute onchange
+PASS VideoTrackList interface: attribute onaddtrack
+PASS VideoTrackList interface: attribute onremovetrack
+PASS VideoTrack interface: existence and properties of interface object
+PASS VideoTrack interface object length
+PASS VideoTrack interface object name
+PASS VideoTrack interface: existence and properties of interface prototype object
+PASS VideoTrack interface: existence and properties of interface prototype object's "constructor" property
+PASS VideoTrack interface: attribute id
+PASS VideoTrack interface: attribute kind
+PASS VideoTrack interface: attribute label
+PASS VideoTrack interface: attribute language
+PASS VideoTrack interface: attribute selected
+PASS TextTrackList interface: existence and properties of interface object
+PASS TextTrackList interface object length
+PASS TextTrackList interface object name
+PASS TextTrackList interface: existence and properties of interface prototype object
+PASS TextTrackList interface: existence and properties of interface prototype object's "constructor" property
+PASS TextTrackList interface: attribute length
+PASS TextTrackList interface: operation getTrackById(DOMString)
+PASS TextTrackList interface: attribute onchange
+PASS TextTrackList interface: attribute onaddtrack
+PASS TextTrackList interface: attribute onremovetrack
+PASS TextTrackList must be primary interface of document.createElement("video").textTracks
+PASS Stringification of document.createElement("video").textTracks
+PASS TextTrackList interface: document.createElement("video").textTracks must inherit property "length" with the proper type
+PASS TextTrackList interface: document.createElement("video").textTracks must inherit property "getTrackById(DOMString)" with the proper type
+PASS TextTrackList interface: calling getTrackById(DOMString) on document.createElement("video").textTracks with too few arguments must throw TypeError
+PASS TextTrackList interface: document.createElement("video").textTracks must inherit property "onchange" with the proper type
+PASS TextTrackList interface: document.createElement("video").textTracks must inherit property "onaddtrack" with the proper type
+PASS TextTrackList interface: document.createElement("video").textTracks must inherit property "onremovetrack" with the proper type
+PASS TextTrack interface: existence and properties of interface object
+PASS TextTrack interface object length
+PASS TextTrack interface object name
+PASS TextTrack interface: existence and properties of interface prototype object
+PASS TextTrack interface: existence and properties of interface prototype object's "constructor" property
+PASS TextTrack interface: attribute kind
+PASS TextTrack interface: attribute label
+PASS TextTrack interface: attribute language
+PASS TextTrack interface: attribute id
+FAIL TextTrack interface: attribute inBandMetadataTrackDispatchType assert_true: The prototype object must have a property "inBandMetadataTrackDispatchType" expected true got false
+PASS TextTrack interface: attribute mode
+PASS TextTrack interface: attribute cues
+PASS TextTrack interface: attribute activeCues
+PASS TextTrack interface: operation addCue(TextTrackCue)
+PASS TextTrack interface: operation removeCue(TextTrackCue)
+PASS TextTrack interface: attribute oncuechange
+PASS TextTrack must be primary interface of document.createElement("track").track
+PASS Stringification of document.createElement("track").track
+PASS TextTrack interface: document.createElement("track").track must inherit property "kind" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "label" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "language" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "id" with the proper type
+FAIL TextTrack interface: document.createElement("track").track must inherit property "inBandMetadataTrackDispatchType" with the proper type assert_inherits: property "inBandMetadataTrackDispatchType" not found in prototype chain
+PASS TextTrack interface: document.createElement("track").track must inherit property "mode" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "cues" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "activeCues" with the proper type
+PASS TextTrack interface: document.createElement("track").track must inherit property "addCue(TextTrackCue)" with the proper type
+PASS TextTrack interface: calling addCue(TextTrackCue) on document.createElement("track").track with too few arguments must throw TypeError
+PASS TextTrack interface: document.createElement("track").track must inherit property "removeCue(TextTrackCue)" with the proper type
+PASS TextTrack interface: calling removeCue(TextTrackCue) on document.createElement("track").track with too few arguments must throw TypeError
+PASS TextTrack interface: document.createElement("track").track must inherit property "oncuechange" with the proper type
+PASS TextTrackCueList interface: existence and properties of interface object
+PASS TextTrackCueList interface object length
+PASS TextTrackCueList interface object name
+PASS TextTrackCueList interface: existence and properties of interface prototype object
+PASS TextTrackCueList interface: existence and properties of interface prototype object's "constructor" property
+PASS TextTrackCueList interface: attribute length
+PASS TextTrackCueList interface: operation getCueById(DOMString)
+PASS TextTrackCueList must be primary interface of document.createElement("video").addTextTrack("subtitles").cues
+PASS Stringification of document.createElement("video").addTextTrack("subtitles").cues
+PASS TextTrackCueList interface: document.createElement("video").addTextTrack("subtitles").cues must inherit property "length" with the proper type
+PASS TextTrackCueList interface: document.createElement("video").addTextTrack("subtitles").cues must inherit property "getCueById(DOMString)" with the proper type
+PASS TextTrackCueList interface: calling getCueById(DOMString) on document.createElement("video").addTextTrack("subtitles").cues with too few arguments must throw TypeError
+PASS TextTrackCue interface: existence and properties of interface object
+PASS TextTrackCue interface object length
+PASS TextTrackCue interface object name
+PASS TextTrackCue interface: existence and properties of interface prototype object
+PASS TextTrackCue interface: existence and properties of interface prototype object's "constructor" property
+PASS TextTrackCue interface: attribute track
+PASS TextTrackCue interface: attribute id
+PASS TextTrackCue interface: attribute startTime
+PASS TextTrackCue interface: attribute endTime
+PASS TextTrackCue interface: attribute pauseOnExit
+PASS TextTrackCue interface: attribute onenter
+PASS TextTrackCue interface: attribute onexit
+PASS TimeRanges interface: existence and properties of interface object
+PASS TimeRanges interface object length
+PASS TimeRanges interface object name
+PASS TimeRanges interface: existence and properties of interface prototype object
+PASS TimeRanges interface: existence and properties of interface prototype object's "constructor" property
+PASS TimeRanges interface: attribute length
+PASS TimeRanges interface: operation start(unsigned long)
+PASS TimeRanges interface: operation end(unsigned long)
+PASS TimeRanges must be primary interface of document.createElement("video").buffered
+PASS Stringification of document.createElement("video").buffered
+PASS TimeRanges interface: document.createElement("video").buffered must inherit property "length" with the proper type
+PASS TimeRanges interface: document.createElement("video").buffered must inherit property "start(unsigned long)" with the proper type
+PASS TimeRanges interface: calling start(unsigned long) on document.createElement("video").buffered with too few arguments must throw TypeError
+PASS TimeRanges interface: document.createElement("video").buffered must inherit property "end(unsigned long)" with the proper type
+PASS TimeRanges interface: calling end(unsigned long) on document.createElement("video").buffered with too few arguments must throw TypeError
+PASS TrackEvent interface: existence and properties of interface object
+PASS TrackEvent interface object length
+PASS TrackEvent interface object name
+PASS TrackEvent interface: existence and properties of interface prototype object
+PASS TrackEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS TrackEvent interface: attribute track
+PASS TrackEvent must be primary interface of new TrackEvent("addtrack", {track:document.createElement("track").track})
+PASS Stringification of new TrackEvent("addtrack", {track:document.createElement("track").track})
+PASS TrackEvent interface: new TrackEvent("addtrack", {track:document.createElement("track").track}) must inherit property "track" with the proper type
+PASS HTMLMapElement interface: existence and properties of interface object
+PASS HTMLMapElement interface object length
+PASS HTMLMapElement interface object name
+PASS HTMLMapElement interface: existence and properties of interface prototype object
+PASS HTMLMapElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMapElement interface: attribute name
+PASS HTMLMapElement interface: attribute areas
+PASS HTMLMapElement must be primary interface of document.createElement("map")
+PASS Stringification of document.createElement("map")
+PASS HTMLMapElement interface: document.createElement("map") must inherit property "name" with the proper type
+PASS HTMLMapElement interface: document.createElement("map") must inherit property "areas" with the proper type
+PASS HTMLAreaElement interface: existence and properties of interface object
+PASS HTMLAreaElement interface object length
+PASS HTMLAreaElement interface object name
+PASS HTMLAreaElement interface: existence and properties of interface prototype object
+PASS HTMLAreaElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLAreaElement interface: attribute alt
+PASS HTMLAreaElement interface: attribute coords
+PASS HTMLAreaElement interface: attribute shape
+PASS HTMLAreaElement interface: attribute target
+PASS HTMLAreaElement interface: attribute download
+PASS HTMLAreaElement interface: attribute ping
+PASS HTMLAreaElement interface: attribute rel
+FAIL HTMLAreaElement interface: attribute relList assert_true: The prototype object must have a property "relList" expected true got false
+PASS HTMLAreaElement interface: attribute referrerPolicy
+PASS HTMLAreaElement interface: attribute noHref
+PASS HTMLAreaElement interface: attribute href
+PASS HTMLAreaElement interface: stringifier
+PASS HTMLAreaElement interface: attribute origin
+PASS HTMLAreaElement interface: attribute protocol
+PASS HTMLAreaElement interface: attribute username
+PASS HTMLAreaElement interface: attribute password
+PASS HTMLAreaElement interface: attribute host
+PASS HTMLAreaElement interface: attribute hostname
+PASS HTMLAreaElement interface: attribute port
+PASS HTMLAreaElement interface: attribute pathname
+PASS HTMLAreaElement interface: attribute search
+PASS HTMLAreaElement interface: attribute hash
+PASS HTMLAreaElement must be primary interface of document.createElement("area")
+PASS Stringification of document.createElement("area")
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "alt" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "coords" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "shape" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "target" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "download" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "ping" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "rel" with the proper type
+FAIL HTMLAreaElement interface: document.createElement("area") must inherit property "relList" with the proper type assert_inherits: property "relList" not found in prototype chain
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "referrerPolicy" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "noHref" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "href" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "origin" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "protocol" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "username" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "password" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "host" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "hostname" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "port" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "pathname" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "search" with the proper type
+PASS HTMLAreaElement interface: document.createElement("area") must inherit property "hash" with the proper type
+PASS HTMLTableElement interface: existence and properties of interface object
+PASS HTMLTableElement interface object length
+PASS HTMLTableElement interface object name
+PASS HTMLTableElement interface: existence and properties of interface prototype object
+PASS HTMLTableElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableElement interface: attribute caption
+PASS HTMLTableElement interface: operation createCaption()
+PASS HTMLTableElement interface: operation deleteCaption()
+PASS HTMLTableElement interface: attribute tHead
+PASS HTMLTableElement interface: operation createTHead()
+PASS HTMLTableElement interface: operation deleteTHead()
+PASS HTMLTableElement interface: attribute tFoot
+PASS HTMLTableElement interface: operation createTFoot()
+PASS HTMLTableElement interface: operation deleteTFoot()
+PASS HTMLTableElement interface: attribute tBodies
+PASS HTMLTableElement interface: operation createTBody()
+PASS HTMLTableElement interface: attribute rows
+PASS HTMLTableElement interface: operation insertRow(long)
+PASS HTMLTableElement interface: operation deleteRow(long)
+PASS HTMLTableElement interface: attribute align
+PASS HTMLTableElement interface: attribute border
+PASS HTMLTableElement interface: attribute frame
+PASS HTMLTableElement interface: attribute rules
+PASS HTMLTableElement interface: attribute summary
+PASS HTMLTableElement interface: attribute width
+PASS HTMLTableElement interface: attribute bgColor
+PASS HTMLTableElement interface: attribute cellPadding
+PASS HTMLTableElement interface: attribute cellSpacing
+PASS HTMLTableElement must be primary interface of document.createElement("table")
+PASS Stringification of document.createElement("table")
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "caption" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "createCaption()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "deleteCaption()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "tHead" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "createTHead()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "deleteTHead()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "tFoot" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "createTFoot()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "deleteTFoot()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "tBodies" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "createTBody()" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "rows" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "insertRow(long)" with the proper type
+PASS HTMLTableElement interface: calling insertRow(long) on document.createElement("table") with too few arguments must throw TypeError
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "deleteRow(long)" with the proper type
+PASS HTMLTableElement interface: calling deleteRow(long) on document.createElement("table") with too few arguments must throw TypeError
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "align" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "border" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "frame" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "rules" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "summary" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "width" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "bgColor" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "cellPadding" with the proper type
+PASS HTMLTableElement interface: document.createElement("table") must inherit property "cellSpacing" with the proper type
+PASS HTMLTableCaptionElement interface: existence and properties of interface object
+PASS HTMLTableCaptionElement interface object length
+PASS HTMLTableCaptionElement interface object name
+PASS HTMLTableCaptionElement interface: existence and properties of interface prototype object
+PASS HTMLTableCaptionElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableCaptionElement interface: attribute align
+PASS HTMLTableCaptionElement must be primary interface of document.createElement("caption")
+PASS Stringification of document.createElement("caption")
+PASS HTMLTableCaptionElement interface: document.createElement("caption") must inherit property "align" with the proper type
+PASS HTMLTableColElement interface: existence and properties of interface object
+PASS HTMLTableColElement interface object length
+PASS HTMLTableColElement interface object name
+PASS HTMLTableColElement interface: existence and properties of interface prototype object
+PASS HTMLTableColElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableColElement interface: attribute span
+PASS HTMLTableColElement interface: attribute align
+PASS HTMLTableColElement interface: attribute ch
+PASS HTMLTableColElement interface: attribute chOff
+PASS HTMLTableColElement interface: attribute vAlign
+PASS HTMLTableColElement interface: attribute width
+PASS HTMLTableColElement must be primary interface of document.createElement("colgroup")
+PASS Stringification of document.createElement("colgroup")
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "span" with the proper type
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "align" with the proper type
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "ch" with the proper type
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "chOff" with the proper type
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "vAlign" with the proper type
+PASS HTMLTableColElement interface: document.createElement("colgroup") must inherit property "width" with the proper type
+PASS HTMLTableColElement must be primary interface of document.createElement("col")
+PASS Stringification of document.createElement("col")
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "span" with the proper type
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "align" with the proper type
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "ch" with the proper type
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "chOff" with the proper type
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "vAlign" with the proper type
+PASS HTMLTableColElement interface: document.createElement("col") must inherit property "width" with the proper type
+PASS HTMLTableSectionElement interface: existence and properties of interface object
+PASS HTMLTableSectionElement interface object length
+PASS HTMLTableSectionElement interface object name
+PASS HTMLTableSectionElement interface: existence and properties of interface prototype object
+PASS HTMLTableSectionElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableSectionElement interface: attribute rows
+PASS HTMLTableSectionElement interface: operation insertRow(long)
+PASS HTMLTableSectionElement interface: operation deleteRow(long)
+PASS HTMLTableSectionElement interface: attribute align
+PASS HTMLTableSectionElement interface: attribute ch
+PASS HTMLTableSectionElement interface: attribute chOff
+PASS HTMLTableSectionElement interface: attribute vAlign
+PASS HTMLTableSectionElement must be primary interface of document.createElement("tbody")
+PASS Stringification of document.createElement("tbody")
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "rows" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "insertRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling insertRow(long) on document.createElement("tbody") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "deleteRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling deleteRow(long) on document.createElement("tbody") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "align" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "ch" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "chOff" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tbody") must inherit property "vAlign" with the proper type
+PASS HTMLTableSectionElement must be primary interface of document.createElement("thead")
+PASS Stringification of document.createElement("thead")
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "rows" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "insertRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling insertRow(long) on document.createElement("thead") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "deleteRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling deleteRow(long) on document.createElement("thead") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "align" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "ch" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "chOff" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("thead") must inherit property "vAlign" with the proper type
+PASS HTMLTableSectionElement must be primary interface of document.createElement("tfoot")
+PASS Stringification of document.createElement("tfoot")
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "rows" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "insertRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling insertRow(long) on document.createElement("tfoot") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "deleteRow(long)" with the proper type
+PASS HTMLTableSectionElement interface: calling deleteRow(long) on document.createElement("tfoot") with too few arguments must throw TypeError
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "align" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "ch" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "chOff" with the proper type
+PASS HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "vAlign" with the proper type
+PASS HTMLTableRowElement interface: existence and properties of interface object
+PASS HTMLTableRowElement interface object length
+PASS HTMLTableRowElement interface object name
+PASS HTMLTableRowElement interface: existence and properties of interface prototype object
+PASS HTMLTableRowElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableRowElement interface: attribute rowIndex
+PASS HTMLTableRowElement interface: attribute sectionRowIndex
+PASS HTMLTableRowElement interface: attribute cells
+PASS HTMLTableRowElement interface: operation insertCell(long)
+PASS HTMLTableRowElement interface: operation deleteCell(long)
+PASS HTMLTableRowElement interface: attribute align
+PASS HTMLTableRowElement interface: attribute ch
+PASS HTMLTableRowElement interface: attribute chOff
+PASS HTMLTableRowElement interface: attribute vAlign
+PASS HTMLTableRowElement interface: attribute bgColor
+PASS HTMLTableRowElement must be primary interface of document.createElement("tr")
+PASS Stringification of document.createElement("tr")
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "rowIndex" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "sectionRowIndex" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "cells" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "insertCell(long)" with the proper type
+PASS HTMLTableRowElement interface: calling insertCell(long) on document.createElement("tr") with too few arguments must throw TypeError
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "deleteCell(long)" with the proper type
+PASS HTMLTableRowElement interface: calling deleteCell(long) on document.createElement("tr") with too few arguments must throw TypeError
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "align" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "ch" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "chOff" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "vAlign" with the proper type
+PASS HTMLTableRowElement interface: document.createElement("tr") must inherit property "bgColor" with the proper type
+PASS HTMLTableCellElement interface: existence and properties of interface object
+PASS HTMLTableCellElement interface object length
+PASS HTMLTableCellElement interface object name
+PASS HTMLTableCellElement interface: existence and properties of interface prototype object
+PASS HTMLTableCellElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTableCellElement interface: attribute colSpan
+PASS HTMLTableCellElement interface: attribute rowSpan
+PASS HTMLTableCellElement interface: attribute headers
+PASS HTMLTableCellElement interface: attribute cellIndex
+PASS HTMLTableCellElement interface: attribute scope
+PASS HTMLTableCellElement interface: attribute abbr
+PASS HTMLTableCellElement interface: attribute align
+PASS HTMLTableCellElement interface: attribute axis
+PASS HTMLTableCellElement interface: attribute height
+PASS HTMLTableCellElement interface: attribute width
+PASS HTMLTableCellElement interface: attribute ch
+PASS HTMLTableCellElement interface: attribute chOff
+PASS HTMLTableCellElement interface: attribute noWrap
+PASS HTMLTableCellElement interface: attribute vAlign
+PASS HTMLTableCellElement interface: attribute bgColor
+PASS HTMLTableCellElement must be primary interface of document.createElement("td")
+PASS Stringification of document.createElement("td")
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "colSpan" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "rowSpan" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "headers" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "cellIndex" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "scope" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "abbr" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "align" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "axis" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "height" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "width" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "ch" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "chOff" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "noWrap" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "vAlign" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("td") must inherit property "bgColor" with the proper type
+PASS HTMLTableCellElement must be primary interface of document.createElement("th")
+PASS Stringification of document.createElement("th")
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "colSpan" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "rowSpan" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "headers" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "cellIndex" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "scope" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "abbr" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "align" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "axis" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "height" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "width" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "ch" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "chOff" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "noWrap" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "vAlign" with the proper type
+PASS HTMLTableCellElement interface: document.createElement("th") must inherit property "bgColor" with the proper type
+PASS HTMLFormElement interface: existence and properties of interface object
+PASS HTMLFormElement interface object length
+PASS HTMLFormElement interface object name
+PASS HTMLFormElement interface: existence and properties of interface prototype object
+PASS HTMLFormElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFormElement interface: attribute acceptCharset
+PASS HTMLFormElement interface: attribute action
+PASS HTMLFormElement interface: attribute autocomplete
+PASS HTMLFormElement interface: attribute enctype
+PASS HTMLFormElement interface: attribute encoding
+PASS HTMLFormElement interface: attribute method
+PASS HTMLFormElement interface: attribute name
+PASS HTMLFormElement interface: attribute noValidate
+PASS HTMLFormElement interface: attribute target
+PASS HTMLFormElement interface: attribute elements
+PASS HTMLFormElement interface: attribute length
+PASS HTMLFormElement interface: operation submit()
+PASS HTMLFormElement interface: operation reset()
+PASS HTMLFormElement interface: operation checkValidity()
+PASS HTMLFormElement interface: operation reportValidity()
+PASS HTMLFormElement must be primary interface of document.createElement("form")
+PASS Stringification of document.createElement("form")
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "acceptCharset" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "action" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "autocomplete" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "enctype" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "encoding" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "method" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "name" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "noValidate" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "target" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "elements" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "length" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "submit()" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "reset()" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "checkValidity()" with the proper type
+PASS HTMLFormElement interface: document.createElement("form") must inherit property "reportValidity()" with the proper type
+PASS HTMLLabelElement interface: existence and properties of interface object
+PASS HTMLLabelElement interface object length
+PASS HTMLLabelElement interface object name
+PASS HTMLLabelElement interface: existence and properties of interface prototype object
+PASS HTMLLabelElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLLabelElement interface: attribute form
+PASS HTMLLabelElement interface: attribute htmlFor
+PASS HTMLLabelElement interface: attribute control
+PASS HTMLLabelElement must be primary interface of document.createElement("label")
+PASS Stringification of document.createElement("label")
+PASS HTMLLabelElement interface: document.createElement("label") must inherit property "form" with the proper type
+PASS HTMLLabelElement interface: document.createElement("label") must inherit property "htmlFor" with the proper type
+PASS HTMLLabelElement interface: document.createElement("label") must inherit property "control" with the proper type
+PASS HTMLInputElement interface: existence and properties of interface object
+PASS HTMLInputElement interface object length
+PASS HTMLInputElement interface object name
+PASS HTMLInputElement interface: existence and properties of interface prototype object
+PASS HTMLInputElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLInputElement interface: attribute accept
+PASS HTMLInputElement interface: attribute alt
+PASS HTMLInputElement interface: attribute autocomplete
+PASS HTMLInputElement interface: attribute autofocus
+PASS HTMLInputElement interface: attribute defaultChecked
+PASS HTMLInputElement interface: attribute checked
+PASS HTMLInputElement interface: attribute dirName
+PASS HTMLInputElement interface: attribute disabled
+PASS HTMLInputElement interface: attribute form
+PASS HTMLInputElement interface: attribute files
+PASS HTMLInputElement interface: attribute formAction
+PASS HTMLInputElement interface: attribute formEnctype
+PASS HTMLInputElement interface: attribute formMethod
+PASS HTMLInputElement interface: attribute formNoValidate
+PASS HTMLInputElement interface: attribute formTarget
+PASS HTMLInputElement interface: attribute height
+PASS HTMLInputElement interface: attribute indeterminate
+FAIL HTMLInputElement interface: attribute inputMode assert_own_property: expected property "inputMode" missing
+PASS HTMLInputElement interface: attribute list
+PASS HTMLInputElement interface: attribute max
+PASS HTMLInputElement interface: attribute maxLength
+PASS HTMLInputElement interface: attribute min
+PASS HTMLInputElement interface: attribute minLength
+PASS HTMLInputElement interface: attribute multiple
+PASS HTMLInputElement interface: attribute name
+PASS HTMLInputElement interface: attribute pattern
+PASS HTMLInputElement interface: attribute placeholder
+PASS HTMLInputElement interface: attribute readOnly
+PASS HTMLInputElement interface: attribute required
+PASS HTMLInputElement interface: attribute size
+PASS HTMLInputElement interface: attribute src
+PASS HTMLInputElement interface: attribute step
+PASS HTMLInputElement interface: attribute type
+PASS HTMLInputElement interface: attribute defaultValue
+PASS HTMLInputElement interface: attribute value
+PASS HTMLInputElement interface: attribute valueAsDate
+PASS HTMLInputElement interface: attribute valueAsNumber
+PASS HTMLInputElement interface: attribute width
+PASS HTMLInputElement interface: operation stepUp(long)
+PASS HTMLInputElement interface: operation stepDown(long)
+PASS HTMLInputElement interface: attribute willValidate
+PASS HTMLInputElement interface: attribute validity
+PASS HTMLInputElement interface: attribute validationMessage
+PASS HTMLInputElement interface: operation checkValidity()
+PASS HTMLInputElement interface: operation reportValidity()
+PASS HTMLInputElement interface: operation setCustomValidity(DOMString)
+PASS HTMLInputElement interface: attribute labels
+PASS HTMLInputElement interface: operation select()
+PASS HTMLInputElement interface: attribute selectionStart
+PASS HTMLInputElement interface: attribute selectionEnd
+PASS HTMLInputElement interface: attribute selectionDirection
+PASS HTMLInputElement interface: operation setRangeText(DOMString)
+PASS HTMLInputElement interface: operation setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)
+PASS HTMLInputElement interface: operation setSelectionRange(unsigned long, unsigned long, DOMString)
+PASS HTMLInputElement interface: attribute align
+PASS HTMLInputElement interface: attribute useMap
+PASS HTMLInputElement must be primary interface of document.createElement("input")
+PASS Stringification of document.createElement("input")
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on document.createElement("input") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: document.createElement("input") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("text")
+PASS Stringification of createInput("text")
+PASS HTMLInputElement interface: createInput("text") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("text") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("text") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("text") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("hidden")
+PASS Stringification of createInput("hidden")
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("hidden") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("hidden") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("search")
+PASS Stringification of createInput("search")
+PASS HTMLInputElement interface: createInput("search") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("search") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("search") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("search") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("tel")
+PASS Stringification of createInput("tel")
+PASS HTMLInputElement interface: createInput("tel") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("tel") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("tel") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("tel") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("url")
+PASS Stringification of createInput("url")
+PASS HTMLInputElement interface: createInput("url") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("url") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("url") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("url") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("email")
+PASS Stringification of createInput("email")
+PASS HTMLInputElement interface: createInput("email") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("email") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("email") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("email") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("password")
+PASS Stringification of createInput("password")
+PASS HTMLInputElement interface: createInput("password") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("password") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("password") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("password") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("date")
+PASS Stringification of createInput("date")
+PASS HTMLInputElement interface: createInput("date") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("date") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("date") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("date") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("month")
+PASS Stringification of createInput("month")
+PASS HTMLInputElement interface: createInput("month") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("month") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("month") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("month") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("week")
+PASS Stringification of createInput("week")
+PASS HTMLInputElement interface: createInput("week") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("week") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("week") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("week") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("time")
+PASS Stringification of createInput("time")
+PASS HTMLInputElement interface: createInput("time") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("time") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("time") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("time") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("datetime-local")
+PASS Stringification of createInput("datetime-local")
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("datetime-local") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("datetime-local") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("number")
+PASS Stringification of createInput("number")
+PASS HTMLInputElement interface: createInput("number") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("number") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("number") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("number") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("range")
+PASS Stringification of createInput("range")
+PASS HTMLInputElement interface: createInput("range") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("range") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("range") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("range") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("color")
+PASS Stringification of createInput("color")
+PASS HTMLInputElement interface: createInput("color") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("color") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("color") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("color") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("checkbox")
+PASS Stringification of createInput("checkbox")
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("checkbox") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("checkbox") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("radio")
+PASS Stringification of createInput("radio")
+PASS HTMLInputElement interface: createInput("radio") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("radio") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("radio") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("radio") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("file")
+PASS Stringification of createInput("file")
+PASS HTMLInputElement interface: createInput("file") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "form" with the proper type
+FAIL HTMLInputElement interface: createInput("file") must inherit property "files" with the proper type Unrecognized type FileList
+PASS HTMLInputElement interface: createInput("file") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("file") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("file") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("file") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("submit")
+PASS Stringification of createInput("submit")
+PASS HTMLInputElement interface: createInput("submit") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("submit") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("submit") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("submit") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("image")
+PASS Stringification of createInput("image")
+PASS HTMLInputElement interface: createInput("image") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("image") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("image") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("image") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("reset")
+PASS Stringification of createInput("reset")
+PASS HTMLInputElement interface: createInput("reset") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("reset") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("reset") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("reset") must inherit property "useMap" with the proper type
+PASS HTMLInputElement must be primary interface of createInput("button")
+PASS Stringification of createInput("button")
+PASS HTMLInputElement interface: createInput("button") must inherit property "accept" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "alt" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "autocomplete" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "autofocus" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "defaultChecked" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "checked" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "dirName" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "disabled" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "form" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "files" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "formAction" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "formEnctype" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "formMethod" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "formNoValidate" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "formTarget" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "height" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "indeterminate" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "inputMode" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "list" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "max" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "maxLength" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "min" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "minLength" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "multiple" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "name" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "pattern" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "placeholder" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "readOnly" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "required" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "size" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "src" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "step" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "type" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "defaultValue" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "value" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "valueAsDate" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "valueAsNumber" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "width" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "stepUp(long)" with the proper type
+PASS HTMLInputElement interface: calling stepUp(long) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "stepDown(long)" with the proper type
+PASS HTMLInputElement interface: calling stepDown(long) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "willValidate" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "validity" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "validationMessage" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "checkValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "reportValidity()" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "labels" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "select()" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "selectionStart" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "selectionEnd" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "selectionDirection" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLInputElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLInputElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on createInput("button") with too few arguments must throw TypeError
+PASS HTMLInputElement interface: createInput("button") must inherit property "align" with the proper type
+PASS HTMLInputElement interface: createInput("button") must inherit property "useMap" with the proper type
+PASS HTMLButtonElement interface: existence and properties of interface object
+PASS HTMLButtonElement interface object length
+PASS HTMLButtonElement interface object name
+PASS HTMLButtonElement interface: existence and properties of interface prototype object
+PASS HTMLButtonElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLButtonElement interface: attribute autofocus
+PASS HTMLButtonElement interface: attribute disabled
+PASS HTMLButtonElement interface: attribute form
+PASS HTMLButtonElement interface: attribute formAction
+PASS HTMLButtonElement interface: attribute formEnctype
+PASS HTMLButtonElement interface: attribute formMethod
+PASS HTMLButtonElement interface: attribute formNoValidate
+PASS HTMLButtonElement interface: attribute formTarget
+PASS HTMLButtonElement interface: attribute name
+PASS HTMLButtonElement interface: attribute type
+PASS HTMLButtonElement interface: attribute value
+PASS HTMLButtonElement interface: attribute willValidate
+PASS HTMLButtonElement interface: attribute validity
+PASS HTMLButtonElement interface: attribute validationMessage
+PASS HTMLButtonElement interface: operation checkValidity()
+PASS HTMLButtonElement interface: operation reportValidity()
+PASS HTMLButtonElement interface: operation setCustomValidity(DOMString)
+PASS HTMLButtonElement interface: attribute labels
+PASS HTMLButtonElement must be primary interface of document.createElement("button")
+PASS Stringification of document.createElement("button")
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "autofocus" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "disabled" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "form" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "formAction" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "formEnctype" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "formMethod" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "formNoValidate" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "formTarget" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "name" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "type" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "value" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "willValidate" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "validity" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "validationMessage" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "checkValidity()" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "reportValidity()" with the proper type
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLButtonElement interface: calling setCustomValidity(DOMString) on document.createElement("button") with too few arguments must throw TypeError
+PASS HTMLButtonElement interface: document.createElement("button") must inherit property "labels" with the proper type
+PASS HTMLSelectElement interface: existence and properties of interface object
+PASS HTMLSelectElement interface object length
+PASS HTMLSelectElement interface object name
+PASS HTMLSelectElement interface: existence and properties of interface prototype object
+PASS HTMLSelectElement interface: existence and properties of interface prototype object's "constructor" property
+FAIL HTMLSelectElement interface: attribute autocomplete assert_true: The prototype object must have a property "autocomplete" expected true got false
+PASS HTMLSelectElement interface: attribute autofocus
+PASS HTMLSelectElement interface: attribute disabled
+PASS HTMLSelectElement interface: attribute form
+PASS HTMLSelectElement interface: attribute multiple
+PASS HTMLSelectElement interface: attribute name
+PASS HTMLSelectElement interface: attribute required
+PASS HTMLSelectElement interface: attribute size
+PASS HTMLSelectElement interface: attribute type
+PASS HTMLSelectElement interface: attribute options
+PASS HTMLSelectElement interface: attribute length
+PASS HTMLSelectElement interface: operation item(unsigned long)
+PASS HTMLSelectElement interface: operation namedItem(DOMString)
+PASS HTMLSelectElement interface: operation add([object Object],[object Object], [object Object],[object Object])
+PASS HTMLSelectElement interface: operation remove()
+PASS HTMLSelectElement interface: operation remove(long)
+PASS HTMLSelectElement interface: attribute selectedOptions
+PASS HTMLSelectElement interface: attribute selectedIndex
+PASS HTMLSelectElement interface: attribute value
+PASS HTMLSelectElement interface: attribute willValidate
+PASS HTMLSelectElement interface: attribute validity
+PASS HTMLSelectElement interface: attribute validationMessage
+PASS HTMLSelectElement interface: operation checkValidity()
+PASS HTMLSelectElement interface: operation reportValidity()
+PASS HTMLSelectElement interface: operation setCustomValidity(DOMString)
+PASS HTMLSelectElement interface: attribute labels
+PASS HTMLSelectElement must be primary interface of document.createElement("select")
+PASS Stringification of document.createElement("select")
+FAIL HTMLSelectElement interface: document.createElement("select") must inherit property "autocomplete" with the proper type assert_inherits: property "autocomplete" not found in prototype chain
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "autofocus" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "disabled" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "form" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "multiple" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "name" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "required" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "size" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "type" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "options" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "length" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "item(unsigned long)" with the proper type
+PASS HTMLSelectElement interface: calling item(unsigned long) on document.createElement("select") with too few arguments must throw TypeError
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "namedItem(DOMString)" with the proper type
+PASS HTMLSelectElement interface: calling namedItem(DOMString) on document.createElement("select") with too few arguments must throw TypeError
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "add([object Object],[object Object], [object Object],[object Object])" with the proper type
+PASS HTMLSelectElement interface: calling add([object Object],[object Object], [object Object],[object Object]) on document.createElement("select") with too few arguments must throw TypeError
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "remove()" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "remove(long)" with the proper type
+PASS HTMLSelectElement interface: calling remove(long) on document.createElement("select") with too few arguments must throw TypeError
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "selectedOptions" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "selectedIndex" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "value" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "willValidate" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "validity" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "validationMessage" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "checkValidity()" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "reportValidity()" with the proper type
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLSelectElement interface: calling setCustomValidity(DOMString) on document.createElement("select") with too few arguments must throw TypeError
+PASS HTMLSelectElement interface: document.createElement("select") must inherit property "labels" with the proper type
+PASS HTMLDataListElement interface: existence and properties of interface object
+PASS HTMLDataListElement interface object length
+PASS HTMLDataListElement interface object name
+PASS HTMLDataListElement interface: existence and properties of interface prototype object
+PASS HTMLDataListElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDataListElement interface: attribute options
+PASS HTMLDataListElement must be primary interface of document.createElement("datalist")
+PASS Stringification of document.createElement("datalist")
+PASS HTMLDataListElement interface: document.createElement("datalist") must inherit property "options" with the proper type
+PASS HTMLOptGroupElement interface: existence and properties of interface object
+PASS HTMLOptGroupElement interface object length
+PASS HTMLOptGroupElement interface object name
+PASS HTMLOptGroupElement interface: existence and properties of interface prototype object
+PASS HTMLOptGroupElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLOptGroupElement interface: attribute disabled
+PASS HTMLOptGroupElement interface: attribute label
+PASS HTMLOptGroupElement must be primary interface of document.createElement("optgroup")
+PASS Stringification of document.createElement("optgroup")
+PASS HTMLOptGroupElement interface: document.createElement("optgroup") must inherit property "disabled" with the proper type
+PASS HTMLOptGroupElement interface: document.createElement("optgroup") must inherit property "label" with the proper type
+PASS HTMLOptionElement interface: existence and properties of interface object
+PASS HTMLOptionElement interface object length
+PASS HTMLOptionElement interface object name
+PASS HTMLOptionElement interface: existence and properties of interface prototype object
+PASS HTMLOptionElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLOptionElement interface: attribute disabled
+PASS HTMLOptionElement interface: attribute form
+PASS HTMLOptionElement interface: attribute label
+PASS HTMLOptionElement interface: attribute defaultSelected
+PASS HTMLOptionElement interface: attribute selected
+PASS HTMLOptionElement interface: attribute value
+PASS HTMLOptionElement interface: attribute text
+PASS HTMLOptionElement interface: attribute index
+PASS HTMLOptionElement must be primary interface of document.createElement("option")
+PASS Stringification of document.createElement("option")
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "disabled" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "form" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "label" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "defaultSelected" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "selected" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "value" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "text" with the proper type
+PASS HTMLOptionElement interface: document.createElement("option") must inherit property "index" with the proper type
+PASS HTMLOptionElement must be primary interface of new Option()
+PASS Stringification of new Option()
+PASS HTMLOptionElement interface: new Option() must inherit property "disabled" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "form" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "label" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "defaultSelected" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "selected" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "value" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "text" with the proper type
+PASS HTMLOptionElement interface: new Option() must inherit property "index" with the proper type
+PASS HTMLTextAreaElement interface: existence and properties of interface object
+PASS HTMLTextAreaElement interface object length
+PASS HTMLTextAreaElement interface object name
+PASS HTMLTextAreaElement interface: existence and properties of interface prototype object
+PASS HTMLTextAreaElement interface: existence and properties of interface prototype object's "constructor" property
+FAIL HTMLTextAreaElement interface: attribute autocomplete assert_true: The prototype object must have a property "autocomplete" expected true got false
+PASS HTMLTextAreaElement interface: attribute autofocus
+PASS HTMLTextAreaElement interface: attribute cols
+PASS HTMLTextAreaElement interface: attribute dirName
+PASS HTMLTextAreaElement interface: attribute disabled
+PASS HTMLTextAreaElement interface: attribute form
+FAIL HTMLTextAreaElement interface: attribute inputMode assert_own_property: expected property "inputMode" missing
+PASS HTMLTextAreaElement interface: attribute maxLength
+PASS HTMLTextAreaElement interface: attribute minLength
+PASS HTMLTextAreaElement interface: attribute name
+PASS HTMLTextAreaElement interface: attribute placeholder
+PASS HTMLTextAreaElement interface: attribute readOnly
+PASS HTMLTextAreaElement interface: attribute required
+PASS HTMLTextAreaElement interface: attribute rows
+PASS HTMLTextAreaElement interface: attribute wrap
+PASS HTMLTextAreaElement interface: attribute type
+PASS HTMLTextAreaElement interface: attribute defaultValue
+PASS HTMLTextAreaElement interface: attribute value
+PASS HTMLTextAreaElement interface: attribute textLength
+PASS HTMLTextAreaElement interface: attribute willValidate
+PASS HTMLTextAreaElement interface: attribute validity
+PASS HTMLTextAreaElement interface: attribute validationMessage
+PASS HTMLTextAreaElement interface: operation checkValidity()
+PASS HTMLTextAreaElement interface: operation reportValidity()
+PASS HTMLTextAreaElement interface: operation setCustomValidity(DOMString)
+PASS HTMLTextAreaElement interface: attribute labels
+PASS HTMLTextAreaElement interface: operation select()
+PASS HTMLTextAreaElement interface: attribute selectionStart
+PASS HTMLTextAreaElement interface: attribute selectionEnd
+PASS HTMLTextAreaElement interface: attribute selectionDirection
+PASS HTMLTextAreaElement interface: operation setRangeText(DOMString)
+PASS HTMLTextAreaElement interface: operation setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)
+PASS HTMLTextAreaElement interface: operation setSelectionRange(unsigned long, unsigned long, DOMString)
+PASS HTMLTextAreaElement must be primary interface of document.createElement("textarea")
+PASS Stringification of document.createElement("textarea")
+FAIL HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "autocomplete" with the proper type assert_inherits: property "autocomplete" not found in prototype chain
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "autofocus" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "cols" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "dirName" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "disabled" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "form" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "inputMode" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "maxLength" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "minLength" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "name" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "placeholder" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "readOnly" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "required" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "rows" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "wrap" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "type" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "defaultValue" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "value" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "textLength" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "willValidate" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "validity" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "validationMessage" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "checkValidity()" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "reportValidity()" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLTextAreaElement interface: calling setCustomValidity(DOMString) on document.createElement("textarea") with too few arguments must throw TypeError
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "labels" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "select()" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "selectionStart" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "selectionEnd" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "selectionDirection" with the proper type
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "setRangeText(DOMString)" with the proper type
+PASS HTMLTextAreaElement interface: calling setRangeText(DOMString) on document.createElement("textarea") with too few arguments must throw TypeError
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "setRangeText(DOMString, unsigned long, unsigned long, SelectionMode)" with the proper type
+PASS HTMLTextAreaElement interface: calling setRangeText(DOMString, unsigned long, unsigned long, SelectionMode) on document.createElement("textarea") with too few arguments must throw TypeError
+PASS HTMLTextAreaElement interface: document.createElement("textarea") must inherit property "setSelectionRange(unsigned long, unsigned long, DOMString)" with the proper type
+PASS HTMLTextAreaElement interface: calling setSelectionRange(unsigned long, unsigned long, DOMString) on document.createElement("textarea") with too few arguments must throw TypeError
+PASS HTMLOutputElement interface: existence and properties of interface object
+PASS HTMLOutputElement interface object length
+PASS HTMLOutputElement interface object name
+PASS HTMLOutputElement interface: existence and properties of interface prototype object
+PASS HTMLOutputElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLOutputElement interface: attribute htmlFor
+PASS HTMLOutputElement interface: attribute form
+PASS HTMLOutputElement interface: attribute name
+PASS HTMLOutputElement interface: attribute type
+PASS HTMLOutputElement interface: attribute defaultValue
+PASS HTMLOutputElement interface: attribute value
+PASS HTMLOutputElement interface: attribute willValidate
+PASS HTMLOutputElement interface: attribute validity
+PASS HTMLOutputElement interface: attribute validationMessage
+PASS HTMLOutputElement interface: operation checkValidity()
+PASS HTMLOutputElement interface: operation reportValidity()
+PASS HTMLOutputElement interface: operation setCustomValidity(DOMString)
+PASS HTMLOutputElement interface: attribute labels
+PASS HTMLOutputElement must be primary interface of document.createElement("output")
+PASS Stringification of document.createElement("output")
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "htmlFor" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "form" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "name" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "type" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "defaultValue" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "value" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "willValidate" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "validity" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "validationMessage" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "checkValidity()" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "reportValidity()" with the proper type
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "setCustomValidity(DOMString)" with the proper type
+PASS HTMLOutputElement interface: calling setCustomValidity(DOMString) on document.createElement("output") with too few arguments must throw TypeError
+PASS HTMLOutputElement interface: document.createElement("output") must inherit property "labels" with the proper type
+PASS HTMLProgressElement interface: existence and properties of interface object
+PASS HTMLProgressElement interface object length
+PASS HTMLProgressElement interface object name
+PASS HTMLProgressElement interface: existence and properties of interface prototype object
+PASS HTMLProgressElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLProgressElement interface: attribute value
+PASS HTMLProgressElement interface: attribute max
+PASS HTMLProgressElement interface: attribute position
+PASS HTMLProgressElement interface: attribute labels
+PASS HTMLProgressElement must be primary interface of document.createElement("progress")
+PASS Stringification of document.createElement("progress")
+PASS HTMLProgressElement interface: document.createElement("progress") must inherit property "value" with the proper type
+PASS HTMLProgressElement interface: document.createElement("progress") must inherit property "max" with the proper type
+PASS HTMLProgressElement interface: document.createElement("progress") must inherit property "position" with the proper type
+PASS HTMLProgressElement interface: document.createElement("progress") must inherit property "labels" with the proper type
+PASS HTMLMeterElement interface: existence and properties of interface object
+PASS HTMLMeterElement interface object length
+PASS HTMLMeterElement interface object name
+PASS HTMLMeterElement interface: existence and properties of interface prototype object
+PASS HTMLMeterElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMeterElement interface: attribute value
+PASS HTMLMeterElement interface: attribute min
+PASS HTMLMeterElement interface: attribute max
+PASS HTMLMeterElement interface: attribute low
+PASS HTMLMeterElement interface: attribute high
+PASS HTMLMeterElement interface: attribute optimum
+PASS HTMLMeterElement interface: attribute labels
+PASS HTMLMeterElement must be primary interface of document.createElement("meter")
+PASS Stringification of document.createElement("meter")
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "value" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "min" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "max" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "low" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "high" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "optimum" with the proper type
+PASS HTMLMeterElement interface: document.createElement("meter") must inherit property "labels" with the proper type
+PASS HTMLFieldSetElement interface: existence and properties of interface object
+PASS HTMLFieldSetElement interface object length
+PASS HTMLFieldSetElement interface object name
+PASS HTMLFieldSetElement interface: existence and properties of interface prototype object
+PASS HTMLFieldSetElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFieldSetElement interface: attribute disabled
+PASS HTMLFieldSetElement interface: attribute form
+PASS HTMLFieldSetElement interface: attribute name
+PASS HTMLFieldSetElement interface: attribute type
+PASS HTMLFieldSetElement interface: attribute elements
+PASS HTMLFieldSetElement interface: attribute willValidate
+PASS HTMLFieldSetElement interface: attribute validity
+PASS HTMLFieldSetElement interface: attribute validationMessage
+PASS HTMLFieldSetElement interface: operation checkValidity()
+PASS HTMLFieldSetElement interface: operation reportValidity()
+PASS HTMLFieldSetElement interface: operation setCustomValidity(DOMString)
+PASS HTMLLegendElement interface: existence and properties of interface object
+PASS HTMLLegendElement interface object length
+PASS HTMLLegendElement interface object name
+PASS HTMLLegendElement interface: existence and properties of interface prototype object
+PASS HTMLLegendElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLLegendElement interface: attribute form
+PASS HTMLLegendElement interface: attribute align
+PASS HTMLLegendElement must be primary interface of document.createElement("legend")
+PASS Stringification of document.createElement("legend")
+PASS HTMLLegendElement interface: document.createElement("legend") must inherit property "form" with the proper type
+PASS HTMLLegendElement interface: document.createElement("legend") must inherit property "align" with the proper type
+PASS ValidityState interface: existence and properties of interface object
+PASS ValidityState interface object length
+PASS ValidityState interface object name
+PASS ValidityState interface: existence and properties of interface prototype object
+PASS ValidityState interface: existence and properties of interface prototype object's "constructor" property
+PASS ValidityState interface: attribute valueMissing
+PASS ValidityState interface: attribute typeMismatch
+PASS ValidityState interface: attribute patternMismatch
+PASS ValidityState interface: attribute tooLong
+PASS ValidityState interface: attribute tooShort
+PASS ValidityState interface: attribute rangeUnderflow
+PASS ValidityState interface: attribute rangeOverflow
+PASS ValidityState interface: attribute stepMismatch
+PASS ValidityState interface: attribute badInput
+PASS ValidityState interface: attribute customError
+PASS ValidityState interface: attribute valid
+PASS ValidityState must be primary interface of document.createElement("input").validity
+PASS Stringification of document.createElement("input").validity
+PASS ValidityState interface: document.createElement("input").validity must inherit property "valueMissing" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "typeMismatch" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "patternMismatch" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "tooLong" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "tooShort" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "rangeUnderflow" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "rangeOverflow" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "stepMismatch" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "badInput" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "customError" with the proper type
+PASS ValidityState interface: document.createElement("input").validity must inherit property "valid" with the proper type
+PASS HTMLDetailsElement interface: existence and properties of interface object
+PASS HTMLDetailsElement interface object length
+PASS HTMLDetailsElement interface object name
+PASS HTMLDetailsElement interface: existence and properties of interface prototype object
+PASS HTMLDetailsElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDetailsElement interface: attribute open
+PASS HTMLDetailsElement must be primary interface of document.createElement("details")
+PASS Stringification of document.createElement("details")
+PASS HTMLDetailsElement interface: document.createElement("details") must inherit property "open" with the proper type
+PASS HTMLDialogElement interface: existence and properties of interface object
+PASS HTMLDialogElement interface object length
+PASS HTMLDialogElement interface object name
+PASS HTMLDialogElement interface: existence and properties of interface prototype object
+PASS HTMLDialogElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDialogElement interface: attribute open
+PASS HTMLDialogElement interface: attribute returnValue
+PASS HTMLDialogElement interface: operation show()
+PASS HTMLDialogElement interface: operation showModal()
+PASS HTMLDialogElement interface: operation close(DOMString)
+PASS HTMLScriptElement interface: existence and properties of interface object
+PASS HTMLScriptElement interface object length
+PASS HTMLScriptElement interface object name
+PASS HTMLScriptElement interface: existence and properties of interface prototype object
+PASS HTMLScriptElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLScriptElement interface: attribute src
+PASS HTMLScriptElement interface: attribute type
+PASS HTMLScriptElement interface: attribute noModule
+PASS HTMLScriptElement interface: attribute async
+PASS HTMLScriptElement interface: attribute defer
+PASS HTMLScriptElement interface: attribute crossOrigin
+PASS HTMLScriptElement interface: attribute text
+FAIL HTMLScriptElement interface: attribute nonce assert_own_property: expected property "nonce" missing
+PASS HTMLScriptElement interface: attribute integrity
+PASS HTMLScriptElement interface: attribute charset
+PASS HTMLScriptElement interface: attribute event
+PASS HTMLScriptElement interface: attribute htmlFor
+PASS HTMLScriptElement must be primary interface of document.createElement("script")
+PASS Stringification of document.createElement("script")
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "src" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "type" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "noModule" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "async" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "defer" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "crossOrigin" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "text" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "nonce" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "integrity" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "charset" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "event" with the proper type
+PASS HTMLScriptElement interface: document.createElement("script") must inherit property "htmlFor" with the proper type
+PASS HTMLTemplateElement interface: existence and properties of interface object
+PASS HTMLTemplateElement interface object length
+PASS HTMLTemplateElement interface object name
+PASS HTMLTemplateElement interface: existence and properties of interface prototype object
+PASS HTMLTemplateElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLTemplateElement interface: attribute content
+PASS HTMLTemplateElement must be primary interface of document.createElement("template")
+PASS Stringification of document.createElement("template")
+PASS HTMLTemplateElement interface: document.createElement("template") must inherit property "content" with the proper type
+PASS HTMLSlotElement interface: existence and properties of interface object
+PASS HTMLSlotElement interface object length
+PASS HTMLSlotElement interface object name
+PASS HTMLSlotElement interface: existence and properties of interface prototype object
+PASS HTMLSlotElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLSlotElement interface: attribute name
+PASS HTMLSlotElement interface: operation assignedNodes(AssignedNodesOptions)
+FAIL HTMLSlotElement interface: operation assignedElements(AssignedNodesOptions) assert_own_property: interface prototype object missing non-static operation expected property "assignedElements" missing
+PASS HTMLSlotElement must be primary interface of document.createElement("slot")
+PASS Stringification of document.createElement("slot")
+PASS HTMLSlotElement interface: document.createElement("slot") must inherit property "name" with the proper type
+PASS HTMLSlotElement interface: document.createElement("slot") must inherit property "assignedNodes(AssignedNodesOptions)" with the proper type
+PASS HTMLSlotElement interface: calling assignedNodes(AssignedNodesOptions) on document.createElement("slot") with too few arguments must throw TypeError
+FAIL HTMLSlotElement interface: document.createElement("slot") must inherit property "assignedElements(AssignedNodesOptions)" with the proper type assert_inherits: property "assignedElements" not found in prototype chain
+FAIL HTMLSlotElement interface: calling assignedElements(AssignedNodesOptions) on document.createElement("slot") with too few arguments must throw TypeError assert_inherits: property "assignedElements" not found in prototype chain
+PASS HTMLCanvasElement interface: existence and properties of interface object
+PASS HTMLCanvasElement interface object length
+PASS HTMLCanvasElement interface object name
+PASS HTMLCanvasElement interface: existence and properties of interface prototype object
+PASS HTMLCanvasElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLCanvasElement interface: attribute width
+PASS HTMLCanvasElement interface: attribute height
+PASS HTMLCanvasElement interface: operation getContext(DOMString, any)
+PASS HTMLCanvasElement interface: operation toDataURL(DOMString, any)
+PASS HTMLCanvasElement interface: operation toBlob(BlobCallback, DOMString, any)
+PASS HTMLCanvasElement interface: operation transferControlToOffscreen()
+PASS HTMLCanvasElement must be primary interface of document.createElement("canvas")
+PASS Stringification of document.createElement("canvas")
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "width" with the proper type
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "height" with the proper type
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "getContext(DOMString, any)" with the proper type
+PASS HTMLCanvasElement interface: calling getContext(DOMString, any) on document.createElement("canvas") with too few arguments must throw TypeError
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "toDataURL(DOMString, any)" with the proper type
+PASS HTMLCanvasElement interface: calling toDataURL(DOMString, any) on document.createElement("canvas") with too few arguments must throw TypeError
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "toBlob(BlobCallback, DOMString, any)" with the proper type
+PASS HTMLCanvasElement interface: calling toBlob(BlobCallback, DOMString, any) on document.createElement("canvas") with too few arguments must throw TypeError
+PASS HTMLCanvasElement interface: document.createElement("canvas") must inherit property "transferControlToOffscreen()" with the proper type
+PASS CanvasRenderingContext2D interface: existence and properties of interface object
+PASS CanvasRenderingContext2D interface object length
+PASS CanvasRenderingContext2D interface object name
+PASS CanvasRenderingContext2D interface: existence and properties of interface prototype object
+PASS CanvasRenderingContext2D interface: existence and properties of interface prototype object's "constructor" property
+PASS CanvasRenderingContext2D interface: attribute canvas
+PASS CanvasRenderingContext2D interface: operation save()
+PASS CanvasRenderingContext2D interface: operation restore()
+PASS CanvasRenderingContext2D interface: operation scale(unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation rotate(unrestricted double)
+PASS CanvasRenderingContext2D interface: operation translate(unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation transform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+FAIL CanvasRenderingContext2D interface: operation getTransform() assert_own_property: interface prototype object missing non-static operation expected property "getTransform" missing
+FAIL CanvasRenderingContext2D interface: operation setTransform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) assert_equals: property has wrong .length expected 0 but got 6
+FAIL CanvasRenderingContext2D interface: operation setTransform(DOMMatrix2DInit) assert_equals: property has wrong .length expected 0 but got 6
+PASS CanvasRenderingContext2D interface: operation resetTransform()
+PASS CanvasRenderingContext2D interface: attribute globalAlpha
+PASS CanvasRenderingContext2D interface: attribute globalCompositeOperation
+PASS CanvasRenderingContext2D interface: attribute imageSmoothingEnabled
+PASS CanvasRenderingContext2D interface: attribute imageSmoothingQuality
+PASS CanvasRenderingContext2D interface: attribute strokeStyle
+PASS CanvasRenderingContext2D interface: attribute fillStyle
+PASS CanvasRenderingContext2D interface: operation createLinearGradient(double, double, double, double)
+PASS CanvasRenderingContext2D interface: operation createRadialGradient(double, double, double, double, double, double)
+PASS CanvasRenderingContext2D interface: operation createPattern(CanvasImageSource, DOMString)
+PASS CanvasRenderingContext2D interface: attribute shadowOffsetX
+PASS CanvasRenderingContext2D interface: attribute shadowOffsetY
+PASS CanvasRenderingContext2D interface: attribute shadowBlur
+PASS CanvasRenderingContext2D interface: attribute shadowColor
+PASS CanvasRenderingContext2D interface: attribute filter
+PASS CanvasRenderingContext2D interface: operation clearRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation fillRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation strokeRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation beginPath()
+PASS CanvasRenderingContext2D interface: operation fill(CanvasFillRule)
+PASS CanvasRenderingContext2D interface: operation fill(Path2D, CanvasFillRule)
+PASS CanvasRenderingContext2D interface: operation stroke()
+PASS CanvasRenderingContext2D interface: operation stroke(Path2D)
+PASS CanvasRenderingContext2D interface: operation clip(CanvasFillRule)
+PASS CanvasRenderingContext2D interface: operation clip(Path2D, CanvasFillRule)
+FAIL CanvasRenderingContext2D interface: operation resetClip() assert_own_property: interface prototype object missing non-static operation expected property "resetClip" missing
+PASS CanvasRenderingContext2D interface: operation isPointInPath(unrestricted double, unrestricted double, CanvasFillRule)
+PASS CanvasRenderingContext2D interface: operation isPointInPath(Path2D, unrestricted double, unrestricted double, CanvasFillRule)
+PASS CanvasRenderingContext2D interface: operation isPointInStroke(unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation isPointInStroke(Path2D, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation drawFocusIfNeeded(Element)
+PASS CanvasRenderingContext2D interface: operation drawFocusIfNeeded(Path2D, Element)
+PASS CanvasRenderingContext2D interface: operation scrollPathIntoView()
+PASS CanvasRenderingContext2D interface: operation scrollPathIntoView(Path2D)
+PASS CanvasRenderingContext2D interface: operation fillText(DOMString, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation strokeText(DOMString, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation measureText(DOMString)
+PASS CanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation createImageData(long, long)
+PASS CanvasRenderingContext2D interface: operation createImageData(ImageData)
+PASS CanvasRenderingContext2D interface: operation getImageData(long, long, long, long)
+PASS CanvasRenderingContext2D interface: operation putImageData(ImageData, long, long)
+PASS CanvasRenderingContext2D interface: operation putImageData(ImageData, long, long, long, long, long, long)
+PASS CanvasRenderingContext2D interface: attribute lineWidth
+PASS CanvasRenderingContext2D interface: attribute lineCap
+PASS CanvasRenderingContext2D interface: attribute lineJoin
+PASS CanvasRenderingContext2D interface: attribute miterLimit
+PASS CanvasRenderingContext2D interface: operation setLineDash([object Object])
+PASS CanvasRenderingContext2D interface: operation getLineDash()
+PASS CanvasRenderingContext2D interface: attribute lineDashOffset
+PASS CanvasRenderingContext2D interface: attribute font
+PASS CanvasRenderingContext2D interface: attribute textAlign
+PASS CanvasRenderingContext2D interface: attribute textBaseline
+PASS CanvasRenderingContext2D interface: attribute direction
+PASS CanvasRenderingContext2D interface: operation closePath()
+PASS CanvasRenderingContext2D interface: operation moveTo(unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation lineTo(unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation quadraticCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation bezierCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation rect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS CanvasRenderingContext2D interface: operation arc(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS CanvasRenderingContext2D interface: operation ellipse(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS CanvasRenderingContext2D must be primary interface of document.createElement("canvas").getContext("2d")
+PASS Stringification of document.createElement("canvas").getContext("2d")
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "canvas" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "save()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "restore()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "scale(unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling scale(unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "rotate(unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling rotate(unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "translate(unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling translate(unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "transform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling transform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+FAIL CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "getTransform()" with the proper type assert_inherits: property "getTransform" not found in prototype chain
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "setTransform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling setTransform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "setTransform(DOMMatrix2DInit)" with the proper type
+PASS CanvasRenderingContext2D interface: calling setTransform(DOMMatrix2DInit) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "resetTransform()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "globalAlpha" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "globalCompositeOperation" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "imageSmoothingEnabled" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "imageSmoothingQuality" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "strokeStyle" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "fillStyle" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "createLinearGradient(double, double, double, double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling createLinearGradient(double, double, double, double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "createRadialGradient(double, double, double, double, double, double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling createRadialGradient(double, double, double, double, double, double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "createPattern(CanvasImageSource, DOMString)" with the proper type
+PASS CanvasRenderingContext2D interface: calling createPattern(CanvasImageSource, DOMString) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "shadowOffsetX" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "shadowOffsetY" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "shadowBlur" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "shadowColor" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "filter" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "clearRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling clearRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "fillRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling fillRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "strokeRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling strokeRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "beginPath()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "fill(CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling fill(CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "fill(Path2D, CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling fill(Path2D, CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "stroke()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "stroke(Path2D)" with the proper type
+PASS CanvasRenderingContext2D interface: calling stroke(Path2D) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "clip(CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling clip(CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "clip(Path2D, CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling clip(Path2D, CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+FAIL CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "resetClip()" with the proper type assert_inherits: property "resetClip" not found in prototype chain
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "isPointInPath(unrestricted double, unrestricted double, CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling isPointInPath(unrestricted double, unrestricted double, CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "isPointInPath(Path2D, unrestricted double, unrestricted double, CanvasFillRule)" with the proper type
+PASS CanvasRenderingContext2D interface: calling isPointInPath(Path2D, unrestricted double, unrestricted double, CanvasFillRule) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "isPointInStroke(unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling isPointInStroke(unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "isPointInStroke(Path2D, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling isPointInStroke(Path2D, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawFocusIfNeeded(Element)" with the proper type
+PASS CanvasRenderingContext2D interface: calling drawFocusIfNeeded(Element) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawFocusIfNeeded(Path2D, Element)" with the proper type
+PASS CanvasRenderingContext2D interface: calling drawFocusIfNeeded(Path2D, Element) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "scrollPathIntoView()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "scrollPathIntoView(Path2D)" with the proper type
+PASS CanvasRenderingContext2D interface: calling scrollPathIntoView(Path2D) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "fillText(DOMString, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling fillText(DOMString, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "strokeText(DOMString, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling strokeText(DOMString, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "measureText(DOMString)" with the proper type
+PASS CanvasRenderingContext2D interface: calling measureText(DOMString) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawImage(CanvasImageSource, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling drawImage(CanvasImageSource, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "createImageData(long, long)" with the proper type
+PASS CanvasRenderingContext2D interface: calling createImageData(long, long) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "createImageData(ImageData)" with the proper type
+PASS CanvasRenderingContext2D interface: calling createImageData(ImageData) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "getImageData(long, long, long, long)" with the proper type
+PASS CanvasRenderingContext2D interface: calling getImageData(long, long, long, long) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "putImageData(ImageData, long, long)" with the proper type
+PASS CanvasRenderingContext2D interface: calling putImageData(ImageData, long, long) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "putImageData(ImageData, long, long, long, long, long, long)" with the proper type
+PASS CanvasRenderingContext2D interface: calling putImageData(ImageData, long, long, long, long, long, long) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineWidth" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineCap" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineJoin" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "miterLimit" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "setLineDash([object Object])" with the proper type
+PASS CanvasRenderingContext2D interface: calling setLineDash([object Object]) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "getLineDash()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineDashOffset" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "font" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "textAlign" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "textBaseline" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "direction" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "closePath()" with the proper type
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "moveTo(unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling moveTo(unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineTo(unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling lineTo(unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "quadraticCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling quadraticCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "bezierCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling bezierCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "rect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)" with the proper type
+PASS CanvasRenderingContext2D interface: calling rect(unrestricted double, unrestricted double, unrestricted double, unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "arc(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)" with the proper type
+PASS CanvasRenderingContext2D interface: calling arc(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "ellipse(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)" with the proper type
+PASS CanvasRenderingContext2D interface: calling ellipse(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError
+PASS CanvasGradient interface: existence and properties of interface object
+PASS CanvasGradient interface object length
+PASS CanvasGradient interface object name
+PASS CanvasGradient interface: existence and properties of interface prototype object
+PASS CanvasGradient interface: existence and properties of interface prototype object's "constructor" property
+PASS CanvasGradient interface: operation addColorStop(double, DOMString)
+PASS CanvasPattern interface: existence and properties of interface object
+PASS CanvasPattern interface object length
+PASS CanvasPattern interface object name
+PASS CanvasPattern interface: existence and properties of interface prototype object
+PASS CanvasPattern interface: existence and properties of interface prototype object's "constructor" property
+FAIL CanvasPattern interface: operation setTransform(DOMMatrix2DInit) assert_equals: property has wrong .length expected 0 but got 1
+PASS TextMetrics interface: existence and properties of interface object
+PASS TextMetrics interface object length
+PASS TextMetrics interface object name
+PASS TextMetrics interface: existence and properties of interface prototype object
+PASS TextMetrics interface: existence and properties of interface prototype object's "constructor" property
+PASS TextMetrics interface: attribute width
+PASS TextMetrics interface: attribute actualBoundingBoxLeft
+PASS TextMetrics interface: attribute actualBoundingBoxRight
+PASS TextMetrics interface: attribute fontBoundingBoxAscent
+PASS TextMetrics interface: attribute fontBoundingBoxDescent
+PASS TextMetrics interface: attribute actualBoundingBoxAscent
+PASS TextMetrics interface: attribute actualBoundingBoxDescent
+PASS TextMetrics interface: attribute emHeightAscent
+PASS TextMetrics interface: attribute emHeightDescent
+PASS TextMetrics interface: attribute hangingBaseline
+PASS TextMetrics interface: attribute alphabeticBaseline
+PASS TextMetrics interface: attribute ideographicBaseline
+PASS ImageData interface: existence and properties of interface object
+PASS ImageData interface object length
+PASS ImageData interface object name
+PASS ImageData interface: existence and properties of interface prototype object
+PASS ImageData interface: existence and properties of interface prototype object's "constructor" property
+PASS ImageData interface: attribute width
+PASS ImageData interface: attribute height
+PASS ImageData interface: attribute data
+PASS Path2D interface: existence and properties of interface object
+PASS Path2D interface object length
+PASS Path2D interface object name
+PASS Path2D interface: existence and properties of interface prototype object
+PASS Path2D interface: existence and properties of interface prototype object's "constructor" property
+PASS Path2D interface: operation addPath(Path2D, DOMMatrix2DInit)
+PASS Path2D interface: operation closePath()
+PASS Path2D interface: operation moveTo(unrestricted double, unrestricted double)
+PASS Path2D interface: operation lineTo(unrestricted double, unrestricted double)
+PASS Path2D interface: operation quadraticCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS Path2D interface: operation bezierCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS Path2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS Path2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS Path2D interface: operation rect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS Path2D interface: operation arc(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS Path2D interface: operation ellipse(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS ImageBitmapRenderingContext interface: existence and properties of interface object
+PASS ImageBitmapRenderingContext interface object length
+PASS ImageBitmapRenderingContext interface object name
+PASS ImageBitmapRenderingContext interface: existence and properties of interface prototype object
+PASS ImageBitmapRenderingContext interface: existence and properties of interface prototype object's "constructor" property
+PASS ImageBitmapRenderingContext interface: attribute canvas
+PASS ImageBitmapRenderingContext interface: operation transferFromImageBitmap(ImageBitmap)
+PASS OffscreenCanvas interface: existence and properties of interface object
+PASS OffscreenCanvas interface object length
+PASS OffscreenCanvas interface object name
+PASS OffscreenCanvas interface: existence and properties of interface prototype object
+PASS OffscreenCanvas interface: existence and properties of interface prototype object's "constructor" property
+PASS OffscreenCanvas interface: attribute width
+PASS OffscreenCanvas interface: attribute height
+PASS OffscreenCanvas interface: operation getContext(OffscreenRenderingContextType, any)
+PASS OffscreenCanvas interface: operation transferToImageBitmap()
+PASS OffscreenCanvas interface: operation convertToBlob(ImageEncodeOptions)
+PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface object
+PASS OffscreenCanvasRenderingContext2D interface object length
+PASS OffscreenCanvasRenderingContext2D interface object name
+PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object
+PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object's "constructor" property
+FAIL OffscreenCanvasRenderingContext2D interface: operation commit() assert_throws: calling operation with this = null didn't throw TypeError function "function () {
+            fn.apply(obj, args);
+        }" did not throw
+PASS OffscreenCanvasRenderingContext2D interface: attribute canvas
+PASS OffscreenCanvasRenderingContext2D interface: operation save()
+PASS OffscreenCanvasRenderingContext2D interface: operation restore()
+PASS OffscreenCanvasRenderingContext2D interface: operation scale(unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation rotate(unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation translate(unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation transform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+FAIL OffscreenCanvasRenderingContext2D interface: operation getTransform() assert_own_property: interface prototype object missing non-static operation expected property "getTransform" missing
+FAIL OffscreenCanvasRenderingContext2D interface: operation setTransform(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double) assert_equals: property has wrong .length expected 0 but got 6
+FAIL OffscreenCanvasRenderingContext2D interface: operation setTransform(DOMMatrix2DInit) assert_equals: property has wrong .length expected 0 but got 6
+PASS OffscreenCanvasRenderingContext2D interface: operation resetTransform()
+PASS OffscreenCanvasRenderingContext2D interface: attribute globalAlpha
+PASS OffscreenCanvasRenderingContext2D interface: attribute globalCompositeOperation
+PASS OffscreenCanvasRenderingContext2D interface: attribute imageSmoothingEnabled
+PASS OffscreenCanvasRenderingContext2D interface: attribute imageSmoothingQuality
+PASS OffscreenCanvasRenderingContext2D interface: attribute strokeStyle
+PASS OffscreenCanvasRenderingContext2D interface: attribute fillStyle
+PASS OffscreenCanvasRenderingContext2D interface: operation createLinearGradient(double, double, double, double)
+PASS OffscreenCanvasRenderingContext2D interface: operation createRadialGradient(double, double, double, double, double, double)
+PASS OffscreenCanvasRenderingContext2D interface: operation createPattern(CanvasImageSource, DOMString)
+PASS OffscreenCanvasRenderingContext2D interface: attribute shadowOffsetX
+PASS OffscreenCanvasRenderingContext2D interface: attribute shadowOffsetY
+PASS OffscreenCanvasRenderingContext2D interface: attribute shadowBlur
+PASS OffscreenCanvasRenderingContext2D interface: attribute shadowColor
+PASS OffscreenCanvasRenderingContext2D interface: attribute filter
+PASS OffscreenCanvasRenderingContext2D interface: operation clearRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation fillRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation strokeRect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation beginPath()
+PASS OffscreenCanvasRenderingContext2D interface: operation fill(CanvasFillRule)
+PASS OffscreenCanvasRenderingContext2D interface: operation fill(Path2D, CanvasFillRule)
+PASS OffscreenCanvasRenderingContext2D interface: operation stroke()
+PASS OffscreenCanvasRenderingContext2D interface: operation stroke(Path2D)
+PASS OffscreenCanvasRenderingContext2D interface: operation clip(CanvasFillRule)
+PASS OffscreenCanvasRenderingContext2D interface: operation clip(Path2D, CanvasFillRule)
+FAIL OffscreenCanvasRenderingContext2D interface: operation resetClip() assert_own_property: interface prototype object missing non-static operation expected property "resetClip" missing
+PASS OffscreenCanvasRenderingContext2D interface: operation isPointInPath(unrestricted double, unrestricted double, CanvasFillRule)
+PASS OffscreenCanvasRenderingContext2D interface: operation isPointInPath(Path2D, unrestricted double, unrestricted double, CanvasFillRule)
+PASS OffscreenCanvasRenderingContext2D interface: operation isPointInStroke(unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation isPointInStroke(Path2D, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation drawImage(CanvasImageSource, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation createImageData(long, long)
+PASS OffscreenCanvasRenderingContext2D interface: operation createImageData(ImageData)
+PASS OffscreenCanvasRenderingContext2D interface: operation getImageData(long, long, long, long)
+PASS OffscreenCanvasRenderingContext2D interface: operation putImageData(ImageData, long, long)
+PASS OffscreenCanvasRenderingContext2D interface: operation putImageData(ImageData, long, long, long, long, long, long)
+PASS OffscreenCanvasRenderingContext2D interface: attribute lineWidth
+PASS OffscreenCanvasRenderingContext2D interface: attribute lineCap
+PASS OffscreenCanvasRenderingContext2D interface: attribute lineJoin
+PASS OffscreenCanvasRenderingContext2D interface: attribute miterLimit
+PASS OffscreenCanvasRenderingContext2D interface: operation setLineDash([object Object])
+PASS OffscreenCanvasRenderingContext2D interface: operation getLineDash()
+PASS OffscreenCanvasRenderingContext2D interface: attribute lineDashOffset
+PASS OffscreenCanvasRenderingContext2D interface: operation closePath()
+PASS OffscreenCanvasRenderingContext2D interface: operation moveTo(unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation lineTo(unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation quadraticCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation bezierCurveTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation arcTo(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation rect(unrestricted double, unrestricted double, unrestricted double, unrestricted double)
+PASS OffscreenCanvasRenderingContext2D interface: operation arc(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS OffscreenCanvasRenderingContext2D interface: operation ellipse(unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, unrestricted double, boolean)
+PASS CustomElementRegistry interface: existence and properties of interface object
+PASS CustomElementRegistry interface object length
+PASS CustomElementRegistry interface object name
+PASS CustomElementRegistry interface: existence and properties of interface prototype object
+PASS CustomElementRegistry interface: existence and properties of interface prototype object's "constructor" property
+PASS CustomElementRegistry interface: operation define(DOMString, Function, ElementDefinitionOptions)
+PASS CustomElementRegistry interface: operation get(DOMString)
+PASS CustomElementRegistry interface: operation whenDefined(DOMString)
+PASS DataTransfer interface: existence and properties of interface object
+PASS DataTransfer interface object length
+PASS DataTransfer interface object name
+PASS DataTransfer interface: existence and properties of interface prototype object
+PASS DataTransfer interface: existence and properties of interface prototype object's "constructor" property
+PASS DataTransfer interface: attribute dropEffect
+PASS DataTransfer interface: attribute effectAllowed
+PASS DataTransfer interface: attribute items
+PASS DataTransfer interface: operation setDragImage(Element, long, long)
+PASS DataTransfer interface: attribute types
+PASS DataTransfer interface: operation getData(DOMString)
+PASS DataTransfer interface: operation setData(DOMString, DOMString)
+PASS DataTransfer interface: operation clearData(DOMString)
+PASS DataTransfer interface: attribute files
+PASS DataTransferItemList interface: existence and properties of interface object
+PASS DataTransferItemList interface object length
+PASS DataTransferItemList interface object name
+PASS DataTransferItemList interface: existence and properties of interface prototype object
+PASS DataTransferItemList interface: existence and properties of interface prototype object's "constructor" property
+PASS DataTransferItemList interface: attribute length
+PASS DataTransferItemList interface: operation add(DOMString, DOMString)
+PASS DataTransferItemList interface: operation add(File)
+PASS DataTransferItemList interface: operation remove(unsigned long)
+PASS DataTransferItemList interface: operation clear()
+PASS DataTransferItem interface: existence and properties of interface object
+PASS DataTransferItem interface object length
+PASS DataTransferItem interface object name
+PASS DataTransferItem interface: existence and properties of interface prototype object
+PASS DataTransferItem interface: existence and properties of interface prototype object's "constructor" property
+PASS DataTransferItem interface: attribute kind
+PASS DataTransferItem interface: attribute type
+PASS DataTransferItem interface: operation getAsString(FunctionStringCallback)
+PASS DataTransferItem interface: operation getAsFile()
+PASS DragEvent interface: existence and properties of interface object
+PASS DragEvent interface object length
+PASS DragEvent interface object name
+PASS DragEvent interface: existence and properties of interface prototype object
+PASS DragEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS DragEvent interface: attribute dataTransfer
+PASS Window interface: existence and properties of interface object
+PASS Window interface object length
+PASS Window interface object name
+PASS Window interface: existence and properties of interface prototype object
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to a new value via Object.setPrototypeOf should throw a TypeError
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to a new value via __proto__ should throw a TypeError
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to a new value via Reflect.setPrototypeOf should return false
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to its original value via Object.setPrototypeOf should not throw
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to its original value via __proto__ should not throw
+PASS Window interface: internal [[SetPrototypeOf]] method of interface prototype object - setting to its original value via Reflect.setPrototypeOf should return true
+PASS Window interface: existence and properties of interface prototype object's "constructor" property
+FAIL Window interface: attribute self assert_equals: "self" must have a getter expected "function" but got "undefined"
+PASS Window interface: attribute name
+PASS Window interface: attribute history
+PASS Window interface: attribute customElements
+PASS Window interface: attribute locationbar
+PASS Window interface: attribute menubar
+PASS Window interface: attribute personalbar
+PASS Window interface: attribute scrollbars
+PASS Window interface: attribute statusbar
+PASS Window interface: attribute toolbar
+PASS Window interface: attribute status
+PASS Window interface: operation close()
+FAIL Window interface: attribute closed assert_equals: "closed" must have a getter expected "function" but got "undefined"
+PASS Window interface: operation stop()
+PASS Window interface: operation focus()
+PASS Window interface: operation blur()
+FAIL Window interface: attribute frames assert_equals: "frames" must have a getter expected "function" but got "undefined"
+FAIL Window interface: attribute length assert_equals: "length" must have a getter expected "function" but got "undefined"
+FAIL Window interface: attribute opener assert_equals: "opener" must have a getter expected "function" but got "undefined"
+FAIL Window interface: attribute parent assert_equals: "parent" must have a getter expected "function" but got "undefined"
+PASS Window interface: attribute frameElement
+PASS Window interface: operation open(USVString, DOMString, DOMString)
+PASS Window interface: attribute navigator
+PASS Window interface: attribute applicationCache
+PASS Window interface: operation alert()
+PASS Window interface: operation alert(DOMString)
+PASS Window interface: operation confirm(DOMString)
+PASS Window interface: operation prompt(DOMString, DOMString)
+PASS Window interface: operation print()
+PASS Window interface: operation requestAnimationFrame(FrameRequestCallback)
+PASS Window interface: operation cancelAnimationFrame(unsigned long)
+PASS Window interface: operation postMessage(any, USVString, [object Object])
+PASS Window interface: operation captureEvents()
+PASS Window interface: operation releaseEvents()
+PASS Window interface: attribute external
+PASS Window interface: attribute onabort
+PASS Window interface: attribute onauxclick
+PASS Window interface: attribute onblur
+PASS Window interface: attribute oncancel
+PASS Window interface: attribute oncanplay
+PASS Window interface: attribute oncanplaythrough
+PASS Window interface: attribute onchange
+PASS Window interface: attribute onclick
+PASS Window interface: attribute onclose
+PASS Window interface: attribute oncontextmenu
+PASS Window interface: attribute oncuechange
+PASS Window interface: attribute ondblclick
+PASS Window interface: attribute ondrag
+PASS Window interface: attribute ondragend
+PASS Window interface: attribute ondragenter
+FAIL Window interface: attribute ondragexit assert_own_property: The global object must have a property "ondragexit" expected property "ondragexit" missing
+PASS Window interface: attribute ondragleave
+PASS Window interface: attribute ondragover
+PASS Window interface: attribute ondragstart
+PASS Window interface: attribute ondrop
+PASS Window interface: attribute ondurationchange
+PASS Window interface: attribute onemptied
+PASS Window interface: attribute onended
+PASS Window interface: attribute onerror
+PASS Window interface: attribute onfocus
+PASS Window interface: attribute oninput
+PASS Window interface: attribute oninvalid
+PASS Window interface: attribute onkeydown
+PASS Window interface: attribute onkeypress
+PASS Window interface: attribute onkeyup
+PASS Window interface: attribute onload
+PASS Window interface: attribute onloadeddata
+PASS Window interface: attribute onloadedmetadata
+FAIL Window interface: attribute onloadend assert_own_property: The global object must have a property "onloadend" expected property "onloadend" missing
+PASS Window interface: attribute onloadstart
+PASS Window interface: attribute onmousedown
+PASS Window interface: attribute onmouseenter
+PASS Window interface: attribute onmouseleave
+PASS Window interface: attribute onmousemove
+PASS Window interface: attribute onmouseout
+PASS Window interface: attribute onmouseover
+PASS Window interface: attribute onmouseup
+PASS Window interface: attribute onwheel
+PASS Window interface: attribute onpause
+PASS Window interface: attribute onplay
+PASS Window interface: attribute onplaying
+PASS Window interface: attribute onprogress
+PASS Window interface: attribute onratechange
+PASS Window interface: attribute onreset
+PASS Window interface: attribute onresize
+PASS Window interface: attribute onscroll
+FAIL Window interface: attribute onsecuritypolicyviolation assert_own_property: The global object must have a property "onsecuritypolicyviolation" expected property "onsecuritypolicyviolation" missing
+PASS Window interface: attribute onseeked
+PASS Window interface: attribute onseeking
+PASS Window interface: attribute onselect
+PASS Window interface: attribute onstalled
+PASS Window interface: attribute onsubmit
+PASS Window interface: attribute onsuspend
+PASS Window interface: attribute ontimeupdate
+PASS Window interface: attribute ontoggle
+PASS Window interface: attribute onvolumechange
+PASS Window interface: attribute onwaiting
+PASS Window interface: attribute onafterprint
+PASS Window interface: attribute onbeforeprint
+PASS Window interface: attribute onbeforeunload
+PASS Window interface: attribute onhashchange
+PASS Window interface: attribute onlanguagechange
+PASS Window interface: attribute onmessage
+PASS Window interface: attribute onmessageerror
+PASS Window interface: attribute onoffline
+PASS Window interface: attribute ononline
+PASS Window interface: attribute onpagehide
+PASS Window interface: attribute onpageshow
+PASS Window interface: attribute onpopstate
+PASS Window interface: attribute onrejectionhandled
+PASS Window interface: attribute onstorage
+PASS Window interface: attribute onunhandledrejection
+PASS Window interface: attribute onunload
+PASS Window interface: attribute origin
+PASS Window interface: operation btoa(DOMString)
+PASS Window interface: operation atob(DOMString)
+PASS Window interface: operation setTimeout(TimerHandler, long, any)
+PASS Window interface: operation clearTimeout(long)
+PASS Window interface: operation setInterval(TimerHandler, long, any)
+PASS Window interface: operation clearInterval(long)
+PASS Window interface: operation createImageBitmap(ImageBitmapSource, ImageBitmapOptions)
+PASS Window interface: operation createImageBitmap(ImageBitmapSource, long, long, long, long, ImageBitmapOptions)
+PASS Window interface: attribute sessionStorage
+PASS Window interface: attribute localStorage
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to a new value via Object.setPrototypeOf should throw a TypeError
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to a new value via __proto__ should throw a TypeError
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to a new value via Reflect.setPrototypeOf should return false
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to its original value via Object.setPrototypeOf should not throw
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to its original value via __proto__ should not throw
+PASS Window interface: internal [[SetPrototypeOf]] method of global platform object - setting to its original value via Reflect.setPrototypeOf should return true
+PASS Window must be primary interface of window
+PASS Stringification of window
+FAIL Window interface: window must have own property "window" assert_false: property descriptor should not have a "value" field expected false got true
+FAIL Window interface: window must inherit property "self" with the proper type Unrecognized type WindowProxy
+PASS Window interface: window must have own property "document"
+PASS Window interface: window must inherit property "name" with the proper type
+FAIL Window interface: window must have own property "location" assert_false: property descriptor should not have a "value" field expected false got true
+PASS Window interface: window must inherit property "history" with the proper type
+PASS Window interface: window must inherit property "customElements" with the proper type
+PASS Window interface: window must inherit property "locationbar" with the proper type
+PASS Window interface: window must inherit property "menubar" with the proper type
+PASS Window interface: window must inherit property "personalbar" with the proper type
+PASS Window interface: window must inherit property "scrollbars" with the proper type
+PASS Window interface: window must inherit property "statusbar" with the proper type
+PASS Window interface: window must inherit property "toolbar" with the proper type
+PASS Window interface: window must inherit property "status" with the proper type
+PASS Window interface: window must inherit property "close()" with the proper type
+PASS Window interface: window must inherit property "closed" with the proper type
+PASS Window interface: window must inherit property "stop()" with the proper type
+PASS Window interface: window must inherit property "focus()" with the proper type
+PASS Window interface: window must inherit property "blur()" with the proper type
+FAIL Window interface: window must inherit property "frames" with the proper type Unrecognized type WindowProxy
+PASS Window interface: window must inherit property "length" with the proper type
+FAIL Window interface: window must have own property "top" assert_false: property descriptor should not have a "value" field expected false got true
+PASS Window interface: window must inherit property "opener" with the proper type
+FAIL Window interface: window must inherit property "parent" with the proper type Unrecognized type WindowProxy
+PASS Window interface: window must inherit property "frameElement" with the proper type
+PASS Window interface: window must inherit property "open(USVString, DOMString, DOMString)" with the proper type
+PASS Window interface: calling open(USVString, DOMString, DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "navigator" with the proper type
+PASS Window interface: window must inherit property "applicationCache" with the proper type
+PASS Window interface: window must inherit property "alert()" with the proper type
+PASS Window interface: window must inherit property "alert(DOMString)" with the proper type
+PASS Window interface: calling alert(DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "confirm(DOMString)" with the proper type
+PASS Window interface: calling confirm(DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "prompt(DOMString, DOMString)" with the proper type
+PASS Window interface: calling prompt(DOMString, DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "print()" with the proper type
+PASS Window interface: window must inherit property "requestAnimationFrame(FrameRequestCallback)" with the proper type
+PASS Window interface: calling requestAnimationFrame(FrameRequestCallback) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "cancelAnimationFrame(unsigned long)" with the proper type
+PASS Window interface: calling cancelAnimationFrame(unsigned long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "postMessage(any, USVString, [object Object])" with the proper type
+PASS Window interface: calling postMessage(any, USVString, [object Object]) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "captureEvents()" with the proper type
+PASS Window interface: window must inherit property "releaseEvents()" with the proper type
+PASS Window interface: window must inherit property "external" with the proper type
+PASS Window interface: window must inherit property "onabort" with the proper type
+PASS Window interface: window must inherit property "onauxclick" with the proper type
+PASS Window interface: window must inherit property "onblur" with the proper type
+PASS Window interface: window must inherit property "oncancel" with the proper type
+PASS Window interface: window must inherit property "oncanplay" with the proper type
+PASS Window interface: window must inherit property "oncanplaythrough" with the proper type
+PASS Window interface: window must inherit property "onchange" with the proper type
+PASS Window interface: window must inherit property "onclick" with the proper type
+PASS Window interface: window must inherit property "onclose" with the proper type
+PASS Window interface: window must inherit property "oncontextmenu" with the proper type
+PASS Window interface: window must inherit property "oncuechange" with the proper type
+PASS Window interface: window must inherit property "ondblclick" with the proper type
+PASS Window interface: window must inherit property "ondrag" with the proper type
+PASS Window interface: window must inherit property "ondragend" with the proper type
+PASS Window interface: window must inherit property "ondragenter" with the proper type
+FAIL Window interface: window must inherit property "ondragexit" with the proper type assert_own_property: expected property "ondragexit" missing
+PASS Window interface: window must inherit property "ondragleave" with the proper type
+PASS Window interface: window must inherit property "ondragover" with the proper type
+PASS Window interface: window must inherit property "ondragstart" with the proper type
+PASS Window interface: window must inherit property "ondrop" with the proper type
+PASS Window interface: window must inherit property "ondurationchange" with the proper type
+PASS Window interface: window must inherit property "onemptied" with the proper type
+PASS Window interface: window must inherit property "onended" with the proper type
+PASS Window interface: window must inherit property "onerror" with the proper type
+PASS Window interface: window must inherit property "onfocus" with the proper type
+PASS Window interface: window must inherit property "oninput" with the proper type
+PASS Window interface: window must inherit property "oninvalid" with the proper type
+PASS Window interface: window must inherit property "onkeydown" with the proper type
+PASS Window interface: window must inherit property "onkeypress" with the proper type
+PASS Window interface: window must inherit property "onkeyup" with the proper type
+PASS Window interface: window must inherit property "onload" with the proper type
+PASS Window interface: window must inherit property "onloadeddata" with the proper type
+PASS Window interface: window must inherit property "onloadedmetadata" with the proper type
+FAIL Window interface: window must inherit property "onloadend" with the proper type assert_own_property: expected property "onloadend" missing
+PASS Window interface: window must inherit property "onloadstart" with the proper type
+PASS Window interface: window must inherit property "onmousedown" with the proper type
+PASS Window interface: window must inherit property "onmouseenter" with the proper type
+PASS Window interface: window must inherit property "onmouseleave" with the proper type
+PASS Window interface: window must inherit property "onmousemove" with the proper type
+PASS Window interface: window must inherit property "onmouseout" with the proper type
+PASS Window interface: window must inherit property "onmouseover" with the proper type
+PASS Window interface: window must inherit property "onmouseup" with the proper type
+PASS Window interface: window must inherit property "onwheel" with the proper type
+PASS Window interface: window must inherit property "onpause" with the proper type
+PASS Window interface: window must inherit property "onplay" with the proper type
+PASS Window interface: window must inherit property "onplaying" with the proper type
+PASS Window interface: window must inherit property "onprogress" with the proper type
+PASS Window interface: window must inherit property "onratechange" with the proper type
+PASS Window interface: window must inherit property "onreset" with the proper type
+PASS Window interface: window must inherit property "onresize" with the proper type
+PASS Window interface: window must inherit property "onscroll" with the proper type
+FAIL Window interface: window must inherit property "onsecuritypolicyviolation" with the proper type assert_own_property: expected property "onsecuritypolicyviolation" missing
+PASS Window interface: window must inherit property "onseeked" with the proper type
+PASS Window interface: window must inherit property "onseeking" with the proper type
+PASS Window interface: window must inherit property "onselect" with the proper type
+PASS Window interface: window must inherit property "onstalled" with the proper type
+PASS Window interface: window must inherit property "onsubmit" with the proper type
+PASS Window interface: window must inherit property "onsuspend" with the proper type
+PASS Window interface: window must inherit property "ontimeupdate" with the proper type
+PASS Window interface: window must inherit property "ontoggle" with the proper type
+PASS Window interface: window must inherit property "onvolumechange" with the proper type
+PASS Window interface: window must inherit property "onwaiting" with the proper type
+PASS Window interface: window must inherit property "onafterprint" with the proper type
+PASS Window interface: window must inherit property "onbeforeprint" with the proper type
+PASS Window interface: window must inherit property "onbeforeunload" with the proper type
+PASS Window interface: window must inherit property "onhashchange" with the proper type
+PASS Window interface: window must inherit property "onlanguagechange" with the proper type
+PASS Window interface: window must inherit property "onmessage" with the proper type
+PASS Window interface: window must inherit property "onmessageerror" with the proper type
+PASS Window interface: window must inherit property "onoffline" with the proper type
+PASS Window interface: window must inherit property "ononline" with the proper type
+PASS Window interface: window must inherit property "onpagehide" with the proper type
+PASS Window interface: window must inherit property "onpageshow" with the proper type
+PASS Window interface: window must inherit property "onpopstate" with the proper type
+PASS Window interface: window must inherit property "onrejectionhandled" with the proper type
+PASS Window interface: window must inherit property "onstorage" with the proper type
+PASS Window interface: window must inherit property "onunhandledrejection" with the proper type
+PASS Window interface: window must inherit property "onunload" with the proper type
+PASS Window interface: window must inherit property "origin" with the proper type
+PASS Window interface: window must inherit property "btoa(DOMString)" with the proper type
+PASS Window interface: calling btoa(DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "atob(DOMString)" with the proper type
+PASS Window interface: calling atob(DOMString) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "setTimeout(TimerHandler, long, any)" with the proper type
+PASS Window interface: calling setTimeout(TimerHandler, long, any) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "clearTimeout(long)" with the proper type
+PASS Window interface: calling clearTimeout(long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "setInterval(TimerHandler, long, any)" with the proper type
+PASS Window interface: calling setInterval(TimerHandler, long, any) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "clearInterval(long)" with the proper type
+PASS Window interface: calling clearInterval(long) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "createImageBitmap(ImageBitmapSource, ImageBitmapOptions)" with the proper type
+PASS Window interface: calling createImageBitmap(ImageBitmapSource, ImageBitmapOptions) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "createImageBitmap(ImageBitmapSource, long, long, long, long, ImageBitmapOptions)" with the proper type
+PASS Window interface: calling createImageBitmap(ImageBitmapSource, long, long, long, long, ImageBitmapOptions) on window with too few arguments must throw TypeError
+PASS Window interface: window must inherit property "sessionStorage" with the proper type
+PASS Window interface: window must inherit property "localStorage" with the proper type
+PASS BarProp interface: existence and properties of interface object
+PASS BarProp interface object length
+PASS BarProp interface object name
+PASS BarProp interface: existence and properties of interface prototype object
+PASS BarProp interface: existence and properties of interface prototype object's "constructor" property
+PASS BarProp interface: attribute visible
+PASS History interface: existence and properties of interface object
+PASS History interface object length
+PASS History interface object name
+PASS History interface: existence and properties of interface prototype object
+PASS History interface: existence and properties of interface prototype object's "constructor" property
+FAIL History interface: attribute index assert_true: The prototype object must have a property "index" expected true got false
+PASS History interface: attribute length
+PASS History interface: attribute scrollRestoration
+PASS History interface: attribute state
+PASS History interface: operation go(long)
+PASS History interface: operation back()
+PASS History interface: operation forward()
+PASS History interface: operation pushState(any, DOMString, USVString)
+PASS History interface: operation replaceState(any, DOMString, USVString)
+PASS History must be primary interface of window.history
+PASS Stringification of window.history
+FAIL History interface: window.history must inherit property "index" with the proper type assert_inherits: property "index" not found in prototype chain
+PASS History interface: window.history must inherit property "length" with the proper type
+PASS History interface: window.history must inherit property "scrollRestoration" with the proper type
+PASS History interface: window.history must inherit property "state" with the proper type
+PASS History interface: window.history must inherit property "go(long)" with the proper type
+PASS History interface: calling go(long) on window.history with too few arguments must throw TypeError
+PASS History interface: window.history must inherit property "back()" with the proper type
+PASS History interface: window.history must inherit property "forward()" with the proper type
+PASS History interface: window.history must inherit property "pushState(any, DOMString, USVString)" with the proper type
+PASS History interface: calling pushState(any, DOMString, USVString) on window.history with too few arguments must throw TypeError
+PASS History interface: window.history must inherit property "replaceState(any, DOMString, USVString)" with the proper type
+PASS History interface: calling replaceState(any, DOMString, USVString) on window.history with too few arguments must throw TypeError
+PASS Location interface: existence and properties of interface object
+PASS Location interface object length
+PASS Location interface object name
+PASS Location interface: existence and properties of interface prototype object
+PASS Location interface: existence and properties of interface prototype object's "constructor" property
+FAIL Location interface: stringifier assert_own_property: interface prototype object missing non-static operation expected property "toString" missing
+PASS Location must be primary interface of window.location
+PASS Stringification of window.location
+FAIL Location interface: window.location must have own property "href" assert_false: property descriptor should not have a "value" field expected false got true
+PASS Location interface: window.location must have own property "origin"
+PASS Location interface: window.location must have own property "protocol"
+PASS Location interface: window.location must have own property "host"
+PASS Location interface: window.location must have own property "hostname"
+PASS Location interface: window.location must have own property "port"
+PASS Location interface: window.location must have own property "pathname"
+PASS Location interface: window.location must have own property "search"
+PASS Location interface: window.location must have own property "hash"
+PASS Location interface: window.location must have own property "assign"
+PASS Location interface: calling assign(USVString) on window.location with too few arguments must throw TypeError
+PASS Location interface: window.location must have own property "replace"
+PASS Location interface: calling replace(USVString) on window.location with too few arguments must throw TypeError
+PASS Location interface: window.location must have own property "reload"
+PASS Location interface: window.location must have own property "ancestorOrigins"
+PASS PopStateEvent interface: existence and properties of interface object
+PASS PopStateEvent interface object length
+PASS PopStateEvent interface object name
+PASS PopStateEvent interface: existence and properties of interface prototype object
+PASS PopStateEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS PopStateEvent interface: attribute state
+PASS PopStateEvent must be primary interface of new PopStateEvent("popstate", { data: {} })
+PASS Stringification of new PopStateEvent("popstate", { data: {} })
+PASS PopStateEvent interface: new PopStateEvent("popstate", { data: {} }) must inherit property "state" with the proper type
+PASS HashChangeEvent interface: existence and properties of interface object
+PASS HashChangeEvent interface object length
+PASS HashChangeEvent interface object name
+PASS HashChangeEvent interface: existence and properties of interface prototype object
+PASS HashChangeEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS HashChangeEvent interface: attribute oldURL
+PASS HashChangeEvent interface: attribute newURL
+PASS PageTransitionEvent interface: existence and properties of interface object
+PASS PageTransitionEvent interface object length
+PASS PageTransitionEvent interface object name
+PASS PageTransitionEvent interface: existence and properties of interface prototype object
+PASS PageTransitionEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS PageTransitionEvent interface: attribute persisted
+PASS BeforeUnloadEvent interface: existence and properties of interface object
+PASS BeforeUnloadEvent interface object length
+PASS BeforeUnloadEvent interface object name
+PASS BeforeUnloadEvent interface: existence and properties of interface prototype object
+PASS BeforeUnloadEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS BeforeUnloadEvent interface: attribute returnValue
+PASS ApplicationCache interface: existence and properties of interface object
+PASS ApplicationCache interface object length
+PASS ApplicationCache interface object name
+PASS ApplicationCache interface: existence and properties of interface prototype object
+PASS ApplicationCache interface: existence and properties of interface prototype object's "constructor" property
+PASS ApplicationCache interface: constant UNCACHED on interface object
+PASS ApplicationCache interface: constant UNCACHED on interface prototype object
+PASS ApplicationCache interface: constant IDLE on interface object
+PASS ApplicationCache interface: constant IDLE on interface prototype object
+PASS ApplicationCache interface: constant CHECKING on interface object
+PASS ApplicationCache interface: constant CHECKING on interface prototype object
+PASS ApplicationCache interface: constant DOWNLOADING on interface object
+PASS ApplicationCache interface: constant DOWNLOADING on interface prototype object
+PASS ApplicationCache interface: constant UPDATEREADY on interface object
+PASS ApplicationCache interface: constant UPDATEREADY on interface prototype object
+PASS ApplicationCache interface: constant OBSOLETE on interface object
+PASS ApplicationCache interface: constant OBSOLETE on interface prototype object
+PASS ApplicationCache interface: attribute status
+PASS ApplicationCache interface: operation update()
+PASS ApplicationCache interface: operation abort()
+PASS ApplicationCache interface: operation swapCache()
+PASS ApplicationCache interface: attribute onchecking
+PASS ApplicationCache interface: attribute onerror
+PASS ApplicationCache interface: attribute onnoupdate
+PASS ApplicationCache interface: attribute ondownloading
+PASS ApplicationCache interface: attribute onprogress
+PASS ApplicationCache interface: attribute onupdateready
+PASS ApplicationCache interface: attribute oncached
+PASS ApplicationCache interface: attribute onobsolete
+PASS ApplicationCache must be primary interface of window.applicationCache
+PASS Stringification of window.applicationCache
+PASS ApplicationCache interface: window.applicationCache must inherit property "UNCACHED" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "IDLE" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "CHECKING" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "DOWNLOADING" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "UPDATEREADY" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "OBSOLETE" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "status" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "update()" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "abort()" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "swapCache()" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onchecking" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onerror" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onnoupdate" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "ondownloading" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onprogress" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onupdateready" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "oncached" with the proper type
+PASS ApplicationCache interface: window.applicationCache must inherit property "onobsolete" with the proper type
+PASS ErrorEvent interface: existence and properties of interface object
+PASS ErrorEvent interface object length
+PASS ErrorEvent interface object name
+PASS ErrorEvent interface: existence and properties of interface prototype object
+PASS ErrorEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS ErrorEvent interface: attribute message
+PASS ErrorEvent interface: attribute filename
+PASS ErrorEvent interface: attribute lineno
+PASS ErrorEvent interface: attribute colno
+PASS ErrorEvent interface: attribute error
+PASS PromiseRejectionEvent interface: existence and properties of interface object
+PASS PromiseRejectionEvent interface object length
+PASS PromiseRejectionEvent interface object name
+PASS PromiseRejectionEvent interface: existence and properties of interface prototype object
+PASS PromiseRejectionEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS PromiseRejectionEvent interface: attribute promise
+PASS PromiseRejectionEvent interface: attribute reason
+PASS Navigator interface: existence and properties of interface object
+PASS Navigator interface object length
+PASS Navigator interface object name
+PASS Navigator interface: existence and properties of interface prototype object
+PASS Navigator interface: existence and properties of interface prototype object's "constructor" property
+PASS Navigator interface: attribute appCodeName
+PASS Navigator interface: attribute appName
+PASS Navigator interface: attribute appVersion
+PASS Navigator interface: attribute platform
+PASS Navigator interface: attribute product
+PASS Navigator interface: attribute productSub
+PASS Navigator interface: attribute userAgent
+PASS Navigator interface: attribute vendor
+PASS Navigator interface: attribute vendorSub
+FAIL Navigator interface: operation taintEnabled() assert_own_property: interface prototype object missing non-static operation expected property "taintEnabled" missing
+FAIL Navigator interface: attribute oscpu assert_true: The prototype object must have a property "oscpu" expected true got false
+PASS Navigator interface: attribute language
+PASS Navigator interface: attribute languages
+PASS Navigator interface: attribute onLine
+PASS Navigator interface: operation registerProtocolHandler(DOMString, USVString, DOMString)
+PASS Navigator interface: operation unregisterProtocolHandler(DOMString, USVString)
+PASS Navigator interface: attribute cookieEnabled
+PASS Navigator interface: attribute plugins
+PASS Navigator interface: attribute mimeTypes
+PASS Navigator interface: operation javaEnabled()
+PASS Navigator interface: attribute hardwareConcurrency
+PASS Navigator must be primary interface of window.navigator
+PASS Stringification of window.navigator
+PASS Navigator interface: window.navigator must inherit property "appCodeName" with the proper type
+PASS Navigator interface: window.navigator must inherit property "appName" with the proper type
+PASS Navigator interface: window.navigator must inherit property "appVersion" with the proper type
+PASS Navigator interface: window.navigator must inherit property "platform" with the proper type
+PASS Navigator interface: window.navigator must inherit property "product" with the proper type
+PASS Navigator interface: window.navigator must inherit property "productSub" with the proper type
+PASS Navigator interface: window.navigator must inherit property "userAgent" with the proper type
+PASS Navigator interface: window.navigator must inherit property "vendor" with the proper type
+PASS Navigator interface: window.navigator must inherit property "vendorSub" with the proper type
+FAIL Navigator interface: window.navigator must inherit property "taintEnabled()" with the proper type assert_inherits: property "taintEnabled" not found in prototype chain
+FAIL Navigator interface: window.navigator must inherit property "oscpu" with the proper type assert_inherits: property "oscpu" not found in prototype chain
+PASS Navigator interface: window.navigator must inherit property "language" with the proper type
+PASS Navigator interface: window.navigator must inherit property "languages" with the proper type
+PASS Navigator interface: window.navigator must inherit property "onLine" with the proper type
+PASS Navigator interface: window.navigator must inherit property "registerProtocolHandler(DOMString, USVString, DOMString)" with the proper type
+PASS Navigator interface: calling registerProtocolHandler(DOMString, USVString, DOMString) on window.navigator with too few arguments must throw TypeError
+PASS Navigator interface: window.navigator must inherit property "unregisterProtocolHandler(DOMString, USVString)" with the proper type
+PASS Navigator interface: calling unregisterProtocolHandler(DOMString, USVString) on window.navigator with too few arguments must throw TypeError
+PASS Navigator interface: window.navigator must inherit property "cookieEnabled" with the proper type
+PASS Navigator interface: window.navigator must inherit property "plugins" with the proper type
+PASS Navigator interface: window.navigator must inherit property "mimeTypes" with the proper type
+PASS Navigator interface: window.navigator must inherit property "javaEnabled()" with the proper type
+PASS Navigator interface: window.navigator must inherit property "hardwareConcurrency" with the proper type
+PASS PluginArray interface: existence and properties of interface object
+PASS PluginArray interface object length
+PASS PluginArray interface object name
+PASS PluginArray interface: existence and properties of interface prototype object
+PASS PluginArray interface: existence and properties of interface prototype object's "constructor" property
+PASS PluginArray interface: operation refresh(boolean)
+PASS PluginArray interface: attribute length
+PASS PluginArray interface: operation item(unsigned long)
+PASS PluginArray interface: operation namedItem(DOMString)
+PASS MimeTypeArray interface: existence and properties of interface object
+PASS MimeTypeArray interface object length
+PASS MimeTypeArray interface object name
+PASS MimeTypeArray interface: existence and properties of interface prototype object
+PASS MimeTypeArray interface: existence and properties of interface prototype object's "constructor" property
+PASS MimeTypeArray interface: attribute length
+PASS MimeTypeArray interface: operation item(unsigned long)
+PASS MimeTypeArray interface: operation namedItem(DOMString)
+PASS Plugin interface: existence and properties of interface object
+PASS Plugin interface object length
+PASS Plugin interface object name
+PASS Plugin interface: existence and properties of interface prototype object
+PASS Plugin interface: existence and properties of interface prototype object's "constructor" property
+PASS Plugin interface: attribute name
+PASS Plugin interface: attribute description
+PASS Plugin interface: attribute filename
+PASS Plugin interface: attribute length
+PASS Plugin interface: operation item(unsigned long)
+PASS Plugin interface: operation namedItem(DOMString)
+PASS MimeType interface: existence and properties of interface object
+PASS MimeType interface object length
+PASS MimeType interface object name
+PASS MimeType interface: existence and properties of interface prototype object
+PASS MimeType interface: existence and properties of interface prototype object's "constructor" property
+PASS MimeType interface: attribute type
+PASS MimeType interface: attribute description
+PASS MimeType interface: attribute suffixes
+PASS MimeType interface: attribute enabledPlugin
+PASS ImageBitmap interface: existence and properties of interface object
+PASS ImageBitmap interface object length
+PASS ImageBitmap interface object name
+PASS ImageBitmap interface: existence and properties of interface prototype object
+PASS ImageBitmap interface: existence and properties of interface prototype object's "constructor" property
+PASS ImageBitmap interface: attribute width
+PASS ImageBitmap interface: attribute height
+PASS ImageBitmap interface: operation close()
+PASS MessageEvent interface: existence and properties of interface object
+PASS MessageEvent interface object length
+PASS MessageEvent interface object name
+PASS MessageEvent interface: existence and properties of interface prototype object
+PASS MessageEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS MessageEvent interface: attribute data
+PASS MessageEvent interface: attribute origin
+PASS MessageEvent interface: attribute lastEventId
+PASS MessageEvent interface: attribute source
+PASS MessageEvent interface: attribute ports
+FAIL MessageEvent interface: operation initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object]) assert_equals: property has wrong .length expected 1 but got 0
+PASS MessageEvent must be primary interface of new MessageEvent("message", { data: 5 })
+PASS Stringification of new MessageEvent("message", { data: 5 })
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "data" with the proper type
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "origin" with the proper type
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "lastEventId" with the proper type
+FAIL MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type Unrecognized type WindowProxy
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "ports" with the proper type
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object])" with the proper type
+FAIL MessageEvent interface: calling initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object]) on new MessageEvent("message", { data: 5 }) with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+            fn.apply(obj, args);
+        }" did not throw
+PASS EventSource interface: existence and properties of interface object
+PASS EventSource interface object length
+PASS EventSource interface object name
+PASS EventSource interface: existence and properties of interface prototype object
+PASS EventSource interface: existence and properties of interface prototype object's "constructor" property
+PASS EventSource interface: attribute url
+PASS EventSource interface: attribute withCredentials
+PASS EventSource interface: constant CONNECTING on interface object
+PASS EventSource interface: constant CONNECTING on interface prototype object
+PASS EventSource interface: constant OPEN on interface object
+PASS EventSource interface: constant OPEN on interface prototype object
+PASS EventSource interface: constant CLOSED on interface object
+PASS EventSource interface: constant CLOSED on interface prototype object
+PASS EventSource interface: attribute readyState
+PASS EventSource interface: attribute onopen
+PASS EventSource interface: attribute onmessage
+PASS EventSource interface: attribute onerror
+PASS EventSource interface: operation close()
+PASS WebSocket interface: existence and properties of interface object
+PASS WebSocket interface object length
+PASS WebSocket interface object name
+PASS WebSocket interface: existence and properties of interface prototype object
+PASS WebSocket interface: existence and properties of interface prototype object's "constructor" property
+PASS WebSocket interface: attribute url
+PASS WebSocket interface: constant CONNECTING on interface object
+PASS WebSocket interface: constant CONNECTING on interface prototype object
+PASS WebSocket interface: constant OPEN on interface object
+PASS WebSocket interface: constant OPEN on interface prototype object
+PASS WebSocket interface: constant CLOSING on interface object
+PASS WebSocket interface: constant CLOSING on interface prototype object
+PASS WebSocket interface: constant CLOSED on interface object
+PASS WebSocket interface: constant CLOSED on interface prototype object
+PASS WebSocket interface: attribute readyState
+PASS WebSocket interface: attribute bufferedAmount
+PASS WebSocket interface: attribute onopen
+PASS WebSocket interface: attribute onerror
+PASS WebSocket interface: attribute onclose
+PASS WebSocket interface: attribute extensions
+PASS WebSocket interface: attribute protocol
+PASS WebSocket interface: operation close(unsigned short, USVString)
+PASS WebSocket interface: attribute onmessage
+PASS WebSocket interface: attribute binaryType
+PASS WebSocket interface: operation send(USVString)
+PASS WebSocket interface: operation send(Blob)
+PASS WebSocket interface: operation send(ArrayBuffer)
+PASS WebSocket interface: operation send(ArrayBufferView)
+PASS WebSocket must be primary interface of new WebSocket("ws://foo")
+PASS Stringification of new WebSocket("ws://foo")
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "url" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "CONNECTING" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "OPEN" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "CLOSING" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "CLOSED" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "readyState" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "bufferedAmount" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "onopen" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "onerror" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "onclose" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "extensions" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "protocol" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "close(unsigned short, USVString)" with the proper type
+PASS WebSocket interface: calling close(unsigned short, USVString) on new WebSocket("ws://foo") with too few arguments must throw TypeError
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "onmessage" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "binaryType" with the proper type
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "send(USVString)" with the proper type
+PASS WebSocket interface: calling send(USVString) on new WebSocket("ws://foo") with too few arguments must throw TypeError
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "send(Blob)" with the proper type
+PASS WebSocket interface: calling send(Blob) on new WebSocket("ws://foo") with too few arguments must throw TypeError
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "send(ArrayBuffer)" with the proper type
+PASS WebSocket interface: calling send(ArrayBuffer) on new WebSocket("ws://foo") with too few arguments must throw TypeError
+PASS WebSocket interface: new WebSocket("ws://foo") must inherit property "send(ArrayBufferView)" with the proper type
+PASS WebSocket interface: calling send(ArrayBufferView) on new WebSocket("ws://foo") with too few arguments must throw TypeError
+PASS CloseEvent interface: existence and properties of interface object
+PASS CloseEvent interface object length
+PASS CloseEvent interface object name
+PASS CloseEvent interface: existence and properties of interface prototype object
+PASS CloseEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS CloseEvent interface: attribute wasClean
+PASS CloseEvent interface: attribute code
+PASS CloseEvent interface: attribute reason
+PASS CloseEvent must be primary interface of new CloseEvent("close")
+PASS Stringification of new CloseEvent("close")
+PASS CloseEvent interface: new CloseEvent("close") must inherit property "wasClean" with the proper type
+PASS CloseEvent interface: new CloseEvent("close") must inherit property "code" with the proper type
+PASS CloseEvent interface: new CloseEvent("close") must inherit property "reason" with the proper type
+PASS MessageChannel interface: existence and properties of interface object
+PASS MessageChannel interface object length
+PASS MessageChannel interface object name
+PASS MessageChannel interface: existence and properties of interface prototype object
+PASS MessageChannel interface: existence and properties of interface prototype object's "constructor" property
+PASS MessageChannel interface: attribute port1
+PASS MessageChannel interface: attribute port2
+PASS MessagePort interface: existence and properties of interface object
+PASS MessagePort interface object length
+PASS MessagePort interface object name
+PASS MessagePort interface: existence and properties of interface prototype object
+PASS MessagePort interface: existence and properties of interface prototype object's "constructor" property
+PASS MessagePort interface: operation postMessage(any, [object Object])
+PASS MessagePort interface: operation start()
+PASS MessagePort interface: operation close()
+PASS MessagePort interface: attribute onmessage
+PASS MessagePort interface: attribute onmessageerror
+PASS BroadcastChannel interface: existence and properties of interface object
+PASS BroadcastChannel interface object length
+PASS BroadcastChannel interface object name
+PASS BroadcastChannel interface: existence and properties of interface prototype object
+PASS BroadcastChannel interface: existence and properties of interface prototype object's "constructor" property
+PASS BroadcastChannel interface: attribute name
+PASS BroadcastChannel interface: operation postMessage(any)
+PASS BroadcastChannel interface: operation close()
+PASS BroadcastChannel interface: attribute onmessage
+PASS BroadcastChannel interface: attribute onmessageerror
+PASS WorkerGlobalScope interface: existence and properties of interface object
+PASS DedicatedWorkerGlobalScope interface: existence and properties of interface object
+PASS SharedWorkerGlobalScope interface: existence and properties of interface object
+PASS Worker interface: existence and properties of interface object
+PASS Worker interface object length
+PASS Worker interface object name
+PASS Worker interface: existence and properties of interface prototype object
+PASS Worker interface: existence and properties of interface prototype object's "constructor" property
+PASS Worker interface: operation terminate()
+PASS Worker interface: operation postMessage(any, [object Object])
+PASS Worker interface: attribute onmessage
+FAIL Worker interface: attribute onmessageerror assert_true: The prototype object must have a property "onmessageerror" expected true got false
+PASS Worker interface: attribute onerror
+PASS SharedWorker interface: existence and properties of interface object
+PASS SharedWorker interface object length
+PASS SharedWorker interface object name
+PASS SharedWorker interface: existence and properties of interface prototype object
+PASS SharedWorker interface: existence and properties of interface prototype object's "constructor" property
+PASS SharedWorker interface: attribute port
+PASS SharedWorker interface: attribute onerror
+PASS WorkerNavigator interface: existence and properties of interface object
+PASS WorkerLocation interface: existence and properties of interface object
+PASS Storage interface: existence and properties of interface object
+PASS Storage interface object length
+PASS Storage interface object name
+PASS Storage interface: existence and properties of interface prototype object
+PASS Storage interface: existence and properties of interface prototype object's "constructor" property
+PASS Storage interface: attribute length
+PASS Storage interface: operation key(unsigned long)
+PASS Storage interface: operation getItem(DOMString)
+PASS Storage interface: operation setItem(DOMString, DOMString)
+PASS Storage interface: operation removeItem(DOMString)
+PASS Storage interface: operation clear()
+PASS StorageEvent interface: existence and properties of interface object
+PASS StorageEvent interface object length
+PASS StorageEvent interface object name
+PASS StorageEvent interface: existence and properties of interface prototype object
+PASS StorageEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS StorageEvent interface: attribute key
+PASS StorageEvent interface: attribute oldValue
+PASS StorageEvent interface: attribute newValue
+PASS StorageEvent interface: attribute url
+PASS StorageEvent interface: attribute storageArea
+PASS HTMLMarqueeElement interface: existence and properties of interface object
+PASS HTMLMarqueeElement interface object length
+PASS HTMLMarqueeElement interface object name
+PASS HTMLMarqueeElement interface: existence and properties of interface prototype object
+PASS HTMLMarqueeElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLMarqueeElement interface: attribute behavior
+PASS HTMLMarqueeElement interface: attribute bgColor
+PASS HTMLMarqueeElement interface: attribute direction
+PASS HTMLMarqueeElement interface: attribute height
+PASS HTMLMarqueeElement interface: attribute hspace
+PASS HTMLMarqueeElement interface: attribute loop
+PASS HTMLMarqueeElement interface: attribute scrollAmount
+PASS HTMLMarqueeElement interface: attribute scrollDelay
+PASS HTMLMarqueeElement interface: attribute trueSpeed
+PASS HTMLMarqueeElement interface: attribute vspace
+PASS HTMLMarqueeElement interface: attribute width
+FAIL HTMLMarqueeElement interface: attribute onbounce assert_true: The prototype object must have a property "onbounce" expected true got false
+FAIL HTMLMarqueeElement interface: attribute onfinish assert_true: The prototype object must have a property "onfinish" expected true got false
+FAIL HTMLMarqueeElement interface: attribute onstart assert_true: The prototype object must have a property "onstart" expected true got false
+PASS HTMLMarqueeElement interface: operation start()
+PASS HTMLMarqueeElement interface: operation stop()
+PASS HTMLMarqueeElement must be primary interface of document.createElement("marquee")
+PASS Stringification of document.createElement("marquee")
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "behavior" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "bgColor" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "direction" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "height" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "hspace" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "loop" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "scrollAmount" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "scrollDelay" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "trueSpeed" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "vspace" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "width" with the proper type
+FAIL HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "onbounce" with the proper type assert_inherits: property "onbounce" not found in prototype chain
+FAIL HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "onfinish" with the proper type assert_inherits: property "onfinish" not found in prototype chain
+FAIL HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "onstart" with the proper type assert_inherits: property "onstart" not found in prototype chain
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "start()" with the proper type
+PASS HTMLMarqueeElement interface: document.createElement("marquee") must inherit property "stop()" with the proper type
+PASS HTMLFrameSetElement interface: existence and properties of interface object
+PASS HTMLFrameSetElement interface object length
+PASS HTMLFrameSetElement interface object name
+PASS HTMLFrameSetElement interface: existence and properties of interface prototype object
+PASS HTMLFrameSetElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFrameSetElement interface: attribute cols
+PASS HTMLFrameSetElement interface: attribute rows
+PASS HTMLFrameSetElement interface: attribute onafterprint
+PASS HTMLFrameSetElement interface: attribute onbeforeprint
+PASS HTMLFrameSetElement interface: attribute onbeforeunload
+PASS HTMLFrameSetElement interface: attribute onhashchange
+PASS HTMLFrameSetElement interface: attribute onlanguagechange
+PASS HTMLFrameSetElement interface: attribute onmessage
+PASS HTMLFrameSetElement interface: attribute onmessageerror
+PASS HTMLFrameSetElement interface: attribute onoffline
+PASS HTMLFrameSetElement interface: attribute ononline
+PASS HTMLFrameSetElement interface: attribute onpagehide
+PASS HTMLFrameSetElement interface: attribute onpageshow
+PASS HTMLFrameSetElement interface: attribute onpopstate
+PASS HTMLFrameSetElement interface: attribute onrejectionhandled
+PASS HTMLFrameSetElement interface: attribute onstorage
+PASS HTMLFrameSetElement interface: attribute onunhandledrejection
+PASS HTMLFrameSetElement interface: attribute onunload
+PASS HTMLFrameSetElement must be primary interface of document.createElement("frameset")
+PASS Stringification of document.createElement("frameset")
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "cols" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "rows" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onafterprint" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onbeforeprint" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onbeforeunload" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onhashchange" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onlanguagechange" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onmessage" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onmessageerror" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onoffline" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "ononline" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onpagehide" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onpageshow" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onpopstate" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onrejectionhandled" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onstorage" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onunhandledrejection" with the proper type
+PASS HTMLFrameSetElement interface: document.createElement("frameset") must inherit property "onunload" with the proper type
+PASS HTMLFrameElement interface: existence and properties of interface object
+PASS HTMLFrameElement interface object length
+PASS HTMLFrameElement interface object name
+PASS HTMLFrameElement interface: existence and properties of interface prototype object
+PASS HTMLFrameElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFrameElement interface: attribute name
+PASS HTMLFrameElement interface: attribute scrolling
+PASS HTMLFrameElement interface: attribute src
+PASS HTMLFrameElement interface: attribute frameBorder
+PASS HTMLFrameElement interface: attribute longDesc
+PASS HTMLFrameElement interface: attribute noResize
+PASS HTMLFrameElement interface: attribute contentDocument
+PASS HTMLFrameElement interface: attribute contentWindow
+PASS HTMLFrameElement interface: attribute marginHeight
+PASS HTMLFrameElement interface: attribute marginWidth
+PASS HTMLFrameElement must be primary interface of document.createElement("frame")
+PASS Stringification of document.createElement("frame")
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "name" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "scrolling" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "src" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "frameBorder" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "longDesc" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "noResize" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "contentDocument" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "contentWindow" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "marginHeight" with the proper type
+PASS HTMLFrameElement interface: document.createElement("frame") must inherit property "marginWidth" with the proper type
+PASS HTMLDirectoryElement interface: existence and properties of interface object
+PASS HTMLDirectoryElement interface object length
+PASS HTMLDirectoryElement interface object name
+PASS HTMLDirectoryElement interface: existence and properties of interface prototype object
+PASS HTMLDirectoryElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLDirectoryElement interface: attribute compact
+PASS HTMLDirectoryElement must be primary interface of document.createElement("dir")
+PASS Stringification of document.createElement("dir")
+PASS HTMLDirectoryElement interface: document.createElement("dir") must inherit property "compact" with the proper type
+PASS HTMLFontElement interface: existence and properties of interface object
+PASS HTMLFontElement interface object length
+PASS HTMLFontElement interface object name
+PASS HTMLFontElement interface: existence and properties of interface prototype object
+PASS HTMLFontElement interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLFontElement interface: attribute color
+PASS HTMLFontElement interface: attribute face
+PASS HTMLFontElement interface: attribute size
+PASS HTMLFontElement must be primary interface of document.createElement("font")
+PASS Stringification of document.createElement("font")
+PASS HTMLFontElement interface: document.createElement("font") must inherit property "color" with the proper type
+PASS HTMLFontElement interface: document.createElement("font") must inherit property "face" with the proper type
+PASS HTMLFontElement interface: document.createElement("font") must inherit property "size" with the proper type
+PASS Stringification of window.external
+PASS External interface: window.external must inherit property "AddSearchProvider()" with the proper type
+PASS External interface: window.external must inherit property "IsSearchProviderInstalled()" with the proper type
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces.worker-expected.txt
index 1fd50f1..f2473ff 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces.worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/dom/interfaces.worker-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+FAIL Test driver promise_test: Unhandled rejection with value: "SVGElement implements ElementCSSInlineStyle, but SVGElement is undefined."
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js
new file mode 100644
index 0000000..bc88bf7b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/Function.js
@@ -0,0 +1 @@
+Function(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`)();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js
new file mode 100644
index 0000000..a8bcffe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/eval.js
@@ -0,0 +1 @@
+eval(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js
new file mode 100644
index 0000000..c0bd8655
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/inline-event-handlers-UA-code.js
@@ -0,0 +1,2 @@
+window.dummyDiv.setAttribute("onclick", `import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`);
+window.dummyDiv.click(); // different from **on**click()
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js
new file mode 100644
index 0000000..f19ec2b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/reflected-inline-event-handlers.js
@@ -0,0 +1,2 @@
+window.dummyDiv.setAttribute("onclick", `import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`);
+window.dummyDiv.onclick();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js
new file mode 100644
index 0000000..c6f2dda
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/scripts/setTimeout.js
@@ -0,0 +1 @@
+setTimeout(`import('../../imports-a.js?label=' + window.label).then(window.continueTest, window.errorTest)`, 0);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt
new file mode 100644
index 0000000..2c67ac7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=setTimeout"
+PASS eval should successfully import
+PASS Function should successfully import
+FAIL reflected-inline-event-handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=reflected-inline-event-handlers"
+FAIL inline-event-handlers-UA-code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=inline-event-handlers-UA-code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
new file mode 100644
index 0000000..7cf2dac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() inside compiled strings uses the script base URL inside a classic script that is loaded from a file</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="dummy"></div>
+
+<script>
+function load(scriptSrc) {
+  const el = document.createElement("script");
+  el.src = scriptSrc;
+  document.body.appendChild(el);
+}
+
+function createTestPromise() {
+  return new Promise((resolve, reject) => {
+    window.dummyDiv.removeAttribute("onclick");
+    delete window.evaluated_imports_a;
+    delete window.label;
+
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+window.dummyDiv = document.querySelector("#dummy");
+
+const evaluators = [
+  "setTimeout",
+  "eval",
+  "Function",
+  "reflected-inline-event-handlers",
+  "inline-event-handlers-UA-code"
+];
+
+for (const label of evaluators) {
+  promise_test(() => {
+    const promise = createTestPromise();
+
+    window.label = label;
+    load(`scripts/${label}.js`);
+
+    return promise.then(module => {
+      assert_true(window.evaluated_imports_a, "The module must have been evaluated");
+      assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct");
+    });
+  }, label + " should successfully import");
+};
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt
new file mode 100644
index 0000000..2c67ac7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=setTimeout"
+PASS eval should successfully import
+PASS Function should successfully import
+FAIL reflected-inline-event-handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=reflected-inline-event-handlers"
+FAIL inline-event-handlers-UA-code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/imports-a.js?label=inline-event-handlers-UA-code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
new file mode 100644
index 0000000..73986c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() inside compiled strings uses the script base URL inside a module script that is loaded from a file</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="dummy"></div>
+
+<script type="module">
+function load(scriptSrc) {
+  const el = document.createElement("script");
+  el.type = "module";
+  el.src = scriptSrc;
+  document.body.appendChild(el);
+}
+
+function createTestPromise() {
+  return new Promise((resolve, reject) => {
+    window.dummyDiv.removeAttribute("onclick");
+    delete window.evaluated_imports_a;
+    delete window.label;
+
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+window.dummyDiv = document.querySelector("#dummy");
+
+const evaluators = [
+  "setTimeout",
+  "eval",
+  "Function",
+  "reflected-inline-event-handlers",
+  "inline-event-handlers-UA-code"
+];
+
+for (const label of evaluators) {
+  promise_test(() => {
+    const promise = createTestPromise();
+
+    window.label = label;
+    load(`scripts/${label}.js`);
+
+    return promise.then(module => {
+      assert_true(window.evaluated_imports_a, "The module must have been evaluated");
+      assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct");
+    });
+  }, label + " should successfully import");
+};
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt
new file mode 100644
index 0000000..d2d6c0f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=setTimeout"
+FAIL eval should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=eval"
+FAIL the Function constructor should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=the%20Function%20constructor"
+FAIL reflected inline event handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected%20inline%20event%20handlers"
+FAIL inline event handlers triggered via UA code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=inline%20event%20handlers%20triggered%20via%20UA%20code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
similarity index 91%
rename from third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
index 062bb620..1bd6d7d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-classic.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <meta charset="utf-8">
-<title>import() inside compiled strings uses the document base URL inside a classic script</title>
+<title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline classic script</title>
 <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
 
 <base href="..">
@@ -21,8 +21,8 @@
 const dummyDiv = document.querySelector("#dummy");
 
 const evaluators = {
-  eval,
   setTimeout,
+  eval,
   "the Function constructor"(x) {
     Function(x)();
   },
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt
new file mode 100644
index 0000000..81414c53
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module-expected.txt
@@ -0,0 +1,8 @@
+This is a testharness.js-based test.
+FAIL setTimeout should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=setTimeout"
+PASS eval should successfully import
+PASS the Function constructor should successfully import
+FAIL reflected inline event handlers should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=reflected%20inline%20event%20handlers"
+FAIL inline event handlers triggered via UA code should successfully import promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/dynamic-import/imports-a.js?label=inline%20event%20handlers%20triggered%20via%20UA%20code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
similarity index 91%
rename from third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html
rename to third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
index de51c9a4..f5b8574 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-module.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <meta charset="utf-8">
-<title>import() inside compiled strings uses the document base URL inside a module script</title>
+<title>import() inside compiled strings uses the script base URL (= document base URL) inside an inline module script</title>
 <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
 
 <base href="..">
@@ -21,8 +21,8 @@
 const dummyDiv = document.querySelector("#dummy");
 
 const evaluators = {
-  eval,
   setTimeout,
+  eval,
   "the Function constructor"(x) {
     Function(x)();
   },
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html
new file mode 100644
index 0000000..666bc7c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-classic.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() doesn't have any integrity metadata when initiated by compiled strings inside a classic script</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<meta http-equiv="Content-Security-Policy" content="require-sri-for script">
+
+<script src="/resources/testharness.js" integrity="sha384-4Nybydhnr3tOpv1yrTkDxu3RFpnxWAxlU5kGn7c8ebKvh1iUdfVMjqP6jf0dacrV"></script>
+<script src="/resources/testharnessreport.js" integrity="sha384-GOnHxuyo+nnsFAe4enY+RAl4/+w5NPMJPCQiDroTjxtR7ndRz7Uan8vNbM2qWKmU"></script>
+
+<div id="dummy"></div>
+
+<script>
+function createTestPromise() {
+  return new Promise((resolve, reject) => {
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+const dummyDiv = document.querySelector("#dummy");
+
+const evaluators = {
+  eval,
+  setTimeout,
+  "the Function constructor"(x) {
+    Function(x)();
+  },
+  "reflected inline event handlers"(x) {
+    dummyDiv.setAttribute("onclick", x);
+    dummyDiv.onclick();
+  },
+  "inline event handlers triggered via UA code"(x) {
+    dummyDiv.setAttribute("onclick", x);
+    dummyDiv.click(); // different from .**on**click()
+  }
+};
+
+for (const [label, evaluator] of Object.entries(evaluators)) {
+  promise_test(t => {
+    t.add_cleanup(() => {
+      dummyDiv.removeAttribute("onclick");
+      delete window.evaluated_imports_a;
+    });
+
+    const promise = createTestPromise();
+
+    evaluator(`import('../imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`);
+
+    return promise_rejects(t, new TypeError(), promise);
+  }, label + " should fail to import");
+};
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html
new file mode 100644
index 0000000..497c9d97
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-integrity-module.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() doesn't have any integrity metadata when initiated by compiled strings inside a module script</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+<meta http-equiv="Content-Security-Policy" content="require-sri-for script">
+
+<script src="/resources/testharness.js" integrity="sha384-4Nybydhnr3tOpv1yrTkDxu3RFpnxWAxlU5kGn7c8ebKvh1iUdfVMjqP6jf0dacrV"></script>
+<script src="/resources/testharnessreport.js" integrity="sha384-GOnHxuyo+nnsFAe4enY+RAl4/+w5NPMJPCQiDroTjxtR7ndRz7Uan8vNbM2qWKmU"></script>
+
+<div id="dummy"></div>
+
+<script type="module">
+function createTestPromise() {
+  return new Promise((resolve, reject) => {
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+const dummyDiv = document.querySelector("#dummy");
+
+const evaluators = {
+  eval,
+  setTimeout,
+  "the Function constructor"(x) {
+    Function(x)();
+  },
+  "reflected inline event handlers"(x) {
+    dummyDiv.setAttribute("onclick", x);
+    dummyDiv.onclick();
+  },
+  "inline event handlers triggered via UA code"(x) {
+    dummyDiv.setAttribute("onclick", x);
+    dummyDiv.click(); // different from .**on**click()
+  }
+};
+
+for (const [label, evaluator] of Object.entries(evaluators)) {
+  promise_test(t => {
+    t.add_cleanup(() => {
+      dummyDiv.removeAttribute("onclick");
+      delete window.evaluated_imports_a;
+    });
+
+    const promise = createTestPromise();
+
+    evaluator(`import('../imports-a.js?label=${label}').then(window.continueTest, window.errorTest);`);
+
+    return promise_rejects(t, new TypeError(), promise);
+  }, label + " should fail to import");
+};
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic-expected.txt
new file mode 100644
index 0000000..a13de4f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL setTimeout must inherit the nonce from the triggering script, thus execute assert_true: The module must have been evaluated expected true got undefined
+PASS direct eval must inherit the nonce from the triggering script, thus execute
+PASS indirect eval must inherit the nonce from the triggering script, thus execute
+PASS the Function constructor must inherit the nonce from the triggering script, thus execute
+FAIL reflected inline event handlers must inherit the nonce from the triggering script, thus execute promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/imports-a.js?label=reflected%20inline%20event%20handlers"
+FAIL inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/imports-a.js?label=inline%20event%20handlers%20triggered%20via%20UA%20code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html
new file mode 100644
index 0000000..ba82fe8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() inside compiled strings uses the appropriate nonce inside a classic script</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<meta http-equiv="content-security-policy" content="script-src 'nonce-correct' 'unsafe-eval' 'unsafe-hashed-attributes' 'sha256-cAMzxBL19bKt4KwKGbxy/ZOFIIjH5AmRjlVbsD5pvNw=' 'sha256-3VjoJYNK/9HJMS8rrZHlqSZgUssDY+GPyc7AU8lNM3k='">
+
+<script nonce="correct" src="/resources/testharness.js"></script>
+<script nonce="correct" src="/resources/testharnessreport.js"></script>
+
+<div id="dummy"></div>
+
+<script nonce="correct">
+"use strict";
+const dummyDiv = document.querySelector("#dummy");
+
+function createTestPromise(t) {
+  t.add_cleanup(() => {
+    delete window.evaluated_imports_a;
+    delete window.unreached;
+    delete window.continueTest;
+    delete window.errorTest;
+  });
+
+  return new Promise((resolve, reject) => {
+    window.unreached = t.unreached_func("Must not reach this");
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+function assertSuccessful(module) {
+  assert_true(window.evaluated_imports_a, "The module must have been evaluated");
+  assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct");
+}
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  setTimeout(`import('../imports-a.js?label=setTimeout').then(window.unreached, window.continueTest)`, 0);
+
+  return promise.then(assertSuccessful);
+}, "setTimeout must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  eval(`import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`);
+
+  return promise.then(assertSuccessful);
+}, "direct eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  const evalAlias = eval;
+  evalAlias(`import('../imports-a.js?label=indirect eval').then(window.continueTest, window.errorTest)`);
+
+  return promise.then(assertSuccessful);
+}, "indirect eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)();
+
+  return promise.then(assertSuccessful);
+}, "the Function constructor must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  t.add_cleanup(() => {
+    dummyDiv.removeAttribute("onclick");
+  });
+
+  const promise = createTestPromise(t);
+
+  // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy
+  dummyDiv.setAttribute(
+    "onclick",
+    `import('../imports-a.js?label=reflected inline event handlers').then(window.continueTest, window.errorTest)`
+  );
+  dummyDiv.onclick();
+
+  return promise.then(assertSuccessful);
+}, "reflected inline event handlers must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  t.add_cleanup(() => {
+    dummyDiv.removeAttribute("onclick");
+  });
+
+  const promise = createTestPromise(t);
+
+  // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy
+  dummyDiv.setAttribute(
+    "onclick",
+    `import('../imports-a.js?label=inline event handlers triggered via UA code').then(window.continueTest, window.errorTest)`
+  );
+  dummyDiv.click(); // different from **on**click()
+
+  return promise.then(assertSuccessful);
+}, "inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module-expected.txt
new file mode 100644
index 0000000..a13de4f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module-expected.txt
@@ -0,0 +1,9 @@
+This is a testharness.js-based test.
+FAIL setTimeout must inherit the nonce from the triggering script, thus execute assert_true: The module must have been evaluated expected true got undefined
+PASS direct eval must inherit the nonce from the triggering script, thus execute
+PASS indirect eval must inherit the nonce from the triggering script, thus execute
+PASS the Function constructor must inherit the nonce from the triggering script, thus execute
+FAIL reflected inline event handlers must inherit the nonce from the triggering script, thus execute promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/imports-a.js?label=reflected%20inline%20event%20handlers"
+FAIL inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch dynamically imported module: http://web-platform.test:8001/html/semantics/scripting-1/the-script-element/module/imports-a.js?label=inline%20event%20handlers%20triggered%20via%20UA%20code"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html
new file mode 100644
index 0000000..889628f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>import() inside compiled strings uses the appropriate nonce inside a module script</title>
+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
+
+<meta http-equiv="content-security-policy" content="script-src 'nonce-correct' 'unsafe-eval' 'unsafe-hashed-attributes' 'sha256-cAMzxBL19bKt4KwKGbxy/ZOFIIjH5AmRjlVbsD5pvNw=' 'sha256-3VjoJYNK/9HJMS8rrZHlqSZgUssDY+GPyc7AU8lNM3k='">
+
+<script nonce="correct" src="/resources/testharness.js"></script>
+<script nonce="correct" src="/resources/testharnessreport.js"></script>
+
+<div id="dummy"></div>
+
+<script type="module" nonce="correct">
+const dummyDiv = document.querySelector("#dummy");
+
+function createTestPromise(t) {
+  t.add_cleanup(() => {
+    delete window.evaluated_imports_a;
+    delete window.unreached;
+    delete window.continueTest;
+    delete window.errorTest;
+  });
+
+  return new Promise((resolve, reject) => {
+    window.unreached = t.unreached_func("Must not reach this");
+    window.continueTest = resolve;
+    window.errorTest = reject;
+  });
+}
+
+function assertSuccessful(module) {
+  assert_true(window.evaluated_imports_a, "The module must have been evaluated");
+  assert_equals(module.A.from, "imports-a.js", "The module namespace object must be correct");
+}
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  setTimeout(`import('../imports-a.js?label=setTimeout').then(window.unreached, window.continueTest)`, 0);
+
+  return promise.then(assertSuccessful);
+}, "setTimeout must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  eval(`import('../imports-a.js?label=direct eval').then(window.continueTest, window.errorTest)`);
+
+  return promise.then(assertSuccessful);
+}, "direct eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  const evalAlias = eval;
+  evalAlias(`import('../imports-a.js?label=indirect eval').then(window.continueTest, window.errorTest)`);
+
+  return promise.then(assertSuccessful);
+}, "indirect eval must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  const promise = createTestPromise(t);
+
+  Function(`import('../imports-a.js?label=the Function constructor').then(window.continueTest, window.errorTest)`)();
+
+  return promise.then(assertSuccessful);
+}, "the Function constructor must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  t.add_cleanup(() => {
+    dummyDiv.removeAttribute("onclick");
+  });
+
+  const promise = createTestPromise(t);
+
+  // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy
+  dummyDiv.setAttribute(
+    "onclick",
+    `import('../imports-a.js?label=reflected inline event handlers').then(window.continueTest, window.errorTest)`
+  );
+  dummyDiv.onclick();
+
+  return promise.then(assertSuccessful);
+}, "reflected inline event handlers must inherit the nonce from the triggering script, thus execute");
+
+promise_test(t => {
+  t.add_cleanup(() => {
+    dummyDiv.removeAttribute("onclick");
+  });
+
+  const promise = createTestPromise(t);
+
+  // This only works because of the 'unsafe-hashed-attributes' and the hash in the CSP policy
+  dummyDiv.setAttribute(
+    "onclick",
+    `import('../imports-a.js?label=inline event handlers triggered via UA code').then(window.continueTest, window.errorTest)`
+  );
+  dummyDiv.click(); // different from **on**click()
+
+  return promise.then(assertSuccessful);
+}, "inline event handlers triggered via UA code must inherit the nonce from the triggering script, thus execute");
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html
new file mode 100644
index 0000000..f574781
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage-notref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML Reference File</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+
+<p>君くん子しは和わして同どうぜず</p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html
new file mode 100644
index 0000000..59c076c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-ruby-element/ruby-usage.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTML test: ruby - mark phrasing content</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<link rel="mismatch" href="ruby-usage-notref.html">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-ruby-element"/>
+
+<p><ruby>君<rt>くん</ruby><ruby>子<rt>し</ruby>は<ruby>和<rt>わ</ruby>して<ruby>同<rt>どう</ruby>ぜず</p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/animation-frames/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/animation-frames/idlharness.html
index acc6657f..3a9d1d9b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/animation-frames/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/webappapis/animation-frames/idlharness.html
@@ -15,7 +15,7 @@
 <p>This test validates the WebIDL included in the Timing control for script-based animations specification.</p>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 </pre>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/html.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/html.idl
index f23334f..7d4fe774 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/html.idl
+++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/html.idl
@@ -86,8 +86,8 @@
   // special event handler IDL attributes that only apply to Document objects
   [LenientThis] attribute EventHandler onreadystatechange;
 };
-Document implements GlobalEventHandlers;
-Document implements DocumentAndElementEventHandlers;
+Document includes GlobalEventHandlers;
+Document includes DocumentAndElementEventHandlers;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -117,9 +117,9 @@
   boolean preventScroll = false;
 };
 
-HTMLElement implements GlobalEventHandlers;
-HTMLElement implements DocumentAndElementEventHandlers;
-HTMLElement implements ElementContentEditable;
+HTMLElement includes GlobalEventHandlers;
+HTMLElement includes DocumentAndElementEventHandlers;
+HTMLElement includes ElementContentEditable;
 
 // Note: intentionally not [HTMLConstructor]
 interface HTMLUnknownElement : HTMLElement { };
@@ -175,7 +175,7 @@
 
   // also has obsolete members
 };
-HTMLLinkElement implements LinkStyle;
+HTMLLinkElement includes LinkStyle;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -194,7 +194,7 @@
   [CEReactions] attribute DOMString nonce;
   [CEReactions] attribute DOMString type;
 };
-HTMLStyleElement implements LinkStyle;
+HTMLStyleElement includes LinkStyle;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -202,7 +202,7 @@
   // also has obsolete members
 };
 
-HTMLBodyElement implements WindowEventHandlers;
+HTMLBodyElement includes WindowEventHandlers;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -294,7 +294,7 @@
 
   // also has obsolete members
 };
-HTMLAnchorElement implements HTMLHyperlinkElementUtils;
+HTMLAnchorElement includes HTMLHyperlinkElementUtils;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -318,9 +318,7 @@
   // also has obsolete members
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface HTMLHyperlinkElementUtils {
+interface mixin HTMLHyperlinkElementUtils {
   [CEReactions] stringifier attribute USVString href;
   readonly attribute USVString origin;
   [CEReactions] attribute USVString protocol;
@@ -687,7 +685,7 @@
 
   // also has obsolete members
 };
-HTMLAreaElement implements HTMLHyperlinkElementUtils;
+HTMLAreaElement includes HTMLHyperlinkElementUtils;
 
 [Exposed=Window,
  HTMLConstructor]
@@ -1176,32 +1174,30 @@
   // back-reference to the canvas
   readonly attribute HTMLCanvasElement canvas;
 };
-CanvasRenderingContext2D implements CanvasState;
-CanvasRenderingContext2D implements CanvasTransform;
-CanvasRenderingContext2D implements CanvasCompositing;
-CanvasRenderingContext2D implements CanvasImageSmoothing;
-CanvasRenderingContext2D implements CanvasFillStrokeStyles;
-CanvasRenderingContext2D implements CanvasShadowStyles;
-CanvasRenderingContext2D implements CanvasFilters;
-CanvasRenderingContext2D implements CanvasRect;
-CanvasRenderingContext2D implements CanvasDrawPath;
-CanvasRenderingContext2D implements CanvasUserInterface;
-CanvasRenderingContext2D implements CanvasText;
-CanvasRenderingContext2D implements CanvasDrawImage;
-CanvasRenderingContext2D implements CanvasImageData;
-CanvasRenderingContext2D implements CanvasPathDrawingStyles;
-CanvasRenderingContext2D implements CanvasTextDrawingStyles;
-CanvasRenderingContext2D implements CanvasPath;
+CanvasRenderingContext2D includes CanvasState;
+CanvasRenderingContext2D includes CanvasTransform;
+CanvasRenderingContext2D includes CanvasCompositing;
+CanvasRenderingContext2D includes CanvasImageSmoothing;
+CanvasRenderingContext2D includes CanvasFillStrokeStyles;
+CanvasRenderingContext2D includes CanvasShadowStyles;
+CanvasRenderingContext2D includes CanvasFilters;
+CanvasRenderingContext2D includes CanvasRect;
+CanvasRenderingContext2D includes CanvasDrawPath;
+CanvasRenderingContext2D includes CanvasUserInterface;
+CanvasRenderingContext2D includes CanvasText;
+CanvasRenderingContext2D includes CanvasDrawImage;
+CanvasRenderingContext2D includes CanvasImageData;
+CanvasRenderingContext2D includes CanvasPathDrawingStyles;
+CanvasRenderingContext2D includes CanvasTextDrawingStyles;
+CanvasRenderingContext2D includes CanvasPath;
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasState {
+interface mixin CanvasState {
   // state
   void save(); // push state on state stack
   void restore(); // pop state stack and restore state
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasTransform {
+interface mixin CanvasTransform {
   // transformations (default transform is the identity matrix)
   void scale(unrestricted double x, unrestricted double y);
   void rotate(unrestricted double angle);
@@ -1212,37 +1208,30 @@
   void setTransform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
   void setTransform(optional DOMMatrix2DInit transform);
   void resetTransform();
-
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasCompositing {
+interface mixin CanvasCompositing {
   // compositing
   attribute unrestricted double globalAlpha; // (default 1.0)
   attribute DOMString globalCompositeOperation; // (default source-over)
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasImageSmoothing {
+interface mixin CanvasImageSmoothing {
   // image smoothing
   attribute boolean imageSmoothingEnabled; // (default true)
   attribute ImageSmoothingQuality imageSmoothingQuality; // (default low)
-
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasFillStrokeStyles {
+interface mixin CanvasFillStrokeStyles {
   // colors and styles (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
   attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
   attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
   CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1);
   CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
   CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition);
-
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasShadowStyles {
+interface mixin CanvasShadowStyles {
   // shadows
   attribute unrestricted double shadowOffsetX; // (default 0)
   attribute unrestricted double shadowOffsetY; // (default 0)
@@ -1250,22 +1239,19 @@
   attribute DOMString shadowColor; // (default transparent black)
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasFilters {
+interface mixin CanvasFilters {
   // filters
   attribute DOMString filter; // (default "none")
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasRect {
+interface mixin CanvasRect {
   // rects
   void clearRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
   void fillRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
   void strokeRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasDrawPath {
+interface mixin CanvasDrawPath {
   // path API (see also CanvasPath)
   void beginPath();
   void fill(optional CanvasFillRule fillRule = "nonzero");
@@ -1281,34 +1267,28 @@
   boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y);
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface CanvasUserInterface {
+interface mixin CanvasUserInterface {
   void drawFocusIfNeeded(Element element);
   void drawFocusIfNeeded(Path2D path, Element element);
   void scrollPathIntoView();
   void scrollPathIntoView(Path2D path);
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface CanvasText {
+interface mixin CanvasText {
   // text (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
   void fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
   void strokeText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
   TextMetrics measureText(DOMString text);
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasDrawImage {
+interface mixin CanvasDrawImage {
   // drawing images
   void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy);
   void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
   void drawImage(CanvasImageSource image, unrestricted double sx, unrestricted double sy, unrestricted double sw, unrestricted double sh, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasImageData {
+interface mixin CanvasImageData {
   // pixel manipulation
   ImageData createImageData(long sw, long sh);
   ImageData createImageData(ImageData imagedata);
@@ -1323,8 +1303,7 @@
 enum CanvasTextBaseline { "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" };
 enum CanvasDirection { "ltr", "rtl", "inherit" };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasPathDrawingStyles {
+interface mixin CanvasPathDrawingStyles {
   // line caps/joins
   attribute unrestricted double lineWidth; // (default 1)
   attribute CanvasLineCap lineCap; // (default "butt")
@@ -1337,9 +1316,7 @@
   attribute unrestricted double lineDashOffset;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface CanvasTextDrawingStyles {
+interface mixin CanvasTextDrawingStyles {
   // text
   attribute DOMString font; // (default 10px sans-serif)
   attribute CanvasTextAlign textAlign; // (default: "start")
@@ -1347,8 +1324,7 @@
   attribute CanvasDirection direction; // (default: "inherit")
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasPath {
+interface mixin CanvasPath {
   // shared path API methods
   void closePath();
   void moveTo(unrestricted double x, unrestricted double y);
@@ -1411,7 +1387,7 @@
 interface Path2D {
   void addPath(Path2D path, optional DOMMatrix2DInit transform);
 };
-Path2D implements CanvasPath;
+Path2D includes CanvasPath;
 
 [Exposed=Window]
 interface ImageBitmapRenderingContext {
@@ -1450,19 +1426,19 @@
   readonly attribute OffscreenCanvas canvas;
 };
 
-OffscreenCanvasRenderingContext2D implements CanvasState;
-OffscreenCanvasRenderingContext2D implements CanvasTransform;
-OffscreenCanvasRenderingContext2D implements CanvasCompositing;
-OffscreenCanvasRenderingContext2D implements CanvasImageSmoothing;
-OffscreenCanvasRenderingContext2D implements CanvasFillStrokeStyles;
-OffscreenCanvasRenderingContext2D implements CanvasShadowStyles;
-OffscreenCanvasRenderingContext2D implements CanvasFilters;
-OffscreenCanvasRenderingContext2D implements CanvasRect;
-OffscreenCanvasRenderingContext2D implements CanvasDrawPath;
-OffscreenCanvasRenderingContext2D implements CanvasDrawImage;
-OffscreenCanvasRenderingContext2D implements CanvasImageData;
-OffscreenCanvasRenderingContext2D implements CanvasPathDrawingStyles;
-OffscreenCanvasRenderingContext2D implements CanvasPath;
+OffscreenCanvasRenderingContext2D includes CanvasState;
+OffscreenCanvasRenderingContext2D includes CanvasTransform;
+OffscreenCanvasRenderingContext2D includes CanvasCompositing;
+OffscreenCanvasRenderingContext2D includes CanvasImageSmoothing;
+OffscreenCanvasRenderingContext2D includes CanvasFillStrokeStyles;
+OffscreenCanvasRenderingContext2D includes CanvasShadowStyles;
+OffscreenCanvasRenderingContext2D includes CanvasFilters;
+OffscreenCanvasRenderingContext2D includes CanvasRect;
+OffscreenCanvasRenderingContext2D includes CanvasDrawPath;
+OffscreenCanvasRenderingContext2D includes CanvasDrawImage;
+OffscreenCanvasRenderingContext2D includes CanvasImageData;
+OffscreenCanvasRenderingContext2D includes CanvasPathDrawingStyles;
+OffscreenCanvasRenderingContext2D includes CanvasPath;
 
 
 [Exposed=Window]
@@ -1476,9 +1452,7 @@
   DOMString extends;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface ElementContentEditable {
+interface mixin ElementContentEditable {
   [CEReactions] attribute DOMString contentEditable;
   readonly attribute boolean isContentEditable;
 };
@@ -1531,7 +1505,9 @@
   DataTransfer? dataTransfer = null;
 };
 
-[PrimaryGlobal, LegacyUnenumerableNamedProperties]
+[Global=Window,
+ Exposed=Window,
+ LegacyUnenumerableNamedProperties]
 interface Window : EventTarget {
   // the current browsing context
   [Unforgeable] readonly attribute WindowProxy window;
@@ -1585,8 +1561,8 @@
 
   // also has obsolete members
 };
-Window implements GlobalEventHandlers;
-Window implements WindowEventHandlers;
+Window includes GlobalEventHandlers;
+Window includes WindowEventHandlers;
 
 callback FrameRequestCallback = void (DOMHighResTimeStamp time);
 
@@ -1694,8 +1670,7 @@
   attribute EventHandler onobsolete;
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorOnLine {
+interface mixin NavigatorOnLine {
   readonly attribute boolean onLine;
 };
 
@@ -1739,9 +1714,7 @@
 callback OnBeforeUnloadEventHandlerNonNull = DOMString? (Event event);
 typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler;
 
-[Exposed=Window,
- NoInterfaceObject]
-interface GlobalEventHandlers {
+interface mixin GlobalEventHandlers {
   attribute EventHandler onabort;
   attribute EventHandler onauxclick;
   attribute EventHandler onblur;
@@ -1806,9 +1779,7 @@
   attribute EventHandler onwaiting;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface WindowEventHandlers {
+interface mixin WindowEventHandlers {
   attribute EventHandler onafterprint;
   attribute EventHandler onbeforeprint;
   attribute OnBeforeUnloadEventHandler onbeforeunload;
@@ -1827,9 +1798,7 @@
   attribute EventHandler onunload;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface DocumentAndElementEventHandlers {
+interface mixin DocumentAndElementEventHandlers {
   attribute EventHandler oncopy;
   attribute EventHandler oncut;
   attribute EventHandler onpaste;
@@ -1837,8 +1806,7 @@
 
 typedef (DOMString or Function) TimerHandler;
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface WindowOrWorkerGlobalScope {
+interface mixin WindowOrWorkerGlobalScope {
   [Replaceable] readonly attribute USVString origin;
 
   // base64 utility methods
@@ -1855,23 +1823,22 @@
   Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, optional ImageBitmapOptions options);
   Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
 };
-Window implements WindowOrWorkerGlobalScope;
-WorkerGlobalScope implements WindowOrWorkerGlobalScope;
+Window includes WindowOrWorkerGlobalScope;
+WorkerGlobalScope includes WindowOrWorkerGlobalScope;
 
 [Exposed=Window]
 interface Navigator {
   // objects implementing this interface also implement the interfaces given below
 };
-Navigator implements NavigatorID;
-Navigator implements NavigatorLanguage;
-Navigator implements NavigatorOnLine;
-Navigator implements NavigatorContentUtils;
-Navigator implements NavigatorCookies;
-Navigator implements NavigatorPlugins;
-Navigator implements NavigatorConcurrentHardware;
+Navigator includes NavigatorID;
+Navigator includes NavigatorLanguage;
+Navigator includes NavigatorOnLine;
+Navigator includes NavigatorContentUtils;
+Navigator includes NavigatorCookies;
+Navigator includes NavigatorPlugins;
+Navigator includes NavigatorConcurrentHardware;
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorID {
+interface mixin NavigatorID {
   readonly attribute DOMString appCodeName; // constant "Mozilla"
   readonly attribute DOMString appName; // constant "Netscape"
   readonly attribute DOMString appVersion;
@@ -1890,28 +1857,21 @@
   [Exposed=Window] readonly attribute DOMString oscpu;
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorLanguage {
+interface mixin NavigatorLanguage {
   readonly attribute DOMString language;
   readonly attribute FrozenArray<DOMString> languages;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface NavigatorContentUtils {
+interface mixin NavigatorContentUtils {
   void registerProtocolHandler(DOMString scheme, USVString url, DOMString title);
   void unregisterProtocolHandler(DOMString scheme, USVString url);
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface NavigatorCookies {
+interface mixin NavigatorCookies {
   readonly attribute boolean cookieEnabled;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface NavigatorPlugins {
+interface mixin NavigatorPlugins {
   [SameObject] readonly attribute PluginArray plugins;
   [SameObject] readonly attribute MimeTypeArray mimeTypes;
   boolean javaEnabled();
@@ -2126,8 +2086,7 @@
   attribute EventHandler onconnect;
 };
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface AbstractWorker {
+interface mixin AbstractWorker {
   attribute EventHandler onerror;
 };
 
@@ -2148,26 +2107,25 @@
 
 enum WorkerType { "classic", "module" };
 
-Worker implements AbstractWorker;
+Worker includes AbstractWorker;
 
 [Constructor(USVString scriptURL, optional (DOMString or WorkerOptions) options),
  Exposed=(Window,Worker)]
 interface SharedWorker : EventTarget {
   readonly attribute MessagePort port;
 };
-SharedWorker implements AbstractWorker;
+SharedWorker includes AbstractWorker;
 
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorConcurrentHardware {
+interface mixin NavigatorConcurrentHardware {
   readonly attribute unsigned long long hardwareConcurrency;
 };
 
 [Exposed=Worker]
 interface WorkerNavigator {};
-WorkerNavigator implements NavigatorID;
-WorkerNavigator implements NavigatorLanguage;
-WorkerNavigator implements NavigatorOnLine;
-WorkerNavigator implements NavigatorConcurrentHardware;
+WorkerNavigator includes NavigatorID;
+WorkerNavigator includes NavigatorLanguage;
+WorkerNavigator includes NavigatorOnLine;
+WorkerNavigator includes NavigatorConcurrentHardware;
 
 [Exposed=Worker]
 interface WorkerLocation {
@@ -2192,19 +2150,15 @@
   void clear();
 };
 
-[Exposed=Window,
- NoInterfaceObject]
-interface WindowSessionStorage {
+interface mixin WindowSessionStorage {
   readonly attribute Storage sessionStorage;
 };
-Window implements WindowSessionStorage;
+Window includes WindowSessionStorage;
 
-[Exposed=Window,
- NoInterfaceObject]
-interface WindowLocalStorage {
+interface mixin WindowLocalStorage {
   readonly attribute Storage localStorage;
 };
-Window implements WindowLocalStorage;
+Window includes WindowLocalStorage;
 
 [Exposed=Window,
  Constructor(DOMString type, optional StorageEventInit eventInitDict)]
@@ -2253,7 +2207,7 @@
   [CEReactions] attribute DOMString cols;
   [CEReactions] attribute DOMString rows;
 };
-HTMLFrameSetElement implements WindowEventHandlers;
+HTMLFrameSetElement includes WindowEventHandlers;
 
 [Exposed=Window,
  HTMLConstructor]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/magnetometer/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/magnetometer/idlharness.https-expected.txt
index d03e505..9607617 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/magnetometer/idlharness.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/magnetometer/idlharness.https-expected.txt
@@ -1,4 +1,65 @@
 This is a testharness.js-based test.
-FAIL Test IDL implementation of Magnetometer Sensor promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test IDL implementation of Magnetometer Sensor
+PASS Sensor interface: existence and properties of interface object
+PASS Sensor interface object length
+PASS Sensor interface object name
+PASS Sensor interface: existence and properties of interface prototype object
+PASS Sensor interface: existence and properties of interface prototype object's "constructor" property
+PASS Sensor interface: attribute activated
+PASS Sensor interface: attribute hasReading
+PASS Sensor interface: attribute timestamp
+PASS Sensor interface: operation start()
+PASS Sensor interface: operation stop()
+PASS Sensor interface: attribute onreading
+PASS Sensor interface: attribute onactivate
+PASS Sensor interface: attribute onerror
+PASS Magnetometer interface: existence and properties of interface object
+PASS Magnetometer interface object length
+PASS Magnetometer interface object name
+PASS Magnetometer interface: existence and properties of interface prototype object
+PASS Magnetometer interface: existence and properties of interface prototype object's "constructor" property
+PASS Magnetometer interface: attribute x
+PASS Magnetometer interface: attribute y
+PASS Magnetometer interface: attribute z
+PASS Magnetometer must be primary interface of new Magnetometer();
+PASS Stringification of new Magnetometer();
+PASS Magnetometer interface: new Magnetometer(); must inherit property "x" with the proper type
+PASS Magnetometer interface: new Magnetometer(); must inherit property "y" with the proper type
+PASS Magnetometer interface: new Magnetometer(); must inherit property "z" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "activated" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "hasReading" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "timestamp" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "start()" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "stop()" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "onreading" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "onactivate" with the proper type
+PASS Sensor interface: new Magnetometer(); must inherit property "onerror" with the proper type
+FAIL UncalibratedMagnetometer interface: existence and properties of interface object assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface object length assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface object name assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: existence and properties of interface prototype object assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute x assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute y assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute z assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute xBias assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute yBias assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer interface: attribute zBias assert_own_property: self does not have own property "UncalibratedMagnetometer" expected property "UncalibratedMagnetometer" missing
+FAIL UncalibratedMagnetometer must be primary interface of new UncalibratedMagnetometer(); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Stringification of new UncalibratedMagnetometer(); assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "x" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "y" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "z" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "xBias" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "yBias" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL UncalibratedMagnetometer interface: new UncalibratedMagnetometer(); must inherit property "zBias" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "activated" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "hasReading" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "timestamp" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "start()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "stop()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "onreading" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "onactivate" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
+FAIL Sensor interface: new UncalibratedMagnetometer(); must inherit property "onerror" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "ReferenceError: UncalibratedMagnetometer is not defined"
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html
index 3efe5a6..c4b0b99f 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html
@@ -12,7 +12,7 @@
 <body>
 <h1>Media Session IDL tests</h1>
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 interface Worker {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-idl.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-idl.https-expected.txt
index 1fd50f1..cb25ca42 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-idl.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-idl.https-expected.txt
@@ -1,4 +1,44 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test driver
+PASS MediaStreamTrack interface: existence and properties of interface object
+PASS MediaStreamTrack interface object length
+PASS MediaStreamTrack interface object name
+PASS MediaStreamTrack interface: existence and properties of interface prototype object
+PASS MediaStreamTrack interface: existence and properties of interface prototype object's "constructor" property
+PASS MediaStreamTrack interface: attribute kind
+PASS MediaStreamTrack interface: attribute id
+PASS MediaStreamTrack interface: attribute label
+PASS MediaStreamTrack interface: attribute enabled
+PASS MediaStreamTrack interface: attribute muted
+PASS MediaStreamTrack interface: attribute onmute
+PASS MediaStreamTrack interface: attribute onunmute
+PASS MediaStreamTrack interface: attribute readyState
+PASS MediaStreamTrack interface: attribute onended
+FAIL MediaStreamTrack interface: attribute onoverconstrained assert_true: The prototype object must have a property "onoverconstrained" expected true got false
+PASS MediaStreamTrack interface: operation clone()
+PASS MediaStreamTrack interface: operation stop()
+PASS MediaStreamTrack interface: operation getCapabilities()
+PASS MediaStreamTrack interface: operation getConstraints()
+PASS MediaStreamTrack interface: operation getSettings()
+PASS MediaStreamTrack interface: operation applyConstraints(MediaTrackConstraints)
+PASS MediaStreamTrack must be primary interface of track
+PASS Stringification of track
+PASS MediaStreamTrack interface: track must inherit property "kind" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "id" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "label" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "enabled" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "muted" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "onmute" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "onunmute" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "readyState" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "onended" with the proper type
+FAIL MediaStreamTrack interface: track must inherit property "onoverconstrained" with the proper type assert_inherits: property "onoverconstrained" not found in prototype chain
+PASS MediaStreamTrack interface: track must inherit property "clone()" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "stop()" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "getCapabilities()" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "getConstraints()" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "getSettings()" with the proper type
+PASS MediaStreamTrack interface: track must inherit property "applyConstraints(MediaTrackConstraints)" with the proper type
+PASS MediaStreamTrack interface: calling applyConstraints(MediaTrackConstraints) on track with too few arguments must throw TypeError
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness-expected.txt
index eaeae13..6a92e62 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness-expected.txt
@@ -1,4 +1,5 @@
 This is a testharness.js-based test.
+FAIL Window interface: existence and properties of interface object assert_false: expected false got true
 PASS Navigator interface: attribute mediaSession
 PASS Navigator interface: navigator must inherit property "mediaSession" with the proper type
 PASS MediaSession interface: existence and properties of interface object
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness.html
index a90c83e..4991404b 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/mediasession/idlharness.html
@@ -13,7 +13,7 @@
 <h1>Media Session IDL tests</h1>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Global]
 interface Window {
 };
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/orientation-sensor/idlharness.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/orientation-sensor/idlharness.https-expected.txt
deleted file mode 100644
index 2eec9272..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/orientation-sensor/idlharness.https-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test IDL implementation of Orientation Sensor promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/interfaces.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/interfaces.https-expected.txt
index 27004c0..4389ff0 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/interfaces.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/interfaces.https-expected.txt
@@ -1,4 +1,570 @@
 This is a testharness.js-based test.
-FAIL Setup for Payment Request API IDL tests. promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Setup for Payment Request API IDL tests.
+PASS Event interface: existence and properties of interface object
+PASS Event interface object length
+PASS Event interface object name
+PASS Event interface: existence and properties of interface prototype object
+PASS Event interface: existence and properties of interface prototype object's "constructor" property
+PASS Event interface: attribute type
+PASS Event interface: attribute target
+PASS Event interface: attribute currentTarget
+PASS Event interface: constant NONE on interface object
+PASS Event interface: constant NONE on interface prototype object
+PASS Event interface: constant CAPTURING_PHASE on interface object
+PASS Event interface: constant CAPTURING_PHASE on interface prototype object
+PASS Event interface: constant AT_TARGET on interface object
+PASS Event interface: constant AT_TARGET on interface prototype object
+PASS Event interface: constant BUBBLING_PHASE on interface object
+PASS Event interface: constant BUBBLING_PHASE on interface prototype object
+PASS Event interface: attribute eventPhase
+PASS Event interface: operation stopPropagation()
+PASS Event interface: operation stopImmediatePropagation()
+PASS Event interface: attribute bubbles
+PASS Event interface: attribute cancelable
+PASS Event interface: operation preventDefault()
+PASS Event interface: attribute defaultPrevented
+PASS Event interface: attribute timeStamp
+PASS Event interface: operation initEvent(DOMString, boolean, boolean)
+PASS CustomEvent interface: existence and properties of interface object
+PASS CustomEvent interface object length
+PASS CustomEvent interface object name
+PASS CustomEvent interface: existence and properties of interface prototype object
+PASS CustomEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS CustomEvent interface: attribute detail
+PASS CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any)
+PASS EventTarget interface: existence and properties of interface object
+PASS EventTarget interface object length
+PASS EventTarget interface object name
+PASS EventTarget interface: existence and properties of interface prototype object
+PASS EventTarget interface: existence and properties of interface prototype object's "constructor" property
+PASS EventTarget interface: operation addEventListener(DOMString, EventListener, [object Object],[object Object])
+PASS EventTarget interface: operation removeEventListener(DOMString, EventListener, [object Object],[object Object])
+PASS EventTarget interface: operation dispatchEvent(Event)
+PASS EventListener interface: existence and properties of interface object
+PASS EventListener interface: existence and properties of interface prototype object
+PASS EventListener interface: existence and properties of interface prototype object's "constructor" property
+PASS EventListener interface: operation handleEvent(Event)
+FAIL AbortController interface: existence and properties of interface object assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface object length assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface object name assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: attribute signal assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortController interface: operation abort() assert_own_property: self does not have own property "AbortController" expected property "AbortController" missing
+FAIL AbortSignal interface: existence and properties of interface object assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface object length assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface object name assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: attribute aborted assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+FAIL AbortSignal interface: attribute onabort assert_own_property: self does not have own property "AbortSignal" expected property "AbortSignal" missing
+PASS NodeList interface: existence and properties of interface object
+PASS NodeList interface object length
+PASS NodeList interface object name
+PASS NodeList interface: existence and properties of interface prototype object
+PASS NodeList interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeList interface: operation item(unsigned long)
+PASS NodeList interface: attribute length
+PASS HTMLCollection interface: existence and properties of interface object
+PASS HTMLCollection interface object length
+PASS HTMLCollection interface object name
+PASS HTMLCollection interface: existence and properties of interface prototype object
+PASS HTMLCollection interface: existence and properties of interface prototype object's "constructor" property
+PASS HTMLCollection interface: attribute length
+PASS HTMLCollection interface: operation item(unsigned long)
+PASS HTMLCollection interface: operation namedItem(DOMString)
+PASS MutationObserver interface: existence and properties of interface object
+PASS MutationObserver interface object length
+PASS MutationObserver interface object name
+PASS MutationObserver interface: existence and properties of interface prototype object
+PASS MutationObserver interface: existence and properties of interface prototype object's "constructor" property
+PASS MutationObserver interface: operation observe(Node, MutationObserverInit)
+PASS MutationObserver interface: operation disconnect()
+PASS MutationObserver interface: operation takeRecords()
+PASS MutationRecord interface: existence and properties of interface object
+PASS MutationRecord interface object length
+PASS MutationRecord interface object name
+PASS MutationRecord interface: existence and properties of interface prototype object
+PASS MutationRecord interface: existence and properties of interface prototype object's "constructor" property
+PASS MutationRecord interface: attribute type
+PASS MutationRecord interface: attribute target
+PASS MutationRecord interface: attribute addedNodes
+PASS MutationRecord interface: attribute removedNodes
+PASS MutationRecord interface: attribute previousSibling
+PASS MutationRecord interface: attribute nextSibling
+PASS MutationRecord interface: attribute attributeName
+PASS MutationRecord interface: attribute attributeNamespace
+PASS MutationRecord interface: attribute oldValue
+PASS Node interface: existence and properties of interface object
+PASS Node interface object length
+PASS Node interface object name
+PASS Node interface: existence and properties of interface prototype object
+PASS Node interface: existence and properties of interface prototype object's "constructor" property
+PASS Node interface: constant ELEMENT_NODE on interface object
+PASS Node interface: constant ELEMENT_NODE on interface prototype object
+PASS Node interface: constant ATTRIBUTE_NODE on interface object
+PASS Node interface: constant ATTRIBUTE_NODE on interface prototype object
+PASS Node interface: constant TEXT_NODE on interface object
+PASS Node interface: constant TEXT_NODE on interface prototype object
+PASS Node interface: constant CDATA_SECTION_NODE on interface object
+PASS Node interface: constant CDATA_SECTION_NODE on interface prototype object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface prototype object
+PASS Node interface: constant ENTITY_NODE on interface object
+PASS Node interface: constant ENTITY_NODE on interface prototype object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface prototype object
+PASS Node interface: constant COMMENT_NODE on interface object
+PASS Node interface: constant COMMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface prototype object
+PASS Node interface: constant NOTATION_NODE on interface object
+PASS Node interface: constant NOTATION_NODE on interface prototype object
+PASS Node interface: attribute nodeType
+PASS Node interface: attribute nodeName
+PASS Node interface: attribute baseURI
+PASS Node interface: attribute isConnected
+PASS Node interface: attribute ownerDocument
+PASS Node interface: operation getRootNode(GetRootNodeOptions)
+PASS Node interface: attribute parentNode
+PASS Node interface: attribute parentElement
+PASS Node interface: operation hasChildNodes()
+PASS Node interface: attribute childNodes
+PASS Node interface: attribute firstChild
+PASS Node interface: attribute lastChild
+PASS Node interface: attribute previousSibling
+PASS Node interface: attribute nextSibling
+PASS Node interface: attribute nodeValue
+PASS Node interface: attribute textContent
+PASS Node interface: operation normalize()
+PASS Node interface: operation cloneNode(boolean)
+PASS Node interface: operation isEqualNode(Node)
+PASS Node interface: operation isSameNode(Node)
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface object
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface prototype object
+PASS Node interface: operation compareDocumentPosition(Node)
+PASS Node interface: operation contains(Node)
+PASS Node interface: operation lookupPrefix(DOMString)
+PASS Node interface: operation lookupNamespaceURI(DOMString)
+PASS Node interface: operation isDefaultNamespace(DOMString)
+PASS Node interface: operation insertBefore(Node, Node)
+PASS Node interface: operation appendChild(Node)
+PASS Node interface: operation replaceChild(Node, Node)
+PASS Node interface: operation removeChild(Node)
+PASS Document interface: existence and properties of interface object
+PASS Document interface object length
+PASS Document interface object name
+PASS Document interface: existence and properties of interface prototype object
+PASS Document interface: existence and properties of interface prototype object's "constructor" property
+PASS Document interface: attribute implementation
+PASS Document interface: attribute URL
+PASS Document interface: attribute documentURI
+PASS Document interface: attribute origin
+PASS Document interface: attribute compatMode
+PASS Document interface: attribute characterSet
+PASS Document interface: attribute charset
+PASS Document interface: attribute inputEncoding
+PASS Document interface: attribute contentType
+PASS Document interface: attribute doctype
+PASS Document interface: attribute documentElement
+PASS Document interface: operation getElementsByTagName(DOMString)
+PASS Document interface: operation getElementsByTagNameNS(DOMString, DOMString)
+PASS Document interface: operation getElementsByClassName(DOMString)
+PASS Document interface: operation createElement(DOMString, ElementCreationOptions)
+PASS Document interface: operation createElementNS(DOMString, DOMString, ElementCreationOptions)
+PASS Document interface: operation createDocumentFragment()
+PASS Document interface: operation createTextNode(DOMString)
+PASS Document interface: operation createCDATASection(DOMString)
+PASS Document interface: operation createComment(DOMString)
+PASS Document interface: operation createProcessingInstruction(DOMString, DOMString)
+PASS Document interface: operation importNode(Node, boolean)
+PASS Document interface: operation adoptNode(Node)
+PASS Document interface: operation createAttribute(DOMString)
+PASS Document interface: operation createAttributeNS(DOMString, DOMString)
+PASS Document interface: operation createEvent(DOMString)
+PASS Document interface: operation createRange()
+PASS Document interface: operation createNodeIterator(Node, unsigned long, NodeFilter)
+PASS Document interface: operation createTreeWalker(Node, unsigned long, NodeFilter)
+PASS Document interface: operation getElementById(DOMString)
+PASS Document interface: attribute children
+PASS Document interface: attribute firstElementChild
+PASS Document interface: attribute lastElementChild
+PASS Document interface: attribute childElementCount
+PASS Document interface: operation prepend([object Object],[object Object])
+PASS Document interface: operation append([object Object],[object Object])
+PASS Document interface: operation querySelector(DOMString)
+PASS Document interface: operation querySelectorAll(DOMString)
+PASS XMLDocument interface: existence and properties of interface object
+PASS XMLDocument interface object length
+PASS XMLDocument interface object name
+PASS XMLDocument interface: existence and properties of interface prototype object
+PASS XMLDocument interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMImplementation interface: existence and properties of interface object
+PASS DOMImplementation interface object length
+PASS DOMImplementation interface object name
+PASS DOMImplementation interface: existence and properties of interface prototype object
+PASS DOMImplementation interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMImplementation interface: operation createDocumentType(DOMString, DOMString, DOMString)
+PASS DOMImplementation interface: operation createDocument(DOMString, DOMString, DocumentType)
+PASS DOMImplementation interface: operation createHTMLDocument(DOMString)
+PASS DOMImplementation interface: operation hasFeature()
+PASS DocumentType interface: existence and properties of interface object
+PASS DocumentType interface object length
+PASS DocumentType interface object name
+PASS DocumentType interface: existence and properties of interface prototype object
+PASS DocumentType interface: existence and properties of interface prototype object's "constructor" property
+PASS DocumentType interface: attribute name
+PASS DocumentType interface: attribute publicId
+PASS DocumentType interface: attribute systemId
+PASS DocumentType interface: operation before([object Object],[object Object])
+PASS DocumentType interface: operation after([object Object],[object Object])
+PASS DocumentType interface: operation replaceWith([object Object],[object Object])
+PASS DocumentType interface: operation remove()
+PASS DocumentFragment interface: existence and properties of interface object
+PASS DocumentFragment interface object length
+PASS DocumentFragment interface object name
+PASS DocumentFragment interface: existence and properties of interface prototype object
+PASS DocumentFragment interface: existence and properties of interface prototype object's "constructor" property
+PASS DocumentFragment interface: operation getElementById(DOMString)
+PASS DocumentFragment interface: attribute children
+PASS DocumentFragment interface: attribute firstElementChild
+PASS DocumentFragment interface: attribute lastElementChild
+PASS DocumentFragment interface: attribute childElementCount
+PASS DocumentFragment interface: operation prepend([object Object],[object Object])
+PASS DocumentFragment interface: operation append([object Object],[object Object])
+PASS DocumentFragment interface: operation querySelector(DOMString)
+PASS DocumentFragment interface: operation querySelectorAll(DOMString)
+PASS ShadowRoot interface: existence and properties of interface object
+PASS ShadowRoot interface object length
+PASS ShadowRoot interface object name
+PASS ShadowRoot interface: existence and properties of interface prototype object
+PASS ShadowRoot interface: existence and properties of interface prototype object's "constructor" property
+PASS ShadowRoot interface: attribute mode
+PASS ShadowRoot interface: attribute host
+PASS Element interface: existence and properties of interface object
+PASS Element interface object length
+PASS Element interface object name
+PASS Element interface: existence and properties of interface prototype object
+PASS Element interface: existence and properties of interface prototype object's "constructor" property
+PASS Element interface: attribute namespaceURI
+PASS Element interface: attribute prefix
+PASS Element interface: attribute localName
+PASS Element interface: attribute tagName
+PASS Element interface: attribute id
+PASS Element interface: attribute className
+PASS Element interface: attribute classList
+PASS Element interface: attribute slot
+PASS Element interface: operation hasAttributes()
+PASS Element interface: attribute attributes
+PASS Element interface: operation getAttributeNames()
+PASS Element interface: operation getAttribute(DOMString)
+PASS Element interface: operation getAttributeNS(DOMString, DOMString)
+PASS Element interface: operation setAttribute(DOMString, DOMString)
+PASS Element interface: operation setAttributeNS(DOMString, DOMString, DOMString)
+PASS Element interface: operation removeAttribute(DOMString)
+PASS Element interface: operation removeAttributeNS(DOMString, DOMString)
+PASS Element interface: operation hasAttribute(DOMString)
+PASS Element interface: operation hasAttributeNS(DOMString, DOMString)
+PASS Element interface: operation getAttributeNode(DOMString)
+PASS Element interface: operation getAttributeNodeNS(DOMString, DOMString)
+PASS Element interface: operation setAttributeNode(Attr)
+PASS Element interface: operation setAttributeNodeNS(Attr)
+PASS Element interface: operation removeAttributeNode(Attr)
+PASS Element interface: operation attachShadow(ShadowRootInit)
+PASS Element interface: attribute shadowRoot
+PASS Element interface: operation closest(DOMString)
+PASS Element interface: operation matches(DOMString)
+PASS Element interface: operation webkitMatchesSelector(DOMString)
+PASS Element interface: operation getElementsByTagName(DOMString)
+PASS Element interface: operation getElementsByTagNameNS(DOMString, DOMString)
+PASS Element interface: operation getElementsByClassName(DOMString)
+PASS Element interface: operation insertAdjacentElement(DOMString, Element)
+PASS Element interface: operation insertAdjacentText(DOMString, DOMString)
+PASS Element interface: attribute children
+PASS Element interface: attribute firstElementChild
+PASS Element interface: attribute lastElementChild
+PASS Element interface: attribute childElementCount
+PASS Element interface: operation prepend([object Object],[object Object])
+PASS Element interface: operation append([object Object],[object Object])
+PASS Element interface: operation querySelector(DOMString)
+PASS Element interface: operation querySelectorAll(DOMString)
+PASS Element interface: attribute previousElementSibling
+PASS Element interface: attribute nextElementSibling
+PASS Element interface: operation before([object Object],[object Object])
+PASS Element interface: operation after([object Object],[object Object])
+PASS Element interface: operation replaceWith([object Object],[object Object])
+PASS Element interface: operation remove()
+PASS Element interface: attribute assignedSlot
+PASS NamedNodeMap interface: existence and properties of interface object
+PASS NamedNodeMap interface object length
+PASS NamedNodeMap interface object name
+PASS NamedNodeMap interface: existence and properties of interface prototype object
+PASS NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property
+PASS NamedNodeMap interface: attribute length
+PASS NamedNodeMap interface: operation item(unsigned long)
+PASS NamedNodeMap interface: operation getNamedItem(DOMString)
+PASS NamedNodeMap interface: operation getNamedItemNS(DOMString, DOMString)
+PASS NamedNodeMap interface: operation setNamedItem(Attr)
+PASS NamedNodeMap interface: operation setNamedItemNS(Attr)
+PASS NamedNodeMap interface: operation removeNamedItem(DOMString)
+PASS NamedNodeMap interface: operation removeNamedItemNS(DOMString, DOMString)
+PASS Attr interface: existence and properties of interface object
+PASS Attr interface object length
+PASS Attr interface object name
+PASS Attr interface: existence and properties of interface prototype object
+PASS Attr interface: existence and properties of interface prototype object's "constructor" property
+PASS Attr interface: attribute namespaceURI
+PASS Attr interface: attribute prefix
+PASS Attr interface: attribute localName
+PASS Attr interface: attribute name
+PASS Attr interface: attribute value
+PASS Attr interface: attribute ownerElement
+PASS Attr interface: attribute specified
+PASS CharacterData interface: existence and properties of interface object
+PASS CharacterData interface object length
+PASS CharacterData interface object name
+PASS CharacterData interface: existence and properties of interface prototype object
+PASS CharacterData interface: existence and properties of interface prototype object's "constructor" property
+PASS CharacterData interface: attribute data
+PASS CharacterData interface: attribute length
+PASS CharacterData interface: operation substringData(unsigned long, unsigned long)
+PASS CharacterData interface: operation appendData(DOMString)
+PASS CharacterData interface: operation insertData(unsigned long, DOMString)
+PASS CharacterData interface: operation deleteData(unsigned long, unsigned long)
+PASS CharacterData interface: operation replaceData(unsigned long, unsigned long, DOMString)
+PASS CharacterData interface: attribute previousElementSibling
+PASS CharacterData interface: attribute nextElementSibling
+PASS CharacterData interface: operation before([object Object],[object Object])
+PASS CharacterData interface: operation after([object Object],[object Object])
+PASS CharacterData interface: operation replaceWith([object Object],[object Object])
+PASS CharacterData interface: operation remove()
+PASS Text interface: existence and properties of interface object
+PASS Text interface object length
+PASS Text interface object name
+PASS Text interface: existence and properties of interface prototype object
+PASS Text interface: existence and properties of interface prototype object's "constructor" property
+PASS Text interface: operation splitText(unsigned long)
+PASS Text interface: attribute wholeText
+PASS Text interface: attribute assignedSlot
+PASS CDATASection interface: existence and properties of interface object
+PASS CDATASection interface object length
+PASS CDATASection interface object name
+PASS CDATASection interface: existence and properties of interface prototype object
+PASS CDATASection interface: existence and properties of interface prototype object's "constructor" property
+PASS ProcessingInstruction interface: existence and properties of interface object
+PASS ProcessingInstruction interface object length
+PASS ProcessingInstruction interface object name
+PASS ProcessingInstruction interface: existence and properties of interface prototype object
+PASS ProcessingInstruction interface: existence and properties of interface prototype object's "constructor" property
+PASS ProcessingInstruction interface: attribute target
+PASS Comment interface: existence and properties of interface object
+PASS Comment interface object length
+PASS Comment interface object name
+PASS Comment interface: existence and properties of interface prototype object
+PASS Comment interface: existence and properties of interface prototype object's "constructor" property
+PASS Range interface: existence and properties of interface object
+PASS Range interface object length
+PASS Range interface object name
+PASS Range interface: existence and properties of interface prototype object
+PASS Range interface: existence and properties of interface prototype object's "constructor" property
+PASS Range interface: attribute startContainer
+PASS Range interface: attribute startOffset
+PASS Range interface: attribute endContainer
+PASS Range interface: attribute endOffset
+PASS Range interface: attribute collapsed
+PASS Range interface: attribute commonAncestorContainer
+PASS Range interface: operation setStart(Node, unsigned long)
+PASS Range interface: operation setEnd(Node, unsigned long)
+PASS Range interface: operation setStartBefore(Node)
+PASS Range interface: operation setStartAfter(Node)
+PASS Range interface: operation setEndBefore(Node)
+PASS Range interface: operation setEndAfter(Node)
+PASS Range interface: operation collapse(boolean)
+PASS Range interface: operation selectNode(Node)
+PASS Range interface: operation selectNodeContents(Node)
+PASS Range interface: constant START_TO_START on interface object
+PASS Range interface: constant START_TO_START on interface prototype object
+PASS Range interface: constant START_TO_END on interface object
+PASS Range interface: constant START_TO_END on interface prototype object
+PASS Range interface: constant END_TO_END on interface object
+PASS Range interface: constant END_TO_END on interface prototype object
+PASS Range interface: constant END_TO_START on interface object
+PASS Range interface: constant END_TO_START on interface prototype object
+PASS Range interface: operation compareBoundaryPoints(unsigned short, Range)
+PASS Range interface: operation deleteContents()
+PASS Range interface: operation extractContents()
+PASS Range interface: operation cloneContents()
+PASS Range interface: operation insertNode(Node)
+PASS Range interface: operation surroundContents(Node)
+PASS Range interface: operation cloneRange()
+PASS Range interface: operation detach()
+PASS Range interface: operation isPointInRange(Node, unsigned long)
+PASS Range interface: operation comparePoint(Node, unsigned long)
+PASS Range interface: operation intersectsNode(Node)
+PASS Range interface: stringifier
+PASS NodeIterator interface: existence and properties of interface object
+PASS NodeIterator interface object length
+PASS NodeIterator interface object name
+PASS NodeIterator interface: existence and properties of interface prototype object
+PASS NodeIterator interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeIterator interface: attribute root
+PASS NodeIterator interface: attribute referenceNode
+PASS NodeIterator interface: attribute pointerBeforeReferenceNode
+PASS NodeIterator interface: attribute whatToShow
+PASS NodeIterator interface: attribute filter
+PASS NodeIterator interface: operation nextNode()
+PASS NodeIterator interface: operation previousNode()
+PASS NodeIterator interface: operation detach()
+PASS TreeWalker interface: existence and properties of interface object
+PASS TreeWalker interface object length
+PASS TreeWalker interface object name
+PASS TreeWalker interface: existence and properties of interface prototype object
+PASS TreeWalker interface: existence and properties of interface prototype object's "constructor" property
+PASS TreeWalker interface: attribute root
+PASS TreeWalker interface: attribute whatToShow
+PASS TreeWalker interface: attribute filter
+PASS TreeWalker interface: attribute currentNode
+PASS TreeWalker interface: operation parentNode()
+PASS TreeWalker interface: operation firstChild()
+PASS TreeWalker interface: operation lastChild()
+PASS TreeWalker interface: operation previousSibling()
+PASS TreeWalker interface: operation nextSibling()
+PASS TreeWalker interface: operation previousNode()
+PASS TreeWalker interface: operation nextNode()
+PASS NodeFilter interface: existence and properties of interface object
+PASS NodeFilter interface object name
+PASS NodeFilter interface: existence and properties of interface prototype object
+PASS NodeFilter interface: existence and properties of interface prototype object's "constructor" property
+PASS NodeFilter interface: constant FILTER_ACCEPT on interface object
+PASS NodeFilter interface: constant FILTER_ACCEPT on interface prototype object
+PASS NodeFilter interface: constant FILTER_REJECT on interface object
+PASS NodeFilter interface: constant FILTER_REJECT on interface prototype object
+PASS NodeFilter interface: constant FILTER_SKIP on interface object
+PASS NodeFilter interface: constant FILTER_SKIP on interface prototype object
+PASS NodeFilter interface: constant SHOW_ALL on interface object
+PASS NodeFilter interface: constant SHOW_ALL on interface prototype object
+PASS NodeFilter interface: constant SHOW_ELEMENT on interface object
+PASS NodeFilter interface: constant SHOW_ELEMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface object
+PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface prototype object
+PASS NodeFilter interface: constant SHOW_TEXT on interface object
+PASS NodeFilter interface: constant SHOW_TEXT on interface prototype object
+PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface object
+PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface prototype object
+PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface object
+PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface prototype object
+PASS NodeFilter interface: constant SHOW_ENTITY on interface object
+PASS NodeFilter interface: constant SHOW_ENTITY on interface prototype object
+PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface object
+PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface prototype object
+PASS NodeFilter interface: constant SHOW_COMMENT on interface object
+PASS NodeFilter interface: constant SHOW_COMMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface prototype object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface object
+PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface prototype object
+PASS NodeFilter interface: constant SHOW_NOTATION on interface object
+PASS NodeFilter interface: constant SHOW_NOTATION on interface prototype object
+PASS NodeFilter interface: operation acceptNode(Node)
+PASS DOMTokenList interface: existence and properties of interface object
+PASS DOMTokenList interface object length
+PASS DOMTokenList interface object name
+PASS DOMTokenList interface: existence and properties of interface prototype object
+PASS DOMTokenList interface: existence and properties of interface prototype object's "constructor" property
+PASS DOMTokenList interface: attribute length
+PASS DOMTokenList interface: operation item(unsigned long)
+PASS DOMTokenList interface: operation contains(DOMString)
+PASS DOMTokenList interface: operation add(DOMString)
+PASS DOMTokenList interface: operation remove(DOMString)
+PASS DOMTokenList interface: operation toggle(DOMString, boolean)
+PASS DOMTokenList interface: operation replace(DOMString, DOMString)
+PASS DOMTokenList interface: operation supports(DOMString)
+PASS DOMTokenList interface: attribute value
+PASS DOMTokenList interface: stringifier
+PASS PaymentRequest interface: existence and properties of interface object
+PASS PaymentRequest interface object length
+PASS PaymentRequest interface object name
+PASS PaymentRequest interface: existence and properties of interface prototype object
+PASS PaymentRequest interface: existence and properties of interface prototype object's "constructor" property
+PASS PaymentRequest interface: operation show()
+PASS PaymentRequest interface: operation abort()
+PASS PaymentRequest interface: operation canMakePayment()
+PASS PaymentRequest interface: attribute id
+PASS PaymentRequest interface: attribute shippingAddress
+PASS PaymentRequest interface: attribute shippingOption
+PASS PaymentRequest interface: attribute shippingType
+PASS PaymentRequest interface: attribute onshippingaddresschange
+PASS PaymentRequest interface: attribute onshippingoptionchange
+PASS PaymentRequest must be primary interface of new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} })
+PASS Stringification of new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} })
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "show()" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "abort()" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "canMakePayment()" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "id" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingAddress" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingOption" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingType" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onshippingaddresschange" with the proper type
+PASS PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onshippingoptionchange" with the proper type
+PASS EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError
+PASS EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type
+PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError
+PASS EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "dispatchEvent(Event)" with the proper type
+PASS EventTarget interface: calling dispatchEvent(Event) on new PaymentRequest([{supportedMethods: 'foo'}], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError
+PASS PaymentAddress interface: existence and properties of interface object
+PASS PaymentAddress interface object length
+PASS PaymentAddress interface object name
+PASS PaymentAddress interface: existence and properties of interface prototype object
+PASS PaymentAddress interface: existence and properties of interface prototype object's "constructor" property
+PASS PaymentAddress interface: operation toJSON()
+PASS PaymentAddress interface: attribute country
+PASS PaymentAddress interface: attribute addressLine
+PASS PaymentAddress interface: attribute region
+PASS PaymentAddress interface: attribute city
+PASS PaymentAddress interface: attribute dependentLocality
+PASS PaymentAddress interface: attribute postalCode
+PASS PaymentAddress interface: attribute sortingCode
+PASS PaymentAddress interface: attribute languageCode
+PASS PaymentAddress interface: attribute organization
+PASS PaymentAddress interface: attribute recipient
+PASS PaymentAddress interface: attribute phone
+PASS PaymentResponse interface: existence and properties of interface object
+PASS PaymentResponse interface object length
+PASS PaymentResponse interface object name
+PASS PaymentResponse interface: existence and properties of interface prototype object
+PASS PaymentResponse interface: existence and properties of interface prototype object's "constructor" property
+PASS PaymentResponse interface: operation toJSON()
+PASS PaymentResponse interface: attribute requestId
+PASS PaymentResponse interface: attribute methodName
+PASS PaymentResponse interface: attribute details
+PASS PaymentResponse interface: attribute shippingAddress
+PASS PaymentResponse interface: attribute shippingOption
+PASS PaymentResponse interface: attribute payerName
+PASS PaymentResponse interface: attribute payerEmail
+PASS PaymentResponse interface: attribute payerPhone
+PASS PaymentResponse interface: operation complete(PaymentComplete)
+PASS PaymentRequestUpdateEvent interface: existence and properties of interface object
+PASS PaymentRequestUpdateEvent interface object length
+PASS PaymentRequestUpdateEvent interface object name
+PASS PaymentRequestUpdateEvent interface: existence and properties of interface prototype object
+PASS PaymentRequestUpdateEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS PaymentRequestUpdateEvent interface: operation updateWith([object Object])
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/extension/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/extension/idlharness.html
index 985712e..d1bbdebd 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/extension/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/extension/idlharness.html
@@ -7,7 +7,7 @@
 <script src="/resources/idlharness.js"></script>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/idlharness.html
index a4ba4c3..729d357 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/pointerevents/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/pointerevents/idlharness.html
@@ -7,7 +7,7 @@
 <script src="/resources/idlharness.js"></script>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/requestidlecallback/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/requestidlecallback/idlharness.html
index 4007d09..459ce36 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/requestidlecallback/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/requestidlecallback/idlharness.html
@@ -7,7 +7,7 @@
 <script src="/resources/idlharness.js"></script>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 </pre>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js b/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
index 731352ce..a8d4150d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
@@ -165,6 +165,7 @@
      */
     this.partials = [];
     this["implements"] = {};
+    this["includes"] = {};
 };
 
 //@}
@@ -258,6 +259,20 @@
             return;
         }
 
+        if (parsed_idl.type == "includes")
+        {
+            if (should_skip(parsed_idl.target))
+            {
+                return;
+            }
+            if (!(parsed_idl.target in this["includes"]))
+            {
+                this["includes"][parsed_idl.target] = [];
+            }
+            this["includes"][parsed_idl.target].push(parsed_idl["includes"]);
+            return;
+        }
+
         parsed_idl.array = this;
         if (parsed_idl.name in this.members)
         {
@@ -271,7 +286,12 @@
         {
         case "interface":
             this.members[parsed_idl.name] =
-                new IdlInterface(parsed_idl, /* is_callback = */ false);
+                new IdlInterface(parsed_idl, /* is_callback = */ false, /* is_mixin = */ false);
+            break;
+
+        case "interface mixin":
+            this.members[parsed_idl.name] =
+                new IdlInterface(parsed_idl, /* is_callback = */ false, /* is_mixin = */ true);
             break;
 
         case "dictionary":
@@ -295,7 +315,7 @@
 
         case "callback interface":
             this.members[parsed_idl.name] =
-                new IdlInterface(parsed_idl, /* is_callback = */ true);
+                new IdlInterface(parsed_idl, /* is_callback = */ true, /* is_mixin = */ false);
             break;
 
         default:
@@ -361,6 +381,36 @@
 };
 
 //@}
+IdlArray.prototype.recursively_get_includes = function(interface_name)
+//@{
+{
+    /**
+     * Helper function for test().  Returns an array of things that implement
+     * interface_name, so if the IDL contains
+     *
+     *   A includes B;
+     *   B includes C;
+     *   B includes D;
+     *
+     * then recursively_get_includes("A") should return ["B", "C", "D"].
+     */
+    var ret = this["includes"][interface_name];
+    if (ret === undefined)
+    {
+        return [];
+    }
+    for (var i = 0; i < this["includes"][interface_name].length; i++)
+    {
+        ret = ret.concat(this.recursively_get_includes(ret[i]));
+        if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i]))
+        {
+            throw "Circular includes statements involving " + ret[i];
+        }
+    }
+    return ret;
+};
+
+//@}
 IdlArray.prototype.is_json_type = function(type)
 //@{
 {
@@ -456,7 +506,7 @@
                while (thing)
                {
                    if (thing.has_to_json_regular_operation()) { return true; }
-                   var mixins = this.implements[thing.name];
+                   var mixins = this.implements[thing.name] || this.includes[thing.name];
                    if (mixins) {
                        mixins = mixins.map(function(id) {
                            var mixin = this.members[id];
@@ -566,6 +616,23 @@
     }
     this["implements"] = {};
 
+    for (var lhs in this["includes"])
+    {
+        this.recursively_get_includes(lhs).forEach(function(rhs)
+        {
+            var errStr = lhs + " includes " + rhs + ", but ";
+            if (!(lhs in this.members)) throw errStr + lhs + " is undefined.";
+            if (!(this.members[lhs] instanceof IdlInterface)) throw errStr + lhs + " is not an interface.";
+            if (!(rhs in this.members)) throw errStr + rhs + " is undefined.";
+            if (!(this.members[rhs] instanceof IdlInterface)) throw errStr + rhs + " is not an interface.";
+            this.members[rhs].members.forEach(function(member)
+            {
+                this.members[lhs].members.push(new IdlInterfaceMember(member));
+            }.bind(this));
+        }.bind(this));
+    }
+    this["includes"] = {};
+
     Object.getOwnPropertyNames(this.members).forEach(function(memberName) {
         var member = this.members[memberName];
         if (!(member instanceof IdlInterface)) {
@@ -875,7 +942,7 @@
 };
 
 /// IdlInterface ///
-function IdlInterface(obj, is_callback)
+function IdlInterface(obj, is_callback, is_mixin)
 //@{
 {
     /**
@@ -913,6 +980,7 @@
     this.base = obj.inheritance;
 
     this._is_callback = is_callback;
+    this._is_mixin = is_mixin;
 }
 //@}
 IdlInterface.prototype = Object.create(IdlObject.prototype);
@@ -923,6 +991,13 @@
 };
 //@}
 
+IdlInterface.prototype.is_mixin = function()
+//@{
+{
+    return this._is_mixin;
+};
+//@}
+
 IdlInterface.prototype.has_constants = function()
 //@{
 {
@@ -936,8 +1011,7 @@
 //@{
 {
     return this.extAttrs.some(function(attribute) {
-        return attribute.name === "Global" ||
-               attribute.name === "PrimaryGlobal";
+        return attribute.name === "Global";
     });
 };
 //@}
@@ -1047,7 +1121,7 @@
 function _traverse_inherited_and_consequential_interfaces(stack, callback) {
     var I = stack.pop();
     callback(I);
-    var mixins = I.array["implements"][I.name];
+    var mixins = I.array["implements"][I.name] || I.array["includes"][I.name];
     if (mixins) {
         mixins.forEach(function(id) {
             var mixin = I.array.members[id];
@@ -1066,7 +1140,7 @@
 IdlInterface.prototype.test = function()
 //@{
 {
-    if (this.has_extended_attribute("NoInterfaceObject"))
+    if (this.has_extended_attribute("NoInterfaceObject") || this.is_mixin())
     {
         // No tests to do without an instance.  TODO: We should still be able
         // to run tests on the prototype object, if we obtain one through some
@@ -1356,7 +1430,7 @@
         // "The interface prototype object for a given interface A must have an
         // internal [[Prototype]] property whose value is returned from the
         // following steps:
-        // "If A is declared with the [Global] or [PrimaryGlobal] extended
+        // "If A is declared with the [Global] extended
         // attribute, and A supports named properties, then return the named
         // properties object for A, as defined in §3.6.4 Named properties
         // object.
@@ -1434,7 +1508,7 @@
         }
     }.bind(this), this.name + " interface: existence and properties of interface prototype object");
 
-    // "If the interface is declared with the [Global] or [PrimaryGlobal]
+    // "If the interface is declared with the [Global]
     // extended attribute, or the interface is in the set of inherited
     // interfaces for any other interface that is declared with one of these
     // attributes, then the interface prototype object must be an immutable
@@ -1780,7 +1854,7 @@
                     "interface object missing static operation");
             memberHolderObject = self[this.name];
         // "* Otherwise, [...] if the interface was declared with the [Global]
-        //    or [PrimaryGlobal] extended attribute, then the property exists
+        //    extended attribute, then the property exists
         //    on every object that implements the interface."
         } else if (this.is_global()) {
             assert_own_property(self, member.name,
@@ -2128,7 +2202,7 @@
     }
 
     // "The internal [[SetPrototypeOf]] method of every platform object that
-    // implements an interface with the [Global] or [PrimaryGlobal] extended
+    // implements an interface with the [Global] extended
     // attribute must execute the same algorithm as is defined for the
     // [[SetPrototypeOf]] internal method of an immutable prototype exotic
     // object."
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/interfaces-expected.txt
index 1fd50f1..f2473ff 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/selection/interfaces-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/selection/interfaces-expected.txt
@@ -1,4 +1,4 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+FAIL Test driver promise_test: Unhandled rejection with value: "SVGElement implements ElementCSSInlineStyle, but SVGElement is undefined."
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https-expected.txt
deleted file mode 100644
index bb04f51..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Storage API IDL test promise_test: Unhandled rejection with value: "NavigatorStorage: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker-expected.txt
deleted file mode 100644
index bb04f51..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Storage API IDL test promise_test: Unhandled rejection with value: "NavigatorStorage: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/svg/interfaces.html
index b171185..698e6e7 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/svg/interfaces.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/interfaces.html
@@ -13,7 +13,7 @@
 interface ProcessingInstruction : Node {};
 interface Element : Node {};
 interface HTMLElement : Element {};
-[PrimaryGlobal] interface Window {};
+[Global=Window, Exposed=Window] interface Window {};
 
 // Just need to know that DOMStringMap exists; its details are tested elsewhere.
 interface DOMStringMap { };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute-ref.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute-ref.svg
new file mode 100644
index 0000000..85b20271
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute-ref.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 20 150 v -120 h 140 v 120 z" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute.svg
new file mode 100644
index 0000000..0efc295
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/absolute.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+  <metadata>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/svg-paths/#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/SVG2/paths.html#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://svgwg.org/svg2-draft/changes.html#paths"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="match" href="absolute-ref.svg"/>
+    <meta xmlns="http://www.w3.org/1999/xhtml" name="assert" content="path element with B commands renders correctly."/>
+  </metadata>
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 20 150 B -90 h 120 B 0 h 140 B 90 h 120 z" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative-ref.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative-ref.svg
new file mode 100644
index 0000000..85b20271
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative-ref.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 20 150 v -120 h 140 v 120 z" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative.svg
new file mode 100644
index 0000000..75b87ff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/relative.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+  <metadata>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/svg-paths/#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/SVG2/paths.html#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://svgwg.org/svg2-draft/changes.html#paths"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="match" href="absolute-ref.svg"/>
+    <meta xmlns="http://www.w3.org/1999/xhtml" name="assert" content="path element with b commands renders correctly."/>
+  </metadata>
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 20 150 b -90 h 120 b 90 h 140 b 90 h 120 z" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero-ref.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero-ref.svg
new file mode 100644
index 0000000..3558de31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero-ref.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 25 50 h 10 m 10 0 h 10 m 10 0 h 10" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero.svg
new file mode 100644
index 0000000..80256429
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/svg/path/bearing/zero.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+  <metadata>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/svg-paths/#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://www.w3.org/TR/SVG2/paths.html#PathDataBearingCommands"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="help" href="https://svgwg.org/svg2-draft/changes.html#paths"/>
+    <link xmlns="http://www.w3.org/1999/xhtml" rel="match" href="zero-ref.svg"/>
+    <meta xmlns="http://www.w3.org/1999/xhtml" name="assert" content="path element with bearing 0 renders correctly."/>
+  </metadata>
+  <style>
+    path {
+      stroke-width: 3;
+      stroke: blue;
+    }
+  </style>
+  <path d="M 25 50 h 10 B 0 m 10 0 h 10 b 0 m 10 0 h 10" />
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/uievents/interfaces-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/uievents/interfaces-expected.txt
deleted file mode 100644
index 1fd50f1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/uievents/interfaces-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt
new file mode 100644
index 0000000..77c7d54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL createOffer() with offerToReceiveAudio set to false should not create a transceiver promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL createOffer() with offerToReceiveAudio should create a "recvonly" transceiver promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL offerToReceiveAudio option should be ignored if a non-stopped "recvonly" transceiver exists promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL offerToReceiveAudio option should be ignored if a non-stopped "sendrecv" transceiver exists promise_test: Unhandled rejection with value: object "NotSupportedError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)."
+FAIL createOffer() with offerToReceiveVideo set to false should not create a transceiver promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL createOffer() with offerToReceiveVideo should create a "recvonly" transceiver promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL offerToReceiveVideo option should be ignored if a non-stopped "recvonly" transceiver exists promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+FAIL offerToReceiveVideo option should be ignored if a non-stopped "sendrecv" transceiver exists promise_test: Unhandled rejection with value: object "NotSupportedError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)."
+FAIL offerToReceiveAudio and Video should create two "recvonly" transceivers promise_test: Unhandled rejection with value: object "TypeError: pc.getTransceivers is not a function"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive.html
new file mode 100644
index 0000000..72d5837
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer-offerToReceive.html
@@ -0,0 +1,107 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Test legacy offerToReceiveAudio/Video options</title>
+<link rel="help" href="https://w3c.github.io/webrtc-pc/#legacy-configuration-extensions">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
+<script>
+  'use strict';
+
+  // Run some tests for both audio and video types
+  ['audio', 'video'].forEach((type) => {
+    const capsType = type[0].toUpperCase() + type.slice(1);
+
+    const offerToReceiveTrue = {};
+    offerToReceiveTrue[`offerToReceive${capsType}`] = true;
+
+    const offerToReceiveFalse = {};
+    offerToReceiveFalse[`offerToReceive${capsType}`] = false;
+
+    // Start testing
+    promise_test(t => {
+      const pc = new RTCPeerConnection();
+      const dummy = pc.createDataChannel('foo'); // Just to have something to offer
+
+      return pc.createOffer(offerToReceiveFalse)
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 0,
+          'Expect pc to have no transceivers');
+      });
+    }, `createOffer() with offerToReceive${capsType} set to false should not create a transceiver`);
+
+    promise_test(t => {
+      const pc = new RTCPeerConnection();
+
+      return pc.createOffer(offerToReceiveTrue)
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 1,
+          'Expect pc to have one transceiver');
+
+        const transceiver = pc.getTransceivers()[0];
+        assert_equals(transceiver.direction, 'recvonly',
+          'Expect transceiver to have "recvonly" direction');
+      });
+    }, `createOffer() with offerToReceive${capsType} should create a "recvonly" transceiver`);
+
+    promise_test(t => {
+      const pc = new RTCPeerConnection();
+
+      return pc.createOffer(offerToReceiveTrue)
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 1,
+          'Expect pc to have one transceiver');
+
+        const transceiver = pc.getTransceivers()[0];
+        assert_equals(transceiver.direction, 'recvonly',
+          'Expect transceiver to have "recvonly" direction');
+      })
+      .then(() => pc.createOffer(offerToReceiveTrue))
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 1,
+          'Expect pc to still have only one transceiver');
+      })
+      ;
+    }, `offerToReceive${capsType} option should be ignored if a non-stopped "recvonly" transceiver exists`);
+
+    promise_test(t => {
+      const pc = new RTCPeerConnection();
+
+      return getTrackFromUserMedia(type)
+      .then(([track, stream]) => {
+        pc.addTrack(track, stream);
+        return pc.createOffer();
+      })
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 1,
+          'Expect pc to have one transceiver');
+
+        const transceiver = pc.getTransceivers()[0];
+        assert_equals(transceiver.direction, 'sendrecv',
+          'Expect transceiver to have "sendrecv" direction');
+      })
+      .then(() => pc.createOffer(offerToReceiveTrue))
+      .then(() => {
+        assert_equals(pc.getTransceivers().length, 1,
+          'Expect pc to still have only one transceiver');
+      })
+      ;
+    }, `offerToReceive${capsType} option should be ignored if a non-stopped "sendrecv" transceiver exists`);
+  });
+
+  promise_test(t => {
+    const pc = new RTCPeerConnection();
+
+    return pc.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true })
+    .then(() => {
+      assert_equals(pc.getTransceivers().length, 2,
+        'Expect pc to have two transceivers');
+
+      assert_equals(pc.getTransceivers()[0].direction, 'recvonly',
+        'Expect first transceiver to have "recvonly" direction');
+      assert_equals(pc.getTransceivers()[1].direction, 'recvonly',
+        'Expect second transceiver to have "recvonly" direction');
+    });
+  }, 'offerToReceiveAudio and Video should create two "recvonly" transceivers');
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webstorage/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/webstorage/idlharness.html
index 454e441..cd880a3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webstorage/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webstorage/idlharness.html
@@ -15,7 +15,7 @@
 <div id="log"></div>
 
 <pre id='untested_idl' style='display:none'>
-[PrimaryGlobal]
+[Global=Window, Exposed=Window]
 interface Window {
 };
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvr/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/webvr/idlharness.html
index ecb89f37..96c63d5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webvr/idlharness.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvr/idlharness.html
@@ -223,7 +223,7 @@
     <script>
       setup( () => {
         var idl_array = new IdlArray();
-        idl_array.add_untested_idls("[PrimaryGlobal] interface Window {};");
+        idl_array.add_untested_idls("[Global=Window, Exposed=Window] interface Window {};");
         idl_array.add_untested_idls("interface Navigator {};");
         idl_array.add_untested_idls("interface Event {};");
         idl_array.add_untested_idls("interface EventTarget {};");
diff --git a/third_party/WebKit/LayoutTests/fast/harness/results.html b/third_party/WebKit/LayoutTests/fast/harness/results.html
index 1fc0c2d..d32730e 100644
--- a/third_party/WebKit/LayoutTests/fast/harness/results.html
+++ b/third_party/WebKit/LayoutTests/fast/harness/results.html
@@ -776,9 +776,11 @@
       : test => {
           if (test.expectPath.includes(searchText))
             return true;
-          for (let bug of test.bugs) {
-            if (bug.includes(searchText))
-              return true;
+          if (Array.isArray(test.bugs)) {
+            for (let bug of test.bugs) {
+              if (bug.includes(searchText))
+                return true;
+            }
           }
           return false;
         };
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit-expected.txt
index 5f3e950..59f7dd4 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit-expected.txt
@@ -18,3 +18,13 @@
 Did not show release note drawer
 Release note version in setting: 5
 
+Running: showReleaseNoteSetting
+
+Disabled showReleaseNote setting
+Last seen version: 4
+Did not show release note drawer
+
+Enabled showReleaseNote setting
+Last seen version: 4
+Showed release note in drawer - version: 5
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit.js b/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit.js
index 9692b6d..25cd19c 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit.js
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/help/release-note-unit.js
@@ -13,11 +13,15 @@
   ];
 
   function testMaybeShowInDrawer(lastSeenVersion) {
+    return testMaybeShowInDrawerWithSettings(lastSeenVersion, {showReleaseNote: true});
+  }
+
+  function testMaybeShowInDrawerWithSettings(lastSeenVersion, {showReleaseNote}) {
     TestRunner.addResult(`Last seen version: ${lastSeenVersion}`);
     TestRunner.addSniffer(UI.viewManager, 'showView', onShowView);
     var showedReleaseNote = false;
 
-    Help._showReleaseNoteIfNeeded(lastSeenVersion, Help.latestReleaseNote().version);
+    Help._showReleaseNoteIfNeeded(lastSeenVersion, Help.latestReleaseNote().version, showReleaseNote);
 
     function onShowView() {
       showedReleaseNote = true;
@@ -50,5 +54,14 @@
       TestRunner.addResult(`Release note version in setting: ${Help.releaseNoteVersionSetting().get()}`);
       next();
     },
+    function showReleaseNoteSetting(next) {
+      TestRunner.addResult('\nDisabled showReleaseNote setting');
+      var lastSeenVersion = 4;
+      testMaybeShowInDrawerWithSettings(lastSeenVersion, {showReleaseNote: false});
+
+      TestRunner.addResult('\nEnabled showReleaseNote setting');
+      testMaybeShowInDrawerWithSettings(lastSeenVersion, {showReleaseNote: true});
+      next();
+    },
   ]);
 })();
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/acquire.html b/third_party/WebKit/LayoutTests/http/tests/locks/acquire.html
index ca5cf61..c857fe6 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/acquire.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/acquire.html
@@ -10,46 +10,46 @@
 
 promise_test(async t => {
   await promise_rejects(t, new TypeError(), navigator.locks.acquire());
-  await promise_rejects(t, new TypeError(), navigator.locks.acquire('scope'));
-}, 'navigator.locks.acquire requires a scope and a callback');
+  await promise_rejects(t, new TypeError(), navigator.locks.acquire('name'));
+}, 'navigator.locks.acquire requires a name and a callback');
 
 promise_test(async t => {
   await promise_rejects(
     t, new TypeError(),
-    navigator.locks.acquire('scope', {mode: 'foo'}, lock => {}));
+    navigator.locks.acquire('name', {mode: 'foo'}, lock => {}));
   await promise_rejects(
     t, new TypeError(),
-    navigator.locks.acquire('scope', {mode: null }, lock => {}));
+    navigator.locks.acquire('name', {mode: null }, lock => {}));
   assert_equals(await navigator.locks.acquire(
-    'scope', {mode: 'exclusive'}, lock => lock.mode), 'exclusive',
+    'name', {mode: 'exclusive'}, lock => lock.mode), 'exclusive',
                 'mode is exclusive');
   assert_equals(await navigator.locks.acquire(
-    'scope', {mode: 'shared'}, lock => lock.mode), 'shared',
+    'name', {mode: 'shared'}, lock => lock.mode), 'shared',
                 'mode is shared');
 }, 'mode must be "shared" or "exclusive"');
 
 promise_test(async t => {
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', undefined));
+    t, new TypeError(), navigator.locks.acquire('name', undefined));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', null));
+    t, new TypeError(), navigator.locks.acquire('name', null));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', 123));
+    t, new TypeError(), navigator.locks.acquire('name', 123));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', 'abc'));
+    t, new TypeError(), navigator.locks.acquire('name', 'abc'));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', []));
+    t, new TypeError(), navigator.locks.acquire('name', []));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', {}));
+    t, new TypeError(), navigator.locks.acquire('name', {}));
   await promise_rejects(
-    t, new TypeError(), navigator.locks.acquire('scope', new Promise(r => {})));
+    t, new TypeError(), navigator.locks.acquire('name', new Promise(r => {})));
 }, 'callback must be a function');
 
 promise_test(async t => {
   let release;
   const promise = new Promise(r => { release = r; });
 
-  let returned = navigator.locks.acquire('scope', lock => { return promise; });
+  let returned = navigator.locks.acquire('name', lock => { return promise; });
 
   const order = [];
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/frames.html b/third_party/WebKit/LayoutTests/http/tests/locks/frames.html
index 2475fa7..5b00448f 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/frames.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/frames.html
@@ -38,22 +38,24 @@
   });
 }
 
+async function postAndConfirm(frame, data) {
+  const response = await postAndWait(frame, data);
+  assert_equals(response.ack, data.op);
+  assert_equals(response.id, data.lock_id);
+  return response;
+}
+
 promise_test(async t => {
   const res = uniqueName(t);
 
   const frame = await iframe('resources/iframe.html');
   t.add_cleanup(() => { frame.remove(); });
 
-  const data = await postAndWait(
-    frame, {op: 'request', lock_id: 1, scope: res, mode: 'shared'});
-
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  await postAndConfirm(
+    frame, {op: 'request', lock_id: 1, name: res, mode: 'shared'});
 
   await navigator.locks.acquire(res, {mode: 'shared'}, async lock => {
-    const data = await postAndWait(frame, {op: 'release', lock_id: 1});
-    assert_equals(data.ack, 'release');
-    assert_equals(data.id, 1);
+    await postAndConfirm(frame, {op: 'release', lock_id: 1});
   });
 
 }, 'Window and Frame - shared mode');
@@ -64,11 +66,9 @@
   const frame = await iframe('resources/iframe.html');
   t.add_cleanup(() => { frame.remove(); });
 
-  const data = await postAndWait(
-    frame, {op: 'request', lock_id: 1, scope: res});
-  // frame has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  // frame acquires the lock.
+  await postAndConfirm(
+    frame, {op: 'request', lock_id: 1, name: res});
 
   // This request should be blocked.
   let lock_granted = false;
@@ -82,11 +82,8 @@
   assert_false(lock_granted);
 
   // Ask the frame to release it.
-  const data2 = await postAndWait(frame, {op: 'release', lock_id: 1});
+  await postAndConfirm(frame, {op: 'release', lock_id: 1});
 
-  // Frame released it.
-  assert_equals(data2.ack, 'release');
-  assert_equals(data2.id, 1);
   await blocked;
   // Now we've got it.
   assert_true(lock_granted);
@@ -97,29 +94,25 @@
 
   const frame1 = await iframe('resources/iframe.html');
   const frame2 = await iframe('resources/iframe.html');
-  const data = await postAndWait(
-    frame1, {op: 'request', lock_id: 1, scope: res});
 
-  // frame1 has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  // frame1 acquires the lock.
+  await postAndConfirm(
+    frame1, {op: 'request', lock_id: 1, name: res});
 
   // frame2's request should be blocked.
   let lock_granted = false;
-  const blocked = postAndWait(
-    frame2, {op: 'request', lock_id: 1, scope: res});
+  const blocked = postAndConfirm(
+    frame2, {op: 'request', lock_id: 1, name: res});
   blocked.then(f => { lock_granted = true; });
 
   // Verify that frame2 can't get it.
-  assert_true((await postAndWait(frame2, {
-    op: 'request', scope: res, lock_id: 2, ifAvailable: true
+  assert_true((await postAndConfirm(frame2, {
+    op: 'request', name: res, lock_id: 2, ifAvailable: true
   })).failed, 'Lock request should have failed');
   assert_false(lock_granted);
 
   // Ask frame1 to release it.
-  const data2 = await postAndWait(frame1, {op: 'release', lock_id: 1});
-  assert_equals(data2.ack, 'release');
-  assert_equals(data2.id, 1);
+  await postAndConfirm(frame1, {op: 'release', lock_id: 1});
 
   await blocked;
   // Now frame2 can get it.
@@ -132,11 +125,10 @@
   const res = uniqueName(t);
 
   const frame = await iframe('resources/iframe.html');
-  const data = await postAndWait(
-    frame, {op: 'request', lock_id: 1, scope: res});
-  // Frame has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+
+  // Frame acquires the lock.
+  await postAndConfirm(
+    frame, {op: 'request', lock_id: 1, name: res});
 
   // This request should be blocked.
   let lock_granted = false;
@@ -162,11 +154,10 @@
   const res = uniqueName(t);
 
   const frame = await iframe('resources/iframe.html');
-  const data = await postAndWait(
-    frame, {op: 'request', lock_id: 1, scope: res});
-  // Frame has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+
+  // Frame acquires the lock.
+  await postAndConfirm(
+    frame, {op: 'request', lock_id: 1, name: res});
 
   // This request should be blocked.
   let lock_granted = false;
@@ -189,14 +180,14 @@
 }, 'Navigated Frame with held lock');
 
 promise_test(async t => {
-  const res1 = uniqueName(t);
-  const res2 = uniqueName(t);
+  const res = uniqueName(t);
 
-  // frame1 requests and holds [r1] - should be granted immediately
-  // frame2 requests [r1, r2] - should be blocked
-  // frame3 requests [r2] - should be blocked
-  // frame2 is navigated
-  // frame3's request should be granted
+  // frame1 requests and holds res - should be granted immediately.
+  // frame2 requests res - should be blocked.
+  // frame3 requests res - should be blocked.
+  // frame2 is navigated.
+  // frame1 releases res.
+  // frame3's request should be granted.
 
   const frame1 = await iframe('resources/iframe.html');
   const frame2 = await iframe('resources/iframe.html');
@@ -205,33 +196,33 @@
   t.add_cleanup(() => { frame2.remove(); });
   t.add_cleanup(() => { frame3.remove(); });
 
-  // frame1 requests and holds [r1] - should be granted immediately.
-  const data = await postAndWait(
-    frame1, {op: 'request', lock_id: 1, scope: res1});
+  // frame1 requests and holds res - should be granted immediately.
+  await postAndConfirm(
+    frame1, {op: 'request', lock_id: 1, name: res});
 
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
-
-  // frame2 requests [r1, r2] - should be blocked.
+  // frame2 requests res - should be blocked.
   // (don't attach listeners as they will keep the frame alive)
   frame2.contentWindow.postMessage(
-    {op: 'request', lock_id: 1, scope: [res1, res2]}, '*');
+    {op: 'request', lock_id: 1, name: res}, '*');
 
-  // frame3 requests [r2] - should be blocked.
+  // frame3 requests res - should be blocked.
   let lock_granted = false;
-  const blocked = postAndWait(
-    frame3, {op: 'request', lock_id: 1, scope: res2});
+  const blocked = postAndConfirm(
+    frame3, {op: 'request', lock_id: 1, name: res});
   blocked.then(f => { lock_granted = true; });
 
   // Verify that frame3 can't get it.
-  assert_true((await postAndWait(frame3, {
-    op: 'request', scope: res2, lock_id: 2, ifAvailable: true
+  assert_true((await postAndConfirm(frame3, {
+    op: 'request', name: res, lock_id: 2, ifAvailable: true
   })).failed, 'Lock request should have failed');
   assert_false(lock_granted);
 
   // Navigate frame2.
   frame2.src = 'about:blank';
 
+  // frame1 releases lock
+  await postAndConfirm(frame1, {op: 'release', lock_id: 1});
+
   // frame3's request should be granted.
   await blocked;
   assert_true(lock_granted);
@@ -239,13 +230,13 @@
 }, 'Navigated Frame with pending request');
 
 promise_test(async t => {
-  const res1 = uniqueName(t);
-  const res2 = uniqueName(t);
+  const res = uniqueName(t);
 
-  // frame1 requests and holds [r1] - should be granted immediately.
-  // frame2 requests [r1, r2] - should be blocked.
-  // frame3 requests [r2] - should be blocked.
-  // frame2 is navigated.
+  // frame1 requests and holds res - should be granted immediately.
+  // frame2 requests res - should be blocked.
+  // frame3 requests res - should be blocked.
+  // frame2 is removed.
+  // frame1 drops lock.
   // frame3's request should be granted.
 
   const frame1 = await iframe('resources/iframe.html');
@@ -254,33 +245,33 @@
   t.add_cleanup(() => { frame1.remove(); });
   t.add_cleanup(() => { frame3.remove(); });
 
-  // frame1 requests and holds [r1] - should be granted immediately.
-  const data = await postAndWait(
-    frame1, {op: 'request', lock_id: 1, scope: res1});
+  // frame1 requests and holds res - should be granted immediately.
+  await postAndConfirm(
+    frame1, {op: 'request', lock_id: 1, name: res});
 
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
-
-  // frame2 requests [r1, r2] - should be blocked.
+  // frame2 requests res - should be blocked.
   // (don't attach listeners as they will keep the frame alive)
   frame2.contentWindow.postMessage(
-    {op: 'request', lock_id: 1, scope: [res1, res2]}, '*');
+    {op: 'request', lock_id: 1, name: res}, '*');
 
-  // frame3 requests [r2] - should be blocked.
+  // frame3 requests res - should be blocked.
   let lock_granted = false;
-  const blocked = postAndWait(
-    frame3, {op: 'request', lock_id: 1, scope: res2});
+  const blocked = postAndConfirm(
+    frame3, {op: 'request', lock_id: 1, name: res});
   blocked.then(f => { lock_granted = true; });
 
   // So frame3 can't get it
-  assert_true((await postAndWait(frame3, {
-    op: 'request', scope: res2, lock_id: 2, ifAvailable: true
+  assert_true((await postAndConfirm(frame3, {
+    op: 'request', name: res, lock_id: 2, ifAvailable: true
   })).failed, 'Lock request should have failed');
   assert_false(lock_granted);
 
   // Remove frame2.
   frame2.remove();
 
+  // frame1 releases lock
+  await postAndConfirm(frame1, {op: 'release', lock_id: 1});
+
   // frame3's request should be granted.
   await blocked;
   assert_true(lock_granted);
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/ifAvailable.html b/third_party/WebKit/LayoutTests/http/tests/locks/ifAvailable.html
index a8951c0e..7ffe457ba2 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/ifAvailable.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/ifAvailable.html
@@ -52,7 +52,7 @@
 promise_test(async t => {
   let callback_called = false;
   await navigator.locks.acquire('resource', async lock => {
-    // Request with a different scope - should be grantable.
+    // Request with a different name - should be grantable.
     await navigator.locks.acquire('different', {ifAvailable: true}, async lock => {
       callback_called = true;
       assert_not_equals(lock, null, 'lock should be granted');
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.html b/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.html
index 9e9cdab..c98fcde 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.html
@@ -28,7 +28,7 @@
   idl_array.add_idls(idls);
 
   let lock;
-  await navigator.locks.acquire('scope', async l => { lock = l; });
+  await navigator.locks.acquire('name', l => { lock = l; });
 
   idl_array.add_objects({
     LockManager: [navigator.locks],
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.idl b/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.idl
index 26c61431..29fbfcf 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.idl
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/interfaces.idl
@@ -1,6 +1,4 @@
 
-typedef (DOMString or sequence<DOMString>) LockScope;
-
 enum LockMode { "shared", "exclusive" };
 
 dictionary LockOptions {
@@ -22,15 +20,15 @@
 
 [Exposed=(Window,Worker), SecureContext]
 interface LockManager {
-  Promise<any> acquire(LockScope scope,
+  Promise<any> acquire(DOMString name,
                        LockRequestCallback callback);
-  Promise<any> acquire(LockScope scope,
+  Promise<any> acquire(DOMString name,
                        LockOptions options,
                        LockRequestCallback callback);
 };
 
 [Exposed=(Window,Worker), SecureContext]
 interface Lock {
-  readonly attribute FrozenArray<DOMString> scope;
+  readonly attribute DOMString name;
   readonly attribute LockMode mode;
 };
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/lock-attributes.html b/third_party/WebKit/LayoutTests/http/tests/locks/lock-attributes.html
index 1adbe2c..39970ea 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/lock-attributes.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/lock-attributes.html
@@ -8,29 +8,17 @@
 'use strict';
 
 promise_test(async t => {
-  await navigator.locks.acquire(['r1', 'r2'], lock => {
-    assert_array_equals(lock.scope, ['r1', 'r2']);
+  await navigator.locks.acquire('resource', lock => {
+    assert_equals(lock.name, 'resource');
     assert_equals(lock.mode, 'exclusive');
   });
 }, 'Lock attributes reflect requested properties (exclusive)');
 
 promise_test(async t => {
-  await navigator.locks.acquire(['r1', 'r2'], {mode: 'shared'}, lock => {
-    assert_array_equals(lock.scope, ['r1', 'r2']);
+  await navigator.locks.acquire('resource', {mode: 'shared'}, lock => {
+    assert_equals(lock.name, 'resource');
     assert_equals(lock.mode, 'shared');
   });
 }, 'Lock attributes reflect requested properties (shared)');
 
-promise_test(async t => {
-  await navigator.locks.acquire(['r2', 'r1'], lock => {
-    assert_array_equals(lock.scope, ['r1', 'r2']);
-  });
-}, 'Lock.scope is in sorted order');
-
-promise_test(async t => {
-  await navigator.locks.acquire(['r1', 'r2', 'r1', 'r2'], lock => {
-    assert_array_equals(lock.scope, ['r1', 'r2']);
-  });
-}, 'Lock.scope has no duplicates');
-
 </script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/mode-exclusive.html b/third_party/WebKit/LayoutTests/http/tests/locks/mode-exclusive.html
index 05e65e9..52507b6 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/mode-exclusive.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/mode-exclusive.html
@@ -12,9 +12,9 @@
   function log_grant(n) { return () => { granted.push(n); }; }
 
   await Promise.all([
-    navigator.locks.acquire(['a', 'b'], log_grant(1)),
-    navigator.locks.acquire(['b', 'c'], log_grant(2)),
-    navigator.locks.acquire(['c'], log_grant(3))
+    navigator.locks.acquire('a', log_grant(1)),
+    navigator.locks.acquire('a', log_grant(2)),
+    navigator.locks.acquire('a', log_grant(3))
   ]);
   assert_array_equals(granted, [1, 2, 3]);
 }, 'Lock requests are granted in order');
@@ -27,14 +27,14 @@
   await navigator.locks.acquire('a', async lock => {
     inner_promise = Promise.all([
       // This will be blocked.
-      navigator.locks.acquire(['a', 'b'], log_grant(1)),
+      navigator.locks.acquire('a', log_grant(1)),
       // But this should be grantable immediately.
-      navigator.locks.acquire(['c', 'd'], log_grant(2))
+      navigator.locks.acquire('b', log_grant(2))
     ]);
   });
 
   await inner_promise;
   assert_array_equals(granted, [2, 1]);
-}, 'Requests with non-overlapping scopes can be granted');
+}, 'Requests for distinct resources can be granted');
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/mode-mixed.html b/third_party/WebKit/LayoutTests/http/tests/locks/mode-mixed.html
index 8327f11..f18dae8 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/mode-mixed.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/mode-mixed.html
@@ -28,7 +28,7 @@
     exclusive_lock = lock;
   });
 
-  // This should be granted immediately (different scope).
+  // This should be granted immediately (different name).
   await navigator.locks.acquire('b', {mode: 'exclusive'}, lock => {
     granted.push('b-exclusive'); });
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/mode-shared.html b/third_party/WebKit/LayoutTests/http/tests/locks/mode-shared.html
index 3a6ff8d..6c1f92c 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/mode-shared.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/mode-shared.html
@@ -24,26 +24,21 @@
 }, 'Lock requests are granted in order');
 
 promise_test(async t => {
-  let ab_acquired = false, a_acquired = false, b_acquired = false;
+  let a_acquired = false, a_acquired_again = false;
 
-  await navigator.locks.acquire(['a', 'b'], {mode: 'shared'}, async lock => {
-    ab_acquired = true;
+  await navigator.locks.acquire('a', {mode: 'shared'}, async lock => {
+    a_acquired = true;
 
-    // Since lock over [a, b] is held, these requests would be blocked if the
-    // locks were not all 'shared', causing this test to time out.
+    // Since lock is held, this request would be blocked if the
+    // lock was not 'shared', causing this test to time out.
 
     await navigator.locks.acquire('a', {mode: 'shared'}, lock => {
-      a_acquired = true;
-    });
-
-    await navigator.locks.acquire('b', {mode: 'shared'}, lock => {
-      b_acquired = true;
+      a_acquired_again = true;
     });
   });
 
-  assert_true(ab_acquired, 'requested lock was acquired');
-  assert_true(a_acquired, 'first lock with overlapping scope acquired');
-  assert_true(a_acquired, 'second lock with overlapping scope acquired');
+  assert_true(a_acquired, 'first lock acquired');
+  assert_true(a_acquired_again, 'second lock acquired');
 }, 'Shared locks are not exclusive');
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/opaque-origin.html b/third_party/WebKit/LayoutTests/http/tests/locks/opaque-origin.html
index abcc12eb..724dd0f2 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/opaque-origin.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/opaque-origin.html
@@ -34,7 +34,7 @@
   "use strict";
   window.onmessage = async () => {
     try {
-      await navigator.locks.acquire('scope', lock => {});
+      await navigator.locks.acquire('name', lock => {});
       window.parent.postMessage({result: "no exception"}, "*");
     } catch (ex) {
       window.parent.postMessage({result: ex.name}, "*");
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/resource-names.html b/third_party/WebKit/LayoutTests/http/tests/locks/resource-names.html
index 46830b9..0e96b4cf 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/resource-names.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/resource-names.html
@@ -23,7 +23,7 @@
 ].forEach(string => {
   promise_test(async t => {
     await navigator.locks.acquire(string, lock => {
-      assert_array_equals(lock.scope, [string],
+      assert_equals(lock.name, string,
                           'Requested name matches granted name');
     });
   }, 'DOMString: ' + code_points(string));
@@ -32,13 +32,13 @@
 promise_test(async t => {
   // '\uD800' treated as a USVString would become '\uFFFD'.
   await navigator.locks.acquire('\uD800', async lock => {
-    assert_array_equals(lock.scope, ['\uD800']);
+    assert_equals(lock.name, '\uD800');
 
-    // |lock| is held for the duration of this scope. It
+    // |lock| is held for the duration of this name. It
     // Should not block acquiring |lock2| with a distinct
     // DOMString.
     await navigator.locks.acquire('\uFFFD', lock2 => {
-      assert_array_equals(lock2.scope, ['\uFFFD']);
+      assert_equals(lock2.name, '\uFFFD');
     });
 
     // If we did not time out, this passed.
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/resources/iframe.html b/third_party/WebKit/LayoutTests/http/tests/locks/resources/iframe.html
index eddea2de..081823bb 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/resources/iframe.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/resources/iframe.html
@@ -14,7 +14,7 @@
   switch (e.data.op) {
     case 'request':
       navigator.locks.acquire(
-        e.data.scope, {
+        e.data.name, {
           mode: e.data.mode || 'exclusive',
           ifAvailable: e.data.ifAvailable || false
         }, lock => {
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/resources/interfaces-worker.js b/third_party/WebKit/LayoutTests/http/tests/locks/resources/interfaces-worker.js
index 2c9704c..186d971 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/resources/interfaces-worker.js
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/resources/interfaces-worker.js
@@ -16,7 +16,7 @@
   idl_array.add_idls(idls);
 
   let lock;
-  await navigator.locks.acquire('scope', async l => { lock = l; });
+  await navigator.locks.acquire('name', l => { lock = l; });
 
   idl_array.add_objects({
     LockManager: [navigator.locks],
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/resources/worker.js b/third_party/WebKit/LayoutTests/http/tests/locks/resources/worker.js
index be10504..27bf9a7 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/resources/worker.js
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/resources/worker.js
@@ -12,7 +12,7 @@
   switch (e.data.op) {
   case 'request':
     navigator.locks.acquire(
-      e.data.scope, {
+      e.data.name, {
         mode: e.data.mode || 'exclusive',
         ifAvailable: e.data.ifAvailable || false
       }, lock => {
diff --git a/third_party/WebKit/LayoutTests/http/tests/locks/workers.html b/third_party/WebKit/LayoutTests/http/tests/locks/workers.html
index 4c82c0a..2c4f9de 100644
--- a/third_party/WebKit/LayoutTests/http/tests/locks/workers.html
+++ b/third_party/WebKit/LayoutTests/http/tests/locks/workers.html
@@ -21,21 +21,24 @@
   });
 }
 
+async function postAndConfirm(frame, data) {
+  const response = await postAndWait(frame, data);
+  assert_equals(response.ack, data.op);
+  assert_equals(response.id, data.lock_id);
+  return response;
+}
+
 promise_test(async t => {
   const worker = new Worker('resources/worker.js');
   t.add_cleanup(() => { worker.terminate(); });
 
   const res = 'shared resource 1';
 
-  const data = await postAndWait(
-    worker, {op: 'request', lock_id: 1, scope: res, mode: 'shared'})
+  await postAndConfirm(
+    worker, {op: 'request', lock_id: 1, name: res, mode: 'shared'})
 
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
   await navigator.locks.acquire(res, {mode: 'shared'}, async lock => {
-    const data = await postAndWait(worker, {op: 'release', lock_id: 1});
-    assert_equals(data.ack, 'release');
-    assert_equals(data.id, 1);
+    await postAndConfirm(worker, {op: 'release', lock_id: 1});
   });
 
 }, 'Window and Worker - shared mode');
@@ -46,12 +49,8 @@
 
   const res = 'exclusive resource 1';
 
-  const data = await postAndWait(
-    worker, {op: 'request', lock_id: 1, scope: res})
-
-  // worker has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  // worker acquires the lock.
+  await postAndConfirm(worker, {op: 'request', lock_id: 1, name: res})
 
   // This request should be blocked.
   let lock_granted = false;
@@ -66,11 +65,7 @@
   assert_false(lock_granted);
 
   // Ask the worker to release it.
-  const data2 = await postAndWait(worker, {op: 'release', lock_id: 1});
-
-  // worker released it.
-  assert_equals(data2.ack, 'release');
-  assert_equals(data2.id, 1);
+  await postAndConfirm(worker, {op: 'release', lock_id: 1});
 
   // Now we've got it.
   const lock2 = await blocked;
@@ -85,31 +80,24 @@
 
   const res = 'exclusive resource 2';
 
-  const data = await postAndWait(
-    worker1, {op: 'request', lock_id: 1, scope: res})
-
-  // worker1 has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  // worker1 acquires the lock.
+  await postAndConfirm(
+    worker1, {op: 'request', lock_id: 1, name: res})
 
   // This request should be blocked.
   let lock_granted = false;
-  const blocked = postAndWait(
-    worker2, {op: 'request', lock_id: 1, scope: res});
+  const blocked = postAndConfirm(
+    worker2, {op: 'request', lock_id: 1, name: res});
   blocked.then(f => { lock_granted = true; });
 
   // Verify worker2 can't get it.
-  assert_true((await postAndWait(worker2, {
-    op: 'request', scope: res, lock_id: 2, ifAvailable: true
+  assert_true((await postAndConfirm(worker2, {
+    op: 'request', name: res, lock_id: 2, ifAvailable: true
   })).failed, 'Lock request should have failed');
   assert_false(lock_granted);
 
   // Ask worker1 to release it.
-  const data2 = await postAndWait(worker1, {op: 'release', lock_id: 1});
-
-  // worker1 released it.
-  assert_equals(data2.ack, 'release');
-  assert_equals(data2.id, 1);
+  await postAndConfirm(worker1, {op: 'release', lock_id: 1});
 
   // Now worker2 can get it.
   const lock = await blocked;
@@ -122,12 +110,9 @@
 
   const res = 'exclusive resource 3';
 
-  const data = await postAndWait(
-    worker, {op: 'request', lock_id: 1, scope: res})
-
-  // Worker has the lock.
-  assert_equals(data.ack, 'request');
-  assert_equals(data.id, 1);
+  // Worker acquires the lock.
+  await postAndConfirm(
+    worker, {op: 'request', lock_id: 1, name: res})
 
   // This request should be blocked.
   let lock_granted = false;
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 1abbec73..fac2702 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -706,7 +706,7 @@
 interface Lock
     attribute @@toStringTag
     getter mode
-    getter scope
+    getter name
     method constructor
 interface LockManager
     attribute @@toStringTag
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
index 1fd50f1..18d8446 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
@@ -1,4 +1,33 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test driver
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface object
+PASS SecurityPolicyViolationEvent interface object length
+PASS SecurityPolicyViolationEvent interface object name
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SecurityPolicyViolationEvent interface: attribute documentURI
+PASS SecurityPolicyViolationEvent interface: attribute referrer
+PASS SecurityPolicyViolationEvent interface: attribute blockedURI
+PASS SecurityPolicyViolationEvent interface: attribute violatedDirective
+PASS SecurityPolicyViolationEvent interface: attribute effectiveDirective
+PASS SecurityPolicyViolationEvent interface: attribute originalPolicy
+PASS SecurityPolicyViolationEvent interface: attribute disposition
+PASS SecurityPolicyViolationEvent interface: attribute sourceFile
+PASS SecurityPolicyViolationEvent interface: attribute statusCode
+PASS SecurityPolicyViolationEvent interface: attribute lineNumber
+PASS SecurityPolicyViolationEvent interface: attribute columnNumber
+PASS SecurityPolicyViolationEvent must be primary interface of event_to_test
+PASS Stringification of event_to_test
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "documentURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "referrer" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "blockedURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "violatedDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "effectiveDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "originalPolicy" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "disposition" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "sourceFile" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "statusCode" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "lineNumber" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "columnNumber" with the proper type
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
new file mode 100644
index 0000000..18d8446
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
@@ -0,0 +1,33 @@
+This is a testharness.js-based test.
+PASS Test driver
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface object
+PASS SecurityPolicyViolationEvent interface object length
+PASS SecurityPolicyViolationEvent interface object name
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SecurityPolicyViolationEvent interface: attribute documentURI
+PASS SecurityPolicyViolationEvent interface: attribute referrer
+PASS SecurityPolicyViolationEvent interface: attribute blockedURI
+PASS SecurityPolicyViolationEvent interface: attribute violatedDirective
+PASS SecurityPolicyViolationEvent interface: attribute effectiveDirective
+PASS SecurityPolicyViolationEvent interface: attribute originalPolicy
+PASS SecurityPolicyViolationEvent interface: attribute disposition
+PASS SecurityPolicyViolationEvent interface: attribute sourceFile
+PASS SecurityPolicyViolationEvent interface: attribute statusCode
+PASS SecurityPolicyViolationEvent interface: attribute lineNumber
+PASS SecurityPolicyViolationEvent interface: attribute columnNumber
+PASS SecurityPolicyViolationEvent must be primary interface of event_to_test
+PASS Stringification of event_to_test
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "documentURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "referrer" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "blockedURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "violatedDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "effectiveDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "originalPolicy" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "disposition" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "sourceFile" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "statusCode" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "lineNumber" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "columnNumber" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
new file mode 100644
index 0000000..18d8446
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
@@ -0,0 +1,33 @@
+This is a testharness.js-based test.
+PASS Test driver
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface object
+PASS SecurityPolicyViolationEvent interface object length
+PASS SecurityPolicyViolationEvent interface object name
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SecurityPolicyViolationEvent interface: attribute documentURI
+PASS SecurityPolicyViolationEvent interface: attribute referrer
+PASS SecurityPolicyViolationEvent interface: attribute blockedURI
+PASS SecurityPolicyViolationEvent interface: attribute violatedDirective
+PASS SecurityPolicyViolationEvent interface: attribute effectiveDirective
+PASS SecurityPolicyViolationEvent interface: attribute originalPolicy
+PASS SecurityPolicyViolationEvent interface: attribute disposition
+PASS SecurityPolicyViolationEvent interface: attribute sourceFile
+PASS SecurityPolicyViolationEvent interface: attribute statusCode
+PASS SecurityPolicyViolationEvent interface: attribute lineNumber
+PASS SecurityPolicyViolationEvent interface: attribute columnNumber
+PASS SecurityPolicyViolationEvent must be primary interface of event_to_test
+PASS Stringification of event_to_test
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "documentURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "referrer" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "blockedURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "violatedDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "effectiveDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "originalPolicy" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "disposition" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "sourceFile" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "statusCode" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "lineNumber" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "columnNumber" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
new file mode 100644
index 0000000..18d8446
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
@@ -0,0 +1,33 @@
+This is a testharness.js-based test.
+PASS Test driver
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface object
+PASS SecurityPolicyViolationEvent interface object length
+PASS SecurityPolicyViolationEvent interface object name
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SecurityPolicyViolationEvent interface: attribute documentURI
+PASS SecurityPolicyViolationEvent interface: attribute referrer
+PASS SecurityPolicyViolationEvent interface: attribute blockedURI
+PASS SecurityPolicyViolationEvent interface: attribute violatedDirective
+PASS SecurityPolicyViolationEvent interface: attribute effectiveDirective
+PASS SecurityPolicyViolationEvent interface: attribute originalPolicy
+PASS SecurityPolicyViolationEvent interface: attribute disposition
+PASS SecurityPolicyViolationEvent interface: attribute sourceFile
+PASS SecurityPolicyViolationEvent interface: attribute statusCode
+PASS SecurityPolicyViolationEvent interface: attribute lineNumber
+PASS SecurityPolicyViolationEvent interface: attribute columnNumber
+PASS SecurityPolicyViolationEvent must be primary interface of event_to_test
+PASS Stringification of event_to_test
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "documentURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "referrer" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "blockedURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "violatedDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "effectiveDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "originalPolicy" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "disposition" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "sourceFile" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "statusCode" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "lineNumber" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "columnNumber" with the proper type
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
index 1fd50f1..18d8446 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/reporting/external/wpt/content-security-policy/reporting/securitypolicyviolation-idl-expected.txt
@@ -1,4 +1,33 @@
 This is a testharness.js-based test.
-FAIL Test driver promise_test: Unhandled rejection with value: "NonElementParentNode: interface mixin not yet supported"
+PASS Test driver
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface object
+PASS SecurityPolicyViolationEvent interface object length
+PASS SecurityPolicyViolationEvent interface object name
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object
+PASS SecurityPolicyViolationEvent interface: existence and properties of interface prototype object's "constructor" property
+PASS SecurityPolicyViolationEvent interface: attribute documentURI
+PASS SecurityPolicyViolationEvent interface: attribute referrer
+PASS SecurityPolicyViolationEvent interface: attribute blockedURI
+PASS SecurityPolicyViolationEvent interface: attribute violatedDirective
+PASS SecurityPolicyViolationEvent interface: attribute effectiveDirective
+PASS SecurityPolicyViolationEvent interface: attribute originalPolicy
+PASS SecurityPolicyViolationEvent interface: attribute disposition
+PASS SecurityPolicyViolationEvent interface: attribute sourceFile
+PASS SecurityPolicyViolationEvent interface: attribute statusCode
+PASS SecurityPolicyViolationEvent interface: attribute lineNumber
+PASS SecurityPolicyViolationEvent interface: attribute columnNumber
+PASS SecurityPolicyViolationEvent must be primary interface of event_to_test
+PASS Stringification of event_to_test
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "documentURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "referrer" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "blockedURI" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "violatedDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "effectiveDirective" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "originalPolicy" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "disposition" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "sourceFile" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "statusCode" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "lineNumber" with the proper type
+PASS SecurityPolicyViolationEvent interface: event_to_test must inherit property "columnNumber" with the proper type
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index acf72d7..fe87c02 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -645,7 +645,7 @@
 [Worker] interface Lock
 [Worker]     attribute @@toStringTag
 [Worker]     getter mode
-[Worker]     getter scope
+[Worker]     getter name
 [Worker]     method constructor
 [Worker] interface LockManager
 [Worker]     attribute @@toStringTag
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index 8ef99c3a..9c5cd1d 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -3969,7 +3969,7 @@
 interface Lock
     attribute @@toStringTag
     getter mode
-    getter scope
+    getter name
     method constructor
 interface LockManager
     attribute @@toStringTag
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
index 878e3d5..db17871 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -640,7 +640,7 @@
 [Worker] interface Lock
 [Worker]     attribute @@toStringTag
 [Worker]     getter mode
-[Worker]     getter scope
+[Worker]     getter name
 [Worker]     method constructor
 [Worker] interface LockManager
 [Worker]     attribute @@toStringTag
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageChannelCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageChannelCustom.cpp
index 1c8603bd0..84491ac 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageChannelCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageChannelCustom.cpp
@@ -33,7 +33,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "bindings/core/v8/V8BindingForCore.h"
 #include "bindings/core/v8/V8MessagePort.h"
-#include "core/dom/MessageChannel.h"
+#include "core/messaging/MessageChannel.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "platform/bindings/V8PrivateProperty.h"
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
index 0cbabbd..3dd087ee 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -40,7 +40,6 @@
 #include "bindings/core/v8/V8EventListener.h"
 #include "bindings/core/v8/V8HTMLCollection.h"
 #include "bindings/core/v8/V8Node.h"
-#include "core/dom/MessagePort.h"
 #include "core/frame/Deprecation.h"
 #include "core/frame/FrameOwner.h"
 #include "core/frame/LocalDOMWindow.h"
@@ -57,6 +56,7 @@
 #include "core/inspector/MainThreadDebugger.h"
 #include "core/loader/FrameLoadRequest.h"
 #include "core/loader/FrameLoader.h"
+#include "core/messaging/MessagePort.h"
 #include "core/typed_arrays/DOMArrayBuffer.h"
 #include "platform/LayoutTestSupport.h"
 #include "platform/bindings/V8PrivateProperty.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
index cfa4c3f..b7ef9aaa 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
@@ -45,8 +45,8 @@
 #include "bindings/core/v8/serialization/Transferables.h"
 #include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/dom/ExceptionCode.h"
-#include "core/dom/MessagePort.h"
 #include "core/imagebitmap/ImageBitmap.h"
+#include "core/messaging/MessagePort.h"
 #include "core/typed_arrays/DOMArrayBuffer.h"
 #include "core/typed_arrays/DOMSharedArrayBuffer.h"
 #include "platform/SharedBuffer.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFuzzer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFuzzer.cpp
index 292af2d..37a4575 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFuzzer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFuzzer.cpp
@@ -9,8 +9,8 @@
 #include <cstdint>
 
 #include "bindings/core/v8/V8BindingForCore.h"
-#include "core/dom/MessagePort.h"
 #include "core/frame/Settings.h"
+#include "core/messaging/MessagePort.h"
 #include "core/testing/DummyPageHolder.h"
 #include "platform/bindings/ScriptState.h"
 #include "platform/bindings/V8PerIsolateData.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
index 8d95a51a..cffb724 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
@@ -7,7 +7,6 @@
 #include "bindings/core/v8/ToV8ForCore.h"
 #include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/dom/MessagePort.h"
 #include "core/fileapi/Blob.h"
 #include "core/fileapi/File.h"
 #include "core/fileapi/FileList.h"
@@ -21,6 +20,7 @@
 #include "core/geometry/DOMRectReadOnly.h"
 #include "core/html/ImageData.h"
 #include "core/imagebitmap/ImageBitmap.h"
+#include "core/messaging/MessagePort.h"
 #include "core/offscreencanvas/OffscreenCanvas.h"
 #include "core/typed_arrays/DOMArrayBuffer.h"
 #include "core/typed_arrays/DOMSharedArrayBuffer.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
index cd7ac78..51817eb 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
@@ -28,7 +28,6 @@
 #include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "bindings/core/v8/serialization/V8ScriptValueDeserializer.h"
 #include "build/build_config.h"
-#include "core/dom/MessagePort.h"
 #include "core/fileapi/Blob.h"
 #include "core/fileapi/File.h"
 #include "core/fileapi/FileList.h"
@@ -41,6 +40,7 @@
 #include "core/geometry/DOMRect.h"
 #include "core/geometry/DOMRectReadOnly.h"
 #include "core/html/ImageData.h"
+#include "core/messaging/MessagePort.h"
 #include "core/offscreencanvas/OffscreenCanvas.h"
 #include "platform/graphics/StaticBitmapImage.h"
 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn
index 58022c99..e11a270 100644
--- a/third_party/WebKit/Source/core/BUILD.gn
+++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -201,6 +201,7 @@
     "//third_party/WebKit/Source/core/layout/svg:svg_layout",
     "//third_party/WebKit/Source/core/leak_detector",
     "//third_party/WebKit/Source/core/loader",
+    "//third_party/WebKit/Source/core/messaging",
     "//third_party/WebKit/Source/core/mojo",
     "//third_party/WebKit/Source/core/offscreencanvas",
     "//third_party/WebKit/Source/core/origin_trials",
diff --git a/third_party/WebKit/Source/core/core_idl_files.gni b/third_party/WebKit/Source/core/core_idl_files.gni
index f15edc5..236138d 100644
--- a/third_party/WebKit/Source/core/core_idl_files.gni
+++ b/third_party/WebKit/Source/core/core_idl_files.gni
@@ -115,8 +115,6 @@
                     "dom/Element.idl",
                     "dom/IdleDeadline.idl",
                     "dom/Iterator.idl",
-                    "dom/MessageChannel.idl",
-                    "dom/MessagePort.idl",
                     "dom/MutationObserver.idl",
                     "dom/MutationRecord.idl",
                     "dom/NamedNodeMap.idl",
@@ -288,6 +286,8 @@
                     "intersection_observer/IntersectionObserver.idl",
                     "intersection_observer/IntersectionObserverEntry.idl",
                     "loader/appcache/ApplicationCache.idl",
+                    "messaging/MessageChannel.idl",
+                    "messaging/MessagePort.idl",
                     "mojo/Mojo.idl",
                     "mojo/MojoHandle.idl",
                     "mojo/MojoWatcher.idl",
diff --git a/third_party/WebKit/Source/core/dom/BUILD.gn b/third_party/WebKit/Source/core/dom/BUILD.gn
index 3514fe4..5eb1337 100644
--- a/third_party/WebKit/Source/core/dom/BUILD.gn
+++ b/third_party/WebKit/Source/core/dom/BUILD.gn
@@ -22,14 +22,6 @@
     "Attr.h",
     "Attribute.h",
     "AttributeCollection.h",
-    "BlinkCloneableMessage.cpp",
-    "BlinkCloneableMessage.h",
-    "BlinkCloneableMessageStructTraits.cpp",
-    "BlinkCloneableMessageStructTraits.h",
-    "BlinkTransferableMessage.cpp",
-    "BlinkTransferableMessage.h",
-    "BlinkTransferableMessageStructTraits.cpp",
-    "BlinkTransferableMessageStructTraits.h",
     "CDATASection.cpp",
     "CDATASection.h",
     "CharacterData.cpp",
@@ -161,10 +153,6 @@
     "LiveNodeListBase.h",
     "LiveNodeListRegistry.cpp",
     "LiveNodeListRegistry.h",
-    "MessageChannel.cpp",
-    "MessageChannel.h",
-    "MessagePort.cpp",
-    "MessagePort.h",
     "Modulator.cpp",
     "Modulator.h",
     "ModulatorImplBase.cpp",
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
index b962531e1..b363491 100644
--- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
@@ -1564,6 +1564,7 @@
       editing_state);
   if (editing_state->IsAborted())
     return;
+  ABORT_EDITING_COMMAND_IF(!EndingSelection().IsValidFor(GetDocument()));
 
   GetDocument().UpdateStyleAndLayoutIgnorePendingStylesheets();
 
diff --git a/third_party/WebKit/Source/core/editing/commands/TypingCommandTest.cpp b/third_party/WebKit/Source/core/editing/commands/TypingCommandTest.cpp
index 33c06f1b..9e4249c 100644
--- a/third_party/WebKit/Source/core/editing/commands/TypingCommandTest.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/TypingCommandTest.cpp
@@ -68,4 +68,29 @@
             GetSelectionTextFromBody(Selection().GetSelectionInDOMTree()));
 }
 
+// crbug.com/794397
+TEST_F(TypingCommandTest, ForwardDeleteInvalidatesSelection) {
+  GetDocument().setDesignMode("on");
+  Selection().SetSelection(SetSelectionTextToBody(
+      "<blockquote>^"
+      "<q>"
+      "<table contenteditable=\"false\"><colgroup width=\"-1\">\n</table>|"
+      "</q>"
+      "</blockquote>"
+      "<q>\n<svg></svg></q>"));
+
+  EditingState editing_state;
+  TypingCommand::ForwardDeleteKeyPressed(GetDocument(), &editing_state);
+
+  EXPECT_EQ(
+      "<blockquote>|</blockquote>"
+      "<q>"
+      "<table contenteditable=\"false\">"
+      "<colgroup width=\"-1\"></colgroup>"
+      "</table>\n"
+      "<svg></svg>"
+      "</q>",
+      GetSelectionTextFromBody(Selection().GetSelectionInDOMTree()));
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.h b/third_party/WebKit/Source/core/events/MessageEvent.h
index f2f32b7..7c2a0bf 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.h
+++ b/third_party/WebKit/Source/core/events/MessageEvent.h
@@ -33,11 +33,11 @@
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
 #include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
 #include "core/dom/events/Event.h"
 #include "core/dom/events/EventTarget.h"
 #include "core/events/MessageEventInit.h"
 #include "core/fileapi/Blob.h"
+#include "core/messaging/MessagePort.h"
 #include "core/typed_arrays/DOMArrayBuffer.h"
 #include "platform/wtf/Compiler.h"
 
diff --git a/third_party/WebKit/Source/core/exported/WebDOMMessageEvent.cpp b/third_party/WebKit/Source/core/exported/WebDOMMessageEvent.cpp
index 698930b..891d15c1 100644
--- a/third_party/WebKit/Source/core/exported/WebDOMMessageEvent.cpp
+++ b/third_party/WebKit/Source/core/exported/WebDOMMessageEvent.cpp
@@ -32,9 +32,9 @@
 
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
 #include "core/dom/Document.h"
-#include "core/dom/MessagePort.h"
 #include "core/events/MessageEvent.h"
 #include "core/frame/LocalDOMWindow.h"
+#include "core/messaging/MessagePort.h"
 #include "public/platform/WebString.h"
 #include "public/web/WebDocument.h"
 #include "public/web/WebFrame.h"
diff --git a/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.cpp
index eb0b849..542c7a7 100644
--- a/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.cpp
+++ b/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.cpp
@@ -422,10 +422,6 @@
   DestroySession(session_id);
 }
 
-void WebDevToolsAgentImpl::ContinueProgram() {
-  ClientMessageLoopAdapter::ContinueProgram();
-}
-
 void WebDevToolsAgentImpl::DidCommitLoadForLocalFrame(LocalFrame* frame) {
   resource_container_->DidCommitLoadForLocalFrame(frame);
   resource_content_loader_->DidCommitLoadForLocalFrame(frame);
@@ -604,6 +600,14 @@
   return false;
 }
 
+void WebDevToolsAgentImpl::DetachAllSessionsForTesting() {
+  Vector<int> session_ids;
+  for (auto& it : sessions_)
+    session_ids.push_back(it.key);
+  for (int session_id : session_ids)
+    DestroySession(session_id);
+}
+
 void WebDevToolsAgentImpl::FlushProtocolNotifications() {
   for (auto& it : sessions_)
     it.value->flushProtocolNotifications();
diff --git a/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.h b/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.h
index 691062ac..f7b5353 100644
--- a/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.h
+++ b/third_party/WebKit/Source/core/exported/WebDevToolsAgentImpl.h
@@ -85,13 +85,13 @@
   bool ScreencastEnabled();
   void LayerTreeViewChanged(WebLayerTreeView*);
   void RootLayerCleared();
-  bool CacheDisabled() override;
+  bool CacheDisabled();
+  void DetachAllSessionsForTesting();
 
   // WebDevToolsAgent implementation.
   void Attach(int session_id) override;
   void Reattach(int session_id, const WebString& saved_state) override;
   void Detach(int session_id) override;
-  void ContinueProgram() override;
   void DispatchOnInspectorBackend(int session_id,
                                   int call_id,
                                   const WebString& method,
diff --git a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
index 6fe1f827..f82821b 100644
--- a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
@@ -104,7 +104,6 @@
 #include "build/build_config.h"
 #include "core/dom/Document.h"
 #include "core/dom/IconURL.h"
-#include "core/dom/MessagePort.h"
 #include "core/dom/Node.h"
 #include "core/dom/NodeTraversal.h"
 #include "core/dom/ShadowRoot.h"
@@ -172,6 +171,7 @@
 #include "core/loader/HistoryItem.h"
 #include "core/loader/MixedContentChecker.h"
 #include "core/loader/NavigationScheduler.h"
+#include "core/messaging/MessagePort.h"
 #include "core/page/ContextMenuController.h"
 #include "core/page/FocusController.h"
 #include "core/page/FrameTree.h"
@@ -1580,6 +1580,11 @@
              : WebRect();
 }
 
+void WebLocalFrameImpl::DetachAllDevToolsSessionsForTesting() {
+  if (dev_tools_agent_)
+    dev_tools_agent_->DetachAllSessionsForTesting();
+}
+
 WebString WebLocalFrameImpl::GetLayerTreeAsTextForTesting(
     bool show_debug_info) const {
   if (!GetFrame())
diff --git a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.h b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.h
index 14e57cb..604aa48 100644
--- a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.h
+++ b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.h
@@ -236,6 +236,7 @@
       const WebDOMEvent&) override;
 
   WebRect GetSelectionBoundsRectForTesting() const override;
+  void DetachAllDevToolsSessionsForTesting() override;
 
   WebString GetLayerTreeAsTextForTesting(
       bool show_debug_info = false) const override;
diff --git a/third_party/WebKit/Source/core/messaging/BUILD.gn b/third_party/WebKit/Source/core/messaging/BUILD.gn
new file mode 100644
index 0000000..8ee188a
--- /dev/null
+++ b/third_party/WebKit/Source/core/messaging/BUILD.gn
@@ -0,0 +1,26 @@
+# Copyright 2016 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("//third_party/WebKit/Source/core/core.gni")
+
+blink_core_sources("messaging") {
+  sources = [
+    "BlinkCloneableMessage.cpp",
+    "BlinkCloneableMessage.h",
+    "BlinkCloneableMessageStructTraits.cpp",
+    "BlinkCloneableMessageStructTraits.h",
+    "BlinkTransferableMessage.cpp",
+    "BlinkTransferableMessage.h",
+    "BlinkTransferableMessageStructTraits.cpp",
+    "BlinkTransferableMessageStructTraits.h",
+    "MessageChannel.cpp",
+    "MessageChannel.h",
+    "MessagePort.cpp",
+    "MessagePort.h",
+  ]
+
+  public_deps = [
+    "//third_party/WebKit/common:mojo_bindings_blink",
+  ]
+}
diff --git a/third_party/WebKit/Source/core/dom/BlinkCloneableMessage.cpp b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.cpp
similarity index 90%
rename from third_party/WebKit/Source/core/dom/BlinkCloneableMessage.cpp
rename to third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.cpp
index 8f3b505..7845a3d 100644
--- a/third_party/WebKit/Source/core/dom/BlinkCloneableMessage.cpp
+++ b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/dom/BlinkCloneableMessage.h"
+#include "core/messaging/BlinkCloneableMessage.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/BlinkCloneableMessage.h b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.h
similarity index 100%
rename from third_party/WebKit/Source/core/dom/BlinkCloneableMessage.h
rename to third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.h
diff --git a/third_party/WebKit/Source/core/dom/BlinkCloneableMessage.typemap b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.typemap
similarity index 70%
rename from third_party/WebKit/Source/core/dom/BlinkCloneableMessage.typemap
rename to third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.typemap
index eee412b..b77df9d 100644
--- a/third_party/WebKit/Source/core/dom/BlinkCloneableMessage.typemap
+++ b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.typemap
@@ -4,8 +4,8 @@
 
 mojom = "//third_party/WebKit/common/message_port/message_port.mojom"
 public_headers =
-    [ "//third_party/WebKit/Source/core/dom/BlinkCloneableMessage.h" ]
-traits_headers = [ "//third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.h" ]
+    [ "//third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.h" ]
+traits_headers = [ "//third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.h" ]
 
 deps = [
   "//mojo/public/cpp/bindings",
diff --git a/third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.cpp b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.cpp
similarity index 96%
rename from third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.cpp
rename to third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.cpp
index 1b14f95f..cc499fbd 100644
--- a/third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.cpp
+++ b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/dom/BlinkCloneableMessageStructTraits.h"
+#include "core/messaging/BlinkCloneableMessageStructTraits.h"
 
 #include "platform/blob/BlobData.h"
 #include "platform/runtime_enabled_features.h"
diff --git a/third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.h b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.h
similarity index 95%
rename from third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.h
rename to third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.h
index b53046e..1a3b6ff 100644
--- a/third_party/WebKit/Source/core/dom/BlinkCloneableMessageStructTraits.h
+++ b/third_party/WebKit/Source/core/messaging/BlinkCloneableMessageStructTraits.h
@@ -6,7 +6,7 @@
 #define BlinkCloneableMessageStructTraits_h
 
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
-#include "core/dom/BlinkCloneableMessage.h"
+#include "core/messaging/BlinkCloneableMessage.h"
 #include "mojo/public/cpp/bindings/array_traits_wtf_vector.h"
 #include "mojo/public/cpp/bindings/string_traits_wtf.h"
 #include "third_party/WebKit/common/message_port/message_port.mojom-blink.h"
diff --git a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.cpp b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.cpp
similarity index 90%
rename from third_party/WebKit/Source/core/dom/BlinkTransferableMessage.cpp
rename to third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.cpp
index 1c310f14..bf611f2a 100644
--- a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.cpp
+++ b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/dom/BlinkTransferableMessage.h"
+#include "core/messaging/BlinkTransferableMessage.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.h b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.h
similarity index 95%
rename from third_party/WebKit/Source/core/dom/BlinkTransferableMessage.h
rename to third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.h
index a00c881..abded314 100644
--- a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.h
+++ b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
 #include "core/CoreExport.h"
-#include "core/dom/BlinkCloneableMessage.h"
+#include "core/messaging/BlinkCloneableMessage.h"
 #include "third_party/WebKit/common/message_port/message_port_channel.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.typemap b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.typemap
similarity index 70%
rename from third_party/WebKit/Source/core/dom/BlinkTransferableMessage.typemap
rename to third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.typemap
index 96b0033b..334763ffb 100644
--- a/third_party/WebKit/Source/core/dom/BlinkTransferableMessage.typemap
+++ b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.typemap
@@ -4,8 +4,8 @@
 
 mojom = "//third_party/WebKit/common/message_port/message_port.mojom"
 public_headers =
-    [ "//third_party/WebKit/Source/core/dom/BlinkTransferableMessage.h" ]
-traits_headers = [ "//third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.h" ]
+    [ "//third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.h" ]
+traits_headers = [ "//third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.h" ]
 
 deps = [
   "//mojo/public/cpp/bindings",
diff --git a/third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.cpp b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.cpp
similarity index 92%
rename from third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.cpp
rename to third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.cpp
index 4e1e62a7..41e60d4 100644
--- a/third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.cpp
+++ b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/dom/BlinkTransferableMessageStructTraits.h"
+#include "core/messaging/BlinkTransferableMessageStructTraits.h"
 
 namespace mojo {
 
diff --git a/third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.h b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.h
similarity index 91%
rename from third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.h
rename to third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.h
index 3a995d4..780592d 100644
--- a/third_party/WebKit/Source/core/dom/BlinkTransferableMessageStructTraits.h
+++ b/third_party/WebKit/Source/core/messaging/BlinkTransferableMessageStructTraits.h
@@ -6,8 +6,8 @@
 #define BlinkTransferableMessageStructTraits_h
 
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
-#include "core/dom/BlinkCloneableMessageStructTraits.h"
-#include "core/dom/BlinkTransferableMessage.h"
+#include "core/messaging/BlinkCloneableMessageStructTraits.h"
+#include "core/messaging/BlinkTransferableMessage.h"
 #include "mojo/public/cpp/bindings/array_traits_wtf_vector.h"
 #include "third_party/WebKit/common/message_port/message_port.mojom-blink.h"
 #include "third_party/WebKit/common/message_port/message_port_channel.h"
diff --git a/third_party/WebKit/Source/core/dom/MessageChannel.cpp b/third_party/WebKit/Source/core/messaging/MessageChannel.cpp
similarity index 95%
rename from third_party/WebKit/Source/core/dom/MessageChannel.cpp
rename to third_party/WebKit/Source/core/messaging/MessageChannel.cpp
index 95c75bf..9012e9f 100644
--- a/third_party/WebKit/Source/core/dom/MessageChannel.cpp
+++ b/third_party/WebKit/Source/core/messaging/MessageChannel.cpp
@@ -24,9 +24,9 @@
  *
  */
 
-#include "core/dom/MessageChannel.h"
+#include "core/messaging/MessageChannel.h"
 
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "public/platform/Platform.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/dom/MessageChannel.h b/third_party/WebKit/Source/core/messaging/MessageChannel.h
similarity index 100%
rename from third_party/WebKit/Source/core/dom/MessageChannel.h
rename to third_party/WebKit/Source/core/messaging/MessageChannel.h
diff --git a/third_party/WebKit/Source/core/dom/MessageChannel.idl b/third_party/WebKit/Source/core/messaging/MessageChannel.idl
similarity index 100%
rename from third_party/WebKit/Source/core/dom/MessageChannel.idl
rename to third_party/WebKit/Source/core/messaging/MessageChannel.idl
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.cpp b/third_party/WebKit/Source/core/messaging/MessagePort.cpp
similarity index 98%
rename from third_party/WebKit/Source/core/dom/MessagePort.cpp
rename to third_party/WebKit/Source/core/messaging/MessagePort.cpp
index f649dfa..ee273945 100644
--- a/third_party/WebKit/Source/core/dom/MessagePort.cpp
+++ b/third_party/WebKit/Source/core/messaging/MessagePort.cpp
@@ -24,18 +24,18 @@
  *
  */
 
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 
 #include <memory>
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
 #include "bindings/core/v8/serialization/SerializedScriptValueFactory.h"
-#include "core/dom/BlinkTransferableMessageStructTraits.h"
 #include "core/dom/ExceptionCode.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/events/MessageEvent.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/UseCounter.h"
+#include "core/messaging/BlinkTransferableMessageStructTraits.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "platform/CrossThreadFunctional.h"
 #include "platform/bindings/ScriptState.h"
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.h b/third_party/WebKit/Source/core/messaging/MessagePort.h
similarity index 100%
rename from third_party/WebKit/Source/core/dom/MessagePort.h
rename to third_party/WebKit/Source/core/messaging/MessagePort.h
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.idl b/third_party/WebKit/Source/core/messaging/MessagePort.idl
similarity index 100%
rename from third_party/WebKit/Source/core/dom/MessagePort.idl
rename to third_party/WebKit/Source/core/messaging/MessagePort.idl
diff --git a/third_party/WebKit/Source/core/messaging/OWNERS b/third_party/WebKit/Source/core/messaging/OWNERS
new file mode 100644
index 0000000..8a792b5
--- /dev/null
+++ b/third_party/WebKit/Source/core/messaging/OWNERS
@@ -0,0 +1,10 @@
+mek@chromium.org
+jbroman@chromium.org
+
+per-file *StructTraits*.*=set noparent
+per-file *StructTraits*.*=file://ipc/SECURITY_OWNERS
+per-file *.typemap=set noparent
+per-file *.typemap=file://ipc/SECURITY_OWNERS
+
+# TEAM: platform-architecture-dev@chromium.org
+# COMPONENT: Blink>Messaging
diff --git a/third_party/WebKit/Source/core/messaging/README.md b/third_party/WebKit/Source/core/messaging/README.md
new file mode 100644
index 0000000..2de9f39
--- /dev/null
+++ b/third_party/WebKit/Source/core/messaging/README.md
@@ -0,0 +1,7 @@
+# core/messaging/
+
+This directory contains:
+- The [Web Messaging API][1] implementation.
+- Structs and typemaps to efficiently pass SerializedScriptValue over mojo interfaces.
+
+[1]: https://html.spec.whatwg.org/multipage/web-messaging.html#channel-messaging
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorker.h b/third_party/WebKit/Source/core/workers/DedicatedWorker.h
index e0aea03..a1552ec 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorker.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorker.h
@@ -8,10 +8,10 @@
 #include "base/memory/scoped_refptr.h"
 #include "bindings/core/v8/ActiveScriptWrappable.h"
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
 #include "core/dom/PausableObject.h"
 #include "core/dom/events/EventListener.h"
 #include "core/dom/events/EventTarget.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/AbstractWorker.h"
 #include "core/workers/WorkerOptions.h"
 #include "platform/wtf/Forward.h"
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
index ab76a8f..7f48d97 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
@@ -31,11 +31,11 @@
 #ifndef DedicatedWorkerGlobalScope_h
 #define DedicatedWorkerGlobalScope_h
 
+#include <memory>
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "platform/heap/Visitor.h"
-#include <memory>
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
index fb6b14f..a83cc300 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
@@ -9,7 +9,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/GlobalScopeCreationParams.h"
 #include "core/workers/ThreadedMessagingProxyBase.h"
 #include "core/workers/WorkerBackingThreadStartupData.h"
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.h
index 7754b2e..9a1eb84a 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.h
@@ -35,7 +35,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/ThreadedObjectProxyBase.h"
 #include "core/workers/WorkerReportingProxy.h"
 #include "platform/heap/Handle.h"
diff --git a/third_party/WebKit/Source/core/workers/SharedWorker.cpp b/third_party/WebKit/Source/core/workers/SharedWorker.cpp
index 0b9cd1217..e127f78 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorker.cpp
+++ b/third_party/WebKit/Source/core/workers/SharedWorker.cpp
@@ -33,11 +33,11 @@
 
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/dom/MessageChannel.h"
-#include "core/dom/MessagePort.h"
 #include "core/frame/LocalFrame.h"
 #include "core/frame/LocalFrameClient.h"
 #include "core/frame/UseCounter.h"
+#include "core/messaging/MessageChannel.h"
+#include "core/messaging/MessagePort.h"
 #include "core/probe/CoreProbes.h"
 #include "core/workers/SharedWorkerRepositoryClient.h"
 #include "platform/weborigin/KURL.h"
diff --git a/third_party/WebKit/Source/core/workers/ThreadedObjectProxyBase.h b/third_party/WebKit/Source/core/workers/ThreadedObjectProxyBase.h
index 74222496..a910988 100644
--- a/third_party/WebKit/Source/core/workers/ThreadedObjectProxyBase.h
+++ b/third_party/WebKit/Source/core/workers/ThreadedObjectProxyBase.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "bindings/core/v8/SourceLocation.h"
 #include "core/CoreExport.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/WorkerReportingProxy.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/devtools/front_end/help/Help.js b/third_party/WebKit/Source/devtools/front_end/help/Help.js
index 96878936..4c619fb2 100644
--- a/third_party/WebKit/Source/devtools/front_end/help/Help.js
+++ b/third_party/WebKit/Source/devtools/front_end/help/Help.js
@@ -25,18 +25,23 @@
 };
 
 Help.showReleaseNoteIfNeeded = function() {
-  Help._showReleaseNoteIfNeeded(Help.releaseNoteVersionSetting().get(), Help.latestReleaseNote().version);
+  Help._showReleaseNoteIfNeeded(
+      Help.releaseNoteVersionSetting().get(), Help.latestReleaseNote().version,
+      Common.settings.moduleSetting('help.show-release-note').get());
 };
 
 /**
  * @param {number} lastSeenVersion
  * @param {number} latestVersion
+ * @param {boolean} showReleaseNote
  */
-Help._showReleaseNoteIfNeeded = function(lastSeenVersion, latestVersion) {
+Help._showReleaseNoteIfNeeded = function(lastSeenVersion, latestVersion, showReleaseNote) {
   if (!lastSeenVersion) {
     Help.releaseNoteVersionSetting().set(latestVersion);
     return;
   }
+  if (!showReleaseNote)
+    return;
   if (lastSeenVersion >= latestVersion)
     return;
   Help.releaseNoteVersionSetting().set(latestVersion);
diff --git a/third_party/WebKit/Source/devtools/front_end/help/module.json b/third_party/WebKit/Source/devtools/front_end/help/module.json
index 937f351..ce3a775 100644
--- a/third_party/WebKit/Source/devtools/front_end/help/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/help/module.json
@@ -8,6 +8,24 @@
       "persistence": "closeable",
       "order": 1,
       "className": "Help.ReleaseNoteView"
+    },
+    {
+      "type": "setting",
+      "category": "Appearance",
+      "title": "Show What's New after each update",
+      "settingName": "help.show-release-note",
+      "settingType": "boolean",
+      "defaultValue": true,
+      "options": [
+          {
+              "value": true,
+              "title": "Show What's New after each update"
+          },
+          {
+              "value": false,
+              "title": "Do not show What's New after each update"
+          }
+      ]
     }
   ],
   "dependencies": [
diff --git a/third_party/WebKit/Source/devtools/front_end/test_runner/TestRunner.js b/third_party/WebKit/Source/devtools/front_end/test_runner/TestRunner.js
index 26ed628..b7db8d1 100644
--- a/third_party/WebKit/Source/devtools/front_end/test_runner/TestRunner.js
+++ b/third_party/WebKit/Source/devtools/front_end/test_runner/TestRunner.js
@@ -92,20 +92,6 @@
       });
 };
 
-/**
- * Note: This is only needed to debug a test in release DevTools.
- * Usage: wrap the entire test with debugReleaseTest() and use dtrun test --debug-release
- * @param {!Function} testFunction
- * @return {!Function}
- */
-function debugReleaseTest(testFunction) {
-  return testRunner => {
-    TestRunner.addResult = console.log;
-    TestRunner.completeTest = () => console.log('Test completed');
-    window.test = () => testFunction(testRunner);
-  };
-}
-
 /** @type {!Array<string>} */
 TestRunner._results = [];
 
diff --git a/third_party/WebKit/Source/devtools/scripts/npm_test.js b/third_party/WebKit/Source/devtools/scripts/npm_test.js
index b896168..59317e7 100644
--- a/third_party/WebKit/Source/devtools/scripts/npm_test.js
+++ b/third_party/WebKit/Source/devtools/scripts/npm_test.js
@@ -10,7 +10,6 @@
 var utils = require('./utils');
 
 var Flags = {
-  DEBUG_RELEASE: '--debug-release',
   DEBUG_DEVTOOLS: '--debug-devtools',
   DEBUG_DEVTOOLS_SHORTHAND: '-d',
   FETCH_CONTENT_SHELL: '--fetch-content-shell',
@@ -24,7 +23,6 @@
 
 var IS_DEBUG_ENABLED =
     utils.includes(process.argv, Flags.DEBUG_DEVTOOLS) || utils.includes(process.argv, Flags.DEBUG_DEVTOOLS_SHORTHAND);
-var IS_DEBUG_RELEASE = utils.includes(process.argv, Flags.DEBUG_RELEASE);
 var CUSTOM_CHROMIUM_PATH = utils.parseArgs(process.argv)[Flags.CHROMIUM_PATH];
 var IS_FETCH_CONTENT_SHELL = utils.includes(process.argv, Flags.FETCH_CONTENT_SHELL);
 var TARGET = utils.parseArgs(process.argv)[Flags.TARGET] || 'Release';
@@ -249,7 +247,7 @@
   else
     console.log('TIP: You can debug a test using: npm run debug-test inspector/test-name.html');
 
-  if (IS_DEBUG_ENABLED || IS_DEBUG_RELEASE) {
+  if (IS_DEBUG_ENABLED) {
     testArgs.push('--additional-driver-flag=--remote-debugging-port=9222');
     testArgs.push('--time-out-ms=6000000');
     console.log('\n=============================================');
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
index 79f1e23..d9beae5 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBKeyRange.cpp
@@ -208,26 +208,17 @@
   }
 
   if (lower_) {
-    short c = key->Compare(lower_);
-    if (lowerOpen()) {
-      if (c <= 0)
-        return false;
-    } else {
-      if (c < 0)
-        return false;
-    }
+    int compared_with_lower = key->Compare(lower_);
+    if (compared_with_lower < 0 || (compared_with_lower == 0 && lowerOpen()))
+      return false;
   }
 
   if (upper_) {
-    short c = key->Compare(upper_);
-    if (upperOpen()) {
-      if (c >= 0)
-        return false;
-    } else {
-      if (c > 0)
-        return false;
-    }
+    int compared_with_upper = key->Compare(upper_);
+    if (compared_with_upper > 0 || (compared_with_upper == 0 && upperOpen()))
+      return false;
   }
+
   return true;
 }
 
diff --git a/third_party/WebKit/Source/modules/locks/Lock.cpp b/third_party/WebKit/Source/modules/locks/Lock.cpp
index 6cec6f5f..aafde18 100644
--- a/third_party/WebKit/Source/modules/locks/Lock.cpp
+++ b/third_party/WebKit/Source/modules/locks/Lock.cpp
@@ -57,18 +57,18 @@
 
 // static
 Lock* Lock::Create(ScriptState* script_state,
-                   const Vector<String>& scope,
+                   const String& name,
                    mojom::blink::LockManager::LockMode mode,
                    mojom::blink::LockHandlePtr handle) {
-  return new Lock(script_state, scope, mode, std::move(handle));
+  return new Lock(script_state, name, mode, std::move(handle));
 }
 
 Lock::Lock(ScriptState* script_state,
-           const Vector<String>& scope,
+           const String& name,
            mojom::blink::LockManager::LockMode mode,
            mojom::blink::LockHandlePtr handle)
     : PausableObject(ExecutionContext::From(script_state)),
-      scope_(scope),
+      name_(name),
       mode_(mode),
       handle_(std::move(handle)) {
   PauseIfNeeded();
diff --git a/third_party/WebKit/Source/modules/locks/Lock.h b/third_party/WebKit/Source/modules/locks/Lock.h
index 4993442..44c8b86 100644
--- a/third_party/WebKit/Source/modules/locks/Lock.h
+++ b/third_party/WebKit/Source/modules/locks/Lock.h
@@ -24,7 +24,7 @@
 
  public:
   static Lock* Create(ScriptState*,
-                      const Vector<String>& scope,
+                      const String& name,
                       mojom::blink::LockManager::LockMode,
                       mojom::blink::LockHandlePtr);
 
@@ -34,7 +34,7 @@
   EAGERLY_FINALIZE();
 
   // Lock.idl
-  Vector<String> scope() const { return scope_; }
+  String name() const { return name_; }
   String mode() const;
 
   // PausableObject
@@ -51,7 +51,7 @@
   class ThenFunction;
 
   Lock(ScriptState*,
-       const Vector<String>& scope,
+       const String& name,
        mojom::blink::LockManager::LockMode,
        mojom::blink::LockHandlePtr);
 
@@ -59,7 +59,7 @@
 
   Member<ScriptPromiseResolver> resolver_;
 
-  const Vector<String> scope_;
+  const String name_;
   const mojom::blink::LockManager::LockMode mode_;
   mojom::blink::LockHandlePtr handle_;
 };
diff --git a/third_party/WebKit/Source/modules/locks/Lock.idl b/third_party/WebKit/Source/modules/locks/Lock.idl
index 6919f60e..b134a2e1 100644
--- a/third_party/WebKit/Source/modules/locks/Lock.idl
+++ b/third_party/WebKit/Source/modules/locks/Lock.idl
@@ -8,6 +8,6 @@
     Exposed=(Window,Worker),
     RuntimeEnabled=LocksAPI
 ] interface Lock {
-    readonly attribute FrozenArray<DOMString> scope;
+    readonly attribute DOMString name;
     readonly attribute LockMode mode;
 };
diff --git a/third_party/WebKit/Source/modules/locks/LockManager.cpp b/third_party/WebKit/Source/modules/locks/LockManager.cpp
index eb58f8bc..d2f4661b 100644
--- a/third_party/WebKit/Source/modules/locks/LockManager.cpp
+++ b/third_party/WebKit/Source/modules/locks/LockManager.cpp
@@ -30,13 +30,13 @@
  public:
   LockRequestImpl(V8LockGrantedCallback* callback,
                   ScriptPromiseResolver* resolver,
-                  const Vector<String>& scope,
+                  const String& name,
                   mojom::blink::LockManager::LockMode mode,
                   mojom::blink::LockRequestRequest request,
                   LockManager* manager)
       : callback_(callback),
         resolver_(resolver),
-        scope_(scope),
+        name_(name),
         mode_(mode),
         binding_(this, std::move(request)),
         manager_(manager) {}
@@ -103,7 +103,7 @@
       return;
     }
 
-    Lock* lock = Lock::Create(script_state, scope_, mode_, std::move(handle));
+    Lock* lock = Lock::Create(script_state, name_, mode_, std::move(handle));
 
     ScriptState::Scope scope(script_state);
     v8::TryCatch try_catch(script_state->GetIsolate());
@@ -126,8 +126,8 @@
   // |callback_|'s result.
   Member<ScriptPromiseResolver> resolver_;
 
-  // Held to stamp the Lock object's |scope| property.
-  Vector<String> scope_;
+  // Held to stamp the Lock object's |name| property.
+  String name_;
 
   // Held to stamp the Lock object's |mode| property.
   mojom::blink::LockManager::LockMode mode_;
@@ -144,14 +144,13 @@
     : ContextLifecycleObserver(context) {}
 
 ScriptPromise LockManager::acquire(ScriptState* script_state,
-                                   const StringOrStringSequence& scope_union,
+                                   const String& name,
                                    V8LockGrantedCallback* callback,
                                    ExceptionState& exception_state) {
-  return acquire(script_state, scope_union, LockOptions(), callback,
-                 exception_state);
+  return acquire(script_state, name, LockOptions(), callback, exception_state);
 }
 ScriptPromise LockManager::acquire(ScriptState* script_state,
-                                   const StringOrStringSequence& scope_union,
+                                   const String& name,
                                    const LockOptions& options,
                                    V8LockGrantedCallback* callback,
                                    ExceptionState& exception_state) {
@@ -175,28 +174,6 @@
     }
   }
 
-  // Compute the scope (set of named resources); remove duplicates.
-  HashSet<String> set;
-  if (scope_union.IsString()) {
-    set.insert(scope_union.GetAsString());
-  } else if (scope_union.IsStringSequence()) {
-    for (const auto& name : scope_union.GetAsStringSequence())
-      set.insert(name);
-  } else {
-    NOTREACHED();
-    return ScriptPromise();
-  }
-
-  if (set.IsEmpty()) {
-    exception_state.ThrowTypeError("Scope must not be empty.");
-    return ScriptPromise();
-  }
-
-  Vector<String> scope;
-  for (const auto& name : set)
-    scope.push_back(name);
-  std::sort(scope.begin(), scope.end(), WTF::CodePointCompareLessThan);
-
   mojom::blink::LockManager::LockMode mode = Lock::StringToMode(options.mode());
 
   mojom::blink::LockManager::WaitMode wait =
@@ -207,11 +184,11 @@
   ScriptPromise promise = resolver->Promise();
 
   mojom::blink::LockRequestPtr request_ptr;
-  AddPendingRequest(new LockRequestImpl(callback, resolver, scope, mode,
+  AddPendingRequest(new LockRequestImpl(callback, resolver, name, mode,
                                         mojo::MakeRequest(&request_ptr), this));
 
   service_->RequestLock(
-      ExecutionContext::From(script_state)->GetSecurityOrigin(), scope, mode,
+      ExecutionContext::From(script_state)->GetSecurityOrigin(), name, mode,
       wait, std::move(request_ptr));
 
   return promise;
diff --git a/third_party/WebKit/Source/modules/locks/LockManager.h b/third_party/WebKit/Source/modules/locks/LockManager.h
index 5593937..bfa89428 100644
--- a/third_party/WebKit/Source/modules/locks/LockManager.h
+++ b/third_party/WebKit/Source/modules/locks/LockManager.h
@@ -28,11 +28,11 @@
   explicit LockManager(ExecutionContext*);
 
   ScriptPromise acquire(ScriptState*,
-                        const StringOrStringSequence& scope,
+                        const String& name,
                         V8LockGrantedCallback*,
                         ExceptionState&);
   ScriptPromise acquire(ScriptState*,
-                        const StringOrStringSequence& scope,
+                        const String& name,
                         const LockOptions&,
                         V8LockGrantedCallback*,
                         ExceptionState&);
diff --git a/third_party/WebKit/Source/modules/locks/LockManager.idl b/third_party/WebKit/Source/modules/locks/LockManager.idl
index eaedad9e..4c0501f 100644
--- a/third_party/WebKit/Source/modules/locks/LockManager.idl
+++ b/third_party/WebKit/Source/modules/locks/LockManager.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // https://github.com/inexorabletash/web-locks
-typedef (DOMString or sequence<DOMString>) LockScope;
+
 callback LockGrantedCallback = any (Lock lock);
 [
     SecureContext,
@@ -11,10 +11,10 @@
     RuntimeEnabled=LocksAPI
 ] interface LockManager {
     [CallWith=ScriptState, RaisesException] Promise<Lock> acquire(
-        LockScope scope,
+        DOMString name,
         LockGrantedCallback callback);
     [CallWith=ScriptState, RaisesException] Promise<Lock> acquire(
-        LockScope scope,
+        DOMString name,
         LockOptions options,
         LockGrantedCallback callback);
 };
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
index 6f0e833..07a97a2 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
@@ -34,8 +34,8 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/dom/MessagePort.h"
 #include "core/dom/events/Event.h"
+#include "core/messaging/MessagePort.h"
 #include "modules/EventTargetModules.h"
 #include "modules/serviceworkers/ServiceWorkerContainerClient.h"
 #include "platform/bindings/ScriptState.h"
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
index e0a50e4..2e30563 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
@@ -40,12 +40,12 @@
 #include "core/dom/Document.h"
 #include "core/dom/ExceptionCode.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/dom/MessagePort.h"
 #include "core/events/MessageEvent.h"
 #include "core/frame/Deprecation.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "core/frame/UseCounter.h"
 #include "core/frame/csp/ContentSecurityPolicy.h"
+#include "core/messaging/MessagePort.h"
 #include "modules/EventTargetModules.h"
 #include "modules/serviceworkers/NavigatorServiceWorker.h"
 #include "modules/serviceworkers/ServiceWorker.h"
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
index fa56c3d..c2061b8 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
@@ -32,7 +32,7 @@
 #define ServiceWorkerGlobalScopeClient_h
 
 #include <memory>
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/WorkerClients.h"
 #include "modules/ModulesExport.h"
 #include "platform/wtf/Forward.h"
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
index a98f1038..6cf05e5f 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
@@ -35,9 +35,9 @@
 #include "bindings/core/v8/SourceLocation.h"
 #include "bindings/core/v8/WorkerOrWorkletScriptController.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/dom/MessagePort.h"
 #include "core/frame/csp/ContentSecurityPolicy.h"
 #include "core/inspector/ConsoleMessage.h"
+#include "core/messaging/MessagePort.h"
 #include "core/origin_trials/origin_trials.h"
 #include "core/workers/ParentFrameTaskRunners.h"
 #include "core/workers/WorkerGlobalScope.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
index b7209114..26abbe701 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScope.cpp
@@ -16,7 +16,7 @@
 #include "bindings/modules/v8/V8AudioParamDescriptor.h"
 #include "bindings/modules/v8/V8AudioWorkletProcessor.h"
 #include "core/dom/ExceptionCode.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/typed_arrays/DOMTypedArray.h"
 #include "core/workers/GlobalScopeCreationParams.h"
 #include "modules/webaudio/AudioBuffer.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
index 02a85fc..92dbd8d 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletGlobalScopeTest.cpp
@@ -17,8 +17,8 @@
 #include "bindings/core/v8/V8GCController.h"
 #include "bindings/core/v8/WorkerOrWorkletScriptController.h"
 #include "core/dom/Document.h"
-#include "core/dom/MessageChannel.h"
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessageChannel.h"
+#include "core/messaging/MessagePort.h"
 #include "core/origin_trials/OriginTrialContext.h"
 #include "core/testing/DummyPageHolder.h"
 #include "core/workers/GlobalScopeCreationParams.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
index 2257cc04..fa1ab31 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
@@ -4,7 +4,7 @@
 
 #include "modules/webaudio/AudioWorkletMessagingProxy.h"
 
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "modules/webaudio/AudioWorklet.h"
 #include "modules/webaudio/AudioWorkletGlobalScope.h"
 #include "modules/webaudio/AudioWorkletNode.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletNode.cpp
index abaf98c3..e43ae68 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletNode.cpp
@@ -4,9 +4,9 @@
 
 #include "modules/webaudio/AudioWorkletNode.h"
 
+#include "core/messaging/MessageChannel.h"
+#include "core/messaging/MessagePort.h"
 #include "modules/EventModules.h"
-#include "core/dom/MessageChannel.h"
-#include "core/dom/MessagePort.h"
 #include "modules/webaudio/AudioBuffer.h"
 #include "modules/webaudio/AudioNodeInput.h"
 #include "modules/webaudio/AudioNodeOutput.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletProcessor.cpp
index 015aaf6..f71d678 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletProcessor.cpp
@@ -4,7 +4,7 @@
 
 #include "modules/webaudio/AudioWorkletProcessor.h"
 
-#include "core/dom/MessagePort.h"
+#include "core/messaging/MessagePort.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "modules/webaudio/AudioBuffer.h"
 #include "modules/webaudio/AudioWorkletGlobalScope.h"
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.cpp
index aeda453..1fb639b7 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.cpp
@@ -76,38 +76,7 @@
 }
 
 ResourceResponse::ResourceResponse()
-    : expected_content_length_(0),
-      connection_id_(0),
-      http_status_code_(0),
-      remote_port_(0),
-      was_cached_(false),
-      connection_reused_(false),
-      is_null_(true),
-      have_parsed_age_header_(false),
-      have_parsed_date_header_(false),
-      have_parsed_expires_header_(false),
-      have_parsed_last_modified_header_(false),
-      has_major_certificate_errors_(false),
-      is_legacy_symantec_cert_(false),
-      was_fetched_via_spdy_(false),
-      was_fetched_via_proxy_(false),
-      was_fetched_via_service_worker_(false),
-      was_fallback_required_by_service_worker_(false),
-      did_service_worker_navigation_preload_(false),
-      response_type_via_service_worker_(
-          network::mojom::FetchResponseType::kDefault),
-      http_version_(kHTTPVersionUnknown),
-      security_style_(kSecurityStyleUnknown),
-      age_(0.0),
-      date_(0.0),
-      expires_(0.0),
-      last_modified_(0.0),
-      app_cache_id_(0),
-      connection_info_(
-          net::HttpResponseInfo::ConnectionInfo::CONNECTION_INFO_UNKNOWN),
-      encoded_data_length_(0),
-      encoded_body_length_(0),
-      decoded_body_length_(0) {}
+    : expected_content_length_(0), is_null_(true) {}
 
 ResourceResponse::ResourceResponse(const KURL& url,
                                    const AtomicString& mime_type,
@@ -117,37 +86,7 @@
       mime_type_(mime_type),
       expected_content_length_(expected_length),
       text_encoding_name_(text_encoding_name),
-      connection_id_(0),
-      http_status_code_(0),
-      remote_port_(0),
-      was_cached_(false),
-      connection_reused_(false),
-      is_null_(false),
-      have_parsed_age_header_(false),
-      have_parsed_date_header_(false),
-      have_parsed_expires_header_(false),
-      have_parsed_last_modified_header_(false),
-      has_major_certificate_errors_(false),
-      is_legacy_symantec_cert_(false),
-      was_fetched_via_spdy_(false),
-      was_fetched_via_proxy_(false),
-      was_fetched_via_service_worker_(false),
-      was_fallback_required_by_service_worker_(false),
-      did_service_worker_navigation_preload_(false),
-      response_type_via_service_worker_(
-          network::mojom::FetchResponseType::kDefault),
-      http_version_(kHTTPVersionUnknown),
-      security_style_(kSecurityStyleUnknown),
-      age_(0.0),
-      date_(0.0),
-      expires_(0.0),
-      last_modified_(0.0),
-      app_cache_id_(0),
-      connection_info_(
-          net::HttpResponseInfo::ConnectionInfo::CONNECTION_INFO_UNKNOWN),
-      encoded_data_length_(0),
-      encoded_body_length_(0),
-      decoded_body_length_(0) {}
+      is_null_(false) {}
 
 ResourceResponse::ResourceResponse(CrossThreadResourceResponseData* data)
     : ResourceResponse() {
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.h
index c7b59b1..aa2b881 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.h
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceResponse.h
@@ -414,8 +414,9 @@
   AtomicString mime_type_;
   long long expected_content_length_;
   AtomicString text_encoding_name_;
-  unsigned connection_id_;
-  int http_status_code_;
+
+  unsigned connection_id_ = 0;
+  int http_status_code_ = 0;
   AtomicString http_status_text_;
   HTTPHeaderMap http_header_fields_;
 
@@ -423,54 +424,55 @@
   AtomicString remote_ip_address_;
 
   // Remote port number of the socket which fetched this resource.
-  unsigned short remote_port_;
+  unsigned short remote_port_ = 0;
 
-  bool was_cached_ : 1;
-  bool connection_reused_ : 1;
-  bool is_null_ : 1;
-  mutable bool have_parsed_age_header_ : 1;
-  mutable bool have_parsed_date_header_ : 1;
-  mutable bool have_parsed_expires_header_ : 1;
-  mutable bool have_parsed_last_modified_header_ : 1;
+  bool was_cached_ = false;
+  bool connection_reused_ = false;
+  bool is_null_;
+  mutable bool have_parsed_age_header_ = false;
+  mutable bool have_parsed_date_header_ = false;
+  mutable bool have_parsed_expires_header_ = false;
+  mutable bool have_parsed_last_modified_header_ = false;
 
   // True if the resource was retrieved by the embedder in spite of
   // certificate errors.
-  bool has_major_certificate_errors_ : 1;
+  bool has_major_certificate_errors_ = false;
 
   // True if the resource was retrieved with a legacy Symantec certificate which
   // is slated for distrust in future.
-  bool is_legacy_symantec_cert_ : 1;
+  bool is_legacy_symantec_cert_ = false;
 
   // The time at which the resource's certificate expires. Null if there was no
   // certificate.
   base::Time cert_validity_start_;
 
   // Was the resource fetched over SPDY.  See http://dev.chromium.org/spdy
-  bool was_fetched_via_spdy_ : 1;
+  bool was_fetched_via_spdy_ = false;
 
   // Was the resource fetched over an explicit proxy (HTTP, SOCKS, etc).
-  bool was_fetched_via_proxy_ : 1;
+  bool was_fetched_via_proxy_ = false;
 
   // Was the resource fetched over a ServiceWorker.
-  bool was_fetched_via_service_worker_ : 1;
+  bool was_fetched_via_service_worker_ = false;
 
   // Was the fallback request with skip service worker flag required.
-  bool was_fallback_required_by_service_worker_ : 1;
+  bool was_fallback_required_by_service_worker_ = false;
 
   // True if service worker navigation preload was performed due to
   // the request for this resource.
-  bool did_service_worker_navigation_preload_ : 1;
+  bool did_service_worker_navigation_preload_ = false;
 
   // The type of the response which was returned by the ServiceWorker.
-  network::mojom::FetchResponseType response_type_via_service_worker_;
+  network::mojom::FetchResponseType response_type_via_service_worker_ =
+      network::mojom::FetchResponseType::kDefault;
 
   // HTTP version used in the response, if known.
-  HTTPVersion http_version_;
+  HTTPVersion http_version_ = kHTTPVersionUnknown;
 
   // The security style of the resource.
   // This only contains a valid value when the DevTools Network domain is
   // enabled. (Otherwise, it contains a default value of Unknown.)
-  SecurityStyle security_style_;
+  SecurityStyle security_style_ = kSecurityStyleUnknown;
 
   // Security details of this request's connection.
   // If m_securityStyle is Unknown or Unauthenticated, this does not contain
@@ -482,14 +484,14 @@
 
   mutable CacheControlHeader cache_control_header_;
 
-  mutable double age_;
-  mutable double date_;
-  mutable double expires_;
-  mutable double last_modified_;
+  mutable double age_ = 0.0;
+  mutable double date_ = 0.0;
+  mutable double expires_ = 0.0;
+  mutable double last_modified_ = 0.0;
 
   // The id of the appcache this response was retrieved from, or zero if
   // the response was not retrieved from an appcache.
-  long long app_cache_id_;
+  long long app_cache_id_ = 0;
 
   // The manifest url of the appcache this response was retrieved from, if any.
   // Note: only valid for main resource responses.
@@ -518,17 +520,18 @@
   AtomicString alpn_negotiated_protocol_;
 
   // Information about the type of connection used to fetch this resource.
-  net::HttpResponseInfo::ConnectionInfo connection_info_;
+  net::HttpResponseInfo::ConnectionInfo connection_info_ =
+      net::HttpResponseInfo::ConnectionInfo::CONNECTION_INFO_UNKNOWN;
 
   // Size of the response in bytes prior to decompression.
-  long long encoded_data_length_;
+  long long encoded_data_length_ = 0;
 
   // Size of the response body in bytes prior to decompression.
-  long long encoded_body_length_;
+  long long encoded_body_length_ = 0;
 
   // Sizes of the response body in bytes after any content-encoding is
   // removed.
-  long long decoded_body_length_;
+  long long decoded_body_length_ = 0;
 
   // The downloaded file path if the load streamed to a file.
   String downloaded_file_path_;
diff --git a/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni b/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni
index 96280d1..b3d5196 100644
--- a/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni
+++ b/third_party/WebKit/Source/platform/mojo/blink_typemaps.gni
@@ -5,8 +5,8 @@
 typemaps = [
   "//mojo/common/file_path.typemap",
   "//mojo/common/values.typemap",
-  "//third_party/WebKit/Source/core/dom/BlinkCloneableMessage.typemap",
-  "//third_party/WebKit/Source/core/dom/BlinkTransferableMessage.typemap",
+  "//third_party/WebKit/Source/core/messaging/BlinkCloneableMessage.typemap",
+  "//third_party/WebKit/Source/core/messaging/BlinkTransferableMessage.typemap",
   "//third_party/WebKit/Source/platform/mojo/File.typemap",
   "//third_party/WebKit/Source/platform/mojo/Geometry.typemap",
   "//third_party/WebKit/Source/platform/mojo/KURL.typemap",
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
index edcae84..5baf5064 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
@@ -82,7 +82,9 @@
     def _get_cl_status(self):
         return self.run(['status', '--field=status']).strip()
 
-    def wait_for_try_jobs(self, poll_delay_seconds=10 * 60, timeout_seconds=120 * 60):
+    def wait_for_try_jobs(
+            self, poll_delay_seconds=10 * 60, timeout_seconds=120 * 60,
+            cq_only=False):
         """Waits until all try jobs are finished and returns results, or None.
 
         This function can also be interrupted if the corresponding CL is
@@ -95,7 +97,7 @@
         def finished_try_job_results_or_none():
             cl_status = self._get_cl_status()
             _log.debug('Fetched CL status: %s', cl_status)
-            try_job_results = self.try_job_results()
+            try_job_results = self.latest_try_jobs(cq_only=cq_only)
             _log.debug('Fetched try results: %s', try_job_results)
             if (cl_status == 'closed' or
                     (try_job_results and self.all_finished(try_job_results))):
@@ -151,7 +153,7 @@
         self._host.print_('Timed out waiting%s.' % message)
         return None
 
-    def latest_try_jobs(self, builder_names=None):
+    def latest_try_jobs(self, builder_names=None, cq_only=False):
         """Fetches a dict of Build to TryJobStatus for the latest try jobs.
 
         This includes jobs that are not yet finished and builds with infra
@@ -160,6 +162,7 @@
 
         Args:
             builder_names: Optional list of builders used to filter results.
+            cq_only: If True, only include CQ jobs.
 
         Returns:
             A dict mapping Build objects to TryJobStatus objects, with
@@ -167,7 +170,8 @@
         """
         # TODO(crbug.com/771438): Update filter_latest to handle Swarming tasks.
         return self.filter_latest(
-            self.try_job_results(builder_names, include_swarming_tasks=False))
+            self.try_job_results(
+                builder_names, include_swarming_tasks=False, cq_only=cq_only))
 
     @staticmethod
     def filter_latest(try_results):
@@ -177,7 +181,9 @@
         latest_builds = filter_latest_builds(try_results.keys())
         return {b: s for b, s in try_results.items() if b in latest_builds}
 
-    def try_job_results(self, builder_names=None, include_swarming_tasks=True):
+    def try_job_results(
+            self, builder_names=None, include_swarming_tasks=True,
+            cq_only=False):
         """Returns a dict mapping Build objects to TryJobStatus objects."""
         raw_results = self.fetch_raw_try_job_results()
         build_to_status = {}
@@ -187,6 +193,10 @@
             is_swarming_task = result['url'] and '/task/' in result['url']
             if is_swarming_task and not include_swarming_tasks:
                 continue
+            is_cq = 'user_agent:cq' in result.get('tags', [])
+            is_experimental = result.get('experimental')
+            if cq_only and not (is_cq and not is_experimental):
+                continue
             build_to_status[self._build(result)] = self._try_job_status(result)
         return build_to_status
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py
index e3e3fd7..7c36dc1 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py
@@ -49,7 +49,9 @@
     def wait_for_try_jobs(self, **_):
         if self._time_out:
             return None
-        return CLStatus(self._status, self._try_job_results)
+        return CLStatus(
+            self._status,
+            self.filter_latest(self._try_job_results))
 
     def wait_for_closed_status(self, **_):
         if self._time_out:
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
index 6d47f8d..2c2746a 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
@@ -252,7 +252,41 @@
             Build('some-builder', 2): TryJobStatus('STARTED'),
         }))
 
-    def test_latest_try_builds(self):
+    def test_latest_try_jobs_cq_only(self):
+        git_cl = GitCL(MockHost())
+        git_cl.fetch_raw_try_job_results = lambda: [
+            {
+                'builder_name': 'cq-a',
+                'experimental': False,
+                'result': None,
+                'status': 'SCHEDULED',
+                'tags': ['user_agent:cq'],
+                'url': None,
+            },
+            {
+                'builder_name': 'cq-a-experimental',
+                'experimental': True,
+                'result': None,
+                'status': 'SCHEDULED',
+                'tags': ['user_agent:cq'],
+                'url': None,
+            },
+            {
+                'builder_name': 'other',
+                'experimental': False,
+                'status': 'SCHEDULED',
+                'result': None,
+                'tags': ['user_agent:git_cl_try'],
+                'url': None,
+            },
+        ]
+        self.assertEqual(
+            git_cl.latest_try_jobs(cq_only=True),
+            {
+                Build('cq-a'): TryJobStatus('SCHEDULED'),
+            })
+
+    def test_latest_try_jobs(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
@@ -287,7 +321,7 @@
                 Build('builder-b', 100): TryJobStatus('COMPLETED', 'SUCCESS'),
             })
 
-    def test_latest_try_builds_started_build_luci_url(self):
+    def test_latest_try_jobs_started_build_luci_url(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
@@ -301,7 +335,7 @@
             git_cl.latest_try_jobs(['builder-a']),
             {Build('builder-a', 100): TryJobStatus('STARTED')})
 
-    def test_latest_try_builds_started_build_buildbot_url(self):
+    def test_latest_try_jobs_started_build_buildbot_url(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
@@ -315,7 +349,7 @@
             git_cl.latest_try_jobs(['builder-a']),
             {Build('builder-a', 100): TryJobStatus('STARTED')})
 
-    def test_latest_try_builds_failures(self):
+    def test_latest_try_jobs_failures(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
@@ -340,7 +374,7 @@
                 Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
             })
 
-    def test_latest_try_builds_ignores_swarming_task(self):
+    def test_latest_try_jobs_ignores_swarming_task(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
index c74d50f..fc392ae2 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -214,7 +214,8 @@
         self.git_cl.run(['try'])
         cl_status = self.git_cl.wait_for_try_jobs(
             poll_delay_seconds=POLL_DELAY_SECONDS,
-            timeout_seconds=TIMEOUT_SECONDS)
+            timeout_seconds=TIMEOUT_SECONDS,
+            cq_only=True)
 
         if not cl_status:
             self.git_cl.run(['set-close'])
@@ -226,16 +227,7 @@
             return False
 
         _log.info('All jobs finished.')
-        try_results = self.git_cl.filter_latest(cl_status.try_job_results)
-
-        # We only want to check the status of CQ bots. The set of CQ bots is
-        # determined by //infra/config/cq.cfg, but since in import jobs we only
-        # trigger CQ bots and Blink try bots, we just ignore the
-        # Blink try bots to get the set of CQ try bots.
-        # Important: if any CQ bots are added to the builder list
-        # (self.host.builders), then this logic will need to be updated.
-        cq_try_results = {build: status for build, status in try_results.items()
-                          if build.builder_name not in self.blink_try_bots()}
+        cq_try_results = cl_status.try_job_results
 
         if not cq_try_results:
             _log.error('No CQ try results found in try results: %s.', try_results)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
index 11eac69..f183a34e 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
@@ -150,37 +150,6 @@
             ['git', 'cl', 'try'],
         ])
 
-    def test_run_commit_queue_for_cl_only_checks_non_blink_bots(self):
-        host = MockHost()
-        host.filesystem.write_text_file(
-            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations', '')
-        host.builders = BuilderList({
-            'fakeos_blink_rel': {
-                'port_name': 'test-fakeos',
-                'specifiers': ['FakeOS', 'Release'],
-                'is_try_builder': True,
-            }
-        })
-        importer = TestImporter(host)
-        importer.git_cl = MockGitCL(host, status='lgtm', try_job_results={
-            Build('fakeos_blink_rel', 123): TryJobStatus('COMPLETED', 'FAILURE'),
-            Build('cq-builder-b', 200): TryJobStatus('COMPLETED', 'SUCCESS'),
-        })
-        importer.fetch_new_expectations_and_baselines = lambda: None
-        success = importer.run_commit_queue_for_cl()
-        self.assertTrue(success)
-        self.assertLog([
-            'INFO: Triggering CQ try jobs.\n',
-            'INFO: All jobs finished.\n',
-            'INFO: CQ appears to have passed; trying to commit.\n',
-            'INFO: Update completed.\n',
-        ])
-        self.assertEqual(importer.git_cl.calls, [
-            ['git', 'cl', 'try'],
-            ['git', 'cl', 'upload', '-f', '--send-mail'],
-            ['git', 'cl', 'set-commit'],
-        ])
-
     def test_run_commit_queue_for_cl_timeout(self):
         # This simulates the case where we time out while waiting for try jobs.
         host = MockHost()
diff --git a/third_party/WebKit/public/platform/modules/locks/lock_manager.mojom b/third_party/WebKit/public/platform/modules/locks/lock_manager.mojom
index d65262c2..e9b51e44 100644
--- a/third_party/WebKit/public/platform/modules/locks/lock_manager.mojom
+++ b/third_party/WebKit/public/platform/modules/locks/lock_manager.mojom
@@ -6,10 +6,14 @@
 
 import "url/mojo/origin.mojom";
 
-// An opaque handle passed from the browser process to a child process to reflect a
-// held lock. The lock is released when the handle is dropped.
+// An opaque handle passed from the browser process to a child process to
+// reflect a held lock. The lock is released when the handle is dropped.
 interface LockHandle {};
 
+// An explicit lock request is used so that requests from terminated
+// contexts (e.g. closed or navigated tabs) can be observed and removed
+// from the lock manager's queue.
+
 interface LockRequest {
   // Request was granted.
   Granted(LockHandle lock_handle);
@@ -21,6 +25,16 @@
   Abort(string reason);
 };
 
+// Implementation of the proposed "Web Locks API". This provides a "lock"
+// primitive for coordination of resource usage across window and worker
+// contexts in a web application. A resource is identified by an abstract
+// name string selected by the web app. A lock can be requested over the
+// resource. The request will be granted asynchronously depending on
+// availablility and options. Once granted, the lock will be held until
+// explicitly released or the holding context is terminated.
+//
+// Proposal: https://github.com/inexorabletash/web-locks
+
 interface LockManager {
   enum LockMode {
     SHARED,
@@ -32,5 +46,9 @@
     NO_WAIT
   };
 
-  RequestLock(url.mojom.Origin origin, array<string> scope, LockMode mode, WaitMode wait, LockRequest request);
+  RequestLock(url.mojom.Origin origin,
+              string name,
+              LockMode mode,
+              WaitMode wait,
+              LockRequest request);
 };
diff --git a/third_party/WebKit/public/web/WebDevToolsAgent.h b/third_party/WebKit/public/web/WebDevToolsAgent.h
index a628bb8..1b730f2 100644
--- a/third_party/WebKit/public/web/WebDevToolsAgent.h
+++ b/third_party/WebKit/public/web/WebDevToolsAgent.h
@@ -46,8 +46,6 @@
   virtual void Reattach(int session_id, const WebString& saved_state) = 0;
   virtual void Detach(int session_id) = 0;
 
-  virtual void ContinueProgram() = 0;
-
   virtual void DispatchOnInspectorBackend(int session_id,
                                           int call_id,
                                           const WebString& method,
@@ -59,10 +57,6 @@
   // Exposed for TestRunner.
   virtual WebString EvaluateInWebInspectorOverlay(const WebString& script) = 0;
 
-  // Returns true if caching is disabled for network requests issued by dev
-  // tools.
-  virtual bool CacheDisabled() = 0;
-
   class MessageDescriptor {
    public:
     virtual ~MessageDescriptor() {}
diff --git a/third_party/WebKit/public/web/WebLocalFrame.h b/third_party/WebKit/public/web/WebLocalFrame.h
index bb22834..12637dd 100644
--- a/third_party/WebKit/public/web/WebLocalFrame.h
+++ b/third_party/WebKit/public/web/WebLocalFrame.h
@@ -848,6 +848,11 @@
   // empty ((0,0), (0,0)).
   virtual WebRect GetSelectionBoundsRectForTesting() const = 0;
 
+  // Detaches all attached sessions.
+  // TODO(dgozman): this should be removed together with
+  // old inspector testing harness.
+  virtual void DetachAllDevToolsSessionsForTesting() = 0;
+
  protected:
   explicit WebLocalFrame(WebTreeScopeType scope) : WebFrame(scope) {}
 
diff --git a/tools/chrome_proxy/webdriver/lofi.py b/tools/chrome_proxy/webdriver/lofi.py
index d7bc5f1..c85603b 100644
--- a/tools/chrome_proxy/webdriver/lofi.py
+++ b/tools/chrome_proxy/webdriver/lofi.py
@@ -37,6 +37,10 @@
       # Verify that Lo-Fi responses were seen.
       self.assertNotEqual(0, lofi_responses)
 
+      # Verify Lo-Fi previews info bar recorded
+      histogram = test_driver.GetHistogram('Previews.InfoBarAction.LoFi', 5)
+      self.assertEqual(1, histogram['count'])
+
   # Checks that LoFi images are served when LoFi slow connections are used and
   # the network quality estimator returns Slow2G.
   def testLoFiSlowConnection(self):
@@ -69,6 +73,50 @@
       # Verify that Lo-Fi responses were seen.
       self.assertNotEqual(0, lofi_responses)
 
+      # Verify Lo-Fi previews info bar recorded
+      histogram = test_driver.GetHistogram('Previews.InfoBarAction.LoFi', 5)
+      self.assertEqual(1, histogram['count'])
+
+  # Checks that LoFi images are NOT served when the network quality estimator
+  # returns fast connection type.
+  def testLoFiFastConnection(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+      test_driver.AddChromeArg('--enable-features='
+                               'DataReductionProxyDecidesTransform')
+      test_driver.AddChromeArg('--data-reduction-proxy-lo-fi=slow-connections-'
+                               'only')
+      # Disable server experiments such as tamper detection.
+      test_driver.AddChromeArg('--data-reduction-proxy-server-experiments-'
+                               'disabled')
+      test_driver.AddChromeArg('--force-fieldtrial-params='
+                               'NetworkQualityEstimator.Enabled:'
+                               'force_effective_connection_type/4G')
+      test_driver.AddChromeArg('--force-fieldtrials=NetworkQualityEstimator/'
+                               'Enabled')
+
+      test_driver.LoadURL('http://check.googlezip.net/static/index.html')
+
+      lofi_responses = 0
+      for response in test_driver.GetHTTPResponses():
+        if response.url.endswith('html'):
+          # Main resource should accept transforms but not be transformed.
+          self.assertEqual('lite-page',
+            response.request_headers['chrome-proxy-accept-transform'])
+          self.assertNotIn('chrome-proxy-content-transform',
+            response.response_headers)
+          if 'chrome-proxy' in response.response_headers:
+            self.assertNotIn('page-policies',
+                             response.response_headers['chrome-proxy'])
+        else:
+          # No subresources should accept transforms.
+          self.assertNotIn('chrome-proxy-accept-transform',
+            response.request_headers)
+
+      # Verify no Lo-Fi previews info bar recorded
+      histogram = test_driver.GetHistogram('Previews.InfoBarAction.LoFi', 5)
+      self.assertEqual(histogram, {})
+
   # Checks that LoFi images are not served, but the if-heavy CPAT header is
   # added when LoFi slow connections are used and the network quality estimator
   # returns 4G.
diff --git a/ui/touch_selection/touch_selection_controller.cc b/ui/touch_selection/touch_selection_controller.cc
index 71f74153..884ea9072 100644
--- a/ui/touch_selection/touch_selection_controller.cc
+++ b/ui/touch_selection/touch_selection_controller.cc
@@ -260,6 +260,25 @@
   return gfx::RectF();
 }
 
+gfx::PointF TouchSelectionController::GetActiveHandleBoundPoint() const {
+  const gfx::SelectionBound* bound = nullptr;
+  if (active_status_ == INSERTION_ACTIVE && insertion_handle_->IsActive())
+    bound = &start_;
+  if (active_status_ == SELECTION_ACTIVE) {
+    if (start_selection_handle_->IsActive())
+      bound = &start_;
+    else if (end_selection_handle_->IsActive())
+      bound = &end_;
+  }
+
+  if (!bound)
+    return gfx::PointF(0.f, 0.f);
+
+  float x = (bound->edge_top().x() + bound->edge_bottom().x()) / 2.f;
+  float y = (bound->edge_top().y() + bound->edge_bottom().y()) / 2.f;
+  return gfx::PointF(x, y);
+}
+
 const gfx::PointF& TouchSelectionController::GetStartPosition() const {
   return start_.edge_bottom();
 }
diff --git a/ui/touch_selection/touch_selection_controller.h b/ui/touch_selection/touch_selection_controller.h
index 6644e30..6ec985c 100644
--- a/ui/touch_selection/touch_selection_controller.h
+++ b/ui/touch_selection/touch_selection_controller.h
@@ -120,6 +120,10 @@
   gfx::RectF GetStartHandleRect() const;
   gfx::RectF GetEndHandleRect() const;
 
+  // Returns the middle point of selection bound corresponding to the active
+  // selection or insertion handle. If there is no active handle, returns (0,0).
+  gfx::PointF GetActiveHandleBoundPoint() const;
+
   // Returns the focal point of the start and end bounds, as defined by
   // their bottom coordinate.
   const gfx::PointF& GetStartPosition() const;
diff --git a/ui/touch_selection/touch_selection_controller_unittest.cc b/ui/touch_selection/touch_selection_controller_unittest.cc
index ba4de24b..0056940c 100644
--- a/ui/touch_selection/touch_selection_controller_unittest.cc
+++ b/ui/touch_selection/touch_selection_controller_unittest.cc
@@ -100,6 +100,7 @@
     last_event_start_ = controller_->GetStartPosition();
     last_event_end_ = controller_->GetEndPosition();
     last_event_bounds_rect_ = controller_->GetRectBetweenBounds();
+    last_event_handle_bound_middle_ = controller_->GetActiveHandleBoundPoint();
   }
 
   std::unique_ptr<TouchHandleDrawable> CreateDrawable() override {
@@ -201,6 +202,9 @@
   const gfx::RectF& GetLastEventBoundsRect() const {
     return last_event_bounds_rect_;
   }
+  const gfx::PointF& GetLastEventHandleBoundMiddle() const {
+    return last_event_handle_bound_middle_;
+  }
 
   std::vector<SelectionEventType> GetAndResetEvents() {
     std::vector<SelectionEventType> events;
@@ -228,6 +232,7 @@
   gfx::PointF selection_start_;
   gfx::PointF selection_end_;
   gfx::RectF last_event_bounds_rect_;
+  gfx::PointF last_event_handle_bound_middle_;
   std::vector<SelectionEventType> events_;
   bool caret_moved_;
   bool selection_moved_;
@@ -1261,4 +1266,96 @@
             TouchHandleOrientation::RIGHT);
 }
 
+TEST_F(TouchSelectionControllerTest, InsertionActiveBoundMiddlePoint) {
+  base::TimeTicks event_time = base::TimeTicks::Now();
+  float line_height = 10.f;
+  gfx::RectF insertion_rect(10, 0, 0, line_height);
+  bool visible = true;
+
+  OnTapEvent();
+  ChangeInsertion(insertion_rect, visible);
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_SHOWN));
+  EXPECT_EQ(gfx::PointF(0.f, 0.f), GetLastEventHandleBoundMiddle());
+
+  SetDraggingEnabled(true);
+  MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STARTED));
+  EXPECT_EQ(gfx::PointF(10.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  insertion_rect.Offset(1, 0);
+  ChangeInsertion(insertion_rect, visible);
+  event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 1, 0);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_MOVED));
+  EXPECT_EQ(gfx::PointF(11.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  insertion_rect.Offset(0, 1);
+  ChangeInsertion(insertion_rect, visible);
+  event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 1);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_MOVED));
+  EXPECT_EQ(gfx::PointF(11.f, 6.f), GetLastEventHandleBoundMiddle());
+
+  event_time += base::TimeDelta::FromMilliseconds(2 * kDefaultTapTimeoutMs);
+  event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STOPPED));
+  EXPECT_EQ(gfx::PointF(0.f, 0.f), GetLastEventHandleBoundMiddle());
+
+  SetDraggingEnabled(false);
+}
+
+TEST_F(TouchSelectionControllerTest, SelectionActiveBoundMiddlePoint) {
+  base::TimeTicks event_time = base::TimeTicks::Now();
+  float line_height = 10.f;
+  gfx::RectF start_rect(10, 0, 0, line_height);
+  gfx::RectF end_rect(50, 0, 0, line_height);
+  bool visible = true;
+  OnLongPressEvent();
+
+  ChangeSelection(start_rect, visible, end_rect, visible);
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_SHOWN));
+  EXPECT_EQ(gfx::PointF(0.f, 0.f), GetLastEventHandleBoundMiddle());
+
+  // Left handle.
+  SetDraggingEnabled(true);
+  MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 10, 5);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED));
+  EXPECT_EQ(gfx::PointF(10.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 15, 5);
+  start_rect.Offset(5, 0);
+  ChangeSelection(start_rect, visible, end_rect, visible);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED));
+  EXPECT_EQ(gfx::PointF(15.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  event_time += base::TimeDelta::FromMilliseconds(2 * kDefaultTapTimeoutMs);
+  event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 15, 5);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED));
+  EXPECT_EQ(gfx::PointF(0.f, 0.f), GetLastEventHandleBoundMiddle());
+
+  // Right handle.
+  event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 50, 5);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED));
+  EXPECT_EQ(gfx::PointF(50.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 45, 5);
+  end_rect.Offset(-5, 0);
+  ChangeSelection(start_rect, visible, end_rect, visible);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED));
+  EXPECT_EQ(gfx::PointF(45.f, 5.f), GetLastEventHandleBoundMiddle());
+
+  event_time += base::TimeDelta::FromMilliseconds(2 * kDefaultTapTimeoutMs);
+  event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 45, 5);
+  EXPECT_TRUE(controller().WillHandleTouchEvent(event));
+  EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED));
+  EXPECT_EQ(gfx::PointF(0.f, 0.f), GetLastEventHandleBoundMiddle());
+}
+
 }  // namespace ui