diff options
author | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2020-05-15 08:19:23 +0000 |
---|---|---|
committer | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2020-05-15 10:39:22 +0000 |
commit | db12fbb0be4e0c689070a27221f27de6cb447618 (patch) | |
tree | 04d0ca1bbcc8476a43e7c75b7d24e436b2bc186f | |
parent | e1cc38bea8a701108b6f2fa809f341769613b55f (diff) | |
download | servo-db12fbb0be4e0c689070a27221f27de6cb447618.tar.gz servo-db12fbb0be4e0c689070a27221f27de6cb447618.zip |
Update web-platform-tests to revision 73bd4355b891665829c66e1b83d64bcc29197a16
146 files changed, 2397 insertions, 794 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini deleted file mode 100644 index f29da48a2a0..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-003.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini index f8e7e539aae..4a1e8110f6f 100644 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini @@ -2,6 +2,3 @@ [Hit test intersecting scaled box] expected: FAIL - [Hit test within unscaled box] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..e38782d8c85 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,4 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini index 23c61ede1a1..c131078eace 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini @@ -17,6 +17,3 @@ [test the top of layer] expected: FAIL - [test some point of the element: top left corner] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini new file mode 100644 index 00000000000..e181af5397f --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini @@ -0,0 +1,4 @@ +[elementsFromPoint-invalid-cases.html] + [The root element is the last element returned for otherwise empty queries within the viewport] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini index b46b01e499c..a08d89ae8c0 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini @@ -315,24 +315,24 @@ [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: combined response Content-Type: */* text/html] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] + [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: separate response Content-Type: text/plain ] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini index 8d0261f22a0..c7413d589dc 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini @@ -56,6 +56,9 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript; charset=windows-1252 text/javascript] + [separate text/javascript;charset=windows-1252 error text/javascript] + expected: FAIL + + [separate text/javascript;charset=windows-1252 text/javascript] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini index 1d1d4af041d..30e1b851fd4 100644 --- a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini @@ -8,9 +8,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff] - expected: FAIL - [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini index 75d75b4cda2..dc2e45516de 100644 --- a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini +++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_2.html] +[traverse_the_history_5.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index af14e19a466..f45aaafe1c5 100644 --- a/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/metadata-layout-2020/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,20 +1,16 @@ [supported-elements.html] - expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL [Host element with delegatesFocus including no focusable descendants should be skipped] - expected: NOTRUN + expected: FAIL [Element with tabindex should support autofocus] - expected: TIMEOUT + expected: FAIL [Area element should support autofocus] - expected: NOTRUN + expected: FAIL [Host element with delegatesFocus should support autofocus] - expected: NOTRUN - - [Non-HTMLElement should not support autofocus] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 42ebcc9d57e..88f4ddd0e9a 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-1.html] - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index daa518bd0e3..c6f45be1eb2 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-2.html] - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 338d283eb0e..295031c1812 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index f4f994c5d6f..7a36937927c 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,5 +1,4 @@ [iframe_sandbox_popups_nonescaping-3.html] - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini new file mode 100644 index 00000000000..6d133b8ec69 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini @@ -0,0 +1,4 @@ +[input-pattern-dynamic-value.html] + [input validation is updated after pattern attribute change] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini deleted file mode 100644 index bcd2fd0eab8..00000000000 --- a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[077.html] - [ adding several types of scripts through the DOM and removing some of them confuses scheduler ] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini new file mode 100644 index 00000000000..425ded6efb7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini @@ -0,0 +1,19 @@ +[readwrite-readonly.html] + [The :read-write pseudo-class must not match input elements to which the readonly attribute does not apply] + expected: FAIL + + [The :read-only pseudo-class must match input elements to which the readonly attribute does not apply] + expected: FAIL + + [The :read-only pseudo-class must not match elements that are editable] + expected: FAIL + + [The :read-only pseudo-class must not match elements that are editing hosts] + expected: FAIL + + [The :read-write pseudo-class must match elements that are editing hosts] + expected: FAIL + + [The :read-write pseudo-class must match elements that are editable] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini index f565058ace3..7c4fb302585 100644 --- a/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini +++ b/tests/wpt/metadata-layout-2020/url/a-element-xhtml.xhtml.ini @@ -32,3 +32,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/url/a-element.html.ini b/tests/wpt/metadata-layout-2020/url/a-element.html.ini index 557fc46d3c9..a2237c8fdef 100644 --- a/tests/wpt/metadata-layout-2020/url/a-element.html.ini +++ b/tests/wpt/metadata-layout-2020/url/a-element.html.ini @@ -32,3 +32,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/url/failure.html.ini b/tests/wpt/metadata-layout-2020/url/failure.html.ini index d49972a78db..a4eb6b655e7 100644 --- a/tests/wpt/metadata-layout-2020/url/failure.html.ini +++ b/tests/wpt/metadata-layout-2020/url/failure.html.ini @@ -161,3 +161,93 @@ [Location's href: \\\\\\.\\Y: should throw] expected: FAIL + [XHR: http://a>b should throw] + expected: FAIL + + [Location's href: non-special://a>b should throw] + expected: FAIL + + [Location's href: non-special://a^b should throw] + expected: FAIL + + [URL's href: http://a<b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a^b should throw] + expected: FAIL + + [URL's href: http://a>b should throw] + expected: FAIL + + [window.open(): http://a<b should throw] + expected: FAIL + + [URL's href: non-special://a^b should throw] + expected: FAIL + + [window.open(): non-special://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a>b should throw] + expected: FAIL + + [XHR: http://a^b should throw] + expected: FAIL + + [URL's href: non-special://a<b should throw] + expected: FAIL + + [window.open(): http://a>b should throw] + expected: FAIL + + [window.open(): non-special://a<b should throw] + expected: FAIL + + [XHR: non-special://a>b should throw] + expected: FAIL + + [XHR: non-special://a<b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a>b should throw] + expected: FAIL + + [Location's href: http://a<b should throw] + expected: FAIL + + [XHR: non-special://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a<b should throw] + expected: FAIL + + [window.open(): http://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a<b should throw] + expected: FAIL + + [Location's href: http://a>b should throw] + expected: FAIL + + [URL's href: http://a^b should throw] + expected: FAIL + + [XHR: http://a<b should throw] + expected: FAIL + + [Location's href: http://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a^b should throw] + expected: FAIL + + [URL's href: non-special://a>b should throw] + expected: FAIL + + [Location's href: non-special://a<b should throw] + expected: FAIL + + [window.open(): non-special://a>b should throw] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini b/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini index 59eadbede84..32594acfcb0 100644 --- a/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini +++ b/tests/wpt/metadata-layout-2020/url/url-constructor.html.ini @@ -32,3 +32,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini b/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini new file mode 100644 index 00000000000..83557144ecb --- /dev/null +++ b/tests/wpt/metadata-layout-2020/webdriver/tests/perform_actions/pointer_tripleclick.py.ini @@ -0,0 +1,4 @@ +[pointer_tripleclick.py] + [test_tripleclick_at_coordinates] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini index 10dda3a6659..6d92f8835c6 100644 --- a/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini +++ b/tests/wpt/metadata-layout-2020/workers/shared-worker-in-data-url-context.window.js.ini @@ -1,7 +1,8 @@ [shared-worker-in-data-url-context.window.html] + expected: TIMEOUT [Create a shared worker in a data url frame] - expected: FAIL + expected: TIMEOUT [Create a data url shared worker in a data url frame] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 801d3a0d464..e4a11d75e8b 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -10,6 +10,13 @@ null, {} ] + ], + "line-pushed-by-floats-crash.html": [ + "ace28cc71c826eacc7bc5c624a8d45cd59198ba9", + [ + null, + {} + ] ] }, "floats-clear": { @@ -2053,50 +2060,6 @@ ] }, "clipboard-apis": { - "async-write-blobs-read-blobs-manual.https.html": [ - "f53d7f9c36e2b26082d180de227dd1675ca769dc", - [ - null, - {} - ] - ], - "async-write-image-read-image-manual.https.html": [ - "71d14984953974a66f769edf9a3566fe526cdb6f", - [ - null, - {} - ] - ], - "detached-iframe": { - "read-on-detaching-iframe-manual.https.html": [ - "8361ceff125c69c4b7f79e8dec4e648deeac4f32", - [ - null, - {} - ] - ], - "write-on-detaching-iframe-manual.https.html": [ - "4a3dbd7dc327fcee6b8305b9a837b80d933b0fa7", - [ - null, - {} - ] - ], - "write-read-on-detached-iframe-manual.https.html": [ - "af12ff8d880df8f7e8fb72f10bb12ad6acff0060", - [ - null, - {} - ] - ], - "writeText-readText-on-detached-iframe-manual.https.html": [ - "c2d8be1ace2528242eb015b37c9da0e11895e857", - [ - null, - {} - ] - ] - }, "events": { "copy-event-manual.html": [ "9f9f1950e7cad11da8cc9e8984f130e182d64d64", @@ -2119,36 +2082,6 @@ {} ] ] - }, - "text-write-read": { - "async-write-read-manual.https.html": [ - "14488b1e71666089981430538596040accb704d0", - [ - null, - {} - ] - ], - "async-write-readText-manual.https.html": [ - "c76df06a8b0216b7ae6d1c3944d3b063fb694b4f", - [ - null, - {} - ] - ], - "async-writeText-read-manual.https.html": [ - "e74726ec5e7f3d37572fd247e85acd91db6e9d77", - [ - null, - {} - ] - ], - "async-writeText-readText-manual.https.html": [ - "d2c43f0b6f20ad516e4058fe51fc8a0d6aa14d4c", - [ - null, - {} - ] - ] } }, "console": { @@ -229075,7 +229008,7 @@ ] ], "drawImage-from-blob.tentative.html": [ - "633f7e4f7e3e8b5e36129f54fe7a0fb46642144a", + "e84fce715f12715adcd85129155cd1c22c4fbd48", [ null, [ @@ -229140,7 +229073,7 @@ ] ], "drawImage-with-src-rect.tentative.html": [ - "260f96e5cac13e800762ce55db08e36838f85abc", + "47d1f8b431b0072b8615ce85ca631a3bd5864698", [ null, [ @@ -245506,7 +245439,7 @@ [] ], "accept-ch-feature-policy-navigation.https.html.headers": [ - "f9595a794d9c93dca09f371f5797399a9204ed53", + "1fa9c5cb80064e928b9288ada154ac3c3ccdcd3e", [] ], "accept-ch-feature-policy.sub.https.html.headers": [ @@ -245543,8 +245476,16 @@ "835ef396b8bae0294088bc0231422c8c0f446a45", [] ], + "accept-ch-blank.html": [ + "8a2e40ad9003058e71289f994ee51430246734d6", + [] + ], + "accept-ch-blank.html.headers": [ + "25215abdf7376ede28190981f543ae339552284d", + [] + ], "accept-ch-test.js": [ - "5275057c3e5b4b8b4eeee81942b8bdfefa79233e", + "879745706c01af6744abf3d0a641380dea4645d5", [] ], "accept-ch.html": [ @@ -245598,9 +245539,21 @@ "http-equiv-accept-ch.html.headers": [ "27140bf36e4dbd22b8f7190587f42a570c9d12bd", [] + ], + "no-accept-ch.html": [ + "16ed6c1a7cb1812559108c0369da2eaa63580984", + [] + ], + "no-accept-ch.html.headers": [ + "cb762eff806849df46dc758ef7b98b63f27f54c9", + [] ] } }, + "http-equiv-accept-ch-merge.https.html.headers": [ + "8759b65606b192b0dcb73cfd465de8529a159ba0", + [] + ], "resources": { "accept-ch-different.html": [ "05cc0b61b07c36fca5816e277df1dc98e70d9ba1", @@ -245635,7 +245588,7 @@ [] ], "expect-client-hints-headers-iframe.py": [ - "e72d77c47d9aae36c619e8e065e5685f7a9c166b", + "25c2b2f765ddb32c11d2c6a7645e4078b23ffce8", [] ], "expect-client-hints-headers.html": [ @@ -246105,19 +246058,21 @@ "19a0bfaed3f0aa1b498c275ac43100dbcb23010b", [] ], - "pako": { - "LICENSE": [ - "a934ef8db478453e38b2f29af67610916fa9fc99", - [] - ], - "README": [ - "96028388ebb9d556db918bbe234e8b971734824a", - [] - ], - "pako_inflate.min.js": [ - "a191a78a8956cddf28adaf7542631123014a04bf", - [] - ] + "third_party": { + "pako": { + "LICENSE": [ + "a934ef8db478453e38b2f29af67610916fa9fc99", + [] + ], + "README": [ + "96028388ebb9d556db918bbe234e8b971734824a", + [] + ], + "pako_inflate.min.js": [ + "a191a78a8956cddf28adaf7542631123014a04bf", + [] + ] + } } }, "conformance-checkers": { @@ -283768,7 +283723,7 @@ [] ], "available-002a.xht": [ - "ff9f51083ff78d5b457be2869c8c0cfe03663db0", + "e66aa54160fab42961ff320ad7a380ec12d4c8e2", [] ], "available-002b.xht": [ @@ -318531,7 +318486,7 @@ [] ], "event-timing-test-utils.js": [ - "9f4a81714f71b554fdc7bda19405fe2efd4b3376", + "e2a69b5c5b49a17f93ccc22937f7f33b45848c24", [] ], "slow-image.py": [ @@ -322479,7 +322434,7 @@ [] ], "drawImage-from-blob-ref.html": [ - "d1d3554c70a8a2fa30768f665fa7f2ca88f270e8", + "2bd6037835406fb2ecb2f3efdade315aa802ac64", [] ], "drawImage-from-element-orientation-none-ref.html": [ @@ -322499,7 +322454,7 @@ [] ], "drawImage-with-src-rect-ref.html": [ - "d59dd2d9fd77a83ec02f87edd1aca2b7d1717604", + "19ffcc39c96aecdd212a9f8ca4023e62c91dff2b", [] ] } @@ -323270,7 +323225,7 @@ [] ], "templates.yaml": [ - "be8039b03f9d0222f4bfff6b4db531360a62303b", + "6b02200362e3413fc5a2a0b5fbbbf3737347d345", [] ], "tests.yaml": [ @@ -323358,7 +323313,7 @@ ], "resources": { "blob-url-factory.html": [ - "7d90aacd8bbf207b25405bea8f2e9f0263570392", + "d2039064a8df63021b7c76f9eef5a619de32377d", [] ], "blob-url-factory.html.headers": [ @@ -323458,7 +323413,7 @@ [] ], "script-factory.js": [ - "ab7286e57ac18ca4b34f6c6d75d17b6d9198f7c0", + "ac7a1fda06f6237973264abf6f2b1b62e746e6ab", [] ], "sw-store-to-cache-storage.js": [ @@ -333446,7 +333401,7 @@ [] ], "web-share.idl": [ - "a29107f05987369128593b9fb2bd3bb13017eae0", + "c29a29d0b4ede94153a75860344ab4824e91b6d5", [] ], "webaudio.idl": [ @@ -333454,7 +333409,7 @@ [] ], "webauthn.idl": [ - "73c96c87b91456199b5beb103ff89ae93b513738", + "a1d46a37cf44d7d9b8cd80b11a92b2d2f78602ef", [] ], "webdriver.idl": [ @@ -333486,7 +333441,7 @@ [] ], "webrtc.idl": [ - "852ec06209ea13a0a618d32ff836624b92d65642", + "efb21f4a0cc55c336c0c145298d463d0263aa575", [] ], "webusb.idl": [ @@ -333920,11 +333875,11 @@ [] ], "mo-form-minus-plus-ref.html": [ - "f83033373042444e28c26fc03c5f4acf38da131c", + "b46b307dbe3aea0fbab44de12278041e538ea3e5", [] ], "mo-form-ref.html": [ - "d48bd48a6e4a492e7fc31ae83d016cd12b9c8d56", + "608ad4bbadedf0cd1f7a848493add9636efac275", [] ], "mo-lspace-rspace-dynamic-ref.html": [ @@ -343415,11 +343370,11 @@ [] ], "lint.py": [ - "74b3c8cf9301a9d5ee3f0356a8a5604eea41fa3c", + "6a5359bfb8a87728068fee64a69ba1de0c62e94d", [] ], "rules.py": [ - "6fbdc1c360dddc498a30a797eed029abee133a69", + "695f6cd4e5328caf2f085a115d31a9c0b4ae2712", [] ], "tests": { @@ -343585,6 +343540,30 @@ ] }, "tests": { + "dir1": { + "a.html": [ + "f412593b045ef475e0af5e5853de8ff58bcd7244", + [] + ], + "a.js": [ + "a855dab6a77cb28103cc158ff0f9ccde96b52595", + [] + ], + "a.xhtml": [ + "c8b4cc2e5223a86255efb531a4d5a4430f951b15", + [] + ], + "b.html": [ + "f412593b045ef475e0af5e5853de8ff58bcd7244", + [] + ] + }, + "dir2": { + "a.xhtml": [ + "c8b4cc2e5223a86255efb531a4d5a4430f951b15", + [] + ] + }, "relative-testharness-manual.html": [ "15693b990c1d5165aa510373d5c6955e0661b8a0", [] @@ -343596,7 +343575,7 @@ [] ], "test_lint.py": [ - "43da2f9ff21904868431533eaae846a403b7379a", + "10d9728b405751bdb28db5e0193162ec7f6df486", [] ], "test_path_lints.py": [ @@ -350581,7 +350560,7 @@ [] ], "urltestdata.json": [ - "dd40eaa5a9f179d6904776e619d6e7f618b2ebf4", + "1ed95583c12f3d1316e29857aa016e3a0e51a7f4", [] ] } @@ -352258,7 +352237,7 @@ [] ], "RTCPeerConnection-helper.js": [ - "29145c8b927dd0df3ec35b40c49d8ded2afaa559", + "679cb85b12adfa98d3fdbedf6abb6d68a687bb47", [] ], "RTCRtpCapabilities-helper.js": [ @@ -352311,7 +352290,7 @@ }, "simulcast": { "simulcast.js": [ - "d8911f443e7521ed66be8f4e6079bb4318aada37", + "af804c03e865ae1be94cdc1045f359b30034590a", [] ] }, @@ -372390,7 +372369,7 @@ ] ], "accept-ch-feature-policy-navigation.https.html": [ - "dff960d28709ae6888f0da0b221e93c7b160e7e6", + "d217a16509eedac1a861956859c1527bf3baebc1", [ null, {} @@ -372411,7 +372390,7 @@ ] ], "accept-ch-no-feature-policy-navigation.https.html": [ - "5fb6c22f50873ce597e6d5ed04c1ebeef64a17c1", + "13a37633eda8fd5375a917d996b4566971c08798", [ null, {} @@ -372539,7 +372518,25 @@ ] ], "same-origin-iframe.https.html": [ - "25e29017f403816e0917979a7c4886ac28f65fc4", + "c7680945443e7477d6c9533cbe8012783a0a91a5", + [ + null, + { + "timeout": "long" + } + ] + ], + "same-origin-navigation-empty-accept-ch.https.html": [ + "e57f1c3dc6f707d2b531702d076852ef12c7f999", + [ + null, + { + "timeout": "long" + } + ] + ], + "same-origin-navigation-no-accept-ch.https.html": [ + "ab597701766fa802f0b7b3dc43c71d91b180777e", [ null, { @@ -372591,6 +372588,13 @@ {} ] ], + "http-equiv-accept-ch-merge.https.html": [ + "177a836557607569a865dfb25ca5a224be8878a0", + [ + null, + {} + ] + ], "http-equiv-accept-ch-non-secure.http.html": [ "909ab5f5f2a563348da0d0bb3377961f1015d031", [ @@ -372655,6 +372659,24 @@ } ] ], + "async-write-blobs-read-blobs.https.html": [ + "f9bf38d5d581dbb63be4139e7294374b0876051f", + [ + null, + { + "testdriver": true + } + ] + ], + "async-write-image-read-image.https.html": [ + "881b8ababb2588b806bc121d0f9e95623766b4e8", + [ + null, + { + "testdriver": true + } + ] + ], "clipboard-events-synthetic.html": [ "878682975266a3154756361a4e5d87c47482e393", [ @@ -372676,6 +372698,80 @@ null, {} ] + ], + "read-on-detaching-iframe.https.html": [ + "8022f0e269c4f28142e80366bdcbd6c2d1d231d2", + [ + null, + { + "testdriver": true + } + ] + ], + "write-on-detaching-iframe.https.html": [ + "0ed1098bcad03785e4917c1d7ad18c302136bdba", + [ + null, + { + "testdriver": true + } + ] + ], + "write-read-on-detached-iframe.https.html": [ + "1859c4bd11b44582f66e3f5d55a42002fdba5bd4", + [ + null, + { + "testdriver": true + } + ] + ], + "writeText-readText-on-detached-iframe.https.html": [ + "40854ccc7a31503f0b3b9b50ab4222d8b96fa79b", + [ + null, + { + "testdriver": true + } + ] + ] + }, + "text-write-read": { + "async-write-read.https.html": [ + "1d170f2fa4a7a4a96c3615d41a3290ab0123fba7", + [ + null, + { + "testdriver": true + } + ] + ], + "async-write-readText.https.html": [ + "3fe05a53742add1c8975faf72901a2ea3a6cba4a", + [ + null, + { + "testdriver": true + } + ] + ], + "async-writeText-read.https.html": [ + "6745d7cdb67ba9c0123bbefe9dc86da4d37bcd79", + [ + null, + { + "testdriver": true + } + ] + ], + "async-writeText-readText.https.html": [ + "f9fbdff879c18dad7502a37a1f8b87c07ec9193a", + [ + null, + { + "testdriver": true + } + ] ] } }, @@ -372804,7 +372900,7 @@ ] ], "compression-including-empty-chunk.tentative.any.js": [ - "61fe76959c972fce04af056f2e519f0bb7e21867", + "916118ea89376997dcc6f79b17cdbaf2cc136dee", [ "compression/compression-including-empty-chunk.tentative.any.html", { @@ -372815,7 +372911,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372835,7 +372931,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372855,7 +372951,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372875,7 +372971,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372887,7 +372983,7 @@ ] ], "compression-multiple-chunks.tentative.any.js": [ - "eeb83869512ac7796e36d9dcdf285f529fb1986a", + "db1ab92a2b4cfbebaf08ff85b290f50e82f2873c", [ "compression/compression-multiple-chunks.tentative.any.html", { @@ -372898,7 +372994,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372918,7 +373014,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372938,7 +373034,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -372958,7 +373054,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -373017,7 +373113,7 @@ ] ], "compression-stream.tentative.any.js": [ - "c63e377abbffe8e48620437f3487a45d1b27b5f6", + "8c02a6d699a6d2225131d75b87ea2c68e9d50c7d", [ "compression/compression-stream.tentative.any.html", { @@ -373028,7 +373124,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -373048,7 +373144,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -373068,7 +373164,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -373088,7 +373184,7 @@ ], [ "script", - "pako/pako_inflate.min.js" + "third_party/pako/pako_inflate.min.js" ], [ "timeout", @@ -386682,6 +386778,13 @@ {} ] ], + "grid-minimum-contribution-with-percentages.html": [ + "146956c2959677eac24dfebee1b9034be0a25ccc", + [ + null, + {} + ] + ], "grid-percentage-rows-indefinite-height-001.html": [ "c0be13ead81d14acb8a976a022b745a61bb1be2c", [ @@ -390427,6 +390530,20 @@ {} ] ], + "ruby-merge-invalid.html": [ + "b618bcb5da23545cbde6d52fbfbd1e9251983e6e", + [ + null, + {} + ] + ], + "ruby-merge-valid.html": [ + "5694e87dff34647ea174a8aa4934c0bb99169663", + [ + null, + {} + ] + ], "ruby-position-invalid.html": [ "907c7deee31153e78f30eedfb645f6905495846f", [ @@ -390726,6 +390843,13 @@ {} ] ], + "focus-prioritized.html": [ + "36e3c7644a715486f027ac7d0dfb444d9b7ea5dd", + [ + null, + {} + ] + ], "fragment-scrolling-anchors.html": [ "74b633be987ac6a2dd63ebab3ddb427836f78b7a", [ @@ -399653,7 +399777,7 @@ ] ], "outline-offset-computed.html": [ - "3ba35217ce1905b2e99f1a3055b169e46d4a9af3", + "39da9f73492acbc02d3c5299d9a2c5b076650512", [ null, {} @@ -406140,15 +406264,15 @@ {} ] ], - "Document-createCDATASection.html": [ - "72b3684c751c72b37b304d81ab38b932287714c4", + "Document-createCDATASection-xhtml.xhtml": [ + "b0a5a7f2843bbc78499598597abb91b01bc38db1", [ null, {} ] ], - "Document-createCDATASection.xhtml": [ - "b0a5a7f2843bbc78499598597abb91b01bc38db1", + "Document-createCDATASection.html": [ + "72b3684c751c72b37b304d81ab38b932287714c4", [ null, {} @@ -420915,7 +421039,7 @@ }, "event-timing": { "auxclick.html": [ - "f0d8326b1307f9e30f444d725bdbdb614a1b2003", + "b88328e2aa36715e8165c6eb277be49f7d189655", [ null, { @@ -420950,6 +421074,24 @@ } ] ], + "click.html": [ + "e3eecabdf1878c8f0f7775b0b0d587ca90909fe7", + [ + null, + { + "testdriver": true + } + ] + ], + "contextmenu.html": [ + "9aa05a3b1639e39dc66fbde83f1610affef4759e", + [ + null, + { + "testdriver": true + } + ] + ], "crossiframe.html": [ "dfbd2897ad4bb5bfd4edeb2cdc17afc438e37962", [ @@ -420960,6 +421102,15 @@ } ] ], + "dblclick.html": [ + "d33fcfd30de051ae7227e843f27e2b27e017c951", + [ + null, + { + "testdriver": true + } + ] + ], "disconnect-target.html": [ "b395cd4181b76cbb829fd91fc49162aeb5630679", [ @@ -421111,6 +421262,60 @@ } ] ], + "mousedown.html": [ + "e0f14f4c67db689e1868d8daf18ceafe943ab1f2", + [ + null, + { + "testdriver": true + } + ] + ], + "mouseenter.html": [ + "804d5743742c73ec769613e41ce45bf190a473a9", + [ + null, + { + "testdriver": true + } + ] + ], + "mouseleave.html": [ + "202cf73e2a616c5612232a7e1f987570eed9e2e3", + [ + null, + { + "testdriver": true + } + ] + ], + "mouseout.html": [ + "dd321934b0b784280a5ed520b70d0bc0bb5c1839", + [ + null, + { + "testdriver": true + } + ] + ], + "mouseover.html": [ + "741ee2d7ecd7fb938d2d4fe24ad6ca0056507b0f", + [ + null, + { + "testdriver": true + } + ] + ], + "mouseup.html": [ + "653bef8fdb2f02536ce687491b9511aad94fb03d", + [ + null, + { + "testdriver": true + } + ] + ], "only-observe-firstInput.html": [ "54a6036f91adb89c7b6528e40850937d70520b77", [ @@ -421120,6 +421325,60 @@ } ] ], + "pointerdown.html": [ + "3d7dcbe8cac2c72a98573275446dbe9d142cfc2d", + [ + null, + { + "testdriver": true + } + ] + ], + "pointerenter.html": [ + "bae1c51d51cde4d2314e310693328fd26dbd8be3", + [ + null, + { + "testdriver": true + } + ] + ], + "pointerleave.html": [ + "81e8f15ec0d16a53182f06e7f9553228cc0ab7ec", + [ + null, + { + "testdriver": true + } + ] + ], + "pointerout.html": [ + "b08f57699cc48d82350fabbe3be2589c2bb2c1f0", + [ + null, + { + "testdriver": true + } + ] + ], + "pointerover.html": [ + "0e1712239c095838a565cee8874cc3b5221948d1", + [ + null, + { + "testdriver": true + } + ] + ], + "pointerup.html": [ + "4324a5beb7ab32c3f7baee699af3970901f7ae52", + [ + null, + { + "testdriver": true + } + ] + ], "programmatic-click-not-observed.html": [ "4060d2d00dc1c0210854317bce5bbc5bc25fff57", [ @@ -446362,7 +446621,7 @@ ] ], "coep-frame-javascript.https.html": [ - "d3e090bd7f7b08bbb75ec8541a1981d928a28e37", + "089019dc2e2585dfe4c62d7ea3f323c5aec7085b", [ null, {} @@ -446376,7 +446635,7 @@ ] ], "data.https.html": [ - "c34f1336c8bd22aadd0e867b8fcced598a1c4786", + "13c0cce1858ceb8db2d9df515aaec200f653582f", [ null, {} @@ -446397,7 +446656,7 @@ ] ], "javascript.https.html": [ - "9fe85db76f54507b1c80b9f7077a916b8795f0f9", + "60edf00312dd46efcb8d542bdccb1f669181efca", [ null, {} @@ -446463,6 +446722,13 @@ } ] ], + "reporting-navigation.https.html": [ + "503e52110bdb87387a7c800370f89c73469c9483", + [ + null, + {} + ] + ], "reporting-subresource-corp.https.html": [ "aa76bbe8d21d259ed0b9dcadb1d942635134ac79", [ @@ -446547,7 +446813,7 @@ ] ], "srcdoc.https.html": [ - "3fbba961b2736ed8c9fb973d61dfac5e54267c40", + "2937c13381059a3609d431908afe15d1a21262f7", [ null, {} @@ -446563,7 +446829,7 @@ ] ], "coep-blob-popup.https.html": [ - "c317f6bdf9baa9311abb93fe3a1fd174bb824b3b", + "eb74bab3e5c4e93fd1dedf4b1db4547b334499b7", [ null, {} @@ -454881,6 +455147,13 @@ {} ] ], + "input-pattern-dynamic-value.html": [ + "58e566c7386eb9e3ba05fc5881eacd8244cfd6d4", + [ + null, + {} + ] + ], "inputwillvalidate.html": [ "909fd889bbb0b41d218cc2d8e8c9ad4cbf102189", [ @@ -459803,7 +460076,7 @@ ] ], "readwrite-readonly.html": [ - "d9bbadbe6174f47e4603b25c50d4144608c9f6e2", + "fc112f3ceb39cff15a1eb3d60c5551d6f9f8c587", [ null, {} @@ -487788,6 +488061,13 @@ {} ] ], + "element-based-offset-clamp.html": [ + "514eba09c78468f351cae4b38543389f7f33feb0", + [ + null, + {} + ] + ], "element-based-offset.html": [ "064ab4c5f3ae43c4ea4476997a85c3836a1419ee", [ @@ -489621,10 +489901,12 @@ ] ], "idlharness-sw.https.html": [ - "33fd35b3adb47c0528939d6c81dd685ea3258dec", + "5209cc6702e147c023032398211a365874162227", [ null, - {} + { + "timeout": "long" + } ] ], "idlharness-window.https.html": [ @@ -507248,7 +507530,7 @@ ] ], "getAnimations.html": [ - "37465540d26e4e0c9191b0eefe5a7bde58146f9c", + "fd8719299dbc0d2233f8f16bc08cfa3c20684746", [ null, {} @@ -512002,7 +512284,7 @@ ] ], "RTCPeerConnection-addTransceiver.https.html": [ - "bc537c26867fe699388a7ba287606b007ab41afc", + "68a2623391b5fa511ed80d272245f860fbaeac8c", [ null, {} @@ -512113,7 +512395,7 @@ ] ], "RTCPeerConnection-ondatachannel.html": [ - "2fd33ca541148ca6a7be5f5624e303795c7c458d", + "8ba98414cbb179696523116673d29bc8e436e704", [ null, {} @@ -512347,7 +512629,7 @@ ] ], "RTCRtpParameters-encodings.html": [ - "00e80885cff30c7bae8c94ebf8fd3ac37e26603a", + "539b2692806934254c4ec4b8d8bb14ef1296207d", [ null, {} @@ -512759,6 +513041,24 @@ "timeout": "long" } ] + ], + "h264.https.html": [ + "89e18bcd51cf029b4f9528164e6b90306f210526", + [ + null, + { + "timeout": "long" + } + ] + ], + "vp8.https.html": [ + "e3567e61c21d1b68e549fc8b045b48ea9b07ecc5", + [ + null, + { + "timeout": "long" + } + ] ] } }, @@ -512844,6 +513144,22 @@ ] ] }, + "webrtc-priority": { + "RTCPeerConnection-ondatachannel.html": [ + "b153c3adac502f48d40610ba7178bb25faa103ee", + [ + null, + {} + ] + ], + "RTCRtpParameters-encodings.html": [ + "37c1b919b417fa03b2c9566839b529a3c0aae07c", + [ + null, + {} + ] + ] + }, "webrtc-quic": { "RTCQuicStream.https.html": [ "e99914ad40387316e82ed32ed4626888f1011e43", @@ -548957,6 +549273,13 @@ {} ] ], + "pointer_tripleclick.py": [ + "28eaf29f737ae5ca2530adf007b8d028215f9855", + [ + null, + {} + ] + ], "sequence.py": [ "3536abeb12bcf667e4b6eab2cb723baa10c9ffa7", [ diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini deleted file mode 100644 index f29da48a2a0..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-003.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini index f8e7e539aae..4a1e8110f6f 100644 --- a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini +++ b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini @@ -2,6 +2,3 @@ [Hit test intersecting scaled box] expected: FAIL - [Hit test within unscaled box] - expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..e38782d8c85 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,4 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini index 5733d536fd3..85e94926cb3 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini @@ -21,6 +21,3 @@ [test the top of layer] expected: FAIL - [test some point of the element: top left corner] - expected: FAIL - diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini new file mode 100644 index 00000000000..e181af5397f --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini @@ -0,0 +1,4 @@ +[elementsFromPoint-invalid-cases.html] + [The root element is the last element returned for otherwise empty queries within the viewport] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 08a0e7271d7..2bdf0b54a2c 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,24 +315,24 @@ [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: combined response Content-Type: */* text/html] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] + [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: separate response Content-Type: text/plain ] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index 8d0261f22a0..c7413d589dc 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,6 +56,9 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript; charset=windows-1252 text/javascript] + [separate text/javascript;charset=windows-1252 error text/javascript] + expected: FAIL + + [separate text/javascript;charset=windows-1252 text/javascript] expected: FAIL diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index 1d1d4af041d..30e1b851fd4 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -8,9 +8,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff] - expected: FAIL - [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini index 75d75b4cda2..dc2e45516de 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_2.html] +[traverse_the_history_5.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index 8b743f36e1d..6b68e9094e4 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,20 +1,16 @@ [supported-elements.html] - expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL [Element with tabindex should support autofocus] - expected: TIMEOUT + expected: FAIL [Host element with delegatesFocus including no focusable descendants should be skipped] - expected: NOTRUN + expected: FAIL [Area element should support autofocus] - expected: NOTRUN + expected: FAIL [Host element with delegatesFocus should support autofocus] - expected: NOTRUN - - [Non-HTMLElement should not support autofocus] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index fc37df7e3fa..2a166bb97b7 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_escaping-1.html] type: testharness - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index daa518bd0e3..c6f45be1eb2 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-2.html] - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index f6a7aca3306..5f60c78e73c 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,5 +1,6 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index e440b1e38c6..dc856a3d5a3 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_nonescaping-3.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini new file mode 100644 index 00000000000..6d133b8ec69 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/constraints/input-pattern-dynamic-value.html.ini @@ -0,0 +1,4 @@ +[input-pattern-dynamic-value.html] + [input validation is updated after pattern attribute change] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini deleted file mode 100644 index bcd2fd0eab8..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[077.html] - [ adding several types of scripts through the DOM and removing some of them confuses scheduler ] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini index 568d614c625..b8cebc3e4f4 100644 --- a/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini +++ b/tests/wpt/metadata/html/semantics/selectors/pseudo-classes/readwrite-readonly.html.ini @@ -1,15 +1,6 @@ [readwrite-readonly.html] type: testharness bug: https://github.com/servo/servo/issues/10732 - [The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable] - expected: FAIL - - [The :read-only pseudo-class must match input elements after the readonly attribute has been added] - expected: FAIL - - [The :read-only pseudo-class must match input elements after the readonly attribute has been removed] - expected: FAIL - [The :read-write pseudo-class must match elements that are editable] expected: FAIL diff --git a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini index 7754f5c26d8..b84126a1e7a 100644 --- a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini +++ b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini @@ -42,3 +42,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata/url/a-element.html.ini b/tests/wpt/metadata/url/a-element.html.ini index dfe589459e2..f39e7394ed1 100644 --- a/tests/wpt/metadata/url/a-element.html.ini +++ b/tests/wpt/metadata/url/a-element.html.ini @@ -42,3 +42,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata/url/failure.html.ini b/tests/wpt/metadata/url/failure.html.ini index b9e60154b11..83d958ccc64 100644 --- a/tests/wpt/metadata/url/failure.html.ini +++ b/tests/wpt/metadata/url/failure.html.ini @@ -165,3 +165,93 @@ [Location's href: \\\\\\.\\Y: should throw] expected: FAIL + [XHR: http://a>b should throw] + expected: FAIL + + [Location's href: non-special://a>b should throw] + expected: FAIL + + [Location's href: non-special://a^b should throw] + expected: FAIL + + [URL's href: http://a<b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a^b should throw] + expected: FAIL + + [URL's href: http://a>b should throw] + expected: FAIL + + [window.open(): http://a<b should throw] + expected: FAIL + + [URL's href: non-special://a^b should throw] + expected: FAIL + + [window.open(): non-special://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a>b should throw] + expected: FAIL + + [XHR: http://a^b should throw] + expected: FAIL + + [URL's href: non-special://a<b should throw] + expected: FAIL + + [window.open(): http://a>b should throw] + expected: FAIL + + [window.open(): non-special://a<b should throw] + expected: FAIL + + [XHR: non-special://a>b should throw] + expected: FAIL + + [XHR: non-special://a<b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a>b should throw] + expected: FAIL + + [Location's href: http://a<b should throw] + expected: FAIL + + [XHR: non-special://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: non-special://a<b should throw] + expected: FAIL + + [window.open(): http://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a<b should throw] + expected: FAIL + + [Location's href: http://a>b should throw] + expected: FAIL + + [URL's href: http://a^b should throw] + expected: FAIL + + [XHR: http://a<b should throw] + expected: FAIL + + [Location's href: http://a^b should throw] + expected: FAIL + + [URL's constructor's base argument: http://a^b should throw] + expected: FAIL + + [URL's href: non-special://a>b should throw] + expected: FAIL + + [Location's href: non-special://a<b should throw] + expected: FAIL + + [window.open(): non-special://a>b should throw] + expected: FAIL + diff --git a/tests/wpt/metadata/url/url-constructor.html.ini b/tests/wpt/metadata/url/url-constructor.html.ini index 45b05b4b739..94aba66b81c 100644 --- a/tests/wpt/metadata/url/url-constructor.html.ini +++ b/tests/wpt/metadata/url/url-constructor.html.ini @@ -33,3 +33,21 @@ [Parsing: <file://xn--/p> against <about:blank>] expected: FAIL + [Parsing: <http://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a^b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a>b> against <about:blank>] + expected: FAIL + + [Parsing: <non-special://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a<b> against <about:blank>] + expected: FAIL + + [Parsing: <http://a^b> against <about:blank>] + expected: FAIL + diff --git a/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini b/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini new file mode 100644 index 00000000000..83557144ecb --- /dev/null +++ b/tests/wpt/metadata/webdriver/tests/perform_actions/pointer_tripleclick.py.ini @@ -0,0 +1,4 @@ +[pointer_tripleclick.py] + [test_tripleclick_at_coordinates] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini b/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini index 10dda3a6659..6d92f8835c6 100644 --- a/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini +++ b/tests/wpt/metadata/workers/shared-worker-in-data-url-context.window.js.ini @@ -1,7 +1,8 @@ [shared-worker-in-data-url-context.window.html] + expected: TIMEOUT [Create a shared worker in a data url frame] - expected: FAIL + expected: TIMEOUT [Create a data url shared worker in a data url frame] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html index dff960d2870..d217a16509e 100644 --- a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html @@ -8,12 +8,12 @@ (async () => { await test_frame( "HTTPS_REMOTE_ORIGIN", - "device-memory=true&dpr=false&viewport-width=false", + "device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false", "", "Client hints loaded on cross-origin iframe request with feature policy."); await test_frame( "HTTPS_ORIGIN", - "device-memory=true&dpr=false&viewport-width=true", + "device-memory=true&dpr=false&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=false", "", "Client hints loaded on same-origin iframe request with feature policy."); await test_frame( @@ -23,7 +23,7 @@ "Iframe trying to set Accept-CH-Lifetime.", "/client-hints/resources/iframe-accept-ch-lifetime.html"); await test_frame( "HTTPS_REMOTE_ORIGIN", - "device-memory=true&dpr=false&viewport-width=false", + "device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false", "", "Client hints loaded on cross-origin iframe request with feature policy after attempting to set independently."); })(); diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers index f9595a794d9..1fa9c5cb800 100644 --- a/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-feature-policy-navigation.https.html.headers @@ -1,3 +1,3 @@ Accept-CH: Device-Memory, DPR, Viewport-Width Accept-CH-Lifetime: 1 -Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none' +Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-lang 'none'; ch-ua 'self'; ch-ua-mobile 'none' diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html index 5fb6c22f508..13a37633eda 100644 --- a/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-no-feature-policy-navigation.https.html @@ -8,12 +8,12 @@ (async () => { await test_frame( "HTTPS_REMOTE_ORIGIN", - "device-memory=false&dpr=false&viewport-width=false", + "device-memory=false&dpr=false&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true", "", "Client hints not loaded on cross-origin iframe request with no feature policy."); await test_frame( "HTTPS_ORIGIN", - "device-memory=true&dpr=true&viewport-width=true", + "device-memory=true&dpr=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true", "", "Client hints loaded on same-origin iframe request with no feature policy."); })(); diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html new file mode 100644 index 00000000000..8a2e40ad900 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html @@ -0,0 +1,11 @@ +<html> +<body> + +<!-- Page with an empty accept-ch header, which disables client hints --> +<script> + window.top.opener.postMessage('Loaded', '*'); +</script> + + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers new file mode 100644 index 00000000000..25215abdf73 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html.headers @@ -0,0 +1,2 @@ +Accept-CH: +Access-Control-Allow-Origin: * diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js index 5275057c3e5..879745706c0 100644 --- a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js @@ -1,5 +1,7 @@ const echo = "/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py"; const accept = "/client-hints/accept-ch-stickiness/resources/accept-ch.html"; +const accept_blank = "/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html"; +const no_accept = "/client-hints/accept-ch-stickiness/resources/no-accept-ch.html"; const httpequiv_accept = "/client-hints/accept-ch-stickiness/resources/http-equiv-accept-ch.html"; const expect = "/client-hints/accept-ch-stickiness/resources/expect-client-hints-headers.html" const do_not_expect = "/client-hints/accept-ch-stickiness/resources/do-not-expect-client-hints-headers.html" @@ -49,30 +51,26 @@ function verify_subresource_state(expect_url, test_name) { }); }, test_name + " got client hints according to expectations."); } -const run_test = test => { - // First, verify the initial state to make sure that the browser does not have - // client hints preferences cached from a previous run of the test. - verify_initial_state(test.initial_url, test.name); - // Then, attempt to set Accept-CH +function attempt_set(test_type, accept_url, test_name, test_name_suffix) { promise_test(t => { return new Promise(resolve => { - if (test.type == "navigation") { - const win = window.open(test.accept_url); + if (test_type == "navigation") { + const win = window.open(accept_url); assert_not_equals(win, null, "Popup windows not allowed?"); addEventListener('message', t.step_func(() => { win.close(); resolve(); }), false); - } else if (test.type == "iframe") { + } else if (test_type == "iframe") { const iframe = document.createElement("iframe"); iframe.addEventListener('load', t.step_func(() => { resolve(); }), false); - iframe.src = test.accept_url; + iframe.src = accept_url; document.body.appendChild(iframe); - } else if (test.type == "subresource") { - fetch(test.accept_url).then(r => { + } else if (test_type == "subresource") { + fetch(accept_url).then(r => { assert_equals(r.status, 200, "subresource response status") // Verify that the browser did not include client hints in the request // headers, just because we can.. @@ -85,7 +83,16 @@ const run_test = test => { assert_unreached("unknown test type"); } }); - }, test.name + " set Accept-CH"); + }, test_name + " set Accept-CH" + test_name_suffix); +} + +const run_test = test => { + // First, verify the initial state to make sure that the browser does not have + // client hints preferences cached from a previous run of the test. + verify_initial_state(test.initial_url, test.name); + + // Then, attempt to set Accept-CH + attempt_set(test.type, test.accept_url, test.name, ""); // Finally, verify that CH are actually sent (or not) on requests verify_navigation_state(test.expect_url, test.name); diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html new file mode 100644 index 00000000000..16ed6c1a7cb --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html @@ -0,0 +1,11 @@ +<html> +<body> + +<!-- Page with out an accept-ch header; client hints are unaffected --> +<script> + window.top.opener.postMessage('Loaded', '*'); +</script> + + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers new file mode 100644 index 00000000000..cb762eff806 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/no-accept-ch.html.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html index 25e29017f40..c7680945443 100644 --- a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-iframe.https.html @@ -8,10 +8,10 @@ <script src="resources/accept-ch-test.js"></script> <script> -run_test({ name: "same origin iframe", +run_test({ name: "same origin iframe can't set accept-ch", initial_url: echo, accept_url: accept, - expect_url: expect, + expect_url: do_not_expect, type: "iframe" }); </script> </body> diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html new file mode 100644 index 00000000000..e57f1c3dc6f --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-empty-accept-ch.https.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta name="timeout" content="long"> +<title>Accept-CH Persistence test</title> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/accept-ch-test.js"></script> + +<script> +// Tests that an empty accept-ch header disables client hints. +const test_name = "empty-ch on navigation"; +verify_initial_state(echo, test_name); +attempt_set("navigation", accept, test_name, " to non-empty first"); +attempt_set("navigation", accept_blank, test_name, " to empty second"); +verify_navigation_state(do_not_expect, test_name); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html new file mode 100644 index 00000000000..ab597701766 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta name="timeout" content="long"> +<title>Accept-CH Persistence test</title> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="resources/accept-ch-test.js"></script> + +<script> +// Tests that a non-existing accept-ch header doesn't affect client hints. +const test_name = "empty-ch on navigation"; +verify_initial_state(echo, test_name); +attempt_set("navigation", accept, test_name, " to non-empty first"); +attempt_set("navigation", no_accept, test_name, " w/o header second"); +verify_navigation_state(expect, test_name); +</script> +</body> +</html> + diff --git a/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html new file mode 100644 index 00000000000..177a8365576 --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html @@ -0,0 +1,44 @@ +<html> +<head> +<meta http-equiv="Accept-CH" content="viewport-width, rtt"> +<meta http-equiv="Accept-CH" content="downlink, ect, lang"> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script> + +// Test of merge of http-equiv headers on top of accept-ch provided ones. +// +// resources/echo-client-hints-received.py sets the response headers depending on the set +// of client hints it receives in the request headers. + +promise_test(t => { + return fetch(get_host_info()["HTTPS_ORIGIN"] + "/client-hints/resources/echo-client-hints-received.py").then(r => { + assert_equals(r.status, 200) + // Verify that the browser includes client hints in the headers. + assert_true(r.headers.has("device-memory-received"), "device-memory-received"); + assert_true(r.headers.has("dpr-received"), "dpr-received"); + assert_true(r.headers.has("lang-received"), "lang-received"); + assert_true(r.headers.has("viewport-width-received"), "viewport-width-received"); + + assert_true(r.headers.has("rtt-received"), "rtt-received"); + var rtt = parseInt(r.headers.get("rtt-received")); + assert_greater_than_equal(rtt, 0); + assert_less_than_equal(rtt, 3000); + assert_equals(rtt % 50, 0, 'rtt must be a multiple of 50 msec'); + + assert_true(r.headers.has("downlink-received"), "downlink-received"); + var downlinkKbps = r.headers.get("downlink-received") * 1000; + assert_greater_than_equal(downlinkKbps, 0); + assert_less_than_equal(downlinkKbps, 10000); + + assert_in_array(r.headers.get("ect-received"), ["slow-2g", "2g", + "3g", "4g"], 'ect-received is unexpected'); + }); +}, "Accept-CH header test"); + +</script> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers new file mode 100644 index 00000000000..8759b65606b --- /dev/null +++ b/tests/wpt/web-platform-tests/client-hints/http-equiv-accept-ch-merge.https.html.headers @@ -0,0 +1,2 @@ +Accept-CH: device-memory, dpr + diff --git a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py index e72d77c47d9..25c2b2f765d 100644 --- a/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py +++ b/tests/wpt/web-platform-tests/client-hints/resources/expect-client-hints-headers-iframe.py @@ -3,7 +3,7 @@ def main(request, response): Simple handler that returns an HTML response that passes when the required Client Hints are received as request headers. """ - values = [ "Device-Memory", "DPR", "Viewport-Width" ] + values = [ "Device-Memory", "DPR", "Viewport-Width", "Sec-CH-UA", "Sec-CH-UA-Mobile" ] result = "PASS" log = "" diff --git a/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs.https.html index f53d7f9c36e..f9bf38d5d58 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/async-write-blobs-read-blobs.https.html @@ -6,6 +6,8 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <script> async function loadBlob(fileName) { @@ -14,6 +16,9 @@ async function loadBlob(fileName) { } promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const blobText = new Blob(['test text'], {type: 'text/plain'}); const blobImage = await loadBlob('resources/greenbox.png'); @@ -37,8 +42,3 @@ promise_test(async t => { assert_equals(blobImageOutput.type, 'image/png'); }, 'Verify write and read clipboard (multiple types)'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image.https.html index 71d14984953..881b8ababb2 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/async-write-image-read-image.https.html @@ -7,7 +7,8 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <p> <p>The bottom image should display the same image as the top image.</p> <p>Original Image:</p> @@ -39,6 +40,9 @@ async function loadBlob(fileName) { } promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const blobInput = await loadBlob('resources/greenbox.png'); assert_equals(blobInput.type, 'image/png'); @@ -63,15 +67,13 @@ promise_test(async t => { }, 'Verify write and read clipboard [image/png Blob]'); promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const invalidPngBlob = new Blob(['this text is not a valid png image'], - {type: "image/png"}); + {type: 'image/png'}); const clipboardItemInput = new ClipboardItem({'image/png' : invalidPngBlob}); - await promise_rejects_dom(t, "DataError", + await promise_rejects_dom(t, 'DataError', navigator.clipboard.write([clipboardItemInput])); }, 'Verify write error on malformed data [image/png ClipboardItem]'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html index 8361ceff125..8022f0e269c 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html @@ -4,6 +4,8 @@ <link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <iframe id="iframe"></iframe> <script> 'use strict'; @@ -12,9 +14,12 @@ promise_test(async t => { // Note: This tests proper behavior on a detaching iframe. text/plain is // chosen for simplicity, and the test should fail the same way no matter what // the input type is. + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const iframe = document.getElementById('iframe'); const iframeClipboard = iframe.contentWindow.navigator.clipboard; - const blobInput = new Blob(["test string"], {type: 'text/plain'}); + const blobInput = new Blob(['test string'], {type: 'text/plain'}); const clipboardItemInput = new ClipboardItem({'text/plain': blobInput}); // Clipboard API must only be available in focused documents. // reference: https://www.w3.org/TR/clipboard-apis/#privacy-async @@ -25,10 +30,5 @@ promise_test(async t => { // while the read operation is running. iframeClipboard.read([clipboardItemInput]); iframe.parentNode.removeChild(iframe); -}, "Verify read fails on detaching iframe"); +}, 'Verify read fails on detaching iframe'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html index 4a3dbd7dc32..0ed1098bcad 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html @@ -4,6 +4,8 @@ <link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <iframe id="iframe"></iframe> <script> 'use strict'; @@ -12,9 +14,12 @@ promise_test(async t => { // Note: This tests proper behavior on a detaching iframe. text/plain is // chosen for simplicity, and the test should fail the same way no matter what // the input type is. + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const iframe = document.getElementById('iframe'); const iframeClipboard = iframe.contentWindow.navigator.clipboard; - const blobInput = new Blob(["test string"], {type: 'text/plain'}); + const blobInput = new Blob(['test string'], {type: 'text/plain'}); const clipboardItemInput = new ClipboardItem({'text/plain': blobInput}); // Clipboard API must only be available in focused documents. // reference: https://www.w3.org/TR/clipboard-apis/#privacy-async @@ -25,10 +30,5 @@ promise_test(async t => { // while the write operation is running. iframeClipboard.write([clipboardItemInput]); iframe.parentNode.removeChild(iframe); -}, "Verify write fails on detaching iframe"); +}, 'Verify write fails on detaching iframe'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html index af12ff8d880..1859c4bd11b 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html @@ -4,6 +4,8 @@ <link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <iframe id="iframe"></iframe> <script> 'use strict'; @@ -12,9 +14,12 @@ promise_test(async t => { // Note: This tests proper detached iframe behavior. text/plain is chosen for // simplicity, and the test should fail the same way no matter what the input // type is. + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const iframe = document.getElementById('iframe'); const iframeClipboard = iframe.contentWindow.navigator.clipboard; - const blobInput = new Blob(["test string"], {type: 'text/plain'}); + const blobInput = new Blob(['test string'], {type: 'text/plain'}); const clipboardItemInput = new ClipboardItem({'text/plain': blobInput}); // Clipboard API must only be available in focused documents. // reference: https://www.w3.org/TR/clipboard-apis/#privacy-async @@ -25,18 +30,13 @@ promise_test(async t => { const readResultAttached = await iframeClipboard.read(); assert_not_equals(readResultAttached, undefined); assert_equals(readResultAttached.length, 1, - "attached iframes should be able to read and write normally"); + 'attached iframes should be able to read and write normally'); iframe.parentNode.removeChild(iframe); // Writing onto a detached iframe's clipboard should fail, but not crash. await iframeClipboard.write([clipboardItemInput]); const readResultDetached = await iframeClipboard.read(); assert_equals(readResultDetached, undefined, - "reading from detached iframes should output undefined"); -}, "Verify read and write fail on detached iframe"); + 'reading from detached iframes should output undefined'); +}, 'Verify read and write fail on detached iframe'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html index c2d8be1ace2..40854ccc7a3 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html @@ -4,11 +4,16 @@ <link rel='help' href='https://w3c.github.io/clipboard-apis/#async-clipboard-api'> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <iframe id="iframe"></iframe> <script> 'use strict'; promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const iframe = document.getElementById('iframe'); // Clipboard API must only be available in focused documents. // reference: https://www.w3.org/TR/clipboard-apis/#privacy-async @@ -16,23 +21,18 @@ promise_test(async t => { const iframeClipboard = iframe.contentWindow.navigator.clipboard; // Writing and reading should succeed on same-origin iframes. - const attachedWriteText = "attached write text" + const attachedWriteText = 'attached write text' await iframeClipboard.writeText(attachedWriteText); const attachedWriteResult = await iframeClipboard.readText(); assert_equals(attachedWriteResult, attachedWriteText, - "attached iframes should be able to readText and writeText normally"); + 'attached iframes should be able to readText and writeText normally'); iframe.parentNode.removeChild(iframe); // Writing onto a detached iframe's clipboard should fail, but not crash. - const detachedWriteText = "detached write text"; + const detachedWriteText = 'detached write text'; await iframeClipboard.writeText(detachedWriteText); const readResultDetached = await iframeClipboard.readText(); assert_equals(readResultDetached, undefined, - "reading from detached iframes should output undefined"); -}, "Verify readText and writeText fails on detached iframe"); + 'reading from detached iframes should output undefined'); +}, 'Verify readText and writeText fails on detached iframe'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read.https.html index 14488b1e716..1d170f2fa4a 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-read.https.html @@ -7,9 +7,14 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <script> async function readWriteTest(textInput) { promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const blobInput = new Blob([textInput], {type: 'text/plain'}); const clipboardItemInput = new ClipboardItem({'text/plain': blobInput}); @@ -30,8 +35,3 @@ async function readWriteTest(textInput) { readWriteTest('Clipboard write ([text/plain ClipboardItem]) -> read ([text/plain ClipboardItem]) test'); readWriteTest('non-Latin1 text encoding test データ'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText.https.html index c76df06a8b0..3fe05a53742 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-write-readText.https.html @@ -6,9 +6,14 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <script> async function readWriteTest(textInput) { promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + const blobInput = new Blob([textInput], {type: 'text/plain'}); const clipboardItem = new ClipboardItem({'text/plain': blobInput}); @@ -22,8 +27,3 @@ async function readWriteTest(textInput) { readWriteTest('Clipboard write ([text/plain ClipboardItem) -> read text test'); readWriteTest('non-Latin1 text encoding test データ'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read.https.html index e74726ec5e7..6745d7cdb67 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-read.https.html @@ -6,9 +6,14 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <script> async function readWriteTest(textInput) { promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + await navigator.clipboard.writeText(textInput); const clipboardItems = await navigator.clipboard.read(); assert_equals(clipboardItems.length, 1); @@ -26,8 +31,3 @@ async function readWriteTest(textInput) { readWriteTest('Clipboard write text -> read ([text/plain ClipboardItem]) test'); readWriteTest('non-Latin1 text encoding test データ'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText-manual.https.html b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText.https.html index d2c43f0b6f2..f9fbdff879c 100644 --- a/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText-manual.https.html +++ b/tests/wpt/web-platform-tests/clipboard-apis/text-write-read/async-writeText-readText.https.html @@ -4,9 +4,14 @@ <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> <script> async function readWriteTest(textInput) { promise_test(async t => { + test_driver.set_permission({name: 'clipboard-read'}, 'granted'); + test_driver.set_permission({name: 'clipboard-write'}, 'granted'); + await navigator.clipboard.writeText(textInput); const textOutput = await navigator.clipboard.readText(); @@ -17,8 +22,3 @@ async function readWriteTest(textInput) { readWriteTest('Clipboard write text -> read text test'); readWriteTest('non-Latin1 text encoding test データ'); </script> -<p> - Note: This is a manual test because it writes/reads to the shared system - clipboard and thus cannot be run async with other tests that might interact - with the clipboard. -</p> diff --git a/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js index 61fe76959c9..916118ea893 100644 --- a/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js +++ b/tests/wpt/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js @@ -1,5 +1,5 @@ // META: global=window,worker -// META: script=pako/pako_inflate.min.js +// META: script=third_party/pako/pako_inflate.min.js // META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js index eeb83869512..db1ab92a2b4 100644 --- a/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js +++ b/tests/wpt/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js @@ -1,5 +1,5 @@ // META: global=window,worker -// META: script=pako/pako_inflate.min.js +// META: script=third_party/pako/pako_inflate.min.js // META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js b/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js index c63e377abbf..8c02a6d699a 100644 --- a/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js +++ b/tests/wpt/web-platform-tests/compression/compression-stream.tentative.any.js @@ -1,5 +1,5 @@ // META: global=window,worker -// META: script=pako/pako_inflate.min.js +// META: script=third_party/pako/pako_inflate.min.js // META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/compression/pako/LICENSE b/tests/wpt/web-platform-tests/compression/third_party/pako/LICENSE index a934ef8db47..a934ef8db47 100644 --- a/tests/wpt/web-platform-tests/compression/pako/LICENSE +++ b/tests/wpt/web-platform-tests/compression/third_party/pako/LICENSE diff --git a/tests/wpt/web-platform-tests/compression/pako/README b/tests/wpt/web-platform-tests/compression/third_party/pako/README index 96028388ebb..96028388ebb 100644 --- a/tests/wpt/web-platform-tests/compression/pako/README +++ b/tests/wpt/web-platform-tests/compression/third_party/pako/README diff --git a/tests/wpt/web-platform-tests/compression/pako/pako_inflate.min.js b/tests/wpt/web-platform-tests/compression/third_party/pako/pako_inflate.min.js index a191a78a895..a191a78a895 100644 --- a/tests/wpt/web-platform-tests/compression/pako/pako_inflate.min.js +++ b/tests/wpt/web-platform-tests/compression/third_party/pako/pako_inflate.min.js diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html b/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html new file mode 100644 index 00000000000..ace28cc71c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/floats/line-pushed-by-floats-crash.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/1064987"> +<body style="width: 100px;"> + <div style="float: right; width: 10px;"></div> + <span> + <div style="display: inline-block; width: 1000px; height: 10px;"></div> + </span> + <span style="position: absolute;"></span> + <span style="float: left; height: 10px; column-gap: 65536px; column-count: 65536;"></span> +</body> diff --git a/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht b/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht index ff9f51083ff..e66aa54160f 100644 --- a/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht +++ b/tests/wpt/web-platform-tests/css/WOFF2/support/available-002a.xht @@ -13,7 +13,7 @@ @import url("test-fonts.css"); @font-face { font-family: "WOFF Test"; - src: url("support/available-002.woff2#1") format("woff2"); + src: url("available-002.woff2#1") format("woff2"); } body { font-size: 20px; diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html new file mode 100644 index 00000000000..146956c2959 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html @@ -0,0 +1,87 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: minimum contribution with percentages</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-grid/#minimum-contribution"> +<meta name="assert" content="Checks that the minimum contribution is the minimum size when the preferred size is 'auto' or contains a percentage."> +<style> +#grid { + display: grid; + height: 50px; + width: 50px; + grid: auto / auto; +} +#item { + background: cyan; +} +#content { + height: 100px; + width: 100px; +} +.min { + min-height: calc(100% + 50px); + min-width: calc(100% + 50px); +} +.max { + max-height: calc(100% - 50px); + max-width: calc(100% - 50px); +} +.size { + height: calc(100% + 10px); + width: calc(100% + 10px); +} +</style> +<div id="log"></div> +<div id="grid"> + <div id="item"> + <div id="content"></div> + </div> +</div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +"use strict"; +const cs = getComputedStyle(document.getElementById("grid")); +const item = document.getElementById("item"); +function check(name, size) { + item.className = name; + test(function() { + assert_equals(cs.gridTemplateColumns, size + "px", "grid-template-columns"); + }, name + " - columns"); + test(function() { + assert_equals(cs.gridTemplateRows, size + "px", "grid-template-rows"); + }, name + " - rows"); +} + +// The minimum contribution is the automatic minimum size (100px) +// because the preferred size is 'auto'. +check("auto", 100); + +// The minimum contribution is the minimum size (50px) +// because the preferred size is 'auto'. +check("min", 50); + +// The minimum contribution is the automatic minimum size (100px) +// because the preferred size is 'auto'. +check("max", 100); + +// The minimum contribution is the automatic minimum size (100px) +// because the preferred size depends on the containing block. +check("size", 100); + +// The minimum contribution is the minimum size (50px) +// because the preferred size is 'auto'. +check("min max", 50); + +// The minimum contribution is the minimum size (50px) +// because the preferred size depends on the containing block. +check("min size", 50); + +// The minimum contribution is the automatic minimum size (100px) +// because the preferred size depends on the containing block. +check("max size", 100); + +// The minimum contribution is the minimum size (50px) +// because the preferred size depends on the containing block. +check("min max size", 50); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html new file mode 100644 index 00000000000..b618bcb5da2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-invalid.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Ruby Layout: parsing ruby-merge with invalid values</title> +<link rel="help" href="https://drafts.csswg.org/css-ruby-1/#ruby-align-property"> +<meta name="assert" content="ruby-merge supports only the grammar 'separate | merge | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("ruby-merge", "none"); +test_invalid_value("ruby-merge", "collapse"); +test_invalid_value("ruby-merge", "10px"); + +test_invalid_value("ruby-merge", "merge separate"); +test_invalid_value("ruby-merge", "merge auto"); +test_invalid_value("ruby-merge", "auto separate"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html new file mode 100644 index 00000000000..5694e87dff3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-ruby/parsing/ruby-merge-valid.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Ruby Layout: parsing ruby-merge with valid values</title> +<link rel="help" href="https://drafts.csswg.org/css-ruby-1/#ruby-align-property"> +<meta name="assert" content="ruby-merge supports the full grammar 'separate | merge | auto'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("ruby-align", "separate"); +test_valid_value("ruby-align", "merge"); +test_valid_value("ruby-align", "auto"); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html new file mode 100644 index 00000000000..36e3c7644a7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-anchoring/focus-prioritized.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<meta charset="utf8"> +<title>CSS Scroll Anchoring: prioritize focused element</title> +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#anchor-node-selection"> +<meta name="assert" content="anchor selection prioritized focused element"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +body { height: 4000px } +.spacer { height: 100px } +#growing { height: 100px } +#focused { height: 10px } +</style> + +<div class=spacer></div> +<div class=spacer></div> +<div class=spacer></div> +<div class=spacer></div> +<div id=growing></div> +<div class=spacer></div> +<div id=focused tabindex=0></div> +<div class=spacer></div> +<div class=spacer></div> + +<script> +async_test((t) => { + document.scrollingElement.scrollTop = 150; + focused.focus(); + + const target_rect = focused.getBoundingClientRect(); + growing.style.height = "3000px"; + + requestAnimationFrame(() => { + t.step(() => { + const new_rect = focused.getBoundingClientRect(); + assert_equals(new_rect.x, target_rect.x, "x coordinate"); + assert_equals(new_rect.y, target_rect.y, "y coordinate"); + assert_not_equals(document.scrollingElement.scrollTop, 150, "scroll adjusted"); + }); + t.done(); + }); +}, "Anchor selection prioritized focused element."); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html index 3ba35217ce1..39da9f73492 100644 --- a/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html +++ b/tests/wpt/web-platform-tests/css/css-ui/parsing/outline-offset-computed.html @@ -17,6 +17,7 @@ </style> <div id="target"></div> <script> +test_computed_value("outline-offset", "2.5px"); test_computed_value("outline-offset", "10px"); test_computed_value("outline-offset", "0.5em", "20px"); test_computed_value("outline-offset", "calc(10px + 0.5em)", "30px"); diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection.xhtml b/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml index b0a5a7f2843..b0a5a7f2843 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection.xhtml +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml diff --git a/tests/wpt/web-platform-tests/event-timing/auxclick.html b/tests/wpt/web-platform-tests/event-timing/auxclick.html index f0d8326b130..b88328e2aa3 100644 --- a/tests/wpt/web-platform-tests/event-timing/auxclick.html +++ b/tests/wpt/web-platform-tests/event-timing/auxclick.html @@ -9,7 +9,6 @@ <script src=/resources/testdriver-vendor.js></script> <script src=resources/event-timing-test-utils.js></script> <div id='target'>Click me</div> -<button id='button'>Click me</button> <script> promise_test(async t => { return testEventType(t, 'auxclick'); diff --git a/tests/wpt/web-platform-tests/event-timing/click.html b/tests/wpt/web-platform-tests/event-timing/click.html new file mode 100644 index 00000000000..e3eecabdf18 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/click.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing click.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target'>Click me</div> +<script> + promise_test(async t => { + return testEventType(t, 'click'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/contextmenu.html b/tests/wpt/web-platform-tests/event-timing/contextmenu.html new file mode 100644 index 00000000000..9aa05a3b163 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/contextmenu.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing contextmenu.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target' contextmenu="mymenu">Menu +<menu type="context" id="mymenu"> + <menuitem label="label"></menuitem> +</menu> +</div> +<script> + promise_test(async t => { + return testEventType(t, 'contextmenu'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/dblclick.html b/tests/wpt/web-platform-tests/event-timing/dblclick.html new file mode 100644 index 00000000000..d33fcfd30de --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/dblclick.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing dblclick.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Click me</div> +<script> + promise_test(async t => { + return testEventType(t, 'dblclick'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mousedown.html b/tests/wpt/web-platform-tests/event-timing/mousedown.html new file mode 100644 index 00000000000..e0f14f4c67d --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mousedown.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mousedown.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target'>Click me</div> +<script> + promise_test(async t => { + return testEventType(t, 'mousedown'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mouseenter.html b/tests/wpt/web-platform-tests/event-timing/mouseenter.html new file mode 100644 index 00000000000..804d5743742 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mouseenter.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mouseenter.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'mouseenter'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mouseleave.html b/tests/wpt/web-platform-tests/event-timing/mouseleave.html new file mode 100644 index 00000000000..202cf73e2a6 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mouseleave.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mouseleave.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'mouseleave'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mouseout.html b/tests/wpt/web-platform-tests/event-timing/mouseout.html new file mode 100644 index 00000000000..dd321934b0b --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mouseout.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mouseout.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'mouseout', true /* looseCount */); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mouseover.html b/tests/wpt/web-platform-tests/event-timing/mouseover.html new file mode 100644 index 00000000000..741ee2d7ecd --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mouseover.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mouseover.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'mouseover', true /* looseCount */); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/mouseup.html b/tests/wpt/web-platform-tests/event-timing/mouseup.html new file mode 100644 index 00000000000..653bef8fdb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/mouseup.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing mouseup.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'mouseup'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerdown.html b/tests/wpt/web-platform-tests/event-timing/pointerdown.html new file mode 100644 index 00000000000..3d7dcbe8cac --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerdown.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerdown.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerdown'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerenter.html b/tests/wpt/web-platform-tests/event-timing/pointerenter.html new file mode 100644 index 00000000000..bae1c51d51c --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerenter.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerenter.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerenter'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerleave.html b/tests/wpt/web-platform-tests/event-timing/pointerleave.html new file mode 100644 index 00000000000..81e8f15ec0d --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerleave.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerleave.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerleave'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerout.html b/tests/wpt/web-platform-tests/event-timing/pointerout.html new file mode 100644 index 00000000000..b08f57699cc --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerout.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerout.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerout', true /* looseCount */); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerover.html b/tests/wpt/web-platform-tests/event-timing/pointerover.html new file mode 100644 index 00000000000..0e1712239c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerover.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerover.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div>Outside target!</div> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerover', true /* looseCount */); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/pointerup.html b/tests/wpt/web-platform-tests/event-timing/pointerup.html new file mode 100644 index 00000000000..4324a5beb7a --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/pointerup.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Event Timing pointerup.</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/testdriver.js></script> +<script src=/resources/testdriver-actions.js></script> +<script src=/resources/testdriver-vendor.js></script> +<script src=resources/event-timing-test-utils.js></script> +<div id='target'>Target</div> +<script> + promise_test(async t => { + return testEventType(t, 'pointerup'); + }) +</script> +</html> diff --git a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js index 9f4a81714f7..e2a69b5c5b4 100644 --- a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js +++ b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js @@ -22,8 +22,8 @@ function mainThreadBusy(duration) { // to check that the event also happens to correspond to the first event. In this case, the // timings of the 'first-input' entry should be equal to those of this entry. |minDuration| // is used to compared against entry.duration. -function verifyEvent(entry, eventType, targetId, isFirst=false, minDuration=104) { - assert_true(entry.cancelable); +function verifyEvent(entry, eventType, targetId, isFirst=false, minDuration=104, notCancelable=false) { + assert_equals(entry.cancelable, !notCancelable, 'cancelable property'); assert_equals(entry.name, eventType); assert_equals(entry.entryType, 'event'); assert_greater_than_equal(entry.duration, minDuration, @@ -122,51 +122,119 @@ async function testDuration(t, id, numEntries, dur, fastDur, slowDur) { return Promise.all([observerPromise, clicksPromise]); } -function applyAction(actions, eventType, target) { +// Apply events that trigger an event of the given |eventType| to be dispatched to the |target|. Some +// of these assume that the target is not on the top left corner of the screen, which means that +// (0, 0) of the viewport is outside of the |target|. +function applyAction(eventType, target) { + const actions = new test_driver.Actions(); if (eventType === 'auxclick') { actions.pointerMove(0, 0, {origin: target}) .pointerDown({button: actions.ButtonType.MIDDLE}) .pointerUp({button: actions.ButtonType.MIDDLE}); + } else if (eventType === 'click' || eventType === 'mousedown' || eventType === 'mouseup' + || eventType === 'pointerdown' || eventType === 'pointerup' + || eventType === 'touchstart' || eventType === 'touchend') { + actions.pointerMove(0, 0, {origin: target}) + .pointerDown() + .pointerUp(); + } else if (eventType === 'contextmenu') { + actions.pointerMove(0, 0, {origin: target}) + .pointerDown({button: actions.ButtonType.RIGHT}) + .pointerUp({button: actions.ButtonType.RIGHT}); + } else if (eventType === 'dblclick') { + actions.pointerMove(0, 0, {origin: target}) + .pointerDown() + .pointerUp() + .pointerDown() + .pointerUp() + // Reset by clicking outside of the target. + .pointerMove(0, 0) + .pointerDown() + .pointerUp(); + } else if (eventType === 'mouseenter' || eventType === 'mouseover' + || eventType === 'pointerenter' || eventType === 'pointerover') { + // Move outside of the target and then back inside. + actions.pointerMove(0, 0) + .pointerMove(0, 0, {origin: target}); + } else if (eventType === 'mouseleave' || eventType === 'mouseout' + || eventType === 'pointerleave' || eventType === 'pointerout') { + actions.pointerMove(0, 0, {origin: target}) + .pointerMove(0, 0); } else { assert_unreached('The event type ' + eventType + ' is not supported.'); } + return actions.send(); +} + +function requiresListener(eventType) { + return ['mouseenter', 'mouseleave', 'pointerdown', 'pointerenter', 'pointerleave', 'pointerout', 'pointerover', 'pointerup'].includes(eventType); +} + +function notCancelable(eventType) { + return ['mouseenter', 'mouseleave', 'pointerenter', 'pointerleave'].includes(eventType); } // Tests the given |eventType| by creating events whose target are the element with id 'target'. -// The test assumes that such element already exists. -async function testEventType(t, eventType) { +// The test assumes that such element already exists. |looseCount| is set for events for which +// events would occur for other elements besides the target, so the counts will be larger. +async function testEventType(t, eventType, looseCount=false) { assert_implements(window.EventCounts, "Event Counts isn't supported"); assert_equals(performance.eventCounts.get(eventType), 0); const target = document.getElementById('target'); - const actions = new test_driver.Actions(); + if (requiresListener(eventType)) { + target.addEventListener(eventType, () =>{}); + } + assert_equals(performance.eventCounts.get(eventType), 0, 'No events yet.'); // Trigger two 'fast' events of the type. - applyAction(actions, eventType, target); - applyAction(actions, eventType, target); - await actions.send(); - assert_equals(performance.eventCounts.get('auxclick'), 2); + await applyAction(eventType, target); + await applyAction(eventType, target); + if (looseCount) { + assert_greater_than_equal(performance.eventCounts.get(eventType), 2, + `Should have at least 2 ${eventType} events`) + } else { + assert_equals(performance.eventCounts.get(eventType), 2, `Should have 2 ${eventType} events`); + } // The durationThreshold used by the observer. A slow events needs to be slower than that. const durationThreshold = 16; // Now add an event handler to cause a slow event. target.addEventListener(eventType, () => { mainThreadBusy(durationThreshold + 4); }); - return new Promise(async resolve => { + const observerPromise = new Promise(async resolve => { new PerformanceObserver(t.step_func(entryList => { let eventTypeEntries = entryList.getEntriesByName(eventType); if (eventTypeEntries.length === 0) return; - assert_equals(eventTypeEntries.length, 1); - verifyEvent(eventTypeEntries[0], + let entry = null; + if (!looseCount) { + entry = eventTypeEntries[0]; + assert_equals(eventTypeEntries.length, 1); + } else { + // The other events could also be considered slow. Find the one with the correct target. + eventTypeEntries.forEach(e => { + if (e.target === document.getElementById('target')) + entry = e; + }); + if (!entry) + return; + } + verifyEvent(entry, eventType, 'target', false /* isFirst */, - durationThreshold); - assert_equals(performance.eventCounts.get(eventType), 3); + durationThreshold, + notCancelable(eventType)); + if (looseCount) { + assert_greater_than_equal(performance.eventCounts.get(eventType), 3, + `Should have at least 3 ${eventType} events`) + } else { + assert_equals(performance.eventCounts.get(eventType), 3, `Should have 3 ${eventType} events`); + } resolve(); })).observe({type: 'event', durationThreshold: durationThreshold}); - // Cause a slow event. - applyAction(actions, eventType, target); - actions.send(); }); + // Cause a slow event. + let actionPromise = applyAction(eventType, target); + return Promise.all([actionPromise, observerPromise]); }
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html index 633f7e4f7e3..e84fce715f1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html @@ -10,7 +10,7 @@ function makeBlob() { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); - xhr.open("GET", '/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg'); + xhr.open("GET", '/css/css-images/image-orientation/support/exif-orientation-8-llo.jpg'); xhr.responseType = 'blob'; xhr.send(); xhr.onload = function() { @@ -22,7 +22,7 @@ window.onload = function() { var cfb = document.getElementById("canvasWithFileBitmap"); makeBlob().then(function(blob){createImageBitmap(blob).then(bitmap => { - cfb.getContext("2d").drawImage(bitmap, 0, 0); + cfb.getContext("2d").drawImage(bitmap, 0, 0, 150, 150 * bitmap.height / bitmap.width); window.requestAnimationFrame(() => { document.documentElement.removeAttribute("class"); }); @@ -32,6 +32,6 @@ </script> </head> <body> - <canvas id="canvasWithFileBitmap" width="300" height="300"></canvas> + <canvas id="canvasWithFileBitmap" width="150" height="300"></canvas> </body> </html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html index 260f96e5cac..47d1f8b431b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/drawImage-with-src-rect.tentative.html @@ -19,7 +19,7 @@ </script> </head> <body> - <img id="img-element" src="../../../css/css-images/image-orientation/support/exif-orientation-3-lr.jpg"> + <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg"> <canvas id="bitmap-canvas"></canvas> </body> </html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html index d1d3554c70a..2bd60378354 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html @@ -5,6 +5,6 @@ <title>createImageBitmap and drawImage from a blob with image orientation: from-image, reference</title> </head> <body> - <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr.jpg"> + <img id="img-element" style="width: 150px; height: 300px;" src="/css/css-images/image-orientation/support/exif-orientation-8-llo.jpg"> </body> </html> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html index d59dd2d9fd7..19ffcc39c96 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-images-to-the-canvas/image-orientation/reference/drawImage-with-src-rect-ref.html @@ -16,7 +16,7 @@ </script> </head> <body> - <img id="img-element" src="../../../../css/css-images/image-orientation/support/exif-orientation-3-lr-pre-rotated.jpg"> + <img id="img-element" src="/css/css-images/image-orientation/support/exif-orientation-3-lr-pre-rotated.jpg"> <canvas id="bitmap-canvas"></canvas> </body> </html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml index be8039b03f9..6b02200362e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/templates.yaml @@ -1,87 +1,6 @@ # Copyright (c) 2010 Philip Taylor # Released under the BSD license and W3C Test Suite License: see LICENSE.txt -framed: | - <!DOCTYPE html> - <title>Canvas test: %(name)s</title> - <script src="../tests.js"></script> - <link rel="stylesheet" href="../tests.css"> - %(fonts)s<body class="framed show_output"> - <h1> - <a href="%(name)s.html" target="_parent">%(name_wrapped)s</a> - </h1> - <p><a href="#" id="show_output" onclick="document.body.className += ' show_output'; return false">[show output]</a> - %(fonthack)s<p class="output">Actual output:</p> - <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas> - %(expected)s - <ul id="d"></ul> - <script> - _addTest(function(canvas, ctx) { - - %(code)s - - }); - </script> - %(images)s - -standalone: | - <!DOCTYPE html> - <title>Canvas test: %(name)s</title> - <script src="../tests.js"></script> - <link rel="stylesheet" href="../tests.css"> - <link rel="prev" href="%(prev)s.html" title="%(prev)s"> - <link rel="next" href="%(next)s.html" title="%(next)s"> - %(fonts)s<body class="show_output"> - <p> - <a href="%(prev)s.html" accesskey="p" title="[p] %(prev)s"><</a> - <a href="index.html">[index]</a> - <a href="%(next)s.html" accesskey="n" title="[n] %(next)s">></a> - <h1>%(backrefs)s</h1> - <p class="desc">%(desc)s</p> - <div class="refs">References: - <ul> - %(refs)s - </ul> - </div> - %(notes)s - %(fonthack)s<p class="output">Actual output:</p> - <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas> - %(expected)s - <ul id="d"></ul> - <script> - _addTest(function(canvas, ctx) { - - %(code)s - - }); - </script> - %(images)s - -minimal: | - <!DOCTYPE html> - <html class="minimal"> - <title>Canvas test: %(name)s</title> - <script src="../tests.js"></script> - <link rel="stylesheet" href="../tests.css"> - <link rel="prev" href="minimal.%(prev)s.html" title="%(prev)s"> - <link rel="next" href="minimal.%(next)s.html" title="%(next)s"> - %(fonts)s<body> - <p id="passtext">Pass</p> - <p id="failtext">Fail</p> - <!-- TODO: handle "script did not run" case --> - %(fonthack)s<p class="output">These images should be identical:</p> - <canvas id="c" class="output" %(canvas)s>%(fallback)s</canvas> - %(expected)s - <ul id="d"></ul> - <script> - _addTest(function(canvas, ctx) { - - %(code)s - - }); - </script> - %(images)s - w3c: | <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> @@ -109,270 +28,3 @@ w3c: | }); </script> %(scripts)s%(images)s - -mochitest: | - <!DOCTYPE HTML> - <title>%(mochi_name_fn)s</title> - %(mochi_desc)s<script src="/MochiKit/MochiKit.js"></script> - <script src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" href="/tests/SimpleTest/test.css"> - %(fonts)s<body><!-- [[[ test_%(mochi_name)s.html ]]] --> - - <p>Canvas test: %(mochi_name)s</p> - %(mochi_desc)s%(fonthack)s<canvas id="c" %(canvas)s>%(fallback)s</canvas> - <script> - - function %(mochi_name_fn)s() { - - var canvas = document.getElementById('c'); - var ctx = canvas.getContext('2d'); - - %(mochi_code)s - - } - </script> - %(mochi_images)s - -mochitest.isPixel: | - function isPixel(ctx, x,y, r,g,b,a, pos, colour, d) { - var pixel = ctx.getImageData(x, y, 1, 1); - var pr = pixel.data[0], - pg = pixel.data[1], - pb = pixel.data[2], - pa = pixel.data[3]; - ok(r-d <= pr && pr <= r+d && - g-d <= pg && pg <= g+d && - b-d <= pb && pb <= b+d && - a-d <= pa && pa <= a+d, - "pixel "+pos+" is "+pr+","+pg+","+pb+","+pa+"; expected "+colour+" +/- "+d); - } - -mochitest.todo_isPixel: | - function todo_isPixel(ctx, x,y, r,g,b,a, pos, colour, d) { - var pixel = ctx.getImageData(x, y, 1, 1); - var pr = pixel.data[0], - pg = pixel.data[1], - pb = pixel.data[2], - pa = pixel.data[3]; - todo(r-d <= pr && pr <= r+d && - g-d <= pg && pg <= g+d && - b-d <= pb && pb <= b+d && - a-d <= pa && pa <= a+d, - "pixel "+pos+" is "+pr+","+pg+","+pb+","+pa+"; expected "+colour+" +/- "+d); - } - -mochitest.deferTest: | - function deferTest() { - _deferred = true; - } - -mochitest.wrapFunction: | - function wrapFunction(f) { - return function () { - f.apply(null, arguments); - SimpleTest.finish(); - } - } - -mochitest.exception: | - var _thrown_outer = false; - try { - - %s - } catch (e) { - _thrown_outer = true; - } - todo(!_thrown_outer, 'should not throw exception'); - -mochitest.Makefile: | - # - # ***** BEGIN LICENSE BLOCK ***** - # Version: MPL 1.1/GPL 2.0/LGPL 2.1 - # - # The contents of this file are subject to the Mozilla Public License Version - # 1.1 (the "License"); you may not use this file except in compliance with - # the License. You may obtain a copy of the License at - # http://www.mozilla.org/MPL/ - # - # Software distributed under the License is distributed on an "AS IS" basis, - # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - # for the specific language governing rights and limitations under the - # License. - # - # The Original Code is mozilla.org code. - # - # The Initial Developer of the Original Code is - # Mozilla Corporation. - # Portions created by the Initial Developer are Copyright (C) 2007 - # the Initial Developer. All Rights Reserved. - # - # Contributor(s): - # Philip Taylor <philip.taylor@cl.cam.ac.uk> - # - # Alternatively, the contents of this file may be used under the terms of - # either of the GNU General Public License Version 2 or later (the "GPL"), - # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - # in which case the provisions of the GPL or the LGPL are applicable instead - # of those above. If you wish to allow use of your version of this file only - # under the terms of either the GPL or the LGPL, and not to allow others to - # use your version of this file under the terms of the MPL, indicate your - # decision by deleting the provisions above and replace them with the notice - # and other provisions required by the GPL or the LGPL. If you do not delete - # the provisions above, a recipient may use your version of this file under - # the terms of any one of the MPL, the GPL or the LGPL. - # - # ***** END LICENSE BLOCK ***** - - DEPTH = ../../.. - topsrcdir = @top_srcdir@ - srcdir = @srcdir@ - VPATH = @srcdir@ - relativesrcdir = content/canvas/test - - include $(DEPTH)/config/autoconf.mk - include $(topsrcdir)/config/rules.mk - - -index.frame: | - <!DOCTYPE html> - <title>Canvas tests - %(category)s.*</title> - <link rel="stylesheet" href="../frame.css"> - <p><a href="index.html">[index]</a> - <h1>%(backrefs)s.*</h1> - <p> - -# FF trunk doesn't do onload in object, so use iframe instead -#index.frame.item: |- -# <object width="200" height="220" data="framed.%s.html">(object fallback)</object><!-- -# --> -index.frame.item: |- - <iframe width="200" height="220" src="framed.%s.html">(iframe fallback)</iframe><!-- - --> - -index.w3c.frame: | - <!DOCTYPE html> - <title>Canvas tests - %(category)s.*</title> - <link rel="stylesheet" href="/html/canvas/resources/canvas-frame.css"> - <p><a href="index.html">[index]</a> - <h1>%(backrefs)s.*</h1> - <p> - -index.w3c.frame.item: |- - <iframe width="320" height="240" src="%s.html">(iframe fallback)</iframe><!-- - --> - -index: | - <!DOCTYPE html> - <title>Canvas tests - index</title> - <link rel="stylesheet" href="../index.css"> - <script> - function expand(obj) { - obj.parentNode.className = obj.parentNode.className ? "" : "expand"; - return false; - } - </script> - - <h1><code><canvas></code> tests</h1> - - <p>Developed by <a href="mailto:excors@gmail.com">Philip Taylor</a>. - Last updated %(updated)s. - - <p>Based on the <a - href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas">HTML</a> - Draft Standard — 22 February 2010. See also the <a - href="spec.html">annotated specification</a>. - - <p>See <a href="results.html">test results</a> for some browsers. - (Generated semi-automatically via the <a - href="../reportgenentry.html">report generator</a>.) - - <p>You may want to <a href="../source.tar.bz2">download the source - code/data</a> (e.g. to create an offline copy of the tests). - - <h2>Test cases</h2> - - <p>For each test, a green background indicates success, red indicates - failure, blue indicates a need to manually confirm the output is as - expected. - - <p>The versions in the report generator are the most visually minimalist. - The category links below show the actual and expected renderings, and any - error messages. The individual test pages have links to relevant parts of - the specification and extra notes. - - <p>There may be many inaccuracies: tests that do not notice when part of - the output is incorrect; tests that are too intolerant of acceptable - renderings differences, or make other unreasonable assumptions; tests that - were written for an outdated version of the specification, and tests that - are just wrong. Also a number of features are not tested, most notably text - rendering. Please contact me (<a - href="mailto:excors@gmail.com">email</a>, <a - href="http://wiki.whatwg.org/wiki/IRC">IRC</a>, etc) if you find any - problems. - -index.w3c: | - <!DOCTYPE html> - <title>Canvas tests - index</title> - <link rel="stylesheet" href="/html/canvas/resources/canvas-index.css"> - - <h1><code><canvas></code> tests</h1> - -index.category.item: | - <li><h3><a href="index.%s.html">%s.*</a></h3><p>%d test%s <a href="#" onclick="return expand(this)">expand</a></p> - -index.w3c.category.item: | - <li><h3><a href="index.%s.html">%s.*</a></h3><p>%d test%s</p> - -reportgen: | - <!DOCTYPE html> - <title>Canvas tests - report generator</title> - <link rel="stylesheet" href="../reportgen.css"> - <script src="../reportgen.js"></script> - <p>This is mainly for my own use, so it is not designed to be user-friendly. - If anyone else wants to use it for some reason, just wait - until "tests not yet loaded" and "tests not yet completed" get down to zero, then click the - pass/fail button for any test it shows where it cannot work out the answer (or use the - <kbd>y</kbd>/<kbd>n</kbd> keys to choose for the magenta-highlighted case), then use the - buttons at the bottom to collect all the results. - <form id="f"> - <p><label for="loading">Tests not yet loaded:</label> <input id="loading" value="0" readonly> - <p><label for="waiting">Tests not yet completed:</label> <input id="waiting" value="0" readonly> - <p><button type="button" onclick="showUnfinished()">Show uncompleted tests</button> - <button type="button" onclick="showAll()">Show all tests</button> - <button type="button" onclick="reloadAll()">Reload test cases serially</button> - <!--<button type="button" onclick="avoidFrameLimit()">HACK: work around frame limit</button> - <button type="button" onclick="makeObjects()">HACK: s/iframe/object/</button>--> - <hr> - <p><label for="passed">Detected passes:</label> <input id="passed" value="0" readonly> - <p><label for="failed">Detected fails:</label> <input id="failed" value="0" readonly> - <hr> - <table> - <tr> - <th>Test name - <th>Test case - <th>Pass? - <th>Fail? - <th>Notes - <script> - createTable( [ - %(items)s - ] ); - </script> - </table> - </form> - <hr> - <form method="post" action="../submitresults.cgi"> - <button type="button" onclick="document.getElementById('report').value = genreport()">Generate test report</button><br> - <textarea name="report" id="report" cols="100" rows="10"></textarea><br> - <input type="submit" value="Submit results"> (Submissions will tend to be ignored unless there - is a good reason why they won't be, so don't use this form unless there is such a reason.) - </form> - -results: | - <!DOCTYPE html> - <title>Canvas tests - results</title> - <link rel="stylesheet" href="../results.css"> - <table> - <col id="col1"> - <tr> - <th>Test diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html index d3e090bd7f7..089019dc2e2 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/coep-frame-javascript.https.html @@ -18,7 +18,7 @@ async_test(t => { frame.src = "resources/coep-frame.html"; frame.onload = t.step_func(() => { frame.onload = null; - frame.src = `javascript:'${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}'`; + frame.src = `javascript:${encodeURIComponent(createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN))}`; }); document.body.append(frame); }, "Cross-Origin-Embedder-Policy frame and javascript: URLs"); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html index c34f1336c8b..13c0cce1858 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/data.https.html @@ -14,7 +14,7 @@ async_test(t => { })); const frame = document.createElement("iframe"); t.add_cleanup(() => frame.remove()); - frame.src = `data:text/html,${createScript("null", window.origin)}`; + frame.src = `data:text/html,<script>${createScript("null", window.origin)}<\/script>`; document.body.append(frame); }, "Cross-Origin-Embedder-Policy and data: URLs"); </script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html index 9fe85db76f5..60edf00312d 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/javascript.https.html @@ -15,7 +15,7 @@ async_test(t => { })); const frame = document.createElement("iframe"); t.add_cleanup(() => frame.remove()); - frame.src = `javascript:'${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}'`; + frame.src = `javascript:${encodeURIComponent(createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN))}`; document.body.append(frame); }, "Cross-Origin-Embedder-Policy and javascript: URLs"); </script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html new file mode 100644 index 00000000000..503e52110bd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html @@ -0,0 +1,77 @@ +<!doctype html> +<html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script> +const {ORIGIN, REMOTE_ORIGIN} = get_host_info(); +const COEP = + '|header(cross-origin-embedder-policy,require-corp)' + + '|header(cross-origin-embedder-policy-report-only,require-corp)'; +const FRAME_URL = `${ORIGIN}/common/blank.html?pipe=`; +const REMOTE_FRAME_URL = `${REMOTE_ORIGIN}/common/blank.html?pipe=`; + +function checkCorpReport(report, contextUrl, blockedUrl) { + assert_equals(report.type, 'coep'); + assert_equals(report.url, contextUrl); + assert_equals(report.body.type, 'corp'); + assert_equals(report.body['blocked-url'], blockedUrl); +} + +function loadFrame(document, url) { + return new Promise((resolve, reject) => { + const frame = document.createElement('iframe'); + frame.src = url; + frame.onload = () => resolve(frame); + frame.onerror = reject; + document.body.appendChild(frame); + }); +} + +function observeReportsUpTo(global, upto) { + const reports = []; + return new Promise(resolve => { + const observer = new global.ReportingObserver((rs) => { + for (const r of rs) { + reports.push(r.toJSON()); + if (reports.length == upto) { + observer.disconnect(); + resolve(reports); + } + } + }); + observer.observe(); + }); +} + +promise_test(async (t) => { + const parent = await loadFrame(document, FRAME_URL + COEP); + t.add_cleanup(() => parent.remove()); + loadFrame(parent.contentDocument, REMOTE_FRAME_URL + COEP); + + // One for COEP, one for COEP-RO. + const reports = await observeReportsUpTo(parent.contentWindow, 2); + + assert_equals(reports.length, 2); + checkCorpReport(reports[0], parent.src, REMOTE_FRAME_URL + COEP); + checkCorpReport(reports[1], parent.src, REMOTE_FRAME_URL + COEP); +}, 'Navigation CORP'); + +promise_test(async (t) => { + const grandParent = await loadFrame(document, FRAME_URL + COEP); + t.add_cleanup(() => grandParent.remove()); + const parent = grandParent.contentDocument.createElement('iframe'); + grandParent.contentDocument.body.appendChild(parent); + loadFrame(parent.contentDocument, REMOTE_FRAME_URL + COEP); + + // One for COEP, one for COEP-RO. + const reports = await observeReportsUpTo(parent.contentWindow, 2); + + assert_equals(reports.length, 2); + checkCorpReport(reports[0], 'about:blank', REMOTE_FRAME_URL + COEP); + checkCorpReport(reports[1], 'about:blank', REMOTE_FRAME_URL + COEP); +}, 'Navigation CORP and about:blank'); + +</script> +</body></html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html index 7d90aacd8bb..d2039064a8d 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/blob-url-factory.html @@ -5,7 +5,7 @@ const query = new URLSearchParams(window.location.search); const id = query.get("id"); const variant = query.get("variant"); const parent = (variant === "subframe") ? "parent.parent" : "parent"; -const blob = new Blob([createScript(window.origin, query.get("crossOrigin"), parent, id)], { type: "text/html" }); +const blob = new Blob([`<script>${createScript(window.origin, query.get("crossOrigin"), parent, id)}<\/script>`], { type: "text/html" }); const blobURL = URL.createObjectURL(blob); if (variant === "subframe") { const frame = document.createElement("iframe"); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js index ab7286e57ac..ac7a1fda06f 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/resources/script-factory.js @@ -1,8 +1,7 @@ // This creates a serialized <script> element that is useful for blob/data/srcdoc-style tests. function createScript(sameOrigin, crossOrigin, type="parent", id="") { - return `<script> -const data = { id: "${id}", + return `const data = { id: "${id}", opener: !!window.opener, origin: window.origin, sameOriginNoCORPSuccess: false, @@ -27,6 +26,5 @@ Promise.all(records).then(() => { } else { window.${type}.postMessage(data, "*"); } -}); -<\/script>`; +});`; } diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html index 3fbba961b27..2937c133810 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/srcdoc.https.html @@ -15,7 +15,7 @@ async_test(t => { })); const frame = document.createElement("iframe"); t.add_cleanup(() => frame.remove()); - frame.srcdoc = createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN); + frame.srcdoc = `<script>${createScript(window.origin, get_host_info().HTTPS_NOTSAMESITE_ORIGIN)}<\/script>`; document.body.append(frame); }, "Cross-Origin-Embedder-Policy and srcdoc"); </script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html index c317f6bdf9b..eb74bab3e5c 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/coep-blob-popup.https.html @@ -9,7 +9,7 @@ promise_test(t => { const origins = get_host_info(); const id = `tut mir leid ${type}`; - const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)], {type: "text/html"}); + const blob = new Blob([`<script>${createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)}<\/script>`], {type: "text/html"}); const blobURL = URL.createObjectURL(blob); const bc = new BroadcastChannel(id); diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html new file mode 100644 index 00000000000..58e566c7386 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/input-pattern-dynamic-value.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Pattern dynamic value attribute change</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1636495"> +<input pattern="a" value="a"> +<script> +test(function() { + let i = document.querySelector("input"); + assert_false(i.matches(":invalid")); + i.pattern = "b"; + assert_true(i.matches(":invalid")); + i.pattern = "("; + assert_false(i.matches(":invalid")); +}, "input validation is updated after pattern attribute change"); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html index d9bbadbe617..fc112f3ceb3 100644 --- a/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html +++ b/tests/wpt/web-platform-tests/html/semantics/selectors/pseudo-classes/readwrite-readonly.html @@ -51,17 +51,28 @@ testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must match input elements to which the readonly attribute applies, and that are mutable"); - testSelectorIdsMatch("#set1 :read-only", ["input2"], "The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable"); + testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must not match input elements to which the readonly attribute applies, and that are mutable"); document.getElementById("input1").setAttribute("readonly", "readonly"); testSelectorIdsMatch("#set1 :read-write", [], "The :read-write pseudo-class must not match input elements after the readonly attribute has been added"); - testSelectorIdsMatch("#set1 :read-only", ["input1", "input2"], "The :read-only pseudo-class must match input elements after the readonly attribute has been added"); + testSelectorIdsMatch("#set1 :read-only", ["input1", "input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the readonly attribute has been added"); document.getElementById("input1").removeAttribute("readonly"); testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must not match input elements after the readonly attribute has been removed"); - testSelectorIdsMatch("#set1 :read-only", ["input2"], "The :read-only pseudo-class must match input elements after the readonly attribute has been removed"); + testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the readonly attribute has been removed"); + + document.getElementById("input1").disabled = true; + testSelectorIdsMatch("#set1 :read-write", [], "The :read-write pseudo-class must not match input elements after the disabled attribute has been added"); + + testSelectorIdsMatch("#set1 :read-only", ["input1", "input2", "input3", "input4", "input5"], "The :read-only pseudo-class must match input elements after the disabled attribute has been added"); + + document.getElementById("input1").disabled = false; + + testSelectorIdsMatch("#set1 :read-write", ["input1"], "The :read-write pseudo-class must match input elements after the disabled attribute has been removed"); + + testSelectorIdsMatch("#set1 :read-only", ["input2", "input3", "input4", "input5"], "The :read-only pseudo-class must not match input elements after the disabled attribute has been removed"); testSelectorIdsMatch("#set2 :read-write", ["textarea1"], "The :read-write pseudo-class must match textarea elements that do not have a readonly attribute, and that are not disabled"); diff --git a/tests/wpt/web-platform-tests/interfaces/web-share.idl b/tests/wpt/web-platform-tests/interfaces/web-share.idl index a29107f0598..c29a29d0b4e 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-share.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-share.idl @@ -8,6 +8,7 @@ partial interface Navigator { }; dictionary ShareData { + FrozenArray<File> files; USVString title; USVString text; USVString url; diff --git a/tests/wpt/web-platform-tests/interfaces/webauthn.idl b/tests/wpt/web-platform-tests/interfaces/webauthn.idl index 73c96c87b91..a1d46a37cf4 100644 --- a/tests/wpt/web-platform-tests/interfaces/webauthn.idl +++ b/tests/wpt/web-platform-tests/interfaces/webauthn.idl @@ -31,6 +31,9 @@ interface AuthenticatorResponse { interface AuthenticatorAttestationResponse : AuthenticatorResponse { [SameObject] readonly attribute ArrayBuffer attestationObject; sequence<DOMString> getTransports(); + ArrayBuffer getAuthenticatorData(); + ArrayBuffer? getPublicKey(); + COSEAlgorithmIdentifier getPublicKeyAlgorithm(); }; [SecureContext, Exposed=Window] diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl index 852ec06209e..efb21f4a0cc 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl @@ -85,11 +85,11 @@ interface RTCPeerConnection : EventTarget { constructor(optional RTCConfiguration configuration = {}); Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {}); Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options = {}); - Promise<void> setLocalDescription(optional RTCSessionDescriptionInit description = {}); + Promise<void> setLocalDescription(optional RTCLocalSessionDescriptionInit description = {}); readonly attribute RTCSessionDescription? localDescription; readonly attribute RTCSessionDescription? currentLocalDescription; readonly attribute RTCSessionDescription? pendingLocalDescription; - Promise<void> setRemoteDescription(optional RTCSessionDescriptionInit description = {}); + Promise<void> setRemoteDescription(RTCSessionDescriptionInit description); readonly attribute RTCSessionDescription? remoteDescription; readonly attribute RTCSessionDescription? currentRemoteDescription; readonly attribute RTCSessionDescription? pendingRemoteDescription; @@ -119,12 +119,12 @@ interface RTCPeerConnection : EventTarget { Promise<void> createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferOptions options = {}); - Promise<void> setLocalDescription(optional RTCSessionDescriptionInit description = {}, + Promise<void> setLocalDescription(optional RTCLocalSessionDescriptionInit description = {}, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback); Promise<void> createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback); - Promise<void> setRemoteDescription(optional RTCSessionDescriptionInit description = {}, + Promise<void> setRemoteDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback); Promise<void> addIceCandidate(RTCIceCandidateInit candidate, @@ -150,13 +150,18 @@ enum RTCSdpType { [Exposed=Window] interface RTCSessionDescription { - constructor(optional RTCSessionDescriptionInit descriptionInitDict = {}); + constructor(RTCSessionDescriptionInit descriptionInitDict); readonly attribute RTCSdpType type; readonly attribute DOMString sdp; [Default] object toJSON(); }; dictionary RTCSessionDescriptionInit { + required RTCSdpType type; + DOMString sdp = ""; +}; + +dictionary RTCLocalSessionDescriptionInit { RTCSdpType type; DOMString sdp = ""; }; diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html index f8303337304..b46b307dbe3 100644 --- a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html @@ -8,39 +8,39 @@ <!-- These operators should have form "prefix" --> - _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></merror></math>_ - _<math><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></math>_ - _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mphantom></math>_ - _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mrow></math>_ - _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></msqrt></math>_ - _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">−</mo><mi>x</mi></mstyle></math>_ + _<math><merror><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></merror></math>_ + _<math><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></math>_ + _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mphantom></math>_ + _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mrow></math>_ + _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></msqrt></math>_ + _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">−</mo><mi>x</mi></mstyle></math>_ <br/> - _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></merror></math>_ - _<math><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></math>_ - _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mphantom></math>_ - _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mrow></math>_ - _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></msqrt></math>_ - _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">+</mo><mi>x</mi></mstyle></math>_ + _<math><merror><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></merror></math>_ + _<math><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></math>_ + _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mphantom></math>_ + _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mrow></math>_ + _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></msqrt></math>_ + _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">+</mo><mi>x</mi></mstyle></math>_ <br/> - _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></merror></math>_ - _<math><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></math>_ - _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mphantom></math>_ - _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mrow></math>_ - _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></msqrt></math>_ - _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">±</mo><mi>x</mi></mstyle></math>_ + _<math><merror><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></merror></math>_ + _<math><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></math>_ + _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mphantom></math>_ + _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mrow></math>_ + _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></msqrt></math>_ + _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">±</mo><mi>x</mi></mstyle></math>_ <br/> - _<math><merror><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></merror></math>_ - _<math><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></math>_ - _<math><mphantom><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mphantom></math>_ - _<math><mrow><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mrow></math>_ - _<math><msqrt><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></msqrt></math>_ - _<math><mstyle><mo form="prefix" lspace="0em" rspace="0.055555em">∓</mo><mi>x</mi></mstyle></math>_ + _<math><merror><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></merror></math>_ + _<math><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></math>_ + _<math><mphantom><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mphantom></math>_ + _<math><mrow><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mrow></math>_ + _<math><msqrt><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></msqrt></math>_ + _<math><mstyle><mo form="prefix" lspace="0em" rspace="0em">∓</mo><mi>x</mi></mstyle></math>_ <br/> diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html index d48bd48a6e4..608ad4bbade 100644 --- a/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html +++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/operators/mo-form-ref.html @@ -8,11 +8,11 @@ <!-- This checks the effect of @form on a prefix operator. --> _<math><mo lspace="0.27777em" rspace="0.27777em">∇</mo></math>_ - _<math><mo lspace="0.11111em" rspace="0.05555em">∇</mo></math>_ + _<math><mo lspace="0em" rspace="0em">∇</mo></math>_ _<math><mo lspace="0.27777em" rspace="0.27777em">∇</mo></math>_ <!-- This checks the effect of @form on an infix operator. --> - _<math><mo lspace="0.22222em" rspace="0.22222em">⋉</mo></math>_ + _<math><mo lspace="0.166666em" rspace="0.166666em">⋉</mo></math>_ _<math><mo lspace="0.27777em" rspace="0.27777em">⋉</mo></math>_ _<math><mo lspace="0.27777em" rspace="0.27777em">⋉</mo></math>_ diff --git a/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html new file mode 100644 index 00000000000..514eba09c78 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset-clamp.html @@ -0,0 +1,214 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test clamping logic of element-based scroll offset for scroll timeline.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="testcommon.js"></script> + +<style> +.scroller { + overflow: scroll; + height: 500px; + width: 500px; +} + +/* Disable scrollbars to simplify the calculations in the test. */ +.scroller { + scrollbar-width: 0; +} +/* +Chrome does not support scrollbar-width so we use this non-standard property +until it does. +*/ +.scroller::-webkit-scrollbar { + display: none; +} + +.contents { + height: 1200px; + width: 1200px; + position: relative; +} + +.vertical #target { + background: blue; + border-top: 0px solid pink; + border-bottom: 0px solid pink; + box-sizing: border-box; + position: absolute; + width: 100%; + top: var(--start-position); + height: calc(var(--end-position) - var(--start-position)); +} + +.horizontal #target { + background: blue; + border-left: 0px solid pink; + border-right: 0px solid pink; + box-sizing: border-box; + position: absolute; + height: 100%; + left: var(--start-position); + width: calc(var(--end-position) - var(--start-position)); +} +</style> +<div id="log"></div> +<script> + 'use strict'; + + function createScrollerWithTarget(test, config) { + const orientationClass = config.orientation; + const positions = ` + --start-position: ${config.startElementPosition}; + --end-position: ${config.endElementPosition};` + + var scroller = createDiv(test); + scroller.innerHTML = + `<div class='contents' style="${positions}"> + <div id='target'></div> + </div>`; + scroller.classList.add('scroller'); + scroller.classList.add(orientationClass); + + return scroller; + } + + async function createScrollAnimationTest(description, config) { + promise_test(async t => { + const scroller = createScrollerWithTarget(t, config); + t.add_cleanup(() => scroller.remove()); + + const target = scroller.querySelector("#target"); + + const timeline = createScrollTimeline(t, { + scrollSource: scroller, + orientation: config.orientation, + timeRange: 1000, + fill: 'both', + startScrollOffset: {target: target, edge: 'end', ...config.start}, + endScrollOffset: {target: target, edge:'start', ...config.end } + }); + + // Wait for new animation frame which allows the timeline to compute new + // current time. + await waitForNextFrame(); + + const animation = createScrollLinkedAnimation(t, timeline); + const timeRange = animation.timeline.timeRange; + + // Verify initial start and current times in Idle state. + assert_equals(animation.currentTime, null, + "The current time is null in Idle state."); + assert_equals(animation.startTime, null, + "The start time is null in Idle state."); + + animation.play(); + assert_true(animation.pending, "Animation is in pending state."); + // Verify initial start and current times in Pending state. + assert_times_equal(animation.currentTime, 0, + "The current time is zero in Pending state."); + assert_equals(animation.startTime, 0, + "The start time is zero in Pending state."); + + await animation.ready; + // Verify initial start and current times in Playing state. + assert_times_equal(animation.currentTime, 0, + "The current time is zero in Playing state."); + assert_times_equal(animation.startTime, 0, + "The start time is zero in Playing state."); + + // Now do some scrolling and make sure that the Animation current time is + // correct. + if (config.orientation == 'vertical') { + scroller.scrollTo({top: config.scrollTo}); + assert_equals(scroller.scrollTop, config.scrollTo); + } else { + scroller.scrollTo({left: config.scrollTo}); + assert_equals(scroller.scrollLeft, config.scrollTo); + } + + await waitForNextFrame(); + + assert_times_equal(animation.timeline.currentTime, config.expectedCurrentTime, + "The timeline current time corresponds to the scroll position of the scroller."); + assert_times_equal(animation.currentTime, config.expectedCurrentTime, + "The animation current time corresponds to the scroll position of the scroller."); + assert_times_equal( + animation.effect.getComputedTiming().localTime, + config.expectedCurrentTime, + 'Effect local time corresponds to the scroll position of the scroller.'); + }, description); + } + + // We have no scrollbar and the scroller is symmetric on x & y axis so this + // static value is axis and platform agnostic. + const scroll_max = 700; + + // For this test we setup a single target, and scroll timeline in a way that + // our animation runs from when target enters the scroll port until it fully + // exits it. Then we create various edgecase scenarios to see the clamping + // logic. + // + // Scroller has 500px heights with 1200px content which translates to + // 0 < scroll < 700px + // + // +----------+ ^ + // | | | + // | Scroller | | + // | | | scrollRange + // | | | + // +----------+ | +--+ + // |TT| | |TT| + // +--+ v +----------+ + // | | + // | Scroller | + // | | + // | | + // +----------+ + // + // For each test the expected timeline start/end is in the comment to help + // with the verification. + const tests = { + // offsets: [0, 600] + "no clamping is expected": { + startElementPosition: '500px', + endElementPosition: '600px', + scrollTo: 300, + expectedCurrentTime: 500, + }, + // offsets: [0, 600] + "start is visible at zero offset and should get clamped": { + startElementPosition: '400px', + endElementPosition: '600px', + scrollTo: 300, + expectedCurrentTime: 500, + }, + + // offsets: [0, scroll_max] + "end is not reachable and should be clamped": { + startElementPosition: '500px', + endElementPosition: '800px', + scrollTo: scroll_max / 2, + expectedCurrentTime: 500, + }, + + // offsets: [0, scroll_max] + "both start and end are clamped": { + startElementPosition: '400px', + endElementPosition: '800px', + scrollTo: scroll_max / 2, + expectedCurrentTime: 500, + }, + }; + + for (let orientation of ['vertical', 'horizontal']) { + for (let testName in tests) { + const description = `Animation start and current times are correct given + element-based offsets for orienation ${orientation} and ${testName}.`; + const config = tests[testName]; + config.orientation = orientation; + createScrollAnimationTest(description, config); + } + } +</script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html index 33fd35b3adb..5209cc6702e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/idlharness-sw.https.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <title>Service Worker Global Scope Interfaces</title> +<meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/test-helpers.sub.js"></script> diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 74b3c8cf930..6a5359bfb8a 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -323,6 +323,41 @@ def check_css_globally_unique(repo_root, paths): return errors +def check_unique_testharness_basenames(repo_root, paths): + # type: (str, List[str]) -> List[rules.Error] + """ + Checks that all testharness files have unique basename paths. + + The 'basename path' refers to the entire path excluding the extension. For + example, 'foo/bar/baz.html' and 'foo/bar/baz.xhtml' have the same basename + path, but 'foo/bar/baz.html' and 'foo/qux/baz.html' do not. + + Testharness files with identical basenames have caused issues in downstream + infrastructure (see https://github.com/web-platform-tests/wpt/issues/7570), + and may cause confusion in general. + + :param repo_root: the repository root + :param paths: list of all paths + :returns: a list of errors found in ``paths`` + """ + + errors = [] + file_dict = defaultdict(list) + for path in paths: + source_file = SourceFile(repo_root, path, "/") + if source_file.type != "testharness": + continue + file_name, file_extension = os.path.splitext(path) + file_dict[file_name].append(file_extension) + for k, v in file_dict.items(): + if len(v) == 1: + continue + context = (', '.join(v),) + for extension in v: + errors.append(rules.DuplicateBasenamePath.error(k + extension, context)) + return errors + + def parse_ignorelist(f): # type: (IO[bytes]) -> Tuple[Ignorelist, Set[Text]] """ @@ -930,7 +965,7 @@ def lint(repo_root, paths, output_format, ignore_glob=str()): path_lints = [check_file_type, check_path_length, check_worker_collision, check_ahem_copy, check_gitignore_file] -all_paths_lints = [check_css_globally_unique] +all_paths_lints = [check_css_globally_unique, check_unique_testharness_basenames] file_lints = [check_regexp_line, check_parsed, check_python_ast, check_script_metadata, check_ahem_system_font] diff --git a/tests/wpt/web-platform-tests/tools/lint/rules.py b/tests/wpt/web-platform-tests/tools/lint/rules.py index 6fbdc1c360d..695f6cd4e53 100644 --- a/tests/wpt/web-platform-tests/tools/lint/rules.py +++ b/tests/wpt/web-platform-tests/tools/lint/rules.py @@ -322,6 +322,15 @@ class TestharnessInOtherType(Rule): description = "testharness.js included in a %s test" +class DuplicateBasenamePath(Rule): + name = "DUPLICATE-BASENAME-PATH" + description = collapse(""" + File has identical basename path (path excluding extension) as + other file(s) (found extensions: %s) + """) + to_fix = "rename files so they have unique basename paths" + + class Regexp(six.with_metaclass(abc.ABCMeta)): @abc.abstractproperty def pattern(self): diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html new file mode 100644 index 00000000000..f412593b045 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.html @@ -0,0 +1,4 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js new file mode 100644 index 00000000000..a855dab6a77 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.js @@ -0,0 +1,6 @@ +// This is a dummy JavaScript file, meant to indicate a 'support' file of +// sorts that may be included by some test. + +function helloWorld() { + return 'Hello, world!'; +} diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml new file mode 100644 index 00000000000..c8b4cc2e522 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/a.xhtml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<html xmlns="http://www.w3.org/1999/xhtml"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</html> diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html new file mode 100644 index 00000000000..f412593b045 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir1/b.html @@ -0,0 +1,4 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml new file mode 100644 index 00000000000..c8b4cc2e522 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/lint/tests/dummy/tests/dir2/a.xhtml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<html xmlns="http://www.w3.org/1999/xhtml"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</html> diff --git a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py index 43da2f9ff21..10d9728b405 100644 --- a/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/tests/test_lint.py @@ -398,6 +398,65 @@ def test_check_css_globally_unique_ignored_dir(caplog): assert caplog.text == "" +def test_check_unique_testharness_basename_same_basename(caplog): + # Precondition: There are testharness files with conflicting basename paths. + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html')) + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.xhtml')) + + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/a.xhtml"], "normal") + # There will be one failure for each file. + assert rv == 2 + assert mocked_check_path.call_count == 2 + assert mocked_check_file_contents.call_count == 2 + assert "DUPLICATE-BASENAME-PATH" in caplog.text + + +def test_check_unique_testharness_basename_different_name(caplog): + # Precondition: There are two testharness files in the same directory with + # different names. + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html')) + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'b.html')) + + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/b.html"], "normal") + assert rv == 0 + assert mocked_check_path.call_count == 2 + assert mocked_check_file_contents.call_count == 2 + assert caplog.text == "" + + +def test_check_unique_testharness_basename_different_dir(caplog): + # Precondition: There are two testharness files in different directories + # with the same basename. + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html')) + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir2', 'a.xhtml')) + + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir2/a.xhtml"], "normal") + assert rv == 0 + assert mocked_check_path.call_count == 2 + assert mocked_check_file_contents.call_count == 2 + assert caplog.text == "" + + +def test_check_unique_testharness_basename_not_testharness(caplog): + # Precondition: There are non-testharness files with conflicting basename paths. + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.html')) + assert os.path.exists(os.path.join(_dummy_repo, 'tests', 'dir1', 'a.js')) + + with _mock_lint("check_path") as mocked_check_path: + with _mock_lint("check_file_contents") as mocked_check_file_contents: + rv = lint(_dummy_repo, ["tests/dir1/a.html", "tests/dir1/a.js"], "normal") + assert rv == 0 + assert mocked_check_path.call_count == 2 + assert mocked_check_file_contents.call_count == 2 + assert caplog.text == "" + + def test_ignore_glob(caplog): # Lint two files in the ref/ directory, and pass in ignore_glob to omit one # of them. diff --git a/tests/wpt/web-platform-tests/url/resources/urltestdata.json b/tests/wpt/web-platform-tests/url/resources/urltestdata.json index dd40eaa5a9f..1ed95583c12 100644 --- a/tests/wpt/web-platform-tests/url/resources/urltestdata.json +++ b/tests/wpt/web-platform-tests/url/resources/urltestdata.json @@ -4482,21 +4482,6 @@ "hash": "" }, { - "input": "sc://\u001F!\"$&'()*+,-.;<=>^_`{|}~/", - "base": "about:blank", - "href": "sc://%1F!\"$&'()*+,-.;<=>^_`{|}~/", - "origin": "null", - "protocol": "sc:", - "username": "", - "password": "", - "host": "%1F!\"$&'()*+,-.;<=>^_`{|}~", - "hostname": "%1F!\"$&'()*+,-.;<=>^_`{|}~", - "port": "", - "pathname": "/", - "search": "", - "hash": "" - }, - { "input": "sc://\u0000/", "base": "about:blank", "failure": true @@ -4649,6 +4634,68 @@ "search": "", "hash": "" }, + "Forbidden host code points", + { + "input": "http://a<b", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a>b", + "base": "about:blank", + "failure": true + }, + { + "input": "http://a^b", + "base": "about:blank", + "failure": true + }, + { + "input": "non-special://a<b", + "base": "about:blank", + "failure": true + }, + { + "input": "non-special://a>b", + "base": "about:blank", + "failure": true + }, + { + "input": "non-special://a^b", + "base": "about:blank", + "failure": true + }, + "Allowed host code points", + { + "input": "http://\u001F!\"$&'()*+,-.;=_`{|}~/", + "base": "about:blank", + "href": "http://\u001F!\"$&'()*+,-.;=_`{|}~/", + "origin": "http://\u001F!\"$&'()*+,-.;=_`{|}~", + "protocol": "http:", + "username": "", + "password": "", + "host": "\u001F!\"$&'()*+,-.;=_`{|}~", + "hostname": "\u001F!\"$&'()*+,-.;=_`{|}~", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "sc://\u001F!\"$&'()*+,-.;=_`{|}~/", + "base": "about:blank", + "href": "sc://%1F!\"$&'()*+,-.;=_`{|}~/", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%1F!\"$&'()*+,-.;=_`{|}~", + "hostname": "%1F!\"$&'()*+,-.;=_`{|}~", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, "# Hosts and percent-encoding", { "input": "ftp://example.com%80/", diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html index 37465540d26..fd8719299db 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html @@ -302,7 +302,12 @@ promise_test(async t => { const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' }); await animA.finished; - + // It is not guaranteed that the mircrotask PerformCheckpoint() happens before + // the animation finish promised got resolved, because the microtask + // checkpoint could also be triggered from other source such as the event_loop + // Thus we wait for one animation frame to make sure the finished animation is + // properly removed. + await waitForNextFrame(1); assert_array_equals(div.getAnimations(), [animB]); }, 'Does not return an animation that has been removed'); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py new file mode 100644 index 00000000000..28eaf29f737 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_tripleclick.py @@ -0,0 +1,34 @@ +from tests.perform_actions.support.refine import filter_dict, get_events +from tests.support.asserts import assert_move_to_coordinates +from tests.support.inline import inline + +lots_of_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor "\ + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud "\ + " exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." + + +def test_tripleclick_at_coordinates(session, mouse_chain): + """ + This test does a triple click on a coordinate. On desktop platforms + this will select a paragraph. On mobile this will not have the same + desired outcome as taps are handled differently on mobile. + """ + session.url = inline("""<div> + {} + </div>""".format(lots_of_text)) + div = session.find.css("div", all=False) + div_rect = div.rect + div_centre = { + "x": div_rect["x"] + div_rect["width"]/2, + "y": div_rect["y"] + div_rect["height"]/2 + } + mouse_chain \ + .pointer_move(div_centre["x"], div_centre["y"]) \ + .click() \ + .click() \ + .click() \ + .perform() + + actual_text = session.execute_script("return document.getSelection().toString();") + + assert lots_of_text == actual_text diff --git a/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html b/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html new file mode 100644 index 00000000000..b153c3adac5 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html @@ -0,0 +1,66 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection.prototype.ondatachannel</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../webrtc/RTCPeerConnection-helper.js"></script> +<script> +'use strict'; + +promise_test(async (t) => { + const resolver = new Resolver(); + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + + const dc1 = pc1.createDataChannel('test', { + ordered: false, + maxRetransmits: 1, + protocol: 'custom', + priority: 'high' + }); + + assert_equals(dc1.priority, 'high'); + + pc2.ondatachannel = t.step_func((event) => { + const dc2 = event.channel; + + assert_equals(dc2.priority, 'high'); + + resolver.resolve(); + }); + + exchangeIceCandidates(pc1, pc2); + await doSignalingHandshake(pc1, pc2); + + await resolver; +}, 'In-band negotiated channel created on remote peer should match the same configuration as local ' + + 'peer'); + +promise_test(async (t) => { + const resolver = new Resolver(); + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + + const dc1 = pc1.createDataChannel(''); + + assert_equals(dc1.priority, 'low'); + + pc2.ondatachannel = t.step_func((event) => { + const dc2 = event.channel; + assert_equals(dc2.priority, 'low'); + + resolver.resolve(); + }); + + exchangeIceCandidates(pc1, pc2); + await doSignalingHandshake(pc1, pc2); + + await resolver; +}, 'In-band negotiated channel created on remote peer should match the same (default) ' + + 'configuration as local peer'); + +</script> diff --git a/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html b/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html new file mode 100644 index 00000000000..37c1b919b41 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html @@ -0,0 +1,44 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCRtpParameters encodings</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../webrtc/dictionary-helper.js"></script> +<script src="../webrtc/RTCRtpParameters-helper.js"></script> +<script> + 'use strict'; + + promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const { sender } = pc.addTransceiver('video', { + sendEncodings: [{ + active: false, + priority: 'low', + networkPriority: 'low', + maxBitrate: 8, + maxFramerate: 25, + rid: 'foo' + }] + }); + await doOfferAnswerExchange(t, pc); + + const param = sender.getParameters(); + validateSenderRtpParameters(param); + const encoding = getFirstEncoding(param); + + assert_equals(encoding.active, false); + assert_equals(encoding.priority, 'low'); + assert_equals(encoding.networkPriority, 'low'); + }, `sender.getParameters() should return sendEncodings set by addTransceiver()`); + + test_modified_encoding('audio', 'active', false, true, + 'setParameters() with modified encoding.active should succeed'); + + test_modified_encoding('audio', 'priority', 'very-low', 'high', + 'setParameters() with modified encoding.priority should succeed'); + + test_modified_encoding('audio', 'networkPriority', 'very-low', 'high', + 'setParameters() with modified encoding.networkPriority should succeed'); + +</script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html index bc537c26867..68a2623391b 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.https.html @@ -363,7 +363,6 @@ sendEncodings: [{ dtx: 'enabled', active: false, - priority: 'low', ptime: 5, maxBitrate: 8, maxFramerate: 25, diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js index 29145c8b927..679cb85b12a 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js @@ -811,6 +811,18 @@ function findTransceiverForSender(pc, sender) { return null; } +function preferCodec(transceiver, mimeType, sdpFmtpLine) { + const {codecs} = RTCRtpSender.getCapabilities(transceiver.receiver.track.kind); + // sdpFmtpLine is optional, pick the first partial match if not given. + const selectedCodecIndex = codecs.findIndex(c => { + return c.mimeType === mimeType && (c.sdpFmtpLine === sdpFmtpLine || !sdpFmtpLine); + }); + const selectedCodec = codecs[selectedCodecIndex]; + codecs.slice(selectedCodecIndex, 1); + codecs.unshift(selectedCodec); + return transceiver.setCodecPreferences(codecs); +} + // Contains a set of values and will yell at you if you try to add a value twice. class UniqueSet extends Set { constructor(items) { diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html index 2fd33ca5411..8ba98414cbb 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-ondatachannel.html @@ -224,7 +224,6 @@ promise_test(async (t) => { readonly attribute USVString protocol; readonly attribute boolean negotiated; readonly attribute unsigned short? id; - readonly attribute RTCPriorityType priority; readonly attribute RTCDataChannelState readyState; ... }; @@ -240,8 +239,6 @@ promise_test(async (t) => { [[MaxRetransmits]], [[DataChannelProtocol]], and [[DataChannelId]] internal slots to the corresponding values in configuration. 5. Initialize channel's [[Negotiated]] internal slot to false. - 6. Initialize channel's [[DataChannelPriority]] internal slot based on the integer priority - value in configuration, [...] 7. Set channel's [[ReadyState]] slot to connecting. 8. Fire a datachannel event named datachannel with channel at the RTCPeerConnection object. @@ -259,7 +256,6 @@ promise_test(async (t) => { ordered: false, maxRetransmits: 1, protocol: 'custom', - priority: 'high' }); assert_equals(dc1.label, 'test'); @@ -268,7 +264,6 @@ promise_test(async (t) => { assert_equals(dc1.maxRetransmits, 1); assert_equals(dc1.protocol, 'custom'); assert_equals(dc1.negotiated, false); - assert_equals(dc1.priority, 'high'); pc2.ondatachannel = t.step_func((event) => { const dc2 = event.channel; @@ -282,7 +277,6 @@ promise_test(async (t) => { assert_equals(dc2.protocol, 'custom'); assert_equals(dc2.negotiated, false); assert_equals(dc2.id, dc1.id); - assert_equals(dc2.priority, 'high'); resolver.resolve(); }); @@ -309,7 +303,6 @@ promise_test(async (t) => { assert_equals(dc1.maxRetransmits, null); assert_equals(dc1.protocol, ''); assert_equals(dc1.negotiated, false); - assert_equals(dc1.priority, 'low'); pc2.ondatachannel = t.step_func((event) => { const dc2 = event.channel; @@ -323,7 +316,6 @@ promise_test(async (t) => { assert_equals(dc2.protocol, ''); assert_equals(dc2.negotiated, false); assert_equals(dc2.id, dc1.id); - assert_equals(dc2.priority, 'low'); resolver.resolve(); }); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html index 00e80885cff..539b2692806 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpParameters-encodings.html @@ -45,8 +45,6 @@ dictionary RTCRtpEncodingParameters { boolean active; - RTCPriorityType priority; - RTCPriorityType networkPriority; unsigned long maxBitrate; [readonly] @@ -55,13 +53,6 @@ double scaleResolutionDownBy; }; - enum RTCPriorityType { - "very-low", - "low", - "medium", - "high" - }; - getParameters - encodings is set to the value of the [[send encodings]] internal slot. */ @@ -128,8 +119,6 @@ const { sender } = pc.addTransceiver('video', { sendEncodings: [{ active: false, - priority: 'low', - networkPriority: 'low', maxBitrate: 8, maxFramerate: 25, rid: 'foo' @@ -142,8 +131,6 @@ const encoding = getFirstEncoding(param); assert_equals(encoding.active, false); - assert_equals(encoding.priority, 'low'); - assert_equals(encoding.networkPriority, 'low'); assert_equals(encoding.maxBitrate, 8); assert_not_own_property(encoding, "rid", "rid should be removed with a single encoding"); @@ -259,12 +246,6 @@ test_modified_encoding('audio', 'active', false, true, 'setParameters() with modified encoding.active should succeed'); - test_modified_encoding('audio', 'priority', 'very-low', 'high', - 'setParameters() with modified encoding.priority should succeed'); - - test_modified_encoding('audio', 'networkPriority', 'very-low', 'high', - 'setParameters() with modified encoding.networkPriority should succeed'); - test_modified_encoding('audio', 'maxBitrate', 10000, 20000, 'setParameters() with modified encoding.maxBitrate should succeed'); diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html b/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html new file mode 100644 index 00000000000..89e18bcd51c --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/simulcast/h264.https.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection Simulcast Tests</title> +<meta name="timeout" content="long"> +<script src="../third_party/sdp/sdp.js"></script> +<script src="simulcast.js"></script> +<script src="../RTCPeerConnection-helper.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +promise_test(async t => { + assert_implements('getCapabilities' in RTCRtpSender, 'RTCRtpSender.getCapabilities not supported'); + assert_implements(RTCRtpSender.getCapabilities('video').codecs.find(c => c.mimeType === 'video/H264'), 'H264 not supported'); + + const rids = [0, 1, 2]; + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + return negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, {mimeType: 'video/H264'}); +}, 'H264 simulcast setup with three spatial layers'); +</script> diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js b/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js index d8911f443e7..af804c03e86 100644 --- a/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js +++ b/tests/wpt/web-platform-tests/webrtc/simulcast/simulcast.js @@ -76,7 +76,7 @@ function swapRidAndMidExtensionsInSimulcastAnswer(answer, localDescription, rids return sdp; } -async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2) { +async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, codec) { exchangeIceCandidates(pc1, pc2); const metadataToBeLoaded = []; @@ -96,10 +96,13 @@ async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2) { // Use getUserMedia as getNoiseStream does not have enough entropy to ramp-up. const stream = await navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}}); t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); - pc1.addTransceiver(stream.getVideoTracks()[0], { + const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], { streams: [stream], sendEncodings: rids.map(rid => {rid}), }); + if (codec) { + preferCodec(transceiver, codec.mimeType, codec.sdpFmtpLine); + } const offer = await pc1.createOffer(); await pc1.setLocalDescription(offer), diff --git a/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html b/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html new file mode 100644 index 00000000000..e3567e61c21 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/simulcast/vp8.https.html @@ -0,0 +1,23 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection Simulcast Tests</title> +<meta name="timeout" content="long"> +<script src="../third_party/sdp/sdp.js"></script> +<script src="simulcast.js"></script> +<script src="../RTCPeerConnection-helper.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +promise_test(async t => { + assert_implements('getCapabilities' in RTCRtpSender, 'RTCRtpSender.getCapabilities not supported'); + assert_implements(RTCRtpSender.getCapabilities('video').codecs.find(c => c.mimeType === 'video/VP8'), 'VP8 not supported'); + + const rids = [0, 1, 2]; + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + return negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, {mimeType: 'video/VP8'}); +}, 'VP8 simulcast setup with three spatial layers'); +</script> |