Import wpt@6185fc083a08ea74f0ddfffff917321fb6ffa42d

Using wpt-import in Chromium 454a4f0cb9c837740bbb0bb1f07809728f98f4a6.

Note to sheriffs: This CL imports external tests and adds
expectations for those tests; if this CL is large and causes
a few new failures, please fix the failures by adding new
lines to TestExpectations rather than reverting. See:
https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md

Directory owners for changes in this CL:
chcunningham@chromium.org, wolenetz@chromium.org:
  external/wpt/media-source
jsbell@chromium.org:
  external/wpt/resources

NOAUTOREVERT=true
TBR=raphael.kubo.da.costa

No-Export: true
Change-Id: Ia09e3aaf2750bf36e54d5e1fbc6bb85fa85476c9
Reviewed-on: https://chromium-review.googlesource.com/c/1365716
Reviewed-by: WPT Autoroller <wpt-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Commit-Queue: WPT Autoroller <wpt-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#614412}
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index b032b09e..0d08fe8 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -2175,3 +2175,4 @@
 Bug(none) http/tests/devtools/isolated-code-cache/cross-origin-test.js [ WontFix ]
 
 # ====== Tests incompatible with the default Site Isolation until here ======
+external/wpt/css/css-overscroll-behavior/overscrollBehavior-manual.html [ WontFix ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index 5fbbc85..ea4dec0 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -572,7 +572,6 @@
 crbug.com/874695 external/wpt/css/css-fonts/variations/font-style-interpolation.html [ Slow ]
 crbug.com/874695 external/wpt/css/css-layout-api/constraints-data.https.html [ Slow ]
 crbug.com/874695 external/wpt/css/cssom-view/matchMedia.xht [ Slow ]
-crbug.com/874695 external/wpt/css/cssom-view/overscrollBehavior-manual.html [ Slow ]
 crbug.com/874695 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Slow ]
 crbug.com/874695 external/wpt/css/css-transitions/transitions-animatable-properties-01.html [ Slow ]
 crbug.com/874695 external/wpt/css/css-values/vh_not_refreshing_on_chrome.html [ Slow ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
index 7f83caf..b82dfd4 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
@@ -1669,6 +1669,12 @@
      {}
     ]
    ],
+   "css/css-overscroll-behavior/overscrollBehavior-manual.html": [
+    [
+     "/css/css-overscroll-behavior/overscrollBehavior-manual.html",
+     {}
+    ]
+   ],
    "css/css-scroll-snap/snap-at-user-scroll-end-manual.html": [
     [
      "/css/css-scroll-snap/snap-at-user-scroll-end-manual.html",
@@ -3583,12 +3589,6 @@
      {}
     ]
    ],
-   "css/cssom-view/overscrollBehavior-manual.html": [
-    [
-     "/css/cssom-view/overscrollBehavior-manual.html",
-     {}
-    ]
-   ],
    "css/selectors/focus-visible-001-manual.html": [
     [
      "/css/selectors/focus-visible-001-manual.html",
@@ -170511,6 +170511,11 @@
      {}
     ]
    ],
+   "media-source/mp4/invalid-codec.mp4": [
+    [
+     {}
+    ]
+   ],
    "media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json": [
     [
      {}
@@ -170616,6 +170621,11 @@
      {}
     ]
    ],
+   "media-source/webm/invalid-codec.webm": [
+    [
+     {}
+    ]
+   ],
    "media-source/webm/test-a-128k-44100Hz-1ch-manifest.json": [
     [
      {}
@@ -176966,12 +176976,12 @@
      {}
     ]
    ],
-   "resources/chromium/mojo_layouttest_test.mojom.js": [
+   "resources/chromium/mojo_web_test_helper_test.mojom.js": [
     [
      {}
     ]
    ],
-   "resources/chromium/mojo_layouttest_test.mojom.js.headers": [
+   "resources/chromium/mojo_web_test_helper_test.mojom.js.headers": [
     [
      {}
     ]
@@ -181156,6 +181166,16 @@
      {}
     ]
    ],
+   "svg/interact/scripted/resources/blank.htm": [
+    [
+     {}
+    ]
+   ],
+   "svg/interact/scripted/tabindex-focus-flag-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "svg/linking/reftests/href-a-element-ref.html": [
     [
      {}
@@ -183096,6 +183116,11 @@
      {}
     ]
    ],
+   "web-nfc/idlharness.https.window-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "web-nfc/nfc_push.https-expected.txt": [
     [
      {}
@@ -244012,6 +244037,12 @@
      {}
     ]
    ],
+   "media-source/mediasource-invalid-codec.html": [
+    [
+     "/media-source/mediasource-invalid-codec.html",
+     {}
+    ]
+   ],
    "media-source/mediasource-is-type-supported.html": [
     [
      "/media-source/mediasource-is-type-supported.html",
@@ -272932,6 +272963,30 @@
      {}
     ]
    ],
+   "svg/interact/scripted/composed.window.svg": [
+    [
+     "/svg/interact/scripted/composed.window.svg",
+     {}
+    ]
+   ],
+   "svg/interact/scripted/focus-events.svg": [
+    [
+     "/svg/interact/scripted/focus-events.svg",
+     {}
+    ]
+   ],
+   "svg/interact/scripted/focus-tabindex-default-value.svg": [
+    [
+     "/svg/interact/scripted/focus-tabindex-default-value.svg",
+     {}
+    ]
+   ],
+   "svg/interact/scripted/tabindex-focus-flag.svg": [
+    [
+     "/svg/interact/scripted/tabindex-focus-flag.svg",
+     {}
+    ]
+   ],
    "svg/painting/inheritance.svg": [
     [
      "/svg/painting/inheritance.svg",
@@ -300380,7 +300435,7 @@
    "testharness"
   ],
   "bluetooth/resources/bluetooth-helpers.js": [
-   "9b23d650baf2a77c105f61df2d8f197812aefce0",
+   "c4e26077c34283cc6d442cc8bc57f799eadd5a99",
    "support"
   ],
   "bluetooth/resources/health-thermometer-iframe.html": [
@@ -345147,6 +345202,10 @@
    "e49fa49bc4e26572a68ad947e8e82a63ee46d4e2",
    "testharness"
   ],
+  "css/css-overscroll-behavior/overscrollBehavior-manual.html": [
+   "97f52984a51ae4157ec8ed91ddf4b3b8d405bec6",
+   "manual"
+  ],
   "css/css-paint-api/META.yml": [
    "082a0977fa8569038eeab3e7595496256f87d725",
    "support"
@@ -371999,10 +372058,6 @@
    "772cc34f05bffc5b8445cd23ba13d9357269b84b",
    "reftest"
   ],
-  "css/cssom-view/overscrollBehavior-manual.html": [
-   "d66317fe306d264708c3cac725d562c22034a5f6",
-   "manual"
-  ],
   "css/cssom-view/resources/elementsFromPoint.js": [
    "ba986ef3f568d4971eb4e84c4faaeae6e276b975",
    "support"
@@ -410124,7 +410179,7 @@
    "support"
   ],
   "interfaces/web-nfc.idl": [
-   "d54773be499366806bbd93c7fc119ff7a3a2ff72",
+   "3dd4817eb0dfb329720b0e6da5097bf2d28cc6b4",
    "support"
   ],
   "interfaces/web-share.idl": [
@@ -410923,6 +410978,10 @@
    "f92fdbc3c71eb1caeb8c49b40be29d64434687c6",
    "testharness"
   ],
+  "media-source/mediasource-invalid-codec.html": [
+   "19aa00c4d5f4966ef8a5de657341141f69c08ea3",
+   "testharness"
+  ],
   "media-source/mediasource-is-type-supported.html": [
    "a364693298d9f87b8c29ef1d609986e247667cca",
    "testharness"
@@ -411019,6 +411078,10 @@
    "bd202919899c5586a62790a11780649642447066",
    "support"
   ],
+  "media-source/mp4/invalid-codec.mp4": [
+   "6fcc7c21a698ab9d9622c4a6fb6685aeafdd6f40",
+   "support"
+  ],
   "media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json": [
    "f3caa460e9f078278680c6cdb9e1ce914a8c59ae",
    "support"
@@ -411103,6 +411166,10 @@
    "1b0e7b56a6b74b4c1636c80911741cbb565d0397",
    "support"
   ],
+  "media-source/webm/invalid-codec.webm": [
+   "f1c8bdd7abba1f6b24dc0a5d44463c3bda770d0d",
+   "support"
+  ],
   "media-source/webm/test-a-128k-44100Hz-1ch-manifest.json": [
    "524da8149fe6d36c891501d059f85621f06cde36",
    "support"
@@ -433307,11 +433374,11 @@
    "6805c323df5a975231648b830e33ce183c3cbbd3",
    "support"
   ],
-  "resources/chromium/mojo_layouttest_test.mojom.js": [
-   "babaeda156fc8c10afcc08c6652576e32a6741e1",
+  "resources/chromium/mojo_web_test_helper_test.mojom.js": [
+   "cfbad086898778b920c2d750890c870e082dc60a",
    "support"
   ],
-  "resources/chromium/mojo_layouttest_test.mojom.js.headers": [
+  "resources/chromium/mojo_web_test_helper_test.mojom.js.headers": [
    "6805c323df5a975231648b830e33ce183c3cbbd3",
    "support"
   ],
@@ -433420,7 +433487,7 @@
    "support"
   ],
   "resources/testharness.js": [
-   "2e14c30730d2efaf8fab98328f0a07d270627802",
+   "b08074b96bd64acdec4b0aaead9cf957aa725e85",
    "support"
   ],
   "resources/testharness.js.headers": [
@@ -439067,6 +439134,30 @@
    "94836f7c0331cb8a1caebacef02a75018b2b4ddb",
    "testharness"
   ],
+  "svg/interact/scripted/composed.window.svg": [
+   "b63dcf024439446e0624f98cfa9f7ceb01544524",
+   "testharness"
+  ],
+  "svg/interact/scripted/focus-events.svg": [
+   "bf307b79fdf10c578d93332f57d4de2ab844eb34",
+   "testharness"
+  ],
+  "svg/interact/scripted/focus-tabindex-default-value.svg": [
+   "3af1acffd8de01618fb1dc9e8a753bcbb0357f1c",
+   "testharness"
+  ],
+  "svg/interact/scripted/resources/blank.htm": [
+   "18ecdcb795c33d6ab7bbb43f647947defca5634d",
+   "support"
+  ],
+  "svg/interact/scripted/tabindex-focus-flag-expected.txt": [
+   "5ca66db46326fb522bffc84842fe0fd6adae8e5e",
+   "support"
+  ],
+  "svg/interact/scripted/tabindex-focus-flag.svg": [
+   "29ba209b2badecaac695a678540cc53e5c4ed3f5",
+   "testharness"
+  ],
   "svg/linking/reftests/href-a-element-attr-change.html": [
    "c74b2e015613a09d1cecb5a0c3136d26f07e2a5b",
    "reftest"
@@ -442871,6 +442962,10 @@
    "2a0e82019549591b88878ca70fc6baf616d34c29",
    "support"
   ],
+  "web-nfc/idlharness.https.window-expected.txt": [
+   "4e21915ce19da634ab0e7da170b00e8b98ca04a6",
+   "support"
+  ],
   "web-nfc/idlharness.https.window.js": [
    "0b3b099b7721eb3b7efb336d0f3f161bbcb23588",
    "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/overscrollBehavior-manual.html b/third_party/blink/web_tests/external/wpt/css/css-overscroll-behavior/overscrollBehavior-manual.html
similarity index 98%
rename from third_party/blink/web_tests/external/wpt/css/cssom-view/overscrollBehavior-manual.html
rename to third_party/blink/web_tests/external/wpt/css/css-overscroll-behavior/overscrollBehavior-manual.html
index d66317f..97f52984 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/overscrollBehavior-manual.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-overscroll-behavior/overscrollBehavior-manual.html
@@ -1,6 +1,7 @@
 <!doctype html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://drafts.csswg.org/css-overscroll-behavior">
 
 <style>
 .outer {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
index d54773b..3dd4817 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
@@ -30,9 +30,13 @@
 
 typedef (DOMString or ArrayBuffer or NFCMessage) NFCMessageSource;
 
+[Constructor(), SecureContext, Exposed=Window]
+interface NFCWriter {
+  Promise<void> push(NFCMessageSource message, optional NFCPushOptions options);
+};
+
 [SecureContext]
 interface NFC {
-  Promise<void> push(NFCMessageSource message, optional NFCPushOptions options);
   Promise<void> watch(MessageCallback callback, optional NFCWatchOptions options);
 };
 
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mediasource-invalid-codec.html b/third_party/blink/web_tests/external/wpt/media-source/mediasource-invalid-codec.html
new file mode 100644
index 0000000..19aa00c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/media-source/mediasource-invalid-codec.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>SourceBuffer handling of invalid codecs in the initialization segment</title>
+    <link rel="author" title="Alicia Boya García" href="mailto:aboya@igalia.com">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="mediasource-util.js"></script>
+</head>
+<body>
+<div id="log"></div>
+<script>
+    function testInvalidCodec(test, mediaElement, mediaSource, mediaType, url) {
+        assert_true(MediaSource.isTypeSupported(mediaType), `Media type not supported in this browser: isTypeSupported('${mediaType}')`);
+
+        MediaSourceUtil.loadBinaryData(test, url, (mediaData) => {
+            _testInvalidCodecWithData(test, mediaElement, mediaSource, mediaType, mediaData);
+        });
+    }
+
+    function _testInvalidCodecWithData(test, mediaElement, mediaSource, mediaType, mediaData) {
+        const sourceBuffer = mediaSource.addSourceBuffer(mediaType);
+        sourceBuffer.appendBuffer(mediaData);
+        test.expectEvent(sourceBuffer, 'error', 'Append ended with error');
+        test.waitForExpectedEvents(() => {
+            test.done();
+        })
+    }
+
+    // These test cases provide a typical media MIME type, but the actual files have been mangled to declare a different,
+    // unsupported, fictitious codec (MP4 fourcc: 'zzzz', WebM codec id 'V_ZZZ'). The browser should report a parsing
+    // error.
+
+    mediasource_test((test, mediaElement, mediaSource) => {
+        testInvalidCodec(test, mediaElement, mediaSource, 'video/mp4;codecs="avc1.4D4001"', 'mp4/invalid-codec.mp4');
+    }, 'Test an MP4 with an invalid codec results in an error.');
+
+    mediasource_test((test, mediaElement, mediaSource) => {
+        testInvalidCodec(test, mediaElement, mediaSource, 'video/webm; codecs="vp8"', 'webm/invalid-codec.webm');
+    }, 'Test a WebM with an invalid codec results in an error.');
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/media-source/mp4/invalid-codec.mp4 b/third_party/blink/web_tests/external/wpt/media-source/mp4/invalid-codec.mp4
new file mode 100644
index 0000000..6fcc7c2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/media-source/mp4/invalid-codec.mp4
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/media-source/webm/invalid-codec.webm b/third_party/blink/web_tests/external/wpt/media-source/webm/invalid-codec.webm
new file mode 100644
index 0000000..f1c8bdd7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/media-source/webm/invalid-codec.webm
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/resources/testharness.js b/third_party/blink/web_tests/external/wpt/resources/testharness.js
index 2e14c30..b08074b9 100644
--- a/third_party/blink/web_tests/external/wpt/resources/testharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/testharness.js
@@ -1486,11 +1486,9 @@
         this.index = null;
 
         this.properties = properties;
-        var timeout = properties.timeout ? properties.timeout : settings.test_timeout;
-        if (timeout !== null) {
-            this.timeout_length = timeout * tests.timeout_multiplier;
-        } else {
-            this.timeout_length = null;
+        this.timeout_length = settings.test_timeout;
+        if (this.timeout_length !== null) {
+            this.timeout_length *= tests.timeout_multiplier;
         }
 
         this.message = null;
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/composed.window.svg b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/composed.window.svg
new file mode 100644
index 0000000..b63dcf02
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/composed.window.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml">
+    <title>Focus events are composed</title>
+    <metadata>
+        <h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#Focus"/>
+    </metadata>
+    <a id="a1" href="#"></a>
+    <h:script src="/resources/testharness.js"/>
+    <h:script src="/resources/testharnessreport.js"/>
+    <script><![CDATA[
+    async_test(t => {
+        const anchor = document.getElementById("a1");
+        let happened = false;
+        anchor.onfocus = t.step_func(e => {
+            happened = true;
+            assert_equals(e.type, "focus");
+            assert_true(e.composed);
+        });
+        anchor.focus();
+        anchor.onblur = t.step_func_done(e => {
+            assert_true(happened);
+            assert_equals(e.type, "blur");
+            assert_true(e.composed);
+        });
+        anchor.blur();
+    }, "Focus events are composed");
+    ]]></script>
+</svg>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-events.svg b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-events.svg
new file mode 100644
index 0000000..bf307b79
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-events.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml">
+    <title>Focus management</title>
+    <metadata>
+        <h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#Focus"/>
+    </metadata>
+    <a id="a1" href="#"></a>
+    <a id="a2" href="#"></a>
+    <h:script src="/resources/testharness.js"/>
+    <h:script src="/resources/testharnessreport.js"/>
+    <script><![CDATA[
+    var a1 = document.getElementById('a1'),
+    a2 = document.getElementById('a2'),
+    t1 = async_test("focusing on a focusable element fires a focus event at the element"),
+    t2 = async_test("focusing on a focusable element fires a blur event at the previous focussed element");
+
+    a2.onfocus = t1.step_func_done(function(e){
+        assert_true(e.isTrusted, "focus event is trusted");
+        assert_false(e.bubbles, "focus event doesn't bubble");
+        assert_false(e.cancelable, "focus event is not cancelable");
+        assert_equals(document.activeElement, a2);
+    });
+
+    a1.onblur = t2.step_func_done(function(e){
+        assert_true(e.isTrusted, "blur event is trusted");
+        assert_false(e.bubbles, "blur event doesn't bubble");
+        assert_false(e.cancelable, "blur event is not cancelable");
+    });
+
+    a1.focus();
+    a2.focus();
+    ]]></script>
+</svg>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-tabindex-default-value.svg b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-tabindex-default-value.svg
new file mode 100644
index 0000000..3af1acff
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/focus-tabindex-default-value.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml">
+    <title>SVG Test: focus - default value of tabindex</title>
+    <metadata>
+        <h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#Focus"/>
+    </metadata>
+    <a id="test1" href="#"></a>
+    <rect id="test2"></rect>
+    <h:script src="/resources/testharness.js"/>
+    <h:script src="/resources/testharnessreport.js"/>
+    <script><![CDATA[
+    test(function() {
+        assert_equals(document.getElementById("test1").tabIndex, 0, "The value of tabIndex attribute should be 0.");
+    }, "The default value of tabIndex attribute must be 0 for elements that are focusable");
+
+    test(function() {
+        assert_equals(document.getElementById("test2").tabIndex, -1, "The value of tabIndex attribute should be -1.");
+    }, "The default value of tabIndex attribute must be -1 for elements that are not focusable");
+    ]]></script>
+</svg>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/resources/blank.htm b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/resources/blank.htm
new file mode 100644
index 0000000..18ecdcb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/resources/blank.htm
@@ -0,0 +1 @@
+<html></html>
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag-expected.txt b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag-expected.txt
new file mode 100644
index 0000000..5ca66db
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag-expected.txt
@@ -0,0 +1,46 @@
+This is a testharness.js-based test.
+FAIL The document root element should be focusable. assert_equals: expected Element node <svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://w... but got null
+PASS rect should not be focusable.
+PASS svg should not be focusable.
+FAIL rect[focusable=true] should be focusable. assert_equals: expected Element node <rect focusable="true"></rect> but got null
+PASS a should not be focusable.
+PASS a[href] should be focusable.
+FAIL a[focusable=false] should not be focusable. assert_not_equals: got disallowed value Element node <a href="" focusable="false"></a>
+FAIL iframe should be focusable. assert_equals: expected Element node <iframe src="resources/blank.htm"></iframe> but got Element node <a href="" focusable="false"></a>
+FAIL audio[controls] should be focusable. assert_equals: expected Element node <audio controls="controls"></audio> but got Element node <a href="" focusable="false"></a>
+FAIL video[controls] should be focusable. assert_equals: expected Element node <video controls="controls"></video> but got Element node <a href="" focusable="false"></a>
+FAIL canvas[tabindex] should be focusable. assert_equals: expected Element node <canvas tabindex="0"></canvas> but got Element node <a href="" focusable="false"></a>
+PASS circle[tabindex] should be focusable.
+PASS ellipse[tabindex] should be focusable.
+PASS foreignObject[tabindex] should be focusable.
+PASS g[tabindex] should be focusable.
+PASS image[tabindex] should be focusable.
+PASS line[tabindex] should be focusable.
+FAIL mesh[tabindex] should be focusable. assert_equals: expected Element node <mesh tabindex="0"></mesh> but got Element node <line tabindex="0"></line>
+PASS path[tabindex] should be focusable.
+PASS polygon[tabindex] should be focusable.
+PASS rect[tabindex] should be focusable.
+PASS svg[tabindex] should be focusable.
+PASS switch[tabindex] should be focusable.
+PASS text[tabindex] should be focusable.
+PASS textPath[tabindex] should be focusable.
+PASS tspan[tabindex] should be focusable.
+FAIL unknown[tabindex] should be focusable. assert_equals: expected Element node <unknown tabindex="0"></unknown> but got Element node <tspan tabindex="0"></tspan>
+PASS use[tabindex] should be focusable.
+PASS clipPath[tabindex] should not be focusable.
+PASS defs[tabindex] should not be focusable.
+PASS desc[tabindex] should not be focusable.
+PASS hatch[tabindex] should not be focusable.
+PASS linearGradient[tabindex] should not be focusable.
+PASS marker[tabindex] should not be focusable.
+PASS mask[tabindex] should not be focusable.
+PASS meshgradient[tabindex] should not be focusable.
+PASS metadata[tabindex] should not be focusable.
+PASS pattern[tabindex] should not be focusable.
+PASS radialGradient[tabindex] should not be focusable.
+PASS script[tabindex] should not be focusable.
+PASS style[tabindex] should not be focusable.
+PASS title[tabindex] should not be focusable.
+PASS symbol[tabindex] should not be focusable.
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag.svg b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag.svg
new file mode 100644
index 0000000..29ba209b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/tabindex-focus-flag.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:h="http://www.w3.org/1999/xhtml">
+    <metadata>
+        <h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#Focus"/>
+    </metadata>
+    <g id="default-samples">
+        <!-- non-default focusable renderable element -->
+        <rect></rect>
+        <svg></svg>
+        <!-- for compatibility with SVG Tiny 1.2 focusable attribute, user agents should treat an element with a value of true for that attribute as focusable -->
+        <rect focusable="true"></rect>
+        <!-- anchors need a href to be focusable -->
+        <a></a>
+        <a href=""></a>
+        <!-- Remove default focus behaviour with focusable="false" (SVG Tiny 1.2 compatibility) -->
+        <a href="" focusable="false"></a>
+        <!-- iframe, and audio/video with controls are default focusable -->
+        <h:iframe src="resources/blank.htm"></h:iframe>
+        <h:audio controls="controls"></h:audio>
+        <h:video controls="controls"></h:video>
+        <!-- non-default focusable renderable element with valid tabindex -->
+        <h:canvas tabindex="0"></h:canvas>
+        <circle tabindex="0"></circle>
+        <ellipse tabindex="0"></ellipse>
+        <foreignObject tabindex="0"></foreignObject>
+        <g tabindex="0"></g>
+        <image tabindex="0"></image>
+        <line tabindex="0"></line>
+        <mesh tabindex="0"></mesh>
+        <path tabindex="0"></path>
+        <polygon tabindex="0"></polygon>
+        <rect tabindex="0"></rect>
+        <svg tabindex="0"></svg>
+        <switch tabindex="0"></switch>
+        <text tabindex="0">
+            <textPath tabindex="0"></textPath>
+            <tspan tabindex="0"></tspan>
+        </text>
+        <unknown tabindex="0"></unknown>
+        <use tabindex="0"></use>
+        <!-- never-rendered element with valid tabindex -->
+        <clipPath tabindex="0"></clipPath>
+        <defs tabindex="0"></defs>
+        <desc tabindex="0"></desc>
+        <hatch tabindex="0"></hatch>
+        <linearGradient tabindex="0"></linearGradient>
+        <marker tabindex="0"></marker>
+        <mask tabindex="0"></mask>
+        <meshgradient tabindex="0"></meshgradient>
+        <metadata tabindex="0"></metadata>
+        <pattern tabindex="0"></pattern>
+        <radialGradient tabindex="0"></radialGradient>
+        <script tabindex="0"></script>
+        <style tabindex="0"></style>
+        <title tabindex="0"></title>
+        <symbol tabindex="0"></symbol>
+    </g>
+    <h:script src="/resources/testharness.js"/>
+    <h:script src="/resources/testharnessreport.js"/>
+    <script><![CDATA[
+    var root = document.querySelector("svg");
+
+    test(() => {
+        root.focus();
+        assert_equals(document.activeElement, root);
+    }, 'The document root element should be focusable.');
+
+    const defaultList = [
+        ['rect', false],
+        ['svg', false],
+        ['rect[focusable=true]', true],
+        ['a', false],
+        ['a[href]', true],
+        ['a[focusable=false]', false],
+        ['iframe', true],
+        ['audio[controls]', true],
+        ['video[controls]', true],
+        ['canvas[tabindex]', true],
+        ['circle[tabindex]', true],
+        ['ellipse[tabindex]', true],
+        ['foreignObject[tabindex]', true],
+        ['g[tabindex]', true],
+        ['image[tabindex]', true],
+        ['line[tabindex]', true],
+        ['mesh[tabindex]', true],
+        ['path[tabindex]', true],
+        ['polygon[tabindex]', true],
+        ['rect[tabindex]', true],
+        ['svg[tabindex]', true],
+        ['switch[tabindex]', true],
+        ['text[tabindex]', true],
+        ['textPath[tabindex]', true],
+        ['tspan[tabindex]', true],
+        ['unknown[tabindex]', true],
+        ['use[tabindex]', true],
+        ['clipPath[tabindex]', false],
+        ['defs[tabindex]', false],
+        ['desc[tabindex]', false],
+        ['hatch[tabindex]', false],
+        ['linearGradient[tabindex]', false],
+        ['marker[tabindex]', false],
+        ['mask[tabindex]', false],
+        ['meshgradient[tabindex]', false],
+        ['metadata[tabindex]', false],
+        ['pattern[tabindex]', false],
+        ['radialGradient[tabindex]', false],
+        ['script[tabindex]', false],
+        ['style[tabindex]', false],
+        ['title[tabindex]', false],
+        ['symbol[tabindex]', false],
+    ];
+
+    for (entry of defaultList) {
+        test(() => {
+            var element = document.querySelector('#default-samples ' + entry[0]);
+            element.focus();
+            if (entry[1])
+            assert_equals(document.activeElement, element);
+            else
+            assert_not_equals(document.activeElement, element);
+        }, entry[0] + ' should ' + (entry[1] ? '' : 'not ') + 'be focusable.');
+    }
+    ]]></script>
+</svg>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt
new file mode 100644
index 0000000..4e21915c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/web-nfc/idlharness.https.window-expected.txt
@@ -0,0 +1,25 @@
+This is a testharness.js-based test.
+PASS idl_test setup
+PASS Partial interface Navigator: original interface defined
+FAIL NFCWriter interface: existence and properties of interface object assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface object length assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface object name assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface: existence and properties of interface prototype object assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+FAIL NFCWriter interface: operation push(NFCMessageSource, NFCPushOptions) assert_own_property: self does not have own property "NFCWriter" expected property "NFCWriter" missing
+PASS NFC interface: existence and properties of interface object
+PASS NFC interface object length
+PASS NFC interface object name
+PASS NFC interface: existence and properties of interface prototype object
+PASS NFC interface: existence and properties of interface prototype object's "constructor" property
+PASS NFC interface: existence and properties of interface prototype object's @@unscopables property
+PASS NFC interface: operation watch(MessageCallback, NFCWatchOptions)
+PASS NFC must be primary interface of navigator.nfc
+PASS Stringification of navigator.nfc
+PASS NFC interface: navigator.nfc must inherit property "watch(MessageCallback, NFCWatchOptions)" with the proper type
+PASS NFC interface: calling watch(MessageCallback, NFCWatchOptions) on navigator.nfc with too few arguments must throw TypeError
+PASS Navigator interface: attribute nfc
+PASS Navigator interface: navigator must inherit property "nfc" with the proper type
+Harness: the test ran to completion.
+