aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-11-01 21:34:37 -0400
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-11-01 23:02:46 -0400
commit4a942c982f4f7317ea2b9ec0690727cfe02cc61f (patch)
tree5400e67be8eda8312af53738a265fcda7f684777
parent200cc8aa6b8a0c14b3390f1ff02a62f1fce9ac31 (diff)
downloadservo-4a942c982f4f7317ea2b9ec0690727cfe02cc61f.tar.gz
servo-4a942c982f4f7317ea2b9ec0690727cfe02cc61f.zip
Update web-platform-tests to revision fb15e14b52049f952612623ee0d7fb7a620a57c9
-rw-r--r--tests/wpt/metadata/MANIFEST.json577
-rw-r--r--tests/wpt/metadata/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html.ini4
-rw-r--r--tests/wpt/metadata/css/CSS2/text/text-indent-percent-001.xht.ini3
-rw-r--r--tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini10
-rw-r--r--tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini10
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini18
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/font-descriptor-range-reversed.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/hanging-punctuation/hanging-scrollable-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini36
-rw-r--r--tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini10
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini37
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini13
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/no-browsing-context.window.js.ini34
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini20
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini7
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini2
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini3
-rw-r--r--tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini3
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini283
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini283
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/quirks.html.ini283
-rw-r--r--tests/wpt/metadata/url/urlencoded-parser.any.js.ini21
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini1
-rw-r--r--tests/wpt/metadata/xhr/getallresponseheaders.htm.ini9
-rw-r--r--tests/wpt/metadata/xhr/getresponseheader.any.js.ini36
-rw-r--r--tests/wpt/metadata/xhr/setrequestheader-combining.window.js.ini4
-rw-r--r--tests/wpt/web-platform-tests/.azure-pipelines.yml64
-rw-r--r--tests/wpt/web-platform-tests/cors/allow-headers.htm89
-rw-r--r--tests/wpt/web-platform-tests/cors/credentials-flag.htm5
-rw-r--r--tests/wpt/web-platform-tests/cors/origin.htm6
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html29
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001-ref.xht12
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001.xht2
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/text/text-indent-percent-001-ref.xht4
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-computed.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-005.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html39
-rw-r--r--tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed.html56
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/register-property.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-003.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-ref.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/hanging-scrollable-001.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht4
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-001.xht6
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html7
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html7
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html7
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html8
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/animation/list-interpolation.html60
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js7
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-computed.html20
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/selector-placeholder-shown-emptify-placeholder.html22
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/rendering.md4
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md3
-rw-r--r--tests/wpt/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html132
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html13
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html4
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/basic/header-value-combining.any.js22
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.html28
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.window.js24
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-first.asis7
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-last.asis7
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-no-x.asis6
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted-single.asis6
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted.asis6
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-uppercase.asis6
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff.py10
-rw-r--r--tests/wpt/web-platform-tests/fetch/nosniff/resources/x-content-type-options.json58
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/no-browsing-context.window.js86
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/execution-timing/077.html2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/IndexedDB.idl7
-rw-r--r--tests/wpt/web-platform-tests/interfaces/hr-time.idl3
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist8
-rw-r--r--tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html170
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/basic-card.js23
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html7
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html10
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/payment-request-event.https.html6
-rw-r--r--tests/wpt/web-platform-tests/payment-method-basic-card/empty-data-manual.https.html16
-rw-r--r--tests/wpt/web-platform-tests/payment-method-basic-card/historical.https.html25
-rw-r--r--tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_error.https.html4
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html6
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js7
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-mime-types.https.html30
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-mime-types-worker.js49
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-mime-types.js14
-rw-r--r--tests/wpt/web-platform-tests/signed-exchange/README.md2
-rw-r--r--tests/wpt/web-platform-tests/speech-api/META.yml1
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/before_install.sh6
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/ci_tools_unittest.sh9
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/jobs.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/tests/test_jobs.py26
-rw-r--r--tests/wpt/web-platform-tests/tools/runner/index.html14
-rw-r--r--tests/wpt/web-platform-tests/tools/runner/logo.svg8
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/find_element/user_prompts.py121
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/user_prompts.py126
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/find_elements/user_prompts.py123
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/find_elements_from_element/user_prompts.py128
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/fullscreen.py20
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/user_prompts.py26
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/maximize_window/maximize.py18
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/minimize_window/minimize.py34
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/minimize_window/user_prompts.py22
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py20
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py20
-rw-r--r--tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm42
-rw-r--r--tests/wpt/web-platform-tests/xhr/getresponseheader.any.js37
-rw-r--r--tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.any.js12
-rw-r--r--tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm27
-rwxr-xr-xtests/wpt/web-platform-tests/xhr/resources/header-content-length-twice.asis3
-rw-r--r--tests/wpt/web-platform-tests/xhr/resources/headers-double-empty.asis3
-rw-r--r--tests/wpt/web-platform-tests/xhr/resources/headers-some-are-empty.asis7
-rw-r--r--tests/wpt/web-platform-tests/xhr/setrequestheader-combining.window.js12
141 files changed, 2560 insertions, 1586 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index ae29e32f819..69caf8ed311 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -118069,6 +118069,18 @@
{}
]
],
+ "css/css-flexbox/percentage-heights-005.html": [
+ [
+ "/css/css-flexbox/percentage-heights-005.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-flexbox/percentage-heights-quirks-node.html": [
[
"/css/css-flexbox/percentage-heights-quirks-node.html",
@@ -119853,6 +119865,18 @@
{}
]
],
+ "css/css-fonts/variations/font-descriptor-range-reversed.html": [
+ [
+ "/css/css-fonts/variations/font-descriptor-range-reversed.html",
+ [
+ [
+ "/css/css-fonts/variations/font-descriptor-range-reversed-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-fonts/variations/variable-box-font.html": [
[
"/css/css-fonts/variations/variable-box-font.html",
@@ -135625,6 +135649,18 @@
{}
]
],
+ "css/css-text/hanging-punctuation/hanging-scrollable-001.html": [
+ [
+ "/css/css-text/hanging-punctuation/hanging-scrollable-001.html",
+ [
+ [
+ "/css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/hyphens/hyphens-auto-001.html": [
[
"/css/css-text/hyphens/hyphens-auto-001.html",
@@ -140905,6 +140941,42 @@
{}
]
],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [
+ [
+ "/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html": [
+ [
+ "/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html": [
+ [
+ "/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html",
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/word-break/word-break-break-all-000.html": [
[
"/css/css-text/word-break/word-break-break-all-000.html",
@@ -185905,6 +185977,18 @@
{}
]
],
+ "feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html": [
+ [
+ "/feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html",
+ [
+ [
+ "/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html?no-vertical-scrollbar",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"fetch/corb/img-html-correctly-labeled.sub.html": [
[
"/fetch/corb/img-html-correctly-labeled.sub.html",
@@ -195875,6 +195959,11 @@
]
},
"support": {
+ ".azure-pipelines.yml": [
+ [
+ {}
+ ]
+ ],
".codecov.yml": [
[
{}
@@ -260740,6 +260829,11 @@
{}
]
],
+ "css/css-fonts/variations/font-descriptor-range-reversed-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-fonts/variations/resources/ahem.ttc": [
[
{}
@@ -265915,6 +266009,11 @@
{}
]
],
+ "css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/hyphens/reference/hyphens-auto-001-ref.html": [
[
{}
@@ -267865,6 +267964,16 @@
{}
]
],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/word-break/reference/word-break-break-all-009-ref.xht": [
[
{}
@@ -282975,6 +283084,11 @@
{}
]
],
+ "feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html": [
+ [
+ {}
+ ]
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
[
{}
@@ -283855,37 +283969,17 @@
{}
]
],
- "fetch/nosniff/resources/nosniff-first.asis": [
- [
- {}
- ]
- ],
- "fetch/nosniff/resources/nosniff-last.asis": [
- [
- {}
- ]
- ],
- "fetch/nosniff/resources/nosniff-no-x.asis": [
- [
- {}
- ]
- ],
- "fetch/nosniff/resources/nosniff-quoted-single.asis": [
- [
- {}
- ]
- ],
- "fetch/nosniff/resources/nosniff-quoted.asis": [
+ "fetch/nosniff/resources/nosniff.py": [
[
{}
]
],
- "fetch/nosniff/resources/nosniff-uppercase.asis": [
+ "fetch/nosniff/resources/worker.py": [
[
{}
]
],
- "fetch/nosniff/resources/worker.py": [
+ "fetch/nosniff/resources/x-content-type-options.json": [
[
{}
]
@@ -305875,6 +305969,11 @@
{}
]
],
+ "service-workers/service-worker/resources/import-scripts-mime-types-worker.js": [
+ [
+ {}
+ ]
+ ],
"service-workers/service-worker/resources/import-scripts-redirect-import.js": [
[
{}
@@ -309030,11 +309129,6 @@
{}
]
],
- "tools/runner/logo.svg": [
- [
- {}
- ]
- ],
"tools/runner/report.css": [
[
{}
@@ -320735,6 +320829,11 @@
{}
]
],
+ "xhr/resources/header-content-length-twice.asis": [
+ [
+ {}
+ ]
+ ],
"xhr/resources/header-content-length.asis": [
[
{}
@@ -320750,6 +320849,16 @@
{}
]
],
+ "xhr/resources/headers-double-empty.asis": [
+ [
+ {}
+ ]
+ ],
+ "xhr/resources/headers-some-are-empty.asis": [
+ [
+ {}
+ ]
+ ],
"xhr/resources/headers-www-authenticate.asis": [
[
{}
@@ -334441,12 +334550,6 @@
{}
]
],
- "cors/allow-headers.htm": [
- [
- "/cors/allow-headers.htm",
- {}
- ]
- ],
"cors/basic.htm": [
[
"/cors/basic.htm",
@@ -334605,6 +334708,12 @@
{}
]
],
+ "css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html": [
+ [
+ "/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html",
+ {}
+ ]
+ ],
"css/CSS2/floats/zero-space-between-floats-001.html": [
[
"/css/CSS2/floats/zero-space-between-floats-001.html",
@@ -335261,6 +335370,12 @@
{}
]
],
+ "css/css-animations/parsing/animation-delay-computed.html": [
+ [
+ "/css/css-animations/parsing/animation-delay-computed.html",
+ {}
+ ]
+ ],
"css/css-animations/parsing/animation-delay-invalid.html": [
[
"/css/css-animations/parsing/animation-delay-invalid.html",
@@ -335285,6 +335400,12 @@
{}
]
],
+ "css/css-animations/parsing/animation-duration-computed.html": [
+ [
+ "/css/css-animations/parsing/animation-duration-computed.html",
+ {}
+ ]
+ ],
"css/css-animations/parsing/animation-duration-invalid.html": [
[
"/css/css-animations/parsing/animation-duration-invalid.html",
@@ -339195,6 +339316,12 @@
{}
]
],
+ "css/css-scoping/shadow-reassign-dynamic-003.html": [
+ [
+ "/css/css-scoping/shadow-reassign-dynamic-003.html",
+ {}
+ ]
+ ],
"css/css-scoping/slot-non-html-display-value.html": [
[
"/css/css-scoping/slot-non-html-display-value.html",
@@ -342027,6 +342154,12 @@
{}
]
],
+ "css/css-transitions/parsing/transition-duration-computed.html": [
+ [
+ "/css/css-transitions/parsing/transition-duration-computed.html",
+ {}
+ ]
+ ],
"css/css-transitions/parsing/transition-duration-invalid.html": [
[
"/css/css-transitions/parsing/transition-duration-invalid.html",
@@ -346943,6 +347076,12 @@
{}
]
],
+ "css/selectors/selector-placeholder-shown-emptify-placeholder.html": [
+ [
+ "/css/selectors/selector-placeholder-shown-emptify-placeholder.html",
+ {}
+ ]
+ ],
"css/selectors/user-invalid.html": [
[
"/css/selectors/user-invalid.html",
@@ -347497,6 +347636,14 @@
{}
]
],
+ "dom/events/Event-dispatch-on-disabled-elements.html": [
+ [
+ "/dom/events/Event-dispatch-on-disabled-elements.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"dom/events/Event-dispatch-order.html": [
[
"/dom/events/Event-dispatch-order.html",
@@ -360659,9 +360806,9 @@
{}
]
],
- "fetch/nosniff/parsing-nosniff.html": [
+ "fetch/nosniff/parsing-nosniff.window.js": [
[
- "/fetch/nosniff/parsing-nosniff.html",
+ "/fetch/nosniff/parsing-nosniff.window.html",
{}
]
],
@@ -362347,6 +362494,12 @@
{}
]
],
+ "html/browsers/history/the-location-interface/no-browsing-context.window.js": [
+ [
+ "/html/browsers/history/the-location-interface/no-browsing-context.window.html",
+ {}
+ ]
+ ],
"html/browsers/history/the-location-interface/per-global.window.js": [
[
"/html/browsers/history/the-location-interface/per-global.window.html",
@@ -389109,6 +389262,12 @@
{}
]
],
+ "payment-method-basic-card/historical.https.html": [
+ [
+ "/payment-method-basic-card/historical.https.html",
+ {}
+ ]
+ ],
"payment-method-basic-card/idlharness.window.js": [
[
"/payment-method-basic-card/idlharness.window.html",
@@ -400491,6 +400650,12 @@
{}
]
],
+ "service-workers/service-worker/import-scripts-mime-types.https.html": [
+ [
+ "/service-workers/service-worker/import-scripts-mime-types.https.html",
+ {}
+ ]
+ ],
"service-workers/service-worker/import-scripts-redirect.https.html": [
[
"/service-workers/service-worker/import-scripts-redirect.https.html",
@@ -414183,9 +414348,13 @@
{}
]
],
- "xhr/overridemimetype-unsent-state-force-shiftjis.htm": [
+ "xhr/overridemimetype-unsent-state-force-shiftjis.any.js": [
[
- "/xhr/overridemimetype-unsent-state-force-shiftjis.htm",
+ "/xhr/overridemimetype-unsent-state-force-shiftjis.any.html",
+ {}
+ ],
+ [
+ "/xhr/overridemimetype-unsent-state-force-shiftjis.any.worker.html",
{}
]
],
@@ -414777,6 +414946,12 @@
{}
]
],
+ "xhr/setrequestheader-combining.window.js": [
+ [
+ "/xhr/setrequestheader-combining.window.html",
+ {}
+ ]
+ ],
"xhr/setrequestheader-content-type.htm": [
[
"/xhr/setrequestheader-content-type.htm",
@@ -435567,24 +435742,56 @@
{}
]
],
+ "webdriver/tests/find_element/user_prompts.py": [
+ [
+ "/webdriver/tests/find_element/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/find_element_from_element/find.py": [
[
"/webdriver/tests/find_element_from_element/find.py",
{}
]
],
+ "webdriver/tests/find_element_from_element/user_prompts.py": [
+ [
+ "/webdriver/tests/find_element_from_element/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/find_elements/find.py": [
[
"/webdriver/tests/find_elements/find.py",
{}
]
],
+ "webdriver/tests/find_elements/user_prompts.py": [
+ [
+ "/webdriver/tests/find_elements/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/find_elements_from_element/find.py": [
[
"/webdriver/tests/find_elements_from_element/find.py",
{}
]
],
+ "webdriver/tests/find_elements_from_element/user_prompts.py": [
+ [
+ "/webdriver/tests/find_elements_from_element/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/forward/forward.py": [
[
"/webdriver/tests/forward/forward.py",
@@ -435866,7 +436073,9 @@
"webdriver/tests/minimize_window/minimize.py": [
[
"/webdriver/tests/minimize_window/minimize.py",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"webdriver/tests/minimize_window/user_prompts.py": [
@@ -436168,6 +436377,10 @@
}
},
"paths": {
+ ".azure-pipelines.yml": [
+ "e4c265e127644d2e3d6d3d10c32c3024f613bd6d",
+ "support"
+ ],
".codecov.yml": [
"904cf85a4fd7576bb470172ade7317de94435dd0",
"support"
@@ -471060,10 +471273,6 @@
"58e7395cf83f7328fc54bbad78636c70cece25e8",
"testharness"
],
- "cors/allow-headers.htm": [
- "8f25f3e4351bc4708268ec055cfa56c5385a4241",
- "testharness"
- ],
"cors/basic.htm": [
"96cc4b98be9646742c2e81f4fcc0edbf8bcb4035",
"testharness"
@@ -471073,7 +471282,7 @@
"testharness"
],
"cors/credentials-flag.htm": [
- "bacd43c4ed59f1df84df746c290658add5f02582",
+ "45a714368560936439889855c36453463295ae51",
"testharness"
],
"cors/image-tainting-in-cross-origin-iframe.sub.html": [
@@ -471085,7 +471294,7 @@
"testharness"
],
"cors/origin.htm": [
- "a04a29eb497f765acf73e865ac92a6366d1982f9",
+ "9169ec74f706086724092860aab725a76f2f05a3",
"testharness"
],
"cors/preflight-cache.htm": [
@@ -471372,6 +471581,10 @@
"4b1baff8b956d706b2f90e67277ccf3a7c4d3458",
"testharness"
],
+ "css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html": [
+ "293b88f52088a255bd854eac5577c214847dcd7c",
+ "testharness"
+ ],
"css/CSS2/abspos/between-float-and-text.html": [
"b4c933e8d8021ed357d9942d2f44b7cd44abbf76",
"reftest"
@@ -486445,11 +486658,11 @@
"reftest"
],
"css/CSS2/css1/c547-indent-001-ref.xht": [
- "f66ec9432a2367dc39b474e05dfe433e7de452ce",
+ "013a5414bc018fb84ee8bf86aa34f2c14da6e2eb",
"support"
],
"css/CSS2/css1/c547-indent-001.xht": [
- "0e9d67321162ff53eed08d5409722793034757b6",
+ "e38562f7f4de96b2183913ae6ba1b1d5547c8fe8",
"reftest"
],
"css/CSS2/css1/c548-leadin-000-ref.xht": [
@@ -521525,7 +521738,7 @@
"reftest"
],
"css/CSS2/text/text-indent-percent-001-ref.xht": [
- "ed9428c72e643ec04905aea9a0f3c5260e03d65a",
+ "335ed62bbbbc32f846c97f8bcb2d5ae8512c4a7c",
"support"
],
"css/CSS2/text/text-indent-percent-001.xht": [
@@ -530660,6 +530873,10 @@
"6e7697b9d81db6888077318389e1d70964241b3c",
"testharness"
],
+ "css/css-animations/parsing/animation-delay-computed.html": [
+ "551c9fbca9ebeb9d9391d260a5e2b47157048764",
+ "testharness"
+ ],
"css/css-animations/parsing/animation-delay-invalid.html": [
"a58d2cd11bc572d3a7899fb70b8b04adbd76a713",
"testharness"
@@ -530676,6 +530893,10 @@
"bcc9acc3428cfcdadc6d48fc0fa01d51eb747452",
"testharness"
],
+ "css/css-animations/parsing/animation-duration-computed.html": [
+ "46a946588b62ddffcaed7474cd9df88487caecee",
+ "testharness"
+ ],
"css/css-animations/parsing/animation-duration-invalid.html": [
"5edacd3735e4f3ac0c0724415b3ca0052f10d33b",
"testharness"
@@ -541192,6 +541413,10 @@
"4f162487a711c78f48bf457d3fb0764bb5f2b746",
"reftest"
],
+ "css/css-flexbox/percentage-heights-005.html": [
+ "5f3cfeec7e026ed3100c6af37ccc12ad9a5c5258",
+ "reftest"
+ ],
"css/css-flexbox/percentage-heights-quirks-node.html": [
"4b254b46467d6abff049090d5f37b1f3b3f6178e",
"reftest"
@@ -548928,6 +549153,14 @@
"28fa626849b53d19a2e898eae99a4a5f59362de5",
"testharness"
],
+ "css/css-fonts/variations/font-descriptor-range-reversed-ref.html": [
+ "fc2b7aca29fe7d3be3b9cd4282129ba3565a396b",
+ "support"
+ ],
+ "css/css-fonts/variations/font-descriptor-range-reversed.html": [
+ "14d426245d3bdb56e67007edde5e9a49473e5694",
+ "reftest"
+ ],
"css/css-fonts/variations/font-opentype-collections.html": [
"1b403b32462b1b5a395da5f4cebcef8113c50d64",
"testharness"
@@ -556133,7 +556366,7 @@
"testharness"
],
"css/css-properties-values-api/register-property.html": [
- "62ad23622bd4ddc2e8d534ec72072f5e5fe9f334",
+ "5842b83b0a48715f12effa6212cc0cccbd890861",
"testharness"
],
"css/css-properties-values-api/registered-properties-inheritance.html": [
@@ -558740,6 +558973,10 @@
"7874e2e13987246c1160c419967aba9db32bbf63",
"reftest"
],
+ "css/css-scoping/shadow-reassign-dynamic-003.html": [
+ "bc6392176eb58acff55b740fbd4e9f6321982d91",
+ "testharness"
+ ],
"css/css-scoping/shadow-root-insert-into-document.html": [
"a3b89be389a780dd53a1b53224810ecb4866c287",
"reftest"
@@ -558769,11 +559006,11 @@
"reftest"
],
"css/css-scoping/slotted-with-pseudo-element-ref.html": [
- "63677cf4220eed93ccb1b788d4faa56a7429fa50",
+ "d452d489a4aba9cab85debe4f1c8361bf3b430bb",
"support"
],
"css/css-scoping/slotted-with-pseudo-element.html": [
- "08e6dcc018fa96e478371c912ed11a5a50a63470",
+ "e1a91952d70cc190fff101a4e26af719a2900257",
"reftest"
],
"css/css-scoping/stylesheet-title-001.html": [
@@ -561568,6 +561805,10 @@
"be7ea6bda86f4777bfb8baaae44a82dfddb55f4d",
"manual"
],
+ "css/css-text/hanging-punctuation/hanging-scrollable-001.html": [
+ "58810a211d49a86eb9861813e149455ccda6a941",
+ "reftest"
+ ],
"css/css-text/hanging-punctuation/reference/hanging-punctuation-allow-end-001-ref.xht": [
"48be1d980687d319bbdeedea9f3a9ac78e69a367",
"support"
@@ -561584,6 +561825,10 @@
"1f8aa4a57bb653409c5211b186f0e8b6214525ac",
"support"
],
+ "css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html": [
+ "25452e9221b710e0e8cf78fb97da5f1e18f9faf1",
+ "support"
+ ],
"css/css-text/hyphens/hyphens-auto-001.html": [
"39814d3e18c622c022d5e3314580ebb187d217da",
"reftest"
@@ -564509,27 +564754,27 @@
"visual"
],
"css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht": [
- "546ba57a9889b553047986f1cb1eee76af733a60",
+ "b8e8d62a08acca9f38a3ec54e2bba4d7793666b9",
"support"
],
"css/css-text/text-indent/reference/text-indent-percentage-002-ref.html": [
- "eebe7dacb49719046aece324396b4abeca2f5f8e",
+ "fc4887a1f01479f53ccc9b512ef690a57d6d93d1",
"support"
],
"css/css-text/text-indent/text-indent-percentage-001.xht": [
- "ae2478579d216761bc4cff5155bfb225e49e87bd",
+ "dd732c872151e2a2fc0457912f8336a682a306ee",
"reftest"
],
"css/css-text/text-indent/text-indent-percentage-002.html": [
- "1c0a33ba94219dc7398fd59480d08cb77c725d64",
+ "568241b893b3b708f2a1d2cda2f878471f760894",
"reftest"
],
"css/css-text/text-indent/text-indent-percentage-003.html": [
- "9f41e5b080d97f3c614393eb30c22c384ddb820d",
+ "7bbac522b374d94640b451542351035249f6588e",
"reftest"
],
"css/css-text/text-indent/text-indent-percentage-004.html": [
- "4d1dff10be583f1e15e0b2b2648cd9362ab77691",
+ "c800e2a80b87a60e74949161b5e00d6b5e22e254",
"reftest"
],
"css/css-text/text-justify/reference/text-justify-ref-001.html": [
@@ -565528,6 +565773,14 @@
"3837f7f62f4686226ef4dff3318c2b6961dac85b",
"support"
],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [
+ "8db147766bc3fa769df5601b8b32964fb59bcbc1",
+ "support"
+ ],
+ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html": [
+ "53cb2a083b0825a749d178d5093c1a105958143d",
+ "support"
+ ],
"css/css-text/white-space/seg-break-transformation-000.html": [
"cb7b0f30b566320c1022f61fde44bc09695badb1",
"testharness"
@@ -565680,6 +565933,18 @@
"56a5cad875dbb7f3225e7ae382d9417e5cc6bae4",
"reftest"
],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [
+ "ca6f65e613d035cb3f79abaa0e527643126cadce",
+ "reftest"
+ ],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html": [
+ "d8e7c8278a917c00bc99a60511137b52a935f215",
+ "reftest"
+ ],
+ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html": [
+ "6b21df62c5cbdfa2cce9e52d91c7a792d94354e8",
+ "reftest"
+ ],
"css/css-text/word-break/reference/word-break-break-all-009-ref.xht": [
"0768b857d96624a63129f002d317019674d1ef0d",
"support"
@@ -566009,7 +566274,7 @@
"support"
],
"css/css-transforms/animation/list-interpolation.html": [
- "91092c88aac0747dabf54934381478f9dc8fac66",
+ "90cdebbb6cdb643e4c55cb7c0dcd5340fad9a9bd",
"testharness"
],
"css/css-transforms/animation/matrix-interpolation.html": [
@@ -566017,7 +566282,7 @@
"testharness"
],
"css/css-transforms/animation/resources/interpolation-testcommon.js": [
- "5ab5551152e97b5c76c653aebf44aec9d27a825f",
+ "3791b0af9db63fe7c8ef6baad4cc566e4a3e950a",
"support"
],
"css/css-transforms/animation/rotate-interpolation.html": [
@@ -571560,6 +571825,10 @@
"d6b42b9c059456f10c425f7217ade6b2cd84c1f4",
"testharness"
],
+ "css/css-transitions/parsing/transition-duration-computed.html": [
+ "0fa0f582b12c261ecc87f8512f325ba9dc25a5aa",
+ "testharness"
+ ],
"css/css-transitions/parsing/transition-duration-invalid.html": [
"fd0f341f4071b53561cf8b072bb105d3bd1a4563",
"testharness"
@@ -587208,6 +587477,10 @@
"72958da20776ed3b4ed1619c334d7432e2fda4e1",
"reftest"
],
+ "css/selectors/selector-placeholder-shown-emptify-placeholder.html": [
+ "17316ede264776061e9b890cbaf839fa32a51ae0",
+ "testharness"
+ ],
"css/selectors/selector-placeholder-shown-type-change-001-ref.html": [
"2ac4c109794bb19ebe920a72e09a2c47fa342358",
"support"
@@ -597189,7 +597462,7 @@
"support"
],
"docs/_writing-tests/rendering.md": [
- "b79bc5c9834ecfb1bfde6d184c6045ebd6b9142d",
+ "aff576893384a1ea24285ef18c3d8b3ba17a9c9a",
"support"
],
"docs/_writing-tests/server-features.md": [
@@ -597209,7 +597482,7 @@
"support"
],
"docs/_writing-tests/testharness-api.md": [
- "9f93ea844d7395b5f2461b342805c7371cb90727",
+ "e7e53e4c3b629d1e5a48fb5830c71107a591f789",
"support"
],
"docs/_writing-tests/testharness.md": [
@@ -597392,6 +597665,10 @@
"77074d9a3ec2b3cc8529524e06ac870bfb9f4e39",
"testharness"
],
+ "dom/events/Event-dispatch-on-disabled-elements.html": [
+ "688524bd23879f7fadb5de3b0b055a2d6b05c065",
+ "testharness"
+ ],
"dom/events/Event-dispatch-order.html": [
"ca94434595c6ee19fb0f6982f56da0d005b4586c",
"testharness"
@@ -602068,6 +602345,10 @@
"9f78ea4bc2975abf6d37a24952df48e6dc75400f",
"support"
],
+ "feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html": [
+ "66d0a55104cc5b68bd4a7643ba658cbaa105fdf6",
+ "support"
+ ],
"feature-policy/experimental-features/resources/vertical-scroll-scrollintoview.html": [
"7bed27c2600b0a8f117fee3f13bb2e75c9d9c387",
"support"
@@ -602112,6 +602393,10 @@
"6f827c919a43042ff4f1e481f676423239d4c336",
"manual"
],
+ "feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html": [
+ "6036234de18eedc0a52eb3129a2588e33b9bbcf3",
+ "reftest"
+ ],
"feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html": [
"689685a4977a7ab08c5183fe04e427c25ce6f3cf",
"testharness"
@@ -602505,7 +602790,7 @@
"testharness"
],
"fetch/api/basic/header-value-combining.any.js": [
- "fd08072ea52214fdd83741d5b7fbef8c572a3f15",
+ "bb70d87d250cda383e1155be3838a7b97160b025",
"testharness"
],
"fetch/api/basic/header-value-null-byte.any.js": [
@@ -603648,8 +603933,8 @@
"18952805bb71bb4ddb51e8630b531a3bcc75859b",
"support"
],
- "fetch/nosniff/parsing-nosniff.html": [
- "10c5cadfcaadd8d64fb7248056cdbd708582e117",
+ "fetch/nosniff/parsing-nosniff.window.js": [
+ "043e659127b2c4990482a885d0f2a1a25083d838",
"testharness"
],
"fetch/nosniff/resources/css.py": [
@@ -603664,34 +603949,18 @@
"4fb7fb660086a6665b680ce9abb645e1bdaa510e",
"support"
],
- "fetch/nosniff/resources/nosniff-first.asis": [
- "bccc53eef8acd4adf066dd45ed01472a2a46335a",
- "support"
- ],
- "fetch/nosniff/resources/nosniff-last.asis": [
- "e3de0733e4fb6fabf733ea54feca6609f3f55b43",
- "support"
- ],
- "fetch/nosniff/resources/nosniff-no-x.asis": [
- "329d0f72143a4edfa41b413ee19d43bfb053ec51",
- "support"
- ],
- "fetch/nosniff/resources/nosniff-quoted-single.asis": [
- "501f18999d074129dc5eb6db040d8ffd7a1a40f7",
- "support"
- ],
- "fetch/nosniff/resources/nosniff-quoted.asis": [
- "c6de62b689e2fd9cd540b8a30a6ed81a46317056",
- "support"
- ],
- "fetch/nosniff/resources/nosniff-uppercase.asis": [
- "8097fddce106ab97ef869266ff42eda70a0725b9",
+ "fetch/nosniff/resources/nosniff.py": [
+ "9b59d35b925ef40195b80c1d866280b185ae63c5",
"support"
],
"fetch/nosniff/resources/worker.py": [
"a06a3a2237834aed6e03acf9a8f7e14c794ae276",
"support"
],
+ "fetch/nosniff/resources/x-content-type-options.json": [
+ "0a8c490756e674bacd7d78e1ad20dc6752abee8d",
+ "support"
+ ],
"fetch/nosniff/script.html": [
"e0b5dac70992b9e1dfb2e62fc9e71948f73dbf63",
"testharness"
@@ -606692,6 +606961,10 @@
"f9db757841f4b38dc1c2a95dcadbc820f1966977",
"testharness"
],
+ "html/browsers/history/the-location-interface/no-browsing-context.window.js": [
+ "4077d90971935be71aa291e0f7c7f8bceca64994",
+ "testharness"
+ ],
"html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-1.html": [
"c762ece3bc1d85cb3b40b48f6ee619194b74875b",
"support"
@@ -619753,7 +620026,7 @@
"testharness"
],
"html/semantics/scripting-1/the-script-element/execution-timing/077.html": [
- "4b98851ecddc6d134e6b8d7efa12112e27546f88",
+ "dbcd16bea50bd49c0456f41d4915d4cc273493be",
"testharness"
],
"html/semantics/scripting-1/the-script-element/execution-timing/078.html": [
@@ -624385,7 +624658,7 @@
"support"
],
"interfaces/IndexedDB.idl": [
- "3982d1105034101eb312b08039b3bbf86ec0b0ac",
+ "137528c148ae434141eb72e9720bd9e3eaf04a30",
"support"
],
"interfaces/InputDeviceCapabilities.idl": [
@@ -624613,7 +624886,7 @@
"support"
],
"interfaces/hr-time.idl": [
- "33d602cf971c5a7b514efeb5de55512d2a4a35a9",
+ "0e30c3f150f9d66d0933dc80f62fe6eec4e5fd06",
"support"
],
"interfaces/html-media-capture.idl": [
@@ -625233,7 +625506,7 @@
"support"
],
"lint.whitelist": [
- "296699bb61ebafb0cb506d6f2ed4637a9d92942f",
+ "23f20555e8c30784cbf5ba87ae5ec6b81165b81f",
"support"
],
"longtask-timing/META.yml": [
@@ -625417,7 +625690,7 @@
"testharness"
],
"mathml/presentation-markup/scripts/underover-1.html": [
- "25e087971da3dccbc786b45944295b32bba3356e",
+ "6e039b9d609d65933ebc736a9a9ff91d2da572b5",
"testharness"
],
"mathml/presentation-markup/scripts/underover-parameters-1.html": [
@@ -626661,7 +626934,7 @@
"testharness"
],
"mediacapture-streams/MediaStreamTrack-getSettings.https.html": [
- "0eb3a26cd82b50e6613cad0a6dd6220af97a9af4",
+ "158c9014617744c7181fba4862bdb7ce7e672b9d",
"testharness"
],
"mediacapture-streams/MediaStreamTrack-id.https.html": [
@@ -636581,7 +636854,7 @@
"support"
],
"payment-handler/basic-card.js": [
- "c78f24b017f739eb202cc235aa37ae4a4f805472",
+ "2db5d4b719fac4dbcfa65f4166c16a5b8d253097",
"support"
],
"payment-handler/basic-card.json": [
@@ -636605,7 +636878,7 @@
"testharness"
],
"payment-handler/can-make-payment-event.https.html": [
- "c10851eb89664be20d376c6dcf5064ad47a8cc92",
+ "7c09f5d407e890c0ed02df1217d85f2f36d722bc",
"testharness"
],
"payment-handler/idlharness.https.any.js": [
@@ -636621,7 +636894,7 @@
"support"
],
"payment-handler/payment-instruments.https.html": [
- "13a278758b1b9573e2a6e10166a311b3bcee9b45",
+ "d60d700b5a99eeb27b30017477966f768505a667",
"testharness"
],
"payment-handler/payment-request-event-constructor.https.html": [
@@ -636641,7 +636914,7 @@
"testharness"
],
"payment-handler/payment-request-event.https.html": [
- "fb51c2eeb54ae695272598e03e78a66bde7d41b2",
+ "3c8deb3b92fe00d7b4bdf1c57f1e33ab553acee3",
"testharness"
],
"payment-handler/register-and-activate-service-worker.js": [
@@ -636665,9 +636938,13 @@
"support"
],
"payment-method-basic-card/empty-data-manual.https.html": [
- "4b517159df49d97f459cabd0dc6599fbb4860e0d",
+ "2392553ebd3742daac77bf3a80259627a6e44c20",
"manual"
],
+ "payment-method-basic-card/historical.https.html": [
+ "e24def172ad1235094526a010d8aed800626c8d5",
+ "testharness"
+ ],
"payment-method-basic-card/idlharness.window.js": [
"cd158a6297e3eaff400d7ae54152a649b6f1d613",
"testharness"
@@ -637817,7 +638094,7 @@
"manual"
],
"presentation-api/controlling-ua/PresentationRequest_error.https.html": [
- "c5ab4667b0b2124d55bc575f870d3f8151b15b0b",
+ "cb22b4368ab05ef2ce2f4a52a2115a16e394980d",
"testharness"
],
"presentation-api/controlling-ua/PresentationRequest_mixedcontent.https.html": [
@@ -646857,7 +647134,7 @@
"support"
],
"resources/test/tests/functional/api-tests-1.html": [
- "c65d026edbaddeee595bc610ce7c955d0bf4529d",
+ "49f962a60c7b045f38e11b4a3c4ecd624b52ce6f",
"support"
],
"resources/test/tests/functional/api-tests-2.html": [
@@ -647121,7 +647398,7 @@
"support"
],
"resources/testharness.js": [
- "9f507b67703c827b1747cfcbce1db985873dc410",
+ "18a6f70beab26b474b0f684842a5735def02610a",
"support"
],
"resources/testharness.js.headers": [
@@ -649724,6 +650001,10 @@
"e82911a1bd002d1039ba5a5ae31b51a3a90e1905",
"testharness"
],
+ "service-workers/service-worker/import-scripts-mime-types.https.html": [
+ "1679831d0f2b98aee22898d820373e80079fbe00",
+ "testharness"
+ ],
"service-workers/service-worker/import-scripts-redirect.https.html": [
"e52adfa37800853a86da9f5f30bc0dd41e4afcb6",
"testharness"
@@ -650604,6 +650885,10 @@
"7d92794e31b6b1270db26779f63644ac42a3d3d6",
"support"
],
+ "service-workers/service-worker/resources/import-scripts-mime-types-worker.js": [
+ "2c585ac1060a88c4f3eeac6b6a81bbb4e0c30280",
+ "support"
+ ],
"service-workers/service-worker/resources/import-scripts-redirect-import.js": [
"56c04f094602b484a289b58dcfb25c4d6620c355",
"support"
@@ -650929,7 +651214,7 @@
"support"
],
"service-workers/service-worker/resources/registration-tests-mime-types.js": [
- "1b8ea9be008ce3cf4597aaa7e3ca6dd680abdd0b",
+ "3e4859b8b39b0955e6c515d367e2e7d44c4f3a77",
"support"
],
"service-workers/service-worker/resources/registration-tests-scope.js": [
@@ -652077,7 +652362,7 @@
"testharness"
],
"signed-exchange/README.md": [
- "ebe154fb0f76d2899238725bce028238e9e235a8",
+ "f1dbfe6d1adbe7ef7663c5298692872897ce3e0c",
"support"
],
"signed-exchange/fallback-to-another-sxg.tentative.html": [
@@ -652193,7 +652478,7 @@
"testharness"
],
"speech-api/META.yml": [
- "ac4b89b03490dbb46c257a2e5fdec3a741acdd52",
+ "4d1b42a44d2a6a447f8a47bc079d7e28436843e0",
"support"
],
"speech-api/SpeechRecognition-abort-manual.https.html": [
@@ -657009,7 +657294,7 @@
"support"
],
"tools/ci/before_install.sh": [
- "f6ef84f002681a01a77367c46f5c626f52b498f7",
+ "ea53f969015f0f79a98a64abc968d4424b407a89",
"support"
],
"tools/ci/check_stability.py": [
@@ -657037,7 +657322,7 @@
"support"
],
"tools/ci/ci_tools_unittest.sh": [
- "3786fe91796efcdb0425930110acc96424e5e699",
+ "55afb9f4331af97a3548550dbe8f7d4eb260cc24",
"support"
],
"tools/ci/ci_wpt.sh": [
@@ -657057,7 +657342,7 @@
"support"
],
"tools/ci/jobs.py": [
- "97504dc8d9c517358eee833eb27988b611ace87b",
+ "9abbfd27be9a1aff68f05286fc972d00952ae25b",
"support"
],
"tools/ci/lib.sh": [
@@ -657085,7 +657370,7 @@
"support"
],
"tools/ci/tests/test_jobs.py": [
- "e888ad884a18f257008fe860f31f7892b3bd39a3",
+ "0f9ce1f02e71c3e7d4e5eb70d31453557083951a",
"support"
],
"tools/conftest.py": [
@@ -657773,11 +658058,7 @@
"support"
],
"tools/runner/index.html": [
- "6c9a8affed58c2b70b753944b31f009976d49d6d",
- "support"
- ],
- "tools/runner/logo.svg": [
- "8a25776b6f4c7a6f9c07996371b026f24d3146ce",
+ "2d7d25297ca2977465eed49585c9661283684c38",
"support"
],
"tools/runner/report.css": [
@@ -661913,15 +662194,15 @@
"support"
],
"tools/wptrunner/requirements_chrome.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_chrome_android.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_edge.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_firefox.txt": [
@@ -661929,19 +662210,19 @@
"support"
],
"tools/wptrunner/requirements_ie.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_opera.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_safari.txt": [
- "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
+ "497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_sauce.txt": [
- "2673b93ea9ac58fd9d53a163091ec7bac19bad76",
+ "8ba53dafaa587dccd1f3dd3df23c5c62b78d22e6",
"support"
],
"tools/wptrunner/requirements_servo.txt": [
@@ -662189,7 +662470,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorselenium.py": [
- "928f8664a23fe9358b42a9e609204f7b87f4abed",
+ "0e788c5b28770e18ad94b84015935e6ae47578bb",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservo.py": [
@@ -662461,7 +662742,7 @@
"support"
],
"tools/wptrunner/wptrunner/wptrunner.py": [
- "d0c1106b0f9bb1f2aa727e263cd1e74ab1b04c01",
+ "14f6cb9068d02ef92fe776ce8cbc2efa39f505ad",
"support"
],
"tools/wptrunner/wptrunner/wpttest.py": [
@@ -667156,6 +667437,10 @@
"20cde541d11eebcce70493863fb55fcb1e81a908",
"wdspec"
],
+ "webdriver/tests/find_element/user_prompts.py": [
+ "613466b62b51c3ff32d59b3b37879e4f76e4091d",
+ "wdspec"
+ ],
"webdriver/tests/find_element_from_element/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -667164,6 +667449,10 @@
"56e216bb646131bdcc9a0c3c28ea4142c2982897",
"wdspec"
],
+ "webdriver/tests/find_element_from_element/user_prompts.py": [
+ "3fdaf4e47ed73a009881e074d81096d4a4b6e267",
+ "wdspec"
+ ],
"webdriver/tests/find_elements/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -667172,6 +667461,10 @@
"b31370ee0cd1b7c9cb307541728f4e736117181c",
"wdspec"
],
+ "webdriver/tests/find_elements/user_prompts.py": [
+ "01eb8ff3c863899f8ccd3f0f3bb7b6fd9433157e",
+ "wdspec"
+ ],
"webdriver/tests/find_elements_from_element/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -667180,6 +667473,10 @@
"5a48e9c76ef6add6e69952c58a23edbd5e87698d",
"wdspec"
],
+ "webdriver/tests/find_elements_from_element/user_prompts.py": [
+ "ca7bc7735d087689e3c057e2a46251bce1378e42",
+ "wdspec"
+ ],
"webdriver/tests/forward/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -667201,11 +667498,11 @@
"support"
],
"webdriver/tests/fullscreen_window/fullscreen.py": [
- "5391114c67676ddf2e1aa907d1bd00da68edbe2f",
+ "3194426e1ae80f59262f8a8910494fb4507068ca",
"wdspec"
],
"webdriver/tests/fullscreen_window/user_prompts.py": [
- "04b8bc5337db7b9c7c5c9f4ea31eee1d3d681261",
+ "106bc457f0c18769afe1d9f76c39937d17783666",
"wdspec"
],
"webdriver/tests/get_active_element/__init__.py": [
@@ -667425,7 +667722,7 @@
"support"
],
"webdriver/tests/maximize_window/maximize.py": [
- "77af0b99169a91eb99ff81236e6fa61a7f1399f7",
+ "b3ed7a680a9f320012b548a22a6042ab981bf449",
"wdspec"
],
"webdriver/tests/maximize_window/user_prompts.py": [
@@ -667437,11 +667734,11 @@
"support"
],
"webdriver/tests/minimize_window/minimize.py": [
- "be161a62e20191d41cd83ea2289cc5954af4892f",
+ "279511caf0afca09352fc312bb4f6b92b56af538",
"wdspec"
],
"webdriver/tests/minimize_window/user_prompts.py": [
- "1551e3af62668971eeb5681301b6833cf6fb619b",
+ "19059b3c395ecd22690d999f60838257cbe93449",
"wdspec"
],
"webdriver/tests/navigate_to/__init__.py": [
@@ -667661,7 +667958,7 @@
"support"
],
"webdriver/tests/set_window_rect/set.py": [
- "928fd622efc22f520f4c6a9f783f60ec270146e2",
+ "c6eae2886e9e0a86f7889ddcd9a3487dca7d6d41",
"wdspec"
],
"webdriver/tests/set_window_rect/user_prompts.py": [
@@ -667693,7 +667990,7 @@
"support"
],
"webdriver/tests/support/helpers.py": [
- "5dd7a323d8cc1a166acdb1b6445015b8b19d8c76",
+ "dd733809fd5a1169a433ba9bd0c2f4dd17b927a3",
"support"
],
"webdriver/tests/support/http_request.py": [
@@ -675145,7 +675442,7 @@
"testharness"
],
"xhr/getallresponseheaders.htm": [
- "e5747331a8ce078d9ab6be7e040f9623c8aeb162",
+ "72e27a5947c1e00ce1edeedf21a9db83c42832fa",
"testharness"
],
"xhr/getresponseheader-case-insensitive.htm": [
@@ -675177,7 +675474,7 @@
"testharness"
],
"xhr/getresponseheader.any.js": [
- "4ff791aeb1635719b948ce7edcf5d1592b87c351",
+ "6eeccd03f6222e936055ee85a4a6b41948332b30",
"testharness"
],
"xhr/header-user-agent-async.htm": [
@@ -675388,8 +675685,8 @@
"00a4c0dd43de1f618208818d56b812b34757fc40",
"testharness"
],
- "xhr/overridemimetype-unsent-state-force-shiftjis.htm": [
- "98dfe1436d96cdb906aae44ae65f2f60abdb1fcd",
+ "xhr/overridemimetype-unsent-state-force-shiftjis.any.js": [
+ "b3125b014be2868e111f15a1a05df17a8de51c41",
"testharness"
],
"xhr/preserve-ua-header-on-redirect.htm": [
@@ -675600,6 +675897,10 @@
"f17f92e4cc17792d7b558d1cd4e1e1d76350dd27",
"support"
],
+ "xhr/resources/header-content-length-twice.asis": [
+ "e3196984c06e09883c6770d56f2d2d5fe66ec6a8",
+ "support"
+ ],
"xhr/resources/header-content-length.asis": [
"ef7071d7428d9593d69ec10675cff30c46610e09",
"support"
@@ -675612,6 +675913,14 @@
"fe37b1b38e9f8698581affe8d74f176688c11d15",
"support"
],
+ "xhr/resources/headers-double-empty.asis": [
+ "14304b2b434a25f587765cd3c68a0a4d7cea78b3",
+ "support"
+ ],
+ "xhr/resources/headers-some-are-empty.asis": [
+ "1783e1a11b46aa0db11404c426d2b121da697b78",
+ "support"
+ ],
"xhr/resources/headers-www-authenticate.asis": [
"6f9905ee7a06627efcb244180367b13b65c0d0c4",
"support"
@@ -676172,6 +676481,10 @@
"1aed30d1c2a13fcb35e90a31e599a6cc963c6491",
"testharness"
],
+ "xhr/setrequestheader-combining.window.js": [
+ "fc847eb79a87fefd8dbeff16b6abd85b06f74126",
+ "testharness"
+ ],
"xhr/setrequestheader-content-type.htm": [
"55196d835d8830a64a213ea656ae2dc64dc74484",
"testharness"
diff --git a/tests/wpt/metadata/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html.ini b/tests/wpt/metadata/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html.ini
new file mode 100644
index 00000000000..27df1212878
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html.ini
@@ -0,0 +1,4 @@
+[adjacent-to-relpos-inline-that-had-block.html]
+ [Make sure that we're sized by the right ancestor]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/CSS2/text/text-indent-percent-001.xht.ini b/tests/wpt/metadata/css/CSS2/text/text-indent-percent-001.xht.ini
deleted file mode 100644
index 2ebe077a488..00000000000
--- a/tests/wpt/metadata/css/CSS2/text/text-indent-percent-001.xht.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[text-indent-percent-001.xht]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini
new file mode 100644
index 00000000000..f0e5fb9fccf
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini
@@ -0,0 +1,10 @@
+[animation-delay-computed.html]
+ [Property animation-delay value '20s, 10s' computes to '20s, 10s']
+ expected: FAIL
+
+ [Property animation-delay value 'calc(2 * 3s)' computes to '6s']
+ expected: FAIL
+
+ [Property animation-delay value '-500ms' computes to '-0.5s']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini
new file mode 100644
index 00000000000..210014a5890
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini
@@ -0,0 +1,10 @@
+[animation-duration-computed.html]
+ [Property animation-duration value '20s, 10s' computes to '20s, 10s']
+ expected: FAIL
+
+ [Property animation-duration value 'calc(2 * 3s)' computes to '6s']
+ expected: FAIL
+
+ [Property animation-duration value '500ms' computes to '0.5s']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
index 402de2dd591..0fc2d8aa005 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
@@ -44,9 +44,6 @@
[Matching font-weight: '500' should prefer '500' over '450 460']
expected: FAIL
- [Matching font-weight: '500' should prefer '400' over '350 399']
- expected: FAIL
-
[Matching font-weight: '500' should prefer '351 398' over '501 550']
expected: FAIL
@@ -101,9 +98,6 @@
[Matching font-style: 'italic' should prefer 'oblique 40deg 50deg' over 'oblique 5deg 10deg']
expected: FAIL
- [Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
- expected: FAIL
-
[Matching font-style: 'italic' should prefer 'oblique 5deg' over 'normal']
expected: FAIL
@@ -212,9 +206,6 @@
[Matching font-style: 'oblique -21deg' should prefer 'oblique -21deg' over 'oblique -60deg -40deg']
expected: FAIL
- [Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
- expected: FAIL
-
[Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic']
expected: FAIL
@@ -326,3 +317,12 @@
[Matching font-weight: '500' should prefer '450 460' over '400']
expected: FAIL
+ [Matching font-weight: '501' should prefer '501' over '502 510']
+ expected: FAIL
+
+ [Matching font-style: 'oblique -20deg' should prefer 'oblique -20deg' over 'oblique -60deg -40deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-descriptor-range-reversed.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-descriptor-range-reversed.html.ini
new file mode 100644
index 00000000000..e2dc2575bc6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-fonts/variations/font-descriptor-range-reversed.html.ini
@@ -0,0 +1,2 @@
+[font-descriptor-range-reversed.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/css-text/hanging-punctuation/hanging-scrollable-001.html.ini b/tests/wpt/metadata/css/css-text/hanging-punctuation/hanging-scrollable-001.html.ini
new file mode 100644
index 00000000000..4841641239a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/hanging-punctuation/hanging-scrollable-001.html.ini
@@ -0,0 +1,2 @@
+[hanging-scrollable-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html.ini
new file mode 100644
index 00000000000..5be7dd6e397
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html.ini
@@ -0,0 +1,2 @@
+[white-space-pre-wrap-trailing-spaces-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini
new file mode 100644
index 00000000000..6e57d825a39
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html.ini
@@ -0,0 +1,2 @@
+[white-space-pre-wrap-trailing-spaces-002.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html.ini b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html.ini
new file mode 100644
index 00000000000..0630953f69a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html.ini
@@ -0,0 +1,2 @@
+[white-space-pre-wrap-trailing-spaces-003.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
index de479f52d5b..01395fc56f2 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/list-interpolation.html.ini
@@ -29,3 +29,39 @@
[Animation between "scale(2) rotate(360deg) translate(100px) matrix(1, 0, 0, 1, 100, 0) skew(0deg)" and "scale(3) rotate(1080deg) translate(200px) matrix(1, 0, 0, 1, 0, 200) skew(720deg)" at progress 0.25]
expected: FAIL
+ [Match on rotation due to 0deg angle: Animation between "rotateX(90deg) translateX(100px)" and "rotateY(0deg) translateY(200px)" at progress 0.25]
+ expected: FAIL
+
+ [Match on rotation vector: Animation between "rotateX(90deg) translateX(100px)" and "rotate3d(50, 0, 0, 180deg) translateY(200px)" at progress 0.25]
+ expected: FAIL
+
+ [Complete mismatch (except length): Animation between "scale(2) rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
+ expected: FAIL
+
+ [Mismatched lengths (from is shorter), common part matches: Animation between "translate(100px)" and "translate(200px) rotate(720deg)" at progress 0.25]
+ expected: FAIL
+
+ [Perfect match: Animation between "scale(2) rotate(360deg) translate(100px) matrix(1, 0, 0, 1, 100, 0) skew(0deg)" and "scale(3) rotate(1080deg) translate(200px) matrix(1, 0, 0, 1, 0, 200) skew(720deg)" at progress 0.25]
+ expected: FAIL
+
+ [none -> none: Animation between "none" and "none" at progress 0.25]
+ expected: FAIL
+
+ [something -> none: Animation between "translate(200px) rotate(720deg)" and "none" at progress 0.25]
+ expected: FAIL
+
+ [Common prefix: Animation between "rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
+ expected: FAIL
+
+ [Matches on primitives: Animation between "translateX(100px) scaleX(3) translate(500px) scale(2)" and "translateY(200px) scale(5) translateX(100px) scaleY(3)" at progress 0.25]
+ expected: FAIL
+
+ [Mismatched lengths (to is shorter), common part matches: Animation between "translate(100px) rotate(720deg)" and "translate(200px)" at progress 0.25]
+ expected: FAIL
+
+ [Complete mismatch including length: Animation between "scale(2) rotate(0deg)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
+ expected: FAIL
+
+ [none -> something: Animation between "none" and "translate(200px) rotate(720deg)" at progress 0.25]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini b/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini
new file mode 100644
index 00000000000..da05b3d994a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini
@@ -0,0 +1,10 @@
+[transition-duration-computed.html]
+ [Property transition-duration value '500ms' computes to '0.5s']
+ expected: FAIL
+
+ [Property transition-duration value 'calc(2 * 3s)' computes to '6s']
+ expected: FAIL
+
+ [Property transition-duration value '20s, 10s' computes to '20s, 10s']
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
index 930d51de51f..8850ec200da 100644
--- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
@@ -74,6 +74,3 @@
[opacity end]
expected: FAIL
- [z-index end]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
index 716da35d14e..c260ef66571 100644
--- a/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
+++ b/tests/wpt/metadata/fetch/api/basic/header-value-combining.any.js.ini
@@ -5,6 +5,24 @@
[response.headers.get('www-authenticate')]
expected: FAIL
+ [response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
+ expected: FAIL
+
+ [response.headers.get('content-length') expects 0]
+ expected: FAIL
+
+ [response.headers.get('foo-test') expects 1, 2, 3]
+ expected: FAIL
+
+ [response.headers.get('double-trouble') expects , ]
+ expected: FAIL
+
+ [response.headers.get('www-authenticate') expects 1, 2, 3, 4]
+ expected: FAIL
+
+ [response.headers.get('content-length') expects 0, 0]
+ expected: FAIL
+
[header-value-combining.any.worker.html]
[response.headers.get('foo-test')]
@@ -13,11 +31,30 @@
[response.headers.get('www-authenticate')]
expected: FAIL
+ [response.headers.get('heya') expects , \x0b\x0c, 1, , , 2]
+ expected: FAIL
+
+ [response.headers.get('content-length') expects 0]
+ expected: FAIL
+
+ [response.headers.get('foo-test') expects 1, 2, 3]
+ expected: FAIL
+
+ [response.headers.get('double-trouble') expects , ]
+ expected: FAIL
+
+ [response.headers.get('www-authenticate') expects 1, 2, 3, 4]
+ expected: FAIL
+
+ [response.headers.get('content-length') expects 0, 0]
+ expected: FAIL
+
[header-value-combining.any.serviceworker.html]
[header-value-combining]
expected: FAIL
+
[header-value-combining.any.sharedworker.html]
[header-value-combining]
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
new file mode 100644
index 00000000000..87c807a49ff
--- /dev/null
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -0,0 +1,13 @@
+[parsing-nosniff.window.html]
+ [X-Content-Type-Options%3A%20nosniff%0B%2Cnosniff]
+ expected: FAIL
+
+ [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
+ expected: FAIL
+
+ [X-Content-Type-Options%3A%20nosniff%0B]
+ expected: FAIL
+
+ [X-Content-Type-Options%3A%20nosniff%0C]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
deleted file mode 100644
index 385376c7321..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_4.html]
- [Multiple history traversals, last would be aborted]
- 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/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 695cb7661a9..18c00592997 100644
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -30,3 +30,6 @@
[Set HTTP URL frame location.protocol to ftp]
expected: FAIL
+ [Set HTTP URL frame location.protocol to x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/no-browsing-context.window.js.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/no-browsing-context.window.js.ini
new file mode 100644
index 00000000000..172926604c0
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/no-browsing-context.window.js.ini
@@ -0,0 +1,34 @@
+[no-browsing-context.window.html]
+ [Invoking `assign` with `/` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Invoking `replace` with `/` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Setting `hash` to `test` of a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Setting `href` to `test test` of a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Invoking `replace` with `http://test:test/` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Invoking `assign` with `test test` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Getting `ancestorOrigins` of a `Location` object sans browsing context should be [\]]
+ expected: FAIL
+
+ [Invoking `assign` with `http://test:test/` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Setting `href` to `/` of a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Setting `href` to `http://test:test/` of a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
+ [Invoking `replace` with `test test` on a `Location` object sans browsing context is a no-op]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
index a6f7ac6f249..22d1f1d6900 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
@@ -5,5 +5,5 @@
expected: NOTRUN
[calling play() on a sufficiently long video should trigger timeupdate event]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 0f1a214d0ee..27d6deb827a 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -8,26 +8,8 @@
expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
- expected: TIMEOUT
-
- [picture: source (max-width:500px) valid image, img valid image, resize to narrow]
- expected: FAIL
-
- [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to wide]
expected: FAIL
- [picture: same URL in source (max-width:500px) and img, resize to wide]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to narrow]
- expected: FAIL
-
- [picture: source (max-width:500px) valid image, img broken image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to narrow]
+ [picture: source (max-width:500px) valid image, img valid image, resize to narrow]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
deleted file mode 100644
index 8cc42056d34..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[non-active-document.html]
- [DOMParser]
- expected: FAIL
-
- [createHTMLDocument]
- expected: FAIL
-
- [<template>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
deleted file mode 100644
index 9e522297c94..00000000000
--- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[toggleEvent.html]
- [Calling open twice on 'details' fires only one toggle event]
- expected: FAIL
-
- [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
- 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 b0dc9cdab83..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[077.html]
- type: testharness
- expected: ERROR
- [ 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/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
deleted file mode 100644
index 178680e5d14..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[script-onerror-insertion-point-2.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
index c6d49957c4a..ce482a60da8 100644
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
@@ -2,3 +2,6 @@
[document.open() after parser is aborted]
expected: FAIL
+ [async document.open() after parser is aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
index 99a24216c88..7725b118e9d 100644
--- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
+++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
@@ -12,3 +12,6 @@
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
expected: TIMEOUT
+ [Verifies the resolution of performance.now() is at least 5 microseconds.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini
deleted file mode 100644
index c7e9c7434f5..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[limited-quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
deleted file mode 100644
index 818a429ed39..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[no-quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
deleted file mode 100644
index 2ed601c6ff4..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
index 66b0152f73c..fb2feee3d45 100644
--- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
+++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
@@ -5,18 +5,10 @@
[request.formData() with input: a&b&c]
expected: FAIL
- [request.formData() with input: _charset_=windows-1252&test=%C2x]
- expected: FAIL
-
- [response.formData() with input: _charset_=windows-1252&test=%C2x]
- expected: FAIL
-
[request.formData() with input: a=b&c=d&]
expected: FAIL
-
-[urlencoded-parser.any.worker.html]
- [request.formData() with input: a&b&c]
+ [response.formData() with input: a&b&c]
expected: FAIL
[response.formData() with input: a=b&c=d&]
@@ -25,12 +17,17 @@
[response.formData() with input: a=b&c=d]
expected: FAIL
- [response.formData() with input: a&b&c]
- expected: FAIL
- [request.formData() with input: &&&a=b&&&&c=d&]
+[urlencoded-parser.any.worker.html]
+ [request.formData() with input: a&b&c]
expected: FAIL
[request.formData() with input: a=b&c=d&]
expected: FAIL
+ [request.formData() with input: a=b&c=d]
+ expected: FAIL
+
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
index bfd4d6dd2d6..bf2a1d61bab 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini
@@ -1,5 +1,4 @@
[import-in-moduleworker.html]
- expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/getallresponseheaders.htm.ini b/tests/wpt/metadata/xhr/getallresponseheaders.htm.ini
index eb26aa270a5..bc850765f80 100644
--- a/tests/wpt/metadata/xhr/getallresponseheaders.htm.ini
+++ b/tests/wpt/metadata/xhr/getallresponseheaders.htm.ini
@@ -12,3 +12,12 @@
[XMLHttpRequest: getAllResponseHeaders() 3]
expected: FAIL
+ [XMLHttpRequest: getAllResponseHeaders() 6]
+ expected: FAIL
+
+ [XMLHttpRequest: getAllResponseHeaders() 4]
+ expected: FAIL
+
+ [XMLHttpRequest: getAllResponseHeaders() 5]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/xhr/getresponseheader.any.js.ini b/tests/wpt/metadata/xhr/getresponseheader.any.js.ini
index ca5668f44a6..09886161c5c 100644
--- a/tests/wpt/metadata/xhr/getresponseheader.any.js.ini
+++ b/tests/wpt/metadata/xhr/getresponseheader.any.js.ini
@@ -5,6 +5,24 @@
[getResponseHeader('www-authenticate')]
expected: FAIL
+ [getResponseHeader('content-length') expects 0]
+ expected: FAIL
+
+ [getResponseHeader('heya') expects , \x0b\x0c, 1, , , 2]
+ expected: FAIL
+
+ [getResponseHeader('double-trouble') expects , ]
+ expected: FAIL
+
+ [getResponseHeader('content-length') expects 0, 0]
+ expected: FAIL
+
+ [getResponseHeader('www-authenticate') expects 1, 2, 3, 4]
+ expected: FAIL
+
+ [getResponseHeader('foo-test') expects 1, 2, 3]
+ expected: FAIL
+
[getresponseheader.any.html]
[getResponseHeader('foo-test')]
@@ -13,3 +31,21 @@
[getResponseHeader('www-authenticate')]
expected: FAIL
+ [getResponseHeader('content-length') expects 0]
+ expected: FAIL
+
+ [getResponseHeader('heya') expects , \x0b\x0c, 1, , , 2]
+ expected: FAIL
+
+ [getResponseHeader('double-trouble') expects , ]
+ expected: FAIL
+
+ [getResponseHeader('content-length') expects 0, 0]
+ expected: FAIL
+
+ [getResponseHeader('www-authenticate') expects 1, 2, 3, 4]
+ expected: FAIL
+
+ [getResponseHeader('foo-test') expects 1, 2, 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/xhr/setrequestheader-combining.window.js.ini b/tests/wpt/metadata/xhr/setrequestheader-combining.window.js.ini
new file mode 100644
index 00000000000..f26e07b4ed3
--- /dev/null
+++ b/tests/wpt/metadata/xhr/setrequestheader-combining.window.js.ini
@@ -0,0 +1,4 @@
+[setrequestheader-combining.window.html]
+ [setRequestHeader() combining header values]
+ expected: FAIL
+
diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml
new file mode 100644
index 00000000000..e4c265e1276
--- /dev/null
+++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml
@@ -0,0 +1,64 @@
+# This is the configuration file for Azure Pipelines, used to run tests on
+# macOS. Documentation to help understand this setup:
+# https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema
+
+trigger: none # disable builds for branches
+
+jobs:
+- job: macOS
+
+ pool:
+ vmImage: 'macOS-10.13'
+
+ steps:
+ - checkout: self
+ fetchDepth: 50
+ submodules: false
+
+ - script: |
+ echo "Test jobs:"
+ ./wpt test-jobs | while read job; do
+ echo "$job"
+ echo "##vso[task.setvariable variable=run_$job]true";
+ done
+ displayName: 'List test jobs'
+
+ - script: |
+ sudo easy_install pip
+ sudo pip install -U virtualenv
+ displayName: 'Install Python packages'
+ condition: variables.run_wptrunner_infrastructure
+
+ # Installig Ahem in /Library/Fonts instead of using --install-fonts is a
+ # workaround for https://github.com/web-platform-tests/wpt/issues/13803.
+ - script: sudo cp fonts/Ahem.ttf /Library/Fonts
+ displayName: 'Install Ahem font'
+ condition: variables.run_wptrunner_infrastructure
+
+ - script: |
+ # https://github.com/web-platform-tests/results-collection/blob/master/src/scripts/trust-root-ca.sh
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain tools/certs/cacert.pem
+ displayName: 'Install web-platform.test certificate'
+ condition: variables.run_wptrunner_infrastructure
+
+ - script: |
+ # Pin to STP 67, as SafariDriver isn't working in 68:
+ # https://github.com/web-platform-tests/wpt/issues/13800
+ HOMEBREW_NO_AUTO_UPDATE=1 brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask-versions/23fae0a88868911913c2ee7d527c89164b6d5720/Casks/safari-technology-preview.rb
+ # https://web-platform-tests.org/running-tests/safari.html
+ sudo "/Applications/Safari Technology Preview.app/Contents/MacOS/safaridriver" --enable
+ defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1
+ displayName: 'Install Safari Technology Preview'
+ condition: variables.run_wptrunner_infrastructure
+
+ - script: ./wpt make-hosts-file | sudo tee -a /etc/hosts
+ displayName: 'Update /etc/hosts'
+ condition: variables.run_wptrunner_infrastructure
+
+ - script: ./wpt manifest
+ displayName: 'Update manifest'
+ condition: variables.run_wptrunner_infrastructure
+
+ - script: no_proxy='*' ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --channel=preview safari_webdriver infrastructure/
+ displayName: 'Run infrastructure/ tests'
+ condition: variables.run_wptrunner_infrastructure
diff --git a/tests/wpt/web-platform-tests/cors/allow-headers.htm b/tests/wpt/web-platform-tests/cors/allow-headers.htm
deleted file mode 100644
index 8f25f3e4351..00000000000
--- a/tests/wpt/web-platform-tests/cors/allow-headers.htm
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>Access-Control-Allow-Headers handling</title>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=support.js?pipe=sub></script>
-
-<h1>Access-Control-Allow-Headers handling</h1>
-
-<div id=log></div>
-
-<script>
-
-/*
- * Origin header
- */
-function shouldPass(origin) {
- test(function () {
- var client = new XMLHttpRequest()
- client.open('GET', CROSSDOMAIN
- + '/resources/cors-makeheader.py?origin='
- + encodeURIComponent(origin),
- false)
- client.send()
- r = JSON.parse(client.response)
- var host = location.protocol + "//" + location.host
- assert_equals(r['origin'], host, 'Request Origin: should be ' + host)
- }, 'Allow origin: ' + origin.replace(/\t/g, "[tab]").replace(/ /g, '_'));
-}
-
-shouldPass('*');
-shouldPass(' * ');
-shouldPass(' *');
-shouldPass(location.protocol + "//" + location.host);
-shouldPass(" "+location.protocol + "//" + location.host);
-shouldPass(" "+location.protocol + "//" + location.host + " ");
-shouldPass(" "+location.protocol + "//" + location.host);
-
-
-function shouldFail(origin) {
- test(function () {
- var client = new XMLHttpRequest()
- client.open('GET', CROSSDOMAIN
- + '/resources/cors-makeheader.py?origin='
- + encodeURIComponent(origin),
- false)
- assert_throws("NetworkError", function() { client.send() }, 'send')
- }, 'Disallow origin: ' + origin.replace('\0', '\\0'));
-}
-
-shouldFail(location.protocol + "//" + SUBDOMAIN + "." + location.host)
-shouldFail("//" + location.host)
-shouldFail("://" + location.host)
-shouldFail("ftp://" + location.host)
-shouldFail("http:://" + location.host)
-shouldFail("http:/" + location.host)
-shouldFail("http:" + location.host)
-shouldFail(location.host)
-shouldFail(location.protocol + "//" + location.host + "?")
-shouldFail(location.protocol + "//" + location.host + "/")
-shouldFail(location.protocol + "//" + location.host + " /")
-shouldFail(location.protocol + "//" + location.host + "#")
-shouldFail(location.protocol + "//" + location.host + "%23")
-shouldFail(location.protocol + "//" + location.host + ":80")
-shouldFail(location.protocol + "//" + location.host + ", *")
-shouldFail(location.protocol + "//" + location.host + "\0")
-shouldFail((location.protocol + "//" + location.host).toUpperCase())
-shouldFail(location.protocol.toUpperCase() + "//" + location.host)
-shouldFail("-")
-shouldFail("**")
-shouldFail("\0*")
-shouldFail("*\0")
-shouldFail("'*'")
-shouldFail('"*"')
-shouldFail("* *")
-shouldFail("*" + location.protocol + "//" + "*")
-shouldFail("*" + location.protocol + "//" + location.host)
-shouldFail("* " + location.protocol + "//" + location.host)
-shouldFail("*, " + location.protocol + "//" + location.host)
-shouldFail("\0" + location.protocol + "//" + location.host)
-shouldFail("null " + location.protocol + "//" + location.host)
-shouldFail('http://example.net')
-shouldFail('null')
-shouldFail('')
-shouldFail(location.href)
-shouldFail(dirname(location.href))
-shouldFail(CROSSDOMAIN)
-
-</script>
diff --git a/tests/wpt/web-platform-tests/cors/credentials-flag.htm b/tests/wpt/web-platform-tests/cors/credentials-flag.htm
index bacd43c4ed5..45a71436856 100644
--- a/tests/wpt/web-platform-tests/cors/credentials-flag.htm
+++ b/tests/wpt/web-platform-tests/cors/credentials-flag.htm
@@ -122,8 +122,13 @@ function test_response_header(allow) {
test_response_header('TRUE')
test_response_header('True')
test_response_header('"true"')
+test_response_header("'true'");
test_response_header('false')
test_response_header('1')
test_response_header('0')
+test_response_header(',true');
+test_response_header('true,');
+test_response_header('true%0B');
+test_response_header('true%0C');
</script>
diff --git a/tests/wpt/web-platform-tests/cors/origin.htm b/tests/wpt/web-platform-tests/cors/origin.htm
index a04a29eb497..9169ec74f70 100644
--- a/tests/wpt/web-platform-tests/cors/origin.htm
+++ b/tests/wpt/web-platform-tests/cors/origin.htm
@@ -71,8 +71,14 @@ shouldFail((location.protocol + "//" + location.host).toUpperCase())
shouldFail(location.protocol.toUpperCase() + "//" + location.host)
shouldFail("-")
shouldFail("**")
+shouldFail(",*");
+shouldFail("*,");
shouldFail("\0*")
+shouldFail("\u000B*");
+shouldFail("\u000C*");
shouldFail("*\0")
+shouldFail("*\u000B");
+shouldFail("*\u000C");
shouldFail("'*'")
shouldFail('"*"')
shouldFail("* *")
diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html
new file mode 100644
index 00000000000..293b88f5208
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/adjacent-to-relpos-inline-that-had-block.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#containing-block-details">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#anonymous-block-level">
+<p>There should be a green square below, and no red.</p>
+<div style="position:relative; width:100px; height:100px; background:red;">
+ <span id="posMe">
+ <div id="removeMe"></div>
+ </span>
+ <span>
+ <div>
+ <div id="target" style="position:absolute; width:100%; height:100%; background:green;"></div>
+ </div>
+ </span>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(()=> {
+ document.body.offsetTop;
+ removeMe.style.display = "none";
+ document.body.offsetTop;
+ posMe.style.position = "relative";
+ assert_equals(document.getElementById("target").offsetWidth, 100);
+ assert_equals(document.getElementById("target").offsetHeight, 100);
+ assert_equals(document.getElementById("target").offsetLeft, 0);
+ assert_equals(document.getElementById("target").offsetTop, 0);
+ }, "Make sure that we're sized by the right ancestor");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001-ref.xht
index f66ec9432a2..013a5414bc0 100644
--- a/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001-ref.xht
+++ b/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001-ref.xht
@@ -32,13 +32,7 @@
margin-top: 0em;
}
- div#X
- {
- float: left;
- margin-left: 50%;
- }
-
- div#after-X
+ div
{
background-color: aqua;
width: 25%;
@@ -58,9 +52,7 @@
the others should all be<br />
<em>aligned on the left</em> of the window.</p>
- <div id="X">X</div>
-
- <div id="after-X"><br />The X on the previous line should be centered across the window.</div>
+ <div><span style="padding-left:50%">X The first X in this sentence should be indented to the center of this block.</span></div>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001.xht b/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001.xht
index 0e9d6732116..e38562f7f4d 100644
--- a/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001.xht
+++ b/tests/wpt/web-platform-tests/css/CSS2/css1/c547-indent-001.xht
@@ -27,7 +27,7 @@
<em>aligned on the left</em> of the window.
</p>
<div>
- X The X on the previous line should be centered across the window.
+ X The first X in this sentence should be indented to the center of this block.
</div>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/text/text-indent-percent-001-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/text/text-indent-percent-001-ref.xht
index ed9428c72e6..335ed62bbbb 100644
--- a/tests/wpt/web-platform-tests/css/CSS2/text/text-indent-percent-001-ref.xht
+++ b/tests/wpt/web-platform-tests/css/CSS2/text/text-indent-percent-001-ref.xht
@@ -2,7 +2,7 @@
<title>text-indent test</title>
<style type="text/css">
div { width: 500px; }
-p { width: 300px; text-indent: 50px; }
+p { width: 300px; text-indent: 30px; }
</style>
</head>
<body>
@@ -11,4 +11,4 @@ p { width: 300px; text-indent: 50px; }
</div>
-</body></html> \ No newline at end of file
+</body></html>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-computed.html
new file mode 100644
index 00000000000..551c9fbca9e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Animations: getComputedValue().animationDelay</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation-delay">
+<meta name="assert" content="animation-delay converts to seconds.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("animation-delay", "-500ms", "-0.5s");
+test_computed_value("animation-delay", "calc(2 * 3s)", "6s");
+test_computed_value("animation-delay", "20s, 10s");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html
new file mode 100644
index 00000000000..46a946588b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-duration-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Animations: getComputedValue().animationDuration</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation-duration">
+<meta name="assert" content="animation-duration converts to seconds.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("animation-duration", "500ms", "0.5s");
+test_computed_value("animation-duration", "calc(2 * 3s)", "6s");
+test_computed_value("animation-duration", "20s, 10s");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-005.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-005.html
new file mode 100644
index 00000000000..5f3cfeec7e0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-heights-005.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests that we consider main axis sizes to be definite in column flexboxes
+when the height is an explicit definite height, even if the container does
+not have a definite main axis size.</title>
+<link rel="author" title="Google Inc." href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="display:flex; flex-direction:column;">
+ <div style="width:100px; height:100px; background:red;">
+ <div style="height:100%; background:green;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html
new file mode 100644
index 00000000000..fc2b7aca29f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+
+<style>
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-weight: 200 300;
+}
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-weight: 300 400;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-style: oblique 20deg 30deg;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-style: oblique 30deg 40deg;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-stretch: 110% 120%;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-stretch: 120% 130%;
+}
+</style>
+
+<p style="font-family: TestWeight; font-weight: 250;">A</p>
+<p style="font-family: TestStyle; font-style: oblique 25deg;">A</p>
+<p style="font-family: TestStretch; font-stretch: 115%;">A</p>
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed.html b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed.html
new file mode 100644
index 00000000000..14d426245d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-fonts/variations/font-descriptor-range-reversed.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>CSS Test: Matching @font-face font-weight, font-style, and font-stretch descriptors with reversed ranges</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop-desc">
+<link rel="match" href="font-descriptor-range-reversed-ref.html">
+
+<!-- Using csstest-weights-{100,900}-kerned.ttf just as two convenient
+ different fonts here with different "A" glyphs -->
+
+<style>
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-weight: 300 200;
+}
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-weight: 300 400;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-style: oblique 30deg 20deg;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-style: oblique 30deg 40deg;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-stretch: 120% 110%;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-stretch: 120% 130%;
+}
+</style>
+
+<!-- Matches `font-weight: 300 200;` -->
+<p style="font-family: TestWeight; font-weight: 250;">A</p>
+
+<!-- Matches `font-style: oblique 30deg 20deg;` -->
+<p style="font-family: TestStyle; font-style: oblique 25deg;">A</p>
+
+<!-- Matches `font-style: oblique 120% 110%;` -->
+<p style="font-family: TestStretch; font-stretch: 115%;">A</p>
+
+<script>
+document.fonts.ready.then(function() {
+ document.documentElement.className = "";
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/register-property.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/register-property.html
index 62ad23622bd..5842b83b0a4 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/register-property.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/register-property.html
@@ -2,6 +2,8 @@
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api/#register-a-custom-property" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/utils.js"></script>
+<div id=target></div>
<script>
// Tests for error checking during property registration
@@ -45,4 +47,29 @@ test(function(){
CSS.registerProperty({name: '--inherit-test-2', syntax: '<length>', initialValue: '0px', inherits: false});
assert_throws(new TypeError(), () => CSS.registerProperty({name: '--inherit-test-3', syntax: '<length>', initialValue: '0px'}));
}, "registerProperty requires inherits");
+
+test(function(){
+ try {
+ let name = generate_name();
+
+ target.style.setProperty(name, 'green');
+ target.style.transitionProperty = name;
+ target.style.transitionDuration = '1s';
+ target.style.transitionTimingFunction = 'steps(1, end)';
+
+ assert_equals(getComputedStyle(target).getPropertyValue(name), 'green');
+
+ CSS.registerProperty({
+ name: name,
+ syntax: '<color>',
+ initialValue: 'red',
+ inherits: false
+ });
+
+ assert_equals(getComputedStyle(target).getPropertyValue(name), 'rgb(0, 128, 0)');
+ } finally {
+ target.style = '';
+ }
+}, 'Registering a property should not cause a transition');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-003.html b/tests/wpt/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-003.html
new file mode 100644
index 00000000000..bc6392176eb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-003.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slots-in-shadow-tree">
+<div id="host"><span id="slotted">This text should be green.</span></div>
+<script>
+ const root = host.attachShadow({mode:"open"});
+ root.innerHTML = '<slot name="nomatch" style="color:green"></slot><slot style="color:red"></slot>';
+
+ test(() => {
+ assert_equals(getComputedStyle(slotted).color, "rgb(255, 0, 0)");
+ }, "Initial computed color.");
+
+ test(() => {
+ root.querySelector("slot").removeAttribute("name");
+ assert_equals(getComputedStyle(slotted).color, "rgb(0, 128, 0)");
+
+ }, "Computed color after re-slotting.");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-ref.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-ref.html
index 63677cf4220..d452d489a4a 100644
--- a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-ref.html
@@ -5,3 +5,4 @@
<div>PASS</div>
<div>PASS</div>
<div style="color:green">PASS</div>
+<div style="color:green">PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
index 08e6dcc018f..e1a91952d70 100644
--- a/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
+++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html
@@ -7,6 +7,7 @@
<div id="host1"><span></span></div>
<div id="host2"><span></span></div>
<div id="host3"><span></span></div>
+<div id="host4"><span></span></div>
<style>
#host3 > span::before { content: "PASS" }
</style>
@@ -19,4 +20,12 @@
attachShadowWithSlottedStyle(host1, "::slotted(span)::before { content: 'PASS' }");
attachShadowWithSlottedStyle(host2, "::slotted(span)::after { content: 'PASS' }");
attachShadowWithSlottedStyle(host3, "::slotted(span)::before { content: 'FAIL'; color: green }");
+ attachShadowWithSlottedStyle(host4, `
+ ::slotted(span)::before { content: 'PASS'; color: red }
+ ::slotted(.foo)::before { color: green }
+ `);
+ onload = function() {
+ host4.offsetTop;
+ host4.firstElementChild.classList.add("foo");
+ }
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/hanging-scrollable-001.html b/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/hanging-scrollable-001.html
new file mode 100644
index 00000000000..58810a211d4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/hanging-scrollable-001.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: hanging punctuation is scrollable overflow</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#hanging-punctuation-property">
+<meta name="flags" content="">
+<link rel="match" href="reference/hanging-scrollable-001-ref.html">
+<meta name="assert" content="Hanging characters that overflow their block container are treated as scrollable overflow. ">
+<style>
+div {
+ font-family: monospace;
+ font-size: 50px;
+ hanging-punctuation: last;
+ overflow: hidden;
+ color: red;
+}
+span {color: white; }
+</style>
+
+<p>Test passes if there is no red below.
+<table><tr><td><div id="t">X<span>”</span></div></table>
+<!--
+ The table is to do sizing based on the min content size.
+ A simpler test could be written using `div { width: min-content; }`,
+ but that is not widely supported yet.
+-->
+
+<script>
+document.getElementById("t").scrollLeft=100;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html
new file mode 100644
index 00000000000..25452e9221b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/hanging-punctuation/reference/hanging-scrollable-001-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+
+<p>Test passes if there is no red below.
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht
index 546ba57a988..b8e8d62a08a 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-001-ref.xht
@@ -19,7 +19,7 @@
<body>
<p>Test passes if there is no red visible on the page.</p>
<div id="parent">
- <div>X</div>
+ <div style="padding-left: 100px">X</div>
</div>
<p>Test passes if the following two text blocks look same in terms of margin-left and text-indent respectively.</p>
<div>
@@ -31,4 +31,4 @@
ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ.<br />
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html
index eebe7dacb49..fc4887a1f01 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/reference/text-indent-percentage-002-ref.html
@@ -4,11 +4,11 @@
<title>CSS Text Test reference</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<style>
+body { background: white; }
div {
padding-left: 50px;
font-family: Ahem;
}
</style>
-<p>Test passes if there is a single black X below and no red.
<div>X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-001.xht b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-001.xht
index ae2478579d2..dd732c87215 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-001.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-001.xht
@@ -18,7 +18,7 @@
#reference1
{
color: red;
- left: 0;
+ left: 100px; /* see comments for #test1 below */
position: absolute;
top: 0;
z-index: -1;
@@ -29,8 +29,8 @@
}
#test1
{
- text-indent: 50%;
- margin-left: -50%;
+ margin-left: -50%; /* -50% * 400px = -200px which makes the inline-size of this block 600px */
+ text-indent: 50%; /* 50% * 600px = 300px (which is 100px from the start of #parent due to the negative margin) */
}
#test2
{
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html
index 1c0a33ba942..568241b893b 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-002.html
@@ -8,7 +8,7 @@
<link rel="match" href="reference/text-indent-percentage-002-ref.html">
<meta name="assert" content="Percentages in text-indent refer to width of the element's content box">
<style>
-section { position: absolute; }
+body { background: white; }
section, div {
border-right: 10px solid white;
margin-right: 10px;
@@ -19,10 +19,7 @@ div {
box-sizing: border-box;
width: 120px;
}
-.test div { text-indent: 50%; color: red; }
-.ref div { text-indent: 50px; }
+.test div { text-indent: 50%; }
</style>
-<p>Test passes if there is a single black X below and no red.
<section class=test><div>X</div></section>
-<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html
index 9f41e5b080d..7bbac522b37 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-003.html
@@ -8,7 +8,7 @@
<link rel="match" href="reference/text-indent-percentage-002-ref.html">
<meta name="assert" content="Percentages in text-indent refer to width of the element's content box">
<style>
-section { position: absolute; }
+body { background: white; }
section, div {
border-right: 10px solid white;
margin-right: 10px;
@@ -19,10 +19,7 @@ div {
box-sizing: border-box;
width: 120px;
}
-.test div { text-indent: 50%; color: red; overflow: hidden; } /* overflow:hidden should not make any difference, but it does in some browsers */
-.ref div { text-indent: 50px; }
+.test div { text-indent: 50%; overflow: hidden; } /* overflow:hidden should not make any difference, but it does in some browsers */
</style>
-<p>Test passes if there is a single black X below and no red.
<section class=test><div>X</div></section>
-<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html
index 4d1dff10be5..c800e2a80b8 100644
--- a/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html
+++ b/tests/wpt/web-platform-tests/css/css-text/text-indent/text-indent-percentage-004.html
@@ -8,7 +8,7 @@
<link rel="match" href="reference/text-indent-percentage-002-ref.html">
<meta name="assert" content="Percentages in text-indent refer to width of the element's content box, when used in a calc expression">
<style>
-section { position: absolute; }
+body { background: white; }
section, div {
border-right: 10px solid white;
margin-right: 10px;
@@ -19,10 +19,7 @@ div {
box-sizing: border-box;
width: 120px;
}
-.test div { text-indent: calc(25px + 25%); color: red; }
-.ref div { text-indent: 50px; }
+.test div { text-indent: calc(25px + 25%); }
</style>
-<p>Test passes if there is a single black X below and no red.
<section class=test><div>X</div></section>
-<section class=ref><div>X</div></section>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html
new file mode 100644
index 00000000000..8db147766bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+
+<style>
+div {
+ white-space: pre-wrap;
+ font-family: monospace;
+}
+</style>
+
+<p>This test passes if the 4 letters below are verticaly aligned.
+
+<div> P</div>
+<div> A</div>
+<div> S</div>
+<div> S</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html
new file mode 100644
index 00000000000..53cb2a083b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS test Reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+
+<p>This test passes if you can see the word PASS below, without any extra spaces.
+
+<div>PASS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html
new file mode 100644
index 00000000000..ca6f65e613d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-001-ref.html">
+<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap.">
+
+<style>
+div {
+ white-space: pre-wrap;
+ font-family: monospace;
+}
+div:nth-of-type(1),
+div:nth-of-type(2) {
+ width: 5ch;
+ text-align: right;
+}
+div:nth-of-type(3),
+div:nth-of-type(4) {
+ width: 9ch;
+ text-align: center;
+}
+</style>
+
+<p>This test passes if the 4 letters below are verticaly aligned.
+
+<div>P</div>
+<div>A </div>
+<div>S</div>
+<div>S </div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html
new file mode 100644
index 00000000000..d8e7c8278a9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Text test: intrinsic maximum sizing of trailing spaces with white-space:pre-wrap</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-002-ref.html">
+<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap, and therefore does not count when computing the (maximum) intrinsic size.">
+
+<style>
+span {
+ display: inline-block;
+ white-space: pre-wrap;
+}
+#s1 { text-align: right; }
+#s2 { text-align: center; }
+</style>
+
+<p>This test passes if you can see the word PASS below, without any extra spaces.
+
+<div><span id=s1>P </span><span id=s2>A </span>SS</div>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
new file mode 100644
index 00000000000..6b21df62c5c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Text test: intrinsic minimum sizing of trailing spaces with white-space:pre-wrap</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-002-ref.html">
+<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap, and therefore does not count when computing the (minimum) intrinsic size.">
+
+<style>
+/* Make the table invisible */
+table { border-collapse: collapse; }
+td { padding: 0; }
+
+/* for the content of the table to be sized to their mininum intrinsic size */
+table { width: 0; }
+
+span {
+ display: inline-block;
+ white-space: pre-wrap;
+}
+#s1 { text-align: right; }
+#s2 { text-align: center; }
+</style>
+
+<p>This test passes if you can see the word PASS below, without any extra spaces.
+
+<table><td><span id=s1>P </span><td><span id=s2>A </span><td>SS</table>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/animation/list-interpolation.html b/tests/wpt/web-platform-tests/css/css-transforms/animation/list-interpolation.html
index 91092c88aac..90cdebbb6cd 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/animation/list-interpolation.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/animation/list-interpolation.html
@@ -11,57 +11,56 @@
</head>
<body>
<script>
-// none -> none
test_interpolation(
{
property: 'transform',
from: 'none',
to: 'none',
},
- [{ at: 0.25, expect: 'none' }]
+ [{ at: 0.25, expect: 'none' }],
+ 'none -> none'
);
-// none -> something
test_interpolation(
{
property: 'transform',
from: 'none',
to: 'translate(200px) rotate(720deg)',
},
- [{ at: 0.25, expect: 'translate(50px) rotate(180deg)' }]
+ [{ at: 0.25, expect: 'translate(50px) rotate(180deg)' }],
+ 'none -> something'
);
-// something -> none
test_interpolation(
{
property: 'transform',
from: 'translate(200px) rotate(720deg)',
to: 'none',
},
- [{ at: 0.25, expect: 'translate(150px) rotate(540deg)' }]
+ [{ at: 0.25, expect: 'translate(150px) rotate(540deg)' }],
+ 'something -> none'
);
-// Mismatched lengths (from is shorter), common part matches
test_interpolation(
{
property: 'transform',
from: 'translate(100px)',
to: 'translate(200px) rotate(720deg)',
},
- [{ at: 0.25, expect: 'translate(125px) rotate(180deg)' }]
+ [{ at: 0.25, expect: 'translate(125px) rotate(180deg)' }],
+ 'Mismatched lengths (from is shorter), common part matches'
);
-// Mismatched lengths (to is shorter), common part matches
test_interpolation(
{
property: 'transform',
from: 'translate(100px) rotate(720deg)',
to: 'translate(200px)',
},
- [{ at: 0.25, expect: 'translate(125px) rotate(540deg)' }]
+ [{ at: 0.25, expect: 'translate(125px) rotate(540deg)' }],
+ 'Mismatched lengths (to is shorter), common part matches'
);
-// Perfect match
test_interpolation(
{
property: 'transform',
@@ -73,47 +72,68 @@ test_interpolation(
at: 0.25,
expect: 'scale(2.25) rotate(540deg) translate(125px) matrix(1, 0, 0, 1, 75, 50) skew(180deg)',
},
- ]
+ ],
+ 'Perfect match'
);
-// Matches on primitives
test_interpolation(
{
property: 'transform',
from: 'translateX(100px) scaleX(3) translate(500px) scale(2)',
to: 'translateY(200px) scale(5) translateX(100px) scaleY(3)',
},
- [{ at: 0.25, expect: 'translate(75px, 50px) scale(3.5, 2) translate(400px, 0px) scale(1.75, 2.25)' }]
+ [{ at: 0.25, expect: 'translate(75px, 50px) scale(3.5, 2) translate(400px, 0px) scale(1.75, 2.25)' }],
+ 'Matches on primitives'
+);
+
+test_interpolation(
+ {
+ property: 'transform',
+ from: 'rotateX(90deg) translateX(100px)',
+ to: 'rotate3d(50, 0, 0, 180deg) translateY(200px)',
+ },
+ [{ at: 0.25, expect: 'rotateX(112.5deg) translate(75px, 50px)' }],
+ 'Match on rotation vector'
+);
+
+test_interpolation(
+ {
+ property: 'transform',
+ from: 'rotateX(90deg) translateX(100px)',
+ to: 'rotateY(0deg) translateY(200px)',
+ },
+ [{ at: 0.25, expect: 'rotateX(67.5deg) translate(75px, 50px)' }],
+ 'Match on rotation due to 0deg angle'
);
-// Common prefix
test_interpolation(
{
property: 'transform',
from: 'rotate(0deg) translate(100px)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
- [{ at: 0.25, expect: 'rotate(180deg) matrix(1.25, 0, 0, 1.25, 175, 0)' }]
+ [{ at: 0.25, expect: 'rotate(180deg) matrix(1.25, 0, 0, 1.25, 175, 0)' }],
+ 'Common prefix'
);
-// Complete mismatch (except length)
test_interpolation(
{
property: 'transform',
from: 'scale(2) rotate(0deg) translate(100px)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
- [{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 250, 0)' }]
+ [{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 250, 0)' }],
+ 'Complete mismatch (except length)'
);
-// Complete mismatch including length
test_interpolation(
{
property: 'transform',
from: 'scale(2) rotate(0deg)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
- [{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 100, 0)' }]
+ [{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 100, 0)' }],
+ 'Complete mismatch including length'
);
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js b/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js
index 5ab5551152e..3791b0af9db 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js
+++ b/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js
@@ -1,5 +1,6 @@
'use strict';
-function test_interpolation(settings, expectations) {
+function test_interpolation(settings, expectations, name) {
+ var message_prefix = name ? name + ': ' : '';
// Returns a timing function that at 0.5 evaluates to progress.
function timingFunction(progress) {
if (progress === 0)
@@ -13,7 +14,7 @@ function test_interpolation(settings, expectations) {
test(function(){
assert_true(CSS.supports(settings.property, settings.from), 'Value "' + settings.from + '" is supported by ' + settings.property);
assert_true(CSS.supports(settings.property, settings.to), 'Value "' + settings.to + '" is supported by ' + settings.property);
- }, '"' + settings.from + '" and "' + settings.to + '" are valid ' + settings.property + ' values');
+ }, message_prefix + '"' + settings.from + '" and "' + settings.to + '" are valid ' + settings.property + ' values');
for (var i = 0; i < expectations.length; ++i) {
var progress = expectations[i].at;
@@ -49,6 +50,6 @@ function test_interpolation(settings, expectations) {
reference.style = '';
assert_equals(getComputedStyle(target)[settings.property], getComputedStyle(reference)[settings.property]);
- }, 'Animation between "' + settings.from + '" and "' + settings.to + '" at progress ' + progress);
+ }, message_prefix + 'Animation between "' + settings.from + '" and "' + settings.to + '" at progress ' + progress);
}
}
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-computed.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-computed.html
new file mode 100644
index 00000000000..0fa0f582b12
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-duration-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transitions: getComputedValue().transitionDuration</title>
+<link rel="help" href="https://drafts.csswg.org/css-transitions/#propdef-transition-duration">
+<meta name="assert" content="transition-duration converts to seconds.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("transition-duration", "500ms", "0.5s");
+test_computed_value("transition-duration", "calc(2 * 3s)", "6s");
+test_computed_value("transition-duration", "20s, 10s");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/selectors/selector-placeholder-shown-emptify-placeholder.html b/tests/wpt/web-platform-tests/css/selectors/selector-placeholder-shown-emptify-placeholder.html
new file mode 100644
index 00000000000..17316ede264
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/selector-placeholder-shown-emptify-placeholder.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>When non-empty placeholder becomes empty, :placeholder-shown test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#placeholder">
+<input id="myinput" type="text" placeholder="FAIL">
+<textarea id="mytextarea" placeholder="FAIL"></textarea>
+<script>
+test(() => {
+ const input = document.querySelector("input");
+ input.placeholder = "";
+ input.value = "NO RED";
+ assert_false(input.matches(":placeholder-shown"));
+}, "input:placeholder-shown should not be matched");
+
+test(() => {
+ const textarea = document.querySelector("textarea");
+ textarea.placeholder = "";
+ textarea.value = "No RED";
+ assert_false(textarea.matches(":placeholder-shown"));
+}, "textarea:placeholder-shown should not be matched");
+</script>
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/rendering.md b/tests/wpt/web-platform-tests/docs/_writing-tests/rendering.md
index b79bc5c9834..aff57689338 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/rendering.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/rendering.md
@@ -9,6 +9,10 @@ these are especially using for [visual][] tests which need to be manually
judged and following common patterns makes it easier to correctly tell if a
given test passed or not.
+## Make tests self-describing
+
+Tests should make it obvious when they pass and when they fail. It shouldn't be necessary to consult the specification to figure out whether a test has passed of failed.
+
## Indicating success
Success is largely indicated by the color green; typically in one of
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
index 9f93ea844d7..e7e53e4c3b6 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
@@ -758,6 +758,9 @@ asserts that the class string of `object` as returned in
### `assert_own_property(object, property_name, description)`
assert that object has own property `property_name`
+### `assert_not_own_property(object, property_name, description)`
+assert that object does not have an own property named `property_name`
+
### `assert_inherits(object, property_name, description)`
assert that object does not have an own property named
`property_name` but that `property_name` is present in the prototype
diff --git a/tests/wpt/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html
new file mode 100644
index 00000000000..688524bd238
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html
@@ -0,0 +1,132 @@
+<!doctype html>
+<meta charset="utf8">
+<title>Events must dispatch on disabled elements</title>
+<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>
+<body>
+<script>
+// HTML elements that can be disabled
+const formElements = ["button", "fieldset", "input", "select", "textarea"];
+
+test(() => {
+ for (const localName of formElements) {
+ const elem = document.createElement(localName);
+ elem.disabled = true;
+ // pass becomes true if the event is called and it's the right type.
+ let pass = false;
+ const listener = ({ type }) => {
+ pass = type === "click";
+ };
+ elem.addEventListener("click", listener, { once: true });
+ elem.dispatchEvent(new Event("click"));
+ assert_true(
+ pass,
+ `Untrusted "click" Event didn't dispatch on ${elem.constructor.name}.`
+ );
+ }
+}, "Can dispatch untrusted 'click' Events at disabled HTML elements.");
+
+test(() => {
+ for (const localName of formElements) {
+ const elem = document.createElement(localName);
+ elem.disabled = true;
+ // pass becomes true if the event is called and it's the right type.
+ let pass = false;
+ const listener = ({ type }) => {
+ pass = type === "pass";
+ };
+ elem.addEventListener("pass", listener, { once: true });
+ elem.dispatchEvent(new Event("pass"));
+ assert_true(
+ pass,
+ `Untrusted "pass" Event didn't dispatch on ${elem.constructor.name}`
+ );
+ }
+}, "Can dispatch untrusted Events at disabled HTML elements.");
+
+test(() => {
+ for (const localName of formElements) {
+ const elem = document.createElement(localName);
+ elem.disabled = true;
+ // pass becomes true if the event is called and it's the right type.
+ let pass = false;
+ const listener = ({ type }) => {
+ pass = type === "custom-pass";
+ };
+ elem.addEventListener("custom-pass", listener, { once: true });
+ elem.dispatchEvent(new CustomEvent("custom-pass"));
+ assert_true(
+ pass,
+ `CustomEvent "custom-pass" didn't dispatch on ${elem.constructor.name}`
+ );
+ }
+}, "Can dispatch CustomEvents at disabled HTML elements.");
+
+test(() => {
+ for (const localName of formElements) {
+ const elem = document.createElement(localName);
+
+ // Element is disabled... so this click() MUST NOT fire an event.
+ elem.disabled = true;
+ let pass = true;
+ elem.onclick = e => {
+ pass = false;
+ };
+ elem.click();
+ assert_true(
+ pass,
+ `.click() must not dispatch "click" event on disabled ${
+ elem.constructor.name
+ }.`
+ );
+
+ // Element is (re)enabled... so this click() fires an event.
+ elem.disabled = false;
+ pass = false;
+ elem.onclick = e => {
+ pass = true;
+ };
+ elem.click();
+ assert_true(
+ pass,
+ `.click() must dispatch "click" event on enabled ${
+ elem.constructor.name
+ }.`
+ );
+ }
+}, "Calling click() on disabled elements must not dispatch events.");
+
+promise_test(async () => {
+ for (const localName of formElements) {
+ const elem = document.createElement(localName);
+ elem.disabled = true;
+ document.body.appendChild(elem);
+
+ // Element is disabled, so clicking must not fire events
+ let pass = true;
+ elem.onclick = e => {
+ pass = false;
+ };
+ await test_driver.click(elem); // triggers "onclick"
+ assert_true(
+ pass,
+ `${elem.constructor.name} is disabled, so onclick must not fire.`
+ );
+
+ // Element is (re)enabled... so this click() will fire an event.
+ pass = false;
+ elem.disabled = false;
+ elem.onclick = () => {
+ pass = true;
+ };
+ await test_driver.click(elem); // triggers "onclick"
+ assert_true(
+ pass,
+ `${elem.constructor.name} is enabled, so onclick must fire.`
+ );
+ elem.remove();
+ }
+}, "Real clicks on disabled elements must not dispatch events.");
+</script>
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html
new file mode 100644
index 00000000000..66d0a55104c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<title>Ref: vertical-scroll test for scrollbar</title>
+<iframe src="/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html"></iframe>
+<script>
+ let iframe = document.querySelector("iframe");
+ let overflow_y = "visible";
+ if (window.location.search.indexOf("no-vertical-scrollbar") !== -1)
+ overflow_y = "hidden"
+ iframe.addEventListener("load", () => {
+ iframe.contentDocument.body.style.overflowY = overflow_y;
+ });
+</script>
+
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html
new file mode 100644
index 00000000000..6036234de18
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-disabled-scrollbar-tentative.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<title>vertical-scroll test for vertical scrollbar</title>
+<link rel="match" href="/feature-policy/experimental-features/resources/vertical-scroll-scrollbar-ref.html?no-vertical-scrollbar">
+<iframe src="/feature-policy/experimental-features/resources/vertical-scroll-scrollable-content.html" allow="vertical-scroll 'none'"></iframe>
diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/header-value-combining.any.js b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-combining.any.js
index fd08072ea52..bb70d87d250 100644
--- a/tests/wpt/web-platform-tests/fetch/api/basic/header-value-combining.any.js
+++ b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-combining.any.js
@@ -1,11 +1,15 @@
// META: global=window,worker
-promise_test(async t => {
- const response = await fetch("../../../xhr/resources/headers-basic.asis");
- assert_equals(response.headers.get("foo-test"), "1, 2, 3");
-}, "response.headers.get('foo-test')");
-
-promise_test(async t => {
- const response = await fetch("../../../xhr/resources/headers-www-authenticate.asis");
- assert_equals(response.headers.get("www-authenticate"), "1, 2, 3, 4");
-}, "response.headers.get('www-authenticate')");
+[
+ ["content-length", "0", "header-content-length"],
+ ["content-length", "0, 0", "header-content-length-twice"],
+ ["double-trouble", ", ", "headers-double-empty"],
+ ["foo-test", "1, 2, 3", "headers-basic"],
+ ["heya", ", \u000B\u000C, 1, , , 2", "headers-some-are-empty"],
+ ["www-authenticate", "1, 2, 3, 4", "headers-www-authenticate"],
+].forEach(testValues => {
+ promise_test(async t => {
+ const response = await fetch("../../../xhr/resources/" + testValues[2] + ".asis");
+ assert_equals(response.headers.get(testValues[0]), testValues[1]);
+ }, "response.headers.get('" + testValues[0] + "') expects " + testValues[1]);
+});
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.html b/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.html
deleted file mode 100644
index 10c5cadfcaa..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<div id=log></div>
-<script>
- var fails = ["first", "uppercase"],
- passes = ["last", "quoted", "quoted-single", "no-x"]
-
- fails.forEach(function(urlpart) {
- async_test(function(t) {
- var script = document.createElement("script")
- script.onerror = t.step_func_done(function(){})
- script.onload = t.unreached_func("Unexpected load event")
- script.src = "resources/nosniff-" + urlpart + ".asis"
- document.body.appendChild(script)
- }, "URL query: " + urlpart)
- })
-
- passes.forEach(function(urlpart) {
- async_test(function(t) {
- var script = document.createElement("script")
- script.onerror = t.unreached_func("Unexpected error event")
- script.onload = t.step_func_done(function(){})
- script.src = "resources/nosniff-" + urlpart + ".asis"
- document.body.appendChild(script)
- }, "URL query: " + urlpart)
- })
-
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.window.js b/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.window.js
new file mode 100644
index 00000000000..043e659127b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/nosniff/parsing-nosniff.window.js
@@ -0,0 +1,24 @@
+promise_test(() => fetch("resources/x-content-type-options.json").then(res => res.json()).then(runTests), "Loading JSON…");
+
+function runTests(allTestData) {
+ for (let i = 0; i < allTestData.length; i++) {
+ const testData = allTestData[i],
+ input = encodeURIComponent(testData.input);
+ async_test(t => {
+ const script = document.createElement("script");
+ t.add_cleanup(() => script.remove());
+ // A <script> element loading a classic script does not care about the MIME type, unless
+ // X-Content-Type-Options: nosniff is specified, in which case a JavaScript MIME type is
+ // enforced, which x/x is not.
+ if (testData.nosniff) {
+ script.onerror = t.step_func_done();
+ script.onload = t.unreached_func("Script should not have loaded");
+ } else {
+ script.onerror = t.unreached_func("Script should have loaded");
+ script.onload = t.step_func_done();
+ }
+ script.src = "resources/nosniff.py?nosniff=" + input;
+ document.body.appendChild(script);
+ }, input);
+ }
+}
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-first.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-first.asis
deleted file mode 100644
index bccc53eef8a..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-first.asis
+++ /dev/null
@@ -1,7 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-X-Content-Type-options: nosniff
-X-Content-Type-Options: no
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-last.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-last.asis
deleted file mode 100644
index e3de0733e4f..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-last.asis
+++ /dev/null
@@ -1,7 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-X-Content-Type-Options: no
-X-Content-Type-options: nosniff
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-no-x.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-no-x.asis
deleted file mode 100644
index 329d0f72143..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-no-x.asis
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-Content-Type-Options: nosniff
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted-single.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted-single.asis
deleted file mode 100644
index 501f18999d0..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted-single.asis
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-X-Content-Type-Options: 'NosniFF'
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted.asis
deleted file mode 100644
index c6de62b689e..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-quoted.asis
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-X-Content-Type-Options: "nosniFF"
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-uppercase.asis b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-uppercase.asis
deleted file mode 100644
index 8097fddce10..00000000000
--- a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff-uppercase.asis
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP/1.1 200 YOU HAVE NO POWER HERE
-Content-Length: 22
-Content-Type: x/x
-X-Content-Type-Options: NOSNIFF
-
-// nothing to see here
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff.py b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff.py
new file mode 100644
index 00000000000..9b59d35b925
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/nosniff/resources/nosniff.py
@@ -0,0 +1,10 @@
+def main(request, response):
+ response.add_required_headers = False
+ output = "HTTP/1.1 220 YOU HAVE NO POWER HERE\r\n"
+ output += "Content-Length: 22\r\n"
+ output += "Content-Type: x/x\r\n"
+ output += request.GET.first("nosniff") + "\r\n"
+ output += "\r\n"
+ output += "// nothing to see here"
+ response.writer.write(output)
+ response.close_connection = True
diff --git a/tests/wpt/web-platform-tests/fetch/nosniff/resources/x-content-type-options.json b/tests/wpt/web-platform-tests/fetch/nosniff/resources/x-content-type-options.json
new file mode 100644
index 00000000000..0a8c490756e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/nosniff/resources/x-content-type-options.json
@@ -0,0 +1,58 @@
+[
+ {
+ "input": "X-Content-Type-Options: NOSNIFF",
+ "nosniff": true
+ },
+ {
+ "input": "x-content-type-OPTIONS: nosniff",
+ "nosniff": true
+ },
+ {
+ "input": "X-Content-Type-Options: nosniff,,@#$#%%&^&^*()()11!",
+ "nosniff": true
+ },
+ {
+ "input": "X-Content-Type-Options: @#$#%%&^&^*()()11!,nosniff",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: nosniff\r\nX-Content-Type-Options: no",
+ "nosniff": true
+ },
+ {
+ "input": "X-Content-Type-Options: no\r\nX-Content-Type-Options: nosniff",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options:\r\nX-Content-Type-Options: nosniff",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: ,nosniff",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: nosniff\u000C",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: nosniff\u000B",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: nosniff\u000B,nosniff",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: 'NosniFF'",
+ "nosniff": false
+ },
+ {
+ "input": "X-Content-Type-Options: \"nosniFF\"",
+ "nosniff": false
+ },
+ {
+ "input": "Content-Type-Options: nosniff",
+ "nosniff": false
+ }
+]
diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/no-browsing-context.window.js b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/no-browsing-context.window.js
new file mode 100644
index 00000000000..4077d909719
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/no-browsing-context.window.js
@@ -0,0 +1,86 @@
+test(() => {
+ const frame = document.body.appendChild(document.createElement("iframe")),
+ win = frame.contentWindow,
+ loc = win.location;
+ frame.remove();
+ assert_equals(win.location, loc);
+}, "Window and Location are 1:1 after browsing context removal");
+
+function bcLessLocation() {
+ const frame = document.body.appendChild(document.createElement("iframe")),
+ win = frame.contentWindow,
+ loc = win.location;
+ frame.remove();
+ return loc;
+}
+
+[
+ {
+ "property": "href",
+ "expected": "about:blank",
+ "values": ["https://example.com/", "/", "http://test:test/", "test test", "test:test", "chrome:fail"]
+ },
+ {
+ "property": "protocol",
+ "expected": "about:",
+ "values": ["http", "about", "test"]
+ },
+ {
+ "property": "host",
+ "expected": "",
+ "values": ["example.com", "test test", "()"]
+ },
+ {
+ "property": "hostname",
+ "expected": "",
+ "values": ["example.com"]
+ },
+ {
+ "property": "port",
+ "expected": "",
+ "values": ["80", "", "443", "notaport"]
+ },
+ {
+ "property": "pathname",
+ "expected": "blank",
+ "values": ["/", "x"]
+ },
+ {
+ "property": "search",
+ "expected": "",
+ "values": ["test"]
+ },
+ {
+ "property": "hash",
+ "expected": "",
+ "values": ["test", "#"]
+ }
+].forEach(testSetup => {
+ testSetup.values.forEach(value => {
+ test(() => {
+ const loc = bcLessLocation();
+ loc[testSetup.property] = value;
+ assert_equals(loc[testSetup.property], testSetup.expected);
+ }, "Setting `" + testSetup.property + "` to `" + value + "` of a `Location` object sans browsing context is a no-op");
+ });
+});
+
+test(() => {
+ const loc = bcLessLocation();
+ assert_equals(loc.origin, "null");
+}, "Getting `origin` of a `Location` object sans browsing context should be \"null\"");
+
+["assign", "replace", "reload"].forEach(method => {
+ ["about:blank", "https://example.com/", "/", "http://test:test/", "test test", "test:test", "chrome:fail"].forEach(value => {
+ test(() => {
+ const loc = bcLessLocation();
+ loc[method](value);
+ assert_equals(loc.href, "about:blank");
+ }, "Invoking `" + method + "` with `" + value + "` on a `Location` object sans browsing context is a no-op");
+ });
+});
+
+test(() => {
+ const loc = bcLessLocation();
+ assert_array_equals(loc.ancestorOrigins, []);
+}, "Getting `ancestorOrigins` of a `Location` object sans browsing context should be []");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/execution-timing/077.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/execution-timing/077.html
index 4b98851ecdd..dbcd16bea50 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/execution-timing/077.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/execution-timing/077.html
@@ -22,7 +22,7 @@
if(script2) {
head.removeChild(script2);
}
- var script3 = createScript('data:text\/javascript, log("Script %233 ran"); createScript(\'\', \'log("Script #4 ran")\')');
+ var script3 = createScript('data:text\/javascript, log("Script %233 ran"); createScript(\'\', \'log("Script %234 ran")\')');
if(script3) {
head.removeChild(script3);
}
diff --git a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
index 3982d110503..137528c148a 100644
--- a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
+++ b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl
@@ -50,9 +50,16 @@ interface IDBFactory {
optional [EnforceRange] unsigned long long version);
[NewObject] IDBOpenDBRequest deleteDatabase(DOMString name);
+ Promise<sequence<IDBDatabaseInfo>> databases();
+
short cmp(any first, any second);
};
+dictionary IDBDatabaseInfo {
+ DOMString name;
+ unsigned long long version;
+};
+
[Exposed=(Window,Worker)]
interface IDBDatabase : EventTarget {
readonly attribute DOMString name;
diff --git a/tests/wpt/web-platform-tests/interfaces/hr-time.idl b/tests/wpt/web-platform-tests/interfaces/hr-time.idl
index 33d602cf971..0e30c3f150f 100644
--- a/tests/wpt/web-platform-tests/interfaces/hr-time.idl
+++ b/tests/wpt/web-platform-tests/interfaces/hr-time.idl
@@ -13,6 +13,5 @@ interface Performance : EventTarget {
};
partial interface mixin WindowOrWorkerGlobalScope {
- [Replaceable]
- readonly attribute Performance performance;
+ [Replaceable] readonly attribute Performance performance;
};
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index 296699bb61e..23f20555e8c 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -59,6 +59,10 @@ TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.ico
TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.wasm
TRAILING WHITESPACE, INDENT TABS, CR AT EOL: *.bmp
+## Whitespace needed for testing
+
+TRAILING WHITESPACE: xhr/resources/headers-some-are-empty.asis
+
## Documentation ##
W3C-TEST.ORG: README.md
@@ -313,10 +317,10 @@ SET TIMEOUT: resources/testharness.js
# setTimeout use in reftests
SET TIMEOUT: acid/acid3/test.html
-# Travis
+# CI configuration
+WEB-PLATFORM.TEST: .azure-pipelines.yml
WEB-PLATFORM.TEST: .travis.yml
-
# Third party code
*: css/tools/apiclient/*
*: css/tools/w3ctestlib/*
diff --git a/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html b/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html
index 25e087971da..6e039b9d609 100644
--- a/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html
+++ b/tests/wpt/web-platform-tests/mathml/presentation-markup/scripts/underover-1.html
@@ -74,7 +74,7 @@
}, "Width of scripted elements");
test(function() {
- var e = 3;
+ var e = 3.2;
for (var i = 0; i <= 3; i++) {
assert_approx_equals(getBox("under" + i).height, getBox("under" + i + "base").height + getBox("under" + i + "under").height + e, e, "munder " + i + ": height is determined by the sum of heights of base and script plus some spacing.");
assert_approx_equals(getBox("over" + i).height, getBox("over" + i + "base").height + getBox("over" + i + "over").height + e, e, "mover " + i + ": height is determined by the sum of heights of base and script plus some spacing.");
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html
index 0eb3a26cd82..158c9014617 100644
--- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html
@@ -71,40 +71,146 @@
var stream = await navigator.mediaDevices.getUserMedia(constraints);
assert_equals(stream.getTracks()[0].getSettings().groupId,
device.groupId);
- assert_true(device.groupId.length > 0);
+ assert_greater_than(device.groupId.length, 0);
}
});
}, 'groupId is correctly reported by getSettings() for all devices');
- promise_test(t => {
- return navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {
- let settings = stream.getAudioTracks()[0].getSettings();
- assert_equals(typeof(settings.deviceId), "string",
- "deviceId should exist and it should be a string.");
- assert_equals(typeof(settings.groupId), "string",
- "groupId should exist and it should be a string.");
- assert_equals(typeof(settings.volume), "number",
- "volume should exist and it should be a number.");
- assert_true(settings.volume >= 0.0 && settings.volume <= 1.0,
- "volume should be a number in the range [0.0, 1.0].");
- assert_equals(typeof(settings.sampleRate), "number",
- "sampleRate should exist and it should be a number.");
- assert_true(settings.sampleRate > 0, "sampleRate should be positive.");
- assert_equals(typeof(settings.sampleSize), "number",
- "sampleSize should exist and it should be a number.");
- assert_true(settings.sampleSize > 0, "sampleSize should be positive.");
- assert_equals(typeof(settings.echoCancellation), "boolean",
- "echoCancellation should exist and it should be a boolean.");
- assert_equals(typeof(settings.autoGainControl), "boolean",
- "autoGainControl should exist and it should be a boolean.");
- assert_equals(typeof(settings.noiseSuppression), "boolean",
- "noiseSuppression should exist and it should be a boolean.");
- assert_equals(typeof(settings.latency), "number",
- "latency should exist and it should be a number.");
- assert_true(settings.latency >= 0, "latency should not be negative.");
- assert_equals(typeof(settings.channelCount), "number",
- "channelCount should exist and it should be a number.");
- assert_true(settings.channelCount > 0, "channelCount should be positive.");
- });
- }, 'audio properties are reported by getSettings()');
+ async function createAudioStreamAndGetSettings(t) {
+ const stream = await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => stream.getAudioTracks()[0].stop());
+ return stream.getAudioTracks()[0].getSettings();
+ }
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.deviceId), "string",
+ "deviceId should exist and it should be a string.");
+ }, 'deviceId is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.groupId), "string",
+ "groupId should exist and it should be a string.");
+ }, 'groupId is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.volume), "number",
+ "volume should exist and it should be a number.");
+ assert_between_inclusive(settings.volume, 0.0, 1.0);
+ }, 'volume is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.sampleRate), "number",
+ "sampleRate should exist and it should be a number.");
+ assert_greater_than(settings.sampleRate, 0);
+ }, 'sampleRate is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.sampleSize), "number",
+ "sampleSize should exist and it should be a number.");
+ assert_greater_than(settings.sampleSize, 0);
+ }, 'sampleSize is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.echoCancellation), "boolean",
+ "echoCancellation should exist and it should be a boolean.");
+ }, 'echoCancellation is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.autoGainControl), "boolean",
+ "autoGainControl should exist and it should be a boolean.");
+ }, 'autoGainControl is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.noiseSuppression), "boolean",
+ "noiseSuppression should exist and it should be a boolean.");
+ }, 'noiseSuppression is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.latency), "number",
+ "latency should exist and it should be a number.");
+ assert_greater_than_equal(settings.latency,0);
+ }, 'latency is reported by getSettings() for getUserMedia() audio tracks');
+
+ promise_test(async t => {
+ const settings = await createAudioStreamAndGetSettings(t);
+ assert_equals(typeof(settings.channelCount), "number",
+ "channelCount should exist and it should be a number.");
+ assert_greater_than(settings.channelCount, 0);
+ }, 'channelCount is reported by getSettings() for getUserMedia() audio tracks');
+
+ async function createVideoStreamAndGetSettings(t) {
+ const stream = await navigator.mediaDevices.getUserMedia({video: true});
+ t.add_cleanup(() => stream.getVideoTracks()[0].stop());
+ return stream.getVideoTracks()[0].getSettings();
+ }
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.deviceId), "string",
+ "deviceId should exist and it should be a string.");
+ }, 'deviceId is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.groupId), "string",
+ "groupId should exist and it should be a string.");
+ }, 'groupId is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.width), "number",
+ "width should exist and it should be a number.");
+ assert_true(Number.isInteger(settings.width), "width should be an integer.");
+ assert_greater_than_equal(settings.width, 0);;
+ }, 'width is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.height), "number",
+ "height should exist and it should be a number.");
+ assert_true(Number.isInteger(settings.height), "height should be an integer.");
+ assert_greater_than_equal(settings.height, 0);
+ }, 'height is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.aspectRatio), "number",
+ "aspectRatio should exist and it should be a number.");
+ assert_greater_than_equal(settings.aspectRatio, 0);
+ }, 'aspectRatio is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.frameRate), "number",
+ "frameRate should exist and it should be a number.");
+ assert_greater_than_equal(settings.frameRate, 0);
+ }, 'frameRate is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ // facingMode not treated as mandatory because not all platforms provide
+ // this information.
+ if (settings.facingMode) {
+ assert_equals(typeof(settings.facingMode), "string",
+ "If facingMode is provided it should be a string.");
+ assert_in_array(settings.facingMode,
+ ['user', 'environment', 'left', 'right']);
+ }
+ }, 'facingMode is reported by getSettings() for getUserMedia() video tracks');
+
+ promise_test(async t => {
+ const settings = await createVideoStreamAndGetSettings(t);
+ assert_equals(typeof(settings.resizeMode), "string",
+ "resizeMode should exist and it should be a string.");
+ assert_in_array(settings.resizeMode, ['none', 'crop-and-scale']);
+ }, 'resizeMode is reported by getSettings() for getUserMedia() video tracks');
</script>
diff --git a/tests/wpt/web-platform-tests/payment-handler/basic-card.js b/tests/wpt/web-platform-tests/payment-handler/basic-card.js
index c78f24b017f..2db5d4b719f 100644
--- a/tests/wpt/web-platform-tests/payment-handler/basic-card.js
+++ b/tests/wpt/web-platform-tests/payment-handler/basic-card.js
@@ -33,29 +33,6 @@ self.addEventListener('paymentrequest', event => {
return;
}
- const supportedTypes = methodData.data.supportedTypes;
- if (!supportedTypes) {
- const msg = 'Expected supported types in payment method specific data';
- event.respondWith(Promise.reject(new Error(msg)));
- return;
- }
-
- if (supportedTypes.length !== 1) {
- const msg = `Expected one supported type, but got ${
- supportedTypes.length
- } instead`;
- event.respondWith(Promise.reject(new Error(msg)));
- return;
- }
-
- const supportedType = supportedTypes[0];
- const expectedSupportedType = 'prepaid';
- if (supportedType !== expectedSupportedType) {
- const msg = `Expected supported type "${expectedSupportedType}", but got "${supportedType}"`;
- event.respondWith(Promise.reject(new Error(msg)));
- return;
- }
-
if (methodData.displayItems) {
const msg = 'Expected no display items';
event.respondWith(Promise.reject(new Error(msg)));
diff --git a/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
index c10851eb896..7c09f5d407e 100644
--- a/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
@@ -264,14 +264,12 @@ promise_test(async t => {
promise_test(async t => {
const methodName = 'basic-card';
await registerApp(methodName);
- const cardType = 'prepaid';
const cardNetwork = 'mir';
const request = new PaymentRequest(
[
{
supportedMethods: methodName,
data: {
- supportedTypes: [cardType],
supportedNetworks: [cardNetwork],
},
},
@@ -305,14 +303,12 @@ promise_test(async t => {
promise_test(async t => {
const methodName = 'basic-card';
- const cardType = 'prepaid';
const cardNetwork = 'mir';
const registration = await registerApp(methodName);
await registration.paymentManager.instruments.set(instrumentKey, {
name: 'Test Payment Method',
method: methodName,
capabilities: {
- supportedTypes: [cardType],
supportedNetworks: [cardNetwork],
},
});
@@ -321,7 +317,6 @@ promise_test(async t => {
{
supportedMethods: methodName,
data: {
- supportedTypes: [cardType],
supportedNetworks: [cardNetwork],
},
},
@@ -355,14 +350,12 @@ promise_test(async t => {
promise_test(async t => {
const methodName = 'basic-card';
- const cardType = 'prepaid';
const cardNetwork = 'mir';
const registration = await registerApp(methodName);
await registration.paymentManager.instruments.set(instrumentKey, {
name: 'Test Payment Method',
method: methodName,
capabilities: {
- supportedTypes: [cardType],
supportedNetworks: [cardNetwork],
},
});
diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html b/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html
index 13a278758b1..d60d700b5a9 100644
--- a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html
@@ -77,7 +77,7 @@ function runTests(registration) {
},
],
method: 'basic-card',
- capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
+ capabilities: {supportedNetworks: ['mir']},
},
);
const result = await registration.paymentManager.instruments.get(
@@ -104,7 +104,7 @@ function runTests(registration) {
{src: '/images/green-16x16.png', sizes: '16x16', type: 'image/png'},
],
method: 'basic-card',
- capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
+ capabilities: {supportedNetworks: ['mir']},
},
);
let result = await registration.paymentManager.instruments.get(
@@ -120,7 +120,6 @@ function runTests(registration) {
assert_equals(result.icons[0].type, 'image/png');
assert_equals(result.method, 'basic-card');
assert_array_equals(result.capabilities.supportedNetworks, ['mir']);
- assert_array_equals(result.capabilities.supportedTypes, ['prepaid']);
await registration.paymentManager.instruments.set(
'existing-instrument-key',
{
@@ -133,7 +132,7 @@ function runTests(registration) {
},
],
method: 'basic-card',
- capabilities: {supportedNetworks: ['visa'], supportedTypes: ['credit']},
+ capabilities: {supportedNetworks: ['visa']},
},
);
result = await registration.paymentManager.instruments.get(
@@ -149,7 +148,6 @@ function runTests(registration) {
assert_equals(result.icons[0].type, 'image/png');
assert_equals(result.method, 'basic-card');
assert_array_equals(result.capabilities.supportedNetworks, ['visa']);
- assert_array_equals(result.capabilities.supportedTypes, ['credit']);
}, 'Resetting an existing instrument updates the instrument');
promise_test(async t => {
@@ -166,7 +164,7 @@ function runTests(registration) {
},
],
method: 'basic-card',
- capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
+ capabilities: {supportedNetworks: ['mir']},
},
);
await registration.paymentManager.instruments.clear();
diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-request-event.https.html b/tests/wpt/web-platform-tests/payment-handler/payment-request-event.https.html
index fb51c2eeb54..3c8deb3b92f 100644
--- a/tests/wpt/web-platform-tests/payment-handler/payment-request-event.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/payment-request-event.https.html
@@ -16,7 +16,7 @@ async function setInstrumentsAndRunTests(registration) {
{src: '/images/rgrg-256x256.png', sizes: '256x256', type: 'image/png'},
],
method: 'basic-card',
- capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
+ capabilities: {supportedNetworks: ['mir']},
});
runTests();
}
@@ -25,7 +25,7 @@ function runTests() {
promise_test(async t => {
const response = await new PaymentRequest(
[
- {supportedMethods: 'basic-card', data: {supportedTypes: ['prepaid']}},
+ {supportedMethods: 'basic-card', data: {}},
{supportedMethods: 'interledger', data: {supportedNetworks: ['mir']}},
],
{
@@ -60,7 +60,7 @@ function runTests() {
},
{
supportedMethods: 'interledger',
- data: {supportedTypes: ['prepaid']},
+ data: {},
total: {
label: 'Prepaid total',
amount: {currency: 'USD', value: '0.0097'},
diff --git a/tests/wpt/web-platform-tests/payment-method-basic-card/empty-data-manual.https.html b/tests/wpt/web-platform-tests/payment-method-basic-card/empty-data-manual.https.html
index 4b517159df4..2392553ebd3 100644
--- a/tests/wpt/web-platform-tests/payment-method-basic-card/empty-data-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-method-basic-card/empty-data-manual.https.html
@@ -77,7 +77,7 @@ function runPromiseTest(button, data, expectedCard = visaCredit, expectedAddress
The test expects the following credit card.
</p>
<ol>
- <li>Add credit card:
+ <li>Add card:
<dl>
<dt>Cardholder name:</dt>
<dd>web platform test</dd>
@@ -112,22 +112,12 @@ function runPromiseTest(button, data, expectedCard = visaCredit, expectedAddress
<ol>
<li>
<button onclick="runPromiseTest(this, {});">
- When passed BasicCardRequest without members, allow the user to input of any credit card type.
- </button>
- </li>
- <li>
- <button onclick="runPromiseTest(this, { supportedNetworks: [], supportedTypes: [] });">
- Returns any card type on any network, because zero length supportedNetworks and supportedTypes.
+ When passed BasicCardRequest without members, allow the user to input a card on any network.
</button>
</li>
<li>
<button onclick="runPromiseTest(this, { supportedNetworks: [] });">
- Returns any card type on any network, because supportedNetworks is missing and supportedTypes is empty.
- </button>
- </li>
- <li>
- <button onclick="runPromiseTest(this, { supportedTypes: [] });">
- Returns any card type on any network missing supportedTypes, and empty supportedNetwork.
+ Returns a card on any network, because zero length supportedNetworks.
</button>
</li>
</ol>
diff --git a/tests/wpt/web-platform-tests/payment-method-basic-card/historical.https.html b/tests/wpt/web-platform-tests/payment-method-basic-card/historical.https.html
new file mode 100644
index 00000000000..e24def172ad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-method-basic-card/historical.https.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Historical Basic Card Changes</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+// https://github.com/w3c/payment-method-basic-card/pull/62
+test(() => {
+ try {
+ new PaymentRequest(
+ [
+ {
+ supportedMethods: "basic-card",
+ supportedTypes: [
+ "this was an enum value once - so this would have thrown",
+ ],
+ },
+ ],
+ { total: { label: "bar", amount: { currency: "BAZ", value: "0" } } }
+ );
+ } catch (err) {
+ assert_unreached("Unexpected error");
+ }
+}, "supportedTypes and BasicCardType enum were removed from the spec");
+</script>
diff --git a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_error.https.html b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_error.https.html
index c5ab4667b0b..cb22b4368ab 100644
--- a/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_error.https.html
+++ b/tests/wpt/web-platform-tests/presentation-api/controlling-ua/PresentationRequest_error.https.html
@@ -18,7 +18,7 @@
}, 'Call PresentationRequest constructor with an empty sequence. NotSupportedError Exception expected.');
assert_throws('SyntaxError', () => {
- new PresentationRequest('http://@');
+ new PresentationRequest('https://@');
}, 'Call PresentationRequest constructor with an invalid URL. SyntaxError Exception expected.');
assert_throws('NotSupportedError', () => {
@@ -26,7 +26,7 @@
}, 'Call PresentationRequest constructor with an unsupported URL. NotSupportedError expected.');
assert_throws('SyntaxError', function() {
- new PresentationRequest(['presentation.html', 'http://@']);
+ new PresentationRequest(['presentation.html', 'https://@']);
}, 'Call PresentationRequest constructor with a sequence of URLs, one of them invalid. SyntaxError Exception expected.');
assert_throws('NotSupportedError', function() {
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
index c65d026edba..49f962a60c7 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
@@ -148,10 +148,10 @@
A.prototype = {b:"b"}
var a = new A();
assert_own_property(a, "a");
- assert_false(a.hasOwnProperty("b"), "unexpected property found: \"b\"");
+ assert_not_own_property(a, "b", "unexpected property found: \"b\"");
assert_inherits(a, "b");
}
- test(testAssertInherits, "test for assert[_not]_exists and insert_inherits")
+ test(testAssertInherits, "test for assert[_not]_own_property and insert_inherits")
test(function()
{
@@ -398,7 +398,7 @@
},
{
"status_string": "PASS",
- "name": "test for assert[_not]_exists and insert_inherits",
+ "name": "test for assert[_not]_own_property and insert_inherits",
"message": null,
"properties": {}
},
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index 9f507b67703..18a6f70beab 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -1262,6 +1262,13 @@ policies and contribution forms [3].
}
expose(assert_own_property, "assert_own_property");
+ function assert_not_own_property(object, property_name, description) {
+ assert(!object.hasOwnProperty(property_name),
+ "assert_not_own_property", description,
+ "unexpected property ${p} is found on object", {p:property_name});
+ }
+ expose(assert_not_own_property, "assert_not_own_property");
+
function _assert_inherits(name) {
return function (object, property_name, description)
{
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-mime-types.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-mime-types.https.html
new file mode 100644
index 00000000000..1679831d0f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-mime-types.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests for importScripts: MIME types</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<body>
+<script>
+/**
+ * Test that a Service Worker's importScript() only accepts valid MIME types.
+ */
+let serviceWorker = null;
+
+promise_test(async t => {
+ const scope = 'resources/import-scripts-mime-types';
+ const registration = await service_worker_unregister_and_register(t,
+ 'resources/import-scripts-mime-types-worker.js', scope);
+
+ add_completion_callback(() => { registration.unregister(); });
+
+ await wait_for_state(t, registration.installing, 'activated');
+
+ serviceWorker = registration.active;
+}, 'Global setup');
+
+promise_test(async t => {
+ await fetch_tests_from_worker(serviceWorker);
+}, 'Fetch importScripts tests from service worker')
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-mime-types-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-mime-types-worker.js
new file mode 100644
index 00000000000..2c585ac1060
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-mime-types-worker.js
@@ -0,0 +1,49 @@
+const badMimeTypes = [
+ null, // no MIME type
+ 'text/plain',
+];
+
+const validMimeTypes = [
+ 'application/ecmascript',
+ 'application/javascript',
+ 'application/x-ecmascript',
+ 'application/x-javascript',
+ 'text/ecmascript',
+ 'text/javascript',
+ 'text/javascript1.0',
+ 'text/javascript1.1',
+ 'text/javascript1.2',
+ 'text/javascript1.3',
+ 'text/javascript1.4',
+ 'text/javascript1.5',
+ 'text/jscript',
+ 'text/livescript',
+ 'text/x-ecmascript',
+ 'text/x-javascript',
+];
+
+function importScriptsWithMimeType(mimeType) {
+ importScripts(`./mime-type-worker.py${mimeType ? '?mime=' + mimeType : ''}`);
+}
+
+importScripts('/resources/testharness.js');
+
+for (const mimeType of badMimeTypes) {
+ test(() => {
+ assert_throws(
+ 'NetworkError',
+ () => { importScriptsWithMimeType(mimeType); },
+ `importScripts with ${mimeType ? 'bad' : 'no'} MIME type ${mimeType || ''} throws NetworkError`,
+ );
+ }, `Importing script with ${mimeType ? 'bad' : 'no'} MIME type ${mimeType || ''}`);
+}
+
+for (const mimeType of validMimeTypes) {
+ test(() => {
+ try {
+ importScriptsWithMimeType(mimeType);
+ } catch {
+ assert_unreached(`importScripts with MIME type ${mimeType} should not throw`);
+ }
+ }, `Importing script with valid JavaScript MIME type ${mimeType}`);
+}
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-mime-types.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-mime-types.js
index 1b8ea9be008..3e4859b8b39 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-mime-types.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-mime-types.js
@@ -21,11 +21,21 @@ function registration_tests_mime_types(register_method, check_error_types) {
'Registration of plain text script should fail.');
}, 'Registering script with bad MIME type');
+ /**
+ * ServiceWorkerContainer.register() should throw a TypeError, according to
+ * step 17.1 of https://w3c.github.io/ServiceWorker/#importscripts
+ *
+ * "[17] If an uncaught runtime script error occurs during the above step, then:
+ * [17.1] Invoke Reject Job Promise with job and TypeError"
+ *
+ * (Where the "uncaught runtime script error" is thrown by an unsuccessful
+ * importScripts())
+ */
promise_test(function(t) {
var script = 'resources/import-mime-type-worker.py';
var scope = 'resources/scope/no-mime-type-worker/';
return promise_rejects(t,
- check_error_types ? 'SecurityError' : null,
+ check_error_types ? new TypeError() : null,
register_method(script, {scope: scope}),
'Registration of no MIME type imported script should fail.');
}, 'Registering script that imports script with no MIME type');
@@ -34,7 +44,7 @@ function registration_tests_mime_types(register_method, check_error_types) {
var script = 'resources/import-mime-type-worker.py?mime=text/plain';
var scope = 'resources/scope/bad-mime-type-worker/';
return promise_rejects(t,
- check_error_types ? 'SecurityError' : null,
+ check_error_types ? new TypeError() : null,
register_method(script, {scope: scope}),
'Registration of plain text imported script should fail.');
}, 'Registering script that imports script with bad MIME type');
diff --git a/tests/wpt/web-platform-tests/signed-exchange/README.md b/tests/wpt/web-platform-tests/signed-exchange/README.md
index ebe154fb0f7..f1dbfe6d1ad 100644
--- a/tests/wpt/web-platform-tests/signed-exchange/README.md
+++ b/tests/wpt/web-platform-tests/signed-exchange/README.md
@@ -15,7 +15,7 @@ regenerate these files by running `generate-test-sxgs.sh` in the
`resource` directory before running the tests.
`generate-test-sxgs.sh` requires command-line tools in the
-[webpackage repository][https://github.com/WICG/webpackage].
+[webpackage repository](https://github.com/WICG/webpackage).
To install them, run:
```
go get -u github.com/WICG/webpackage/go/signedexchange/cmd/...
diff --git a/tests/wpt/web-platform-tests/speech-api/META.yml b/tests/wpt/web-platform-tests/speech-api/META.yml
index ac4b89b0349..4d1b42a44d2 100644
--- a/tests/wpt/web-platform-tests/speech-api/META.yml
+++ b/tests/wpt/web-platform-tests/speech-api/META.yml
@@ -1,3 +1,4 @@
spec: https://w3c.github.io/speech-api/
suggested_reviewers:
+ - foolip
- gshires
diff --git a/tests/wpt/web-platform-tests/tools/ci/before_install.sh b/tests/wpt/web-platform-tests/tools/ci/before_install.sh
index f6ef84f0026..ea53f969015 100644
--- a/tests/wpt/web-platform-tests/tools/ci/before_install.sh
+++ b/tests/wpt/web-platform-tests/tools/ci/before_install.sh
@@ -1,15 +1,13 @@
#!/bin/bash
set -e
-RELEVANT_JOBS=$(./wpt test-jobs)
-RELEVANT_CHANGES=$(echo "$RELEVANT_JOBS" | grep $JOB || true)
-if [[ -z ${RUN_JOB+x} && ! -z $RELEVANT_CHANGES ]] || [[ $RUN_JOB -eq 1 ]]; then
+if [[ $RUN_JOB -eq 1 ]] || ./wpt test-jobs --includes $JOB; then
export RUN_JOB=1
git submodule update --init --recursive 1>&2
export DISPLAY=:99.0
sh -e /etc/init.d/xvfb start 1>&2
# For uploading the manifest
export WPT_MANIFEST_FILE=$HOME/meta/MANIFEST-$(git rev-parse HEAD).json
-elif [[ -z ${RUN_JOB+x} ]]; then
+else
export RUN_JOB=0
fi
diff --git a/tests/wpt/web-platform-tests/tools/ci/ci_tools_unittest.sh b/tests/wpt/web-platform-tests/tools/ci/ci_tools_unittest.sh
index 3786fe91796..55afb9f4331 100755
--- a/tests/wpt/web-platform-tests/tools/ci/ci_tools_unittest.sh
+++ b/tests/wpt/web-platform-tests/tools/ci/ci_tools_unittest.sh
@@ -18,10 +18,7 @@ run_applicable_tox () {
export TOXENV="$OLD_TOXENV"
}
-RELEVANT_JOBS=$(./wpt test-jobs)
-
-RELEVANT_CHANGES_TOOLS=$(echo "$RELEVANT_JOBS" | grep "tools_unittest" || true)
-if [[ ! -z $RELEVANT_CHANGES_TOOLS ]]; then
+if ./wpt test-jobs --includes tools_unittest; then
pip install -U tox codecov
cd tools
run_applicable_tox
@@ -30,12 +27,10 @@ else
echo "Skipping tools unittest"
fi
-RELEVANT_CHANGES_WPTRUNNER=$(echo "$RELEVANT_JOBS" | grep "wptrunner_unittest" || true)
-if [[ ! -z $RELEVANT_CHANGES_WPTRUNNER ]]; then
+if ./wpt test-jobs --includes wptrunner_unittest; then
cd tools/wptrunner
run_applicable_tox
cd $WPT_ROOT
else
echo "Skipping wptrunner unittest"
fi
-
diff --git a/tests/wpt/web-platform-tests/tools/ci/jobs.py b/tests/wpt/web-platform-tests/tools/ci/jobs.py
index 97504dc8d9c..9abbfd27be9 100644
--- a/tests/wpt/web-platform-tests/tools/ci/jobs.py
+++ b/tests/wpt/web-platform-tests/tools/ci/jobs.py
@@ -90,6 +90,9 @@ def get_paths(**kwargs):
def get_jobs(paths, **kwargs):
+ if kwargs.get("all"):
+ return set(job_path_map.keys())
+
jobs = set()
rules = {}
@@ -121,6 +124,7 @@ def get_jobs(paths, **kwargs):
def create_parser():
parser = argparse.ArgumentParser()
parser.add_argument("revish", default=None, help="Commits to consider. Defaults to the commits on the current branch", nargs="?")
+ parser.add_argument("--all", help="List all jobs unconditionally.", action="store_true")
parser.add_argument("--includes", default=None, help="Jobs to check for. Return code is 0 if all jobs are found, otherwise 1", nargs="*")
return parser
diff --git a/tests/wpt/web-platform-tests/tools/ci/tests/test_jobs.py b/tests/wpt/web-platform-tests/tools/ci/tests/test_jobs.py
index e888ad884a1..0f9ce1f02e7 100644
--- a/tests/wpt/web-platform-tests/tools/ci/tests/test_jobs.py
+++ b/tests/wpt/web-platform-tests/tools/ci/tests/test_jobs.py
@@ -1,8 +1,29 @@
from tools.ci import jobs
+all_jobs = set([
+ "build_css",
+ "lint",
+ "manifest_upload",
+ "resources_unittest",
+ "stability",
+ "tools_unittest",
+ "update_built",
+ "wpt_integration",
+ "wptrunner_infrastructure",
+ "wptrunner_unittest",
+])
+
default_jobs = set(["lint", "manifest_upload"])
+def test_all():
+ assert jobs.get_jobs(["README.md"], all=True) == all_jobs
+
+
+def test_default():
+ assert jobs.get_jobs(["README.md"]) == default_jobs
+
+
def test_testharness():
assert jobs.get_jobs(["resources/testharness.js"]) == default_jobs | set(["resources_unittest"])
assert jobs.get_jobs(["resources/testharness.js"],
@@ -39,10 +60,6 @@ def test_stability():
includes=["stability"]) == set(["stability"])
-def test_default():
- assert jobs.get_jobs(["README.md"]) == default_jobs
-
-
def test_tools_unittest():
assert jobs.get_jobs(["tools/ci/test/test_jobs.py"],
includes=["tools_unittest"]) == set(["tools_unittest"])
@@ -83,6 +100,7 @@ def test_wpt_integration():
assert jobs.get_jobs(["tools/wptrunner/wptrunner/wptrunner.py"],
includes=["wpt_integration"]) == set(["wpt_integration"])
+
def test_wpt_infrastructure():
assert jobs.get_jobs(["tools/hammer.html"],
includes=["wptrunner_infrastructure"]) == set(["wptrunner_infrastructure"])
diff --git a/tests/wpt/web-platform-tests/tools/runner/index.html b/tests/wpt/web-platform-tests/tools/runner/index.html
index 6c9a8affed5..2d7d25297ca 100644
--- a/tests/wpt/web-platform-tests/tools/runner/index.html
+++ b/tests/wpt/web-platform-tests/tools/runner/index.html
@@ -1,26 +1,32 @@
<!DOCTYPE html>
<html lang=en>
<meta charset=UTF-8>
-<title>Web tests</title>
+<title>web-platform-tests Runner</title>
<link rel='stylesheet' href='css/bootstrap.min.css'>
<link rel='stylesheet' href='css/bootstrap-theme.min.css'>
<link rel='stylesheet' href='runner.css'>
<script src='/common/get-host-info.sub.js'></script>
<script src='runner.js'></script>
-
<header class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">
- <img src='logo.svg' width='50' height='50' alt='Logo for the WPT Runner'>
- Web Platform Tests Runner
+ <img src='/images/wpt-logo/wpt-logo-lightblue-bg.svg' width='50' height='50' style='border-radius: 50%' alt='WPT Logo'>
+ web-platform-tests Runner
</a>
</div>
</div>
</header>
<div class="container">
+ <div class="alert alert-warning">
+ This runner does not fully support all test types and has a number of
+ <a href="https://github.com/web-platform-tests/wpt/labels/runner">known issues</a>.
+ <code>./wpt run</code> is a more well-supported runner, see the documentation on
+ <a href="https://web-platform-tests.org/running-tests/">running tests</a>.
+ </div>
+
<div id="testControl" class="panel panel-default">
<div class="panel-body">
<form id='options' class='horizontal-form' onsubmit='return false;'>
diff --git a/tests/wpt/web-platform-tests/tools/runner/logo.svg b/tests/wpt/web-platform-tests/tools/runner/logo.svg
deleted file mode 100644
index 8a25776b6f4..00000000000
--- a/tests/wpt/web-platform-tests/tools/runner/logo.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="453px" height="453px" viewBox="0 0 453 453" xmlns="http://www.w3.org/2000/svg">
- <circle stroke="#ed5565" stroke-width="20" fill="#fff" cx="226.5" cy="226.5" r="213.5"></circle>
- <g transform="translate(160 250)">
- <g transform="matrix(2.25 0 0 -2.25 0 0)">
- <path d="m0 0c0.252-0.333 0.508-0.659 0.766-0.974-1.269-3.764-2.368-7.749-3.447-11.383-0.166-0.053-0.329-0.116-0.486-0.194-8.572 8.211-2.056 11.364 3.167 12.551m59.809 45.57c2.899 20.118-10.084 38.635-29 41.362-18.915 2.726-36.601-11.371-39.5-31.489-2.418-16.774 6.212-32.427 20.112-38.75l-0.05 0.014-0.323-2.242c0.219-0.049 0.427-0.09 0.64-0.134-0.122-0.027-0.245-0.053-0.365-0.086l-0.004 0.013s-0.042-0.017-0.106-0.042c-0.465-0.137-0.915-0.319-1.349-0.544-3.502-1.424-12.285-5.095-14.287-6.867 0 0 0.927-1.665 2.254-3.704-17.335-2.421-6.522-15.63-3.176-19.26-0.015-0.296 0.004-0.592 0.039-0.888-2.562-1.677-5.772-4.195-7.772-7.29 0 0 0.552-0.182 1.458-0.536v-0.001l0.016-0.005c1.182-0.463 2.96-1.219 4.914-2.248-3.004-13.557-7.542-9.677-10.589-4.683 0.745 2.232 0.741 4.23-0.202 5.393-0.66 0.811-1.681 1.101-2.889 0.931-0.087 0.222-0.135 0.349-0.135 0.349l-0.108-0.397c-0.057-0.01-0.115-0.021-0.173-0.034 0.005 0.003 0.008 0.005 0.013 0.008 0 0-0.032-0.008-0.078-0.021-0.508-0.116-1.042-0.306-1.593-0.566-2.759-1.158-8.023-4.248-8.639-11.088-0.208-1.056-0.212-2.015 0.002-2.812 0.001-0.014 0.001-0.026 0.003-0.04 0 0 0.527-4.561 4.288-1.894l-0.002 0.003c1.861 0.536 4.034 2.003 5.989 4.226 0.664 0.755 1.256 1.545 1.768 2.343 8.537-16.768 14.974 3.409 15.81 6.23 2.309-1.538 4.528-3.425 6.019-5.64 0 0 1.182 3.458 3.942 6.312 5.984-8.956 13.374-10.465 13.374-10.465l3.802 6.152c11.328-5.569 7.382-10.385 2.713-13.253-1.757 1.198-3.428 1.485-4.537 0.55-0.775-0.653-1.166-1.807-1.2-3.246-0.199-0.069-0.312-0.106-0.312-0.106l0.316-0.185c0.001-0.069 0.002-0.139 0.004-0.21-0.002 0.006-0.004 0.012-0.006 0.019 0 0 0.003-0.044 0.007-0.112 0.024-0.604 0.104-1.247 0.239-1.92 0.564-3.395 2.378-10.019 8.013-11.741 0.851-0.396 1.652-0.542 2.349-0.407 0.012 0 0.023-0.003 0.035-0.003 0 0 3.891-0.048 2.21 4.745l-0.004-0.004c-0.176 2.258-1.086 5.015-2.659 7.628-0.535 0.888-1.109 1.695-1.701 2.413 16.374 8.095-3.15 19.567-3.156 19.57l2.062 3.336-4.584 1.028c-0.516 0.116-1.446 0.458-2.639 0.949 0.61-0.116 1.218-0.225 1.821-0.322 0.221 0.615 0.432 1.249 0.631 1.918 1.715 5.766 2.34 12.577 1.803 18.76l1.544-3.601s0.655 0.404 1.612 0.827l-0.088-0.167c3.832-26.906 14.631-10.666 17.407-5.924 1.445 0.125 2.819 1.27 3.448 3.074 0.864 2.475 0.002 5.242-1.926 6.183-1.927 0.942-4.188-0.301-5.05-2.774-0.533-1.524-0.406-3.158 0.218-4.41-6.67-13.044-10.36-1.016-11.647 4.81 0.669 0.143 1.355 0.21 1.998 0.135 0 0-4.185 11.234-11.743 15.618-0.097 0.136-0.192 0.275-0.291 0.405-0.056-0.017-0.116-0.029-0.174-0.044l0.345 2.832c0.567 0.046 0.871 0.099 0.871 0.099l0.021 0.146-0.65 0.181c18.572-2.158 35.744 11.797 38.597 31.593" fill="#ed5565"/>
- </g>
- </g>
-</svg>
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
index 3f86182b7d0..497cad35739 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
index 2673b93ea9a..8ba53dafaa5 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
@@ -1,3 +1,3 @@
mozprocess == 0.26
-selenium==3.14.1
+selenium==3.141.0
requests==2.20.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
index 928f8664a23..0e788c5b287 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py
@@ -266,7 +266,7 @@ class SeleniumRun(object):
if message:
message += "\n"
message += traceback.format_exc(e)
- self.result = False, ("INTERNAL-ERROR", e)
+ self.result = False, ("INTERNAL-ERROR", message)
finally:
self.result_flag.set()
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
index d0c1106b0f9..14f6cb9068d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
@@ -281,9 +281,9 @@ def run_tests(config, test_paths, product, **kwargs):
test_total += test_count
unexpected_total += unexpected_count
logger.info("Got %i unexpected results" % unexpected_count)
+ logger.suite_end()
if repeat_until_unexpected and unexpected_total > 0:
break
- logger.suite_end()
if test_total == 0:
if skipped_tests > 0:
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_element/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/find_element/user_prompts.py
new file mode 100644
index 00000000000..613466b62b5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/find_element/user_prompts.py
@@ -0,0 +1,121 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import (
+ assert_error,
+ assert_same_element,
+ assert_success,
+ assert_dialog_handled,
+)
+from tests.support.inline import inline
+
+
+def find_element(session, using, value):
+ return session.transport.send(
+ "POST", "session/{session_id}/element".format(**vars(session)),
+ {"using": using, "value": value})
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<p>bar</p>")
+ element = session.find.css("p", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, "css selector", "p")
+ value = assert_success(response)
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ assert_same_element(session, value, element)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<p>bar</p>")
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<p>bar</p>")
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/user_prompts.py
new file mode 100644
index 00000000000..3fdaf4e47ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/find_element_from_element/user_prompts.py
@@ -0,0 +1,126 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import (
+ assert_error,
+ assert_same_element,
+ assert_success,
+ assert_dialog_handled,
+)
+from tests.support.inline import inline
+
+
+def find_element(session, element_id, using, value):
+ return session.transport.send(
+ "POST", "session/{session_id}/element/{element_id}/element".format(
+ session_id=session.session_id,
+ element_id=element_id),
+ {"using": using, "value": value})
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+ inner_element = session.find.css("p", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, outer_element.id, "css selector", "p")
+ value = assert_success(response)
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ assert_same_element(session, value, inner_element)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, outer_element.id, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_element(session, outer_element.id, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_elements/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/find_elements/user_prompts.py
new file mode 100644
index 00000000000..01eb8ff3c86
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/find_elements/user_prompts.py
@@ -0,0 +1,123 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import (
+ assert_error,
+ assert_same_element,
+ assert_success,
+ assert_dialog_handled,
+)
+from tests.support.inline import inline
+
+
+def find_elements(session, using, value):
+ return session.transport.send(
+ "POST", "session/{session_id}/elements".format(**vars(session)),
+ {"using": using, "value": value})
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<p>bar</p>")
+ element = session.find.css("p", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, "css selector", "p")
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ assert_same_element(session, value[0], element)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<p>bar</p>")
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<p>bar</p>")
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/find_elements_from_element/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/find_elements_from_element/user_prompts.py
new file mode 100644
index 00000000000..ca7bc7735d0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/find_elements_from_element/user_prompts.py
@@ -0,0 +1,128 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import (
+ assert_error,
+ assert_same_element,
+ assert_success,
+ assert_dialog_handled,
+)
+from tests.support.inline import inline
+
+
+def find_elements(session, element_id, using, value):
+ return session.transport.send(
+ "POST", "session/{session_id}/element/{element_id}/elements".format(
+ session_id=session.session_id,
+ element_id=element_id),
+ {"using": using, "value": value})
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+ inner_element = session.find.css("p", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, outer_element.id, "css selector", "p")
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ assert_same_element(session, value[0], inner_element)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, outer_element.id, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<div><p>bar</p><div>")
+ outer_element = session.find.css("div", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = find_elements(session, outer_element.id, "css selector", "p")
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/fullscreen.py b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/fullscreen.py
index 5391114c676..3194426e1ae 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/fullscreen.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/fullscreen.py
@@ -1,4 +1,5 @@
from tests.support.asserts import assert_error, assert_success
+from tests.support.helpers import is_fullscreen
def fullscreen(session):
@@ -6,17 +7,6 @@ def fullscreen(session):
"POST", "session/{session_id}/window/fullscreen".format(**vars(session)))
-def is_fullscreen(session):
- # At the time of writing, WebKit does not conform to the
- # Fullscreen API specification.
- #
- # Remove the prefixed fallback when
- # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
- return session.execute_script("""
- return !!(window.fullScreen || document.webkitIsFullScreen)
- """)
-
-
def test_no_browsing_context(session, closed_window):
response = fullscreen(session)
assert_error(response, "no such window")
@@ -26,7 +16,7 @@ def test_fullscreen(session):
response = fullscreen(session)
assert_success(response)
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
def test_payload(session):
@@ -47,12 +37,12 @@ def test_payload(session):
def test_fullscreen_twice_is_idempotent(session):
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
first_response = fullscreen(session)
assert_success(first_response)
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
second_response = fullscreen(session)
assert_success(second_response)
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/user_prompts.py
index 04b8bc5337d..106bc457f0c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/user_prompts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/user_prompts.py
@@ -3,6 +3,7 @@
import pytest
from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
+from tests.support.helpers import is_fullscreen
def fullscreen(session):
@@ -10,21 +11,10 @@ def fullscreen(session):
"POST", "session/{session_id}/window/fullscreen".format(**vars(session)))
-def is_fullscreen(session):
- # At the time of writing, WebKit does not conform to the
- # Fullscreen API specification.
- #
- # Remove the prefixed fallback when
- # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
- return session.execute_script("""
- return !!(window.fullScreen || document.webkitIsFullScreen)
- """)
-
-
@pytest.fixture
def check_user_prompt_closed_without_exception(session, create_dialog):
def check_user_prompt_closed_without_exception(dialog_type, retval):
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
create_dialog(dialog_type, text=dialog_type)
@@ -32,8 +22,7 @@ def check_user_prompt_closed_without_exception(session, create_dialog):
assert_success(response)
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
-
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
return check_user_prompt_closed_without_exception
@@ -41,7 +30,7 @@ def check_user_prompt_closed_without_exception(session, create_dialog):
@pytest.fixture
def check_user_prompt_closed_with_exception(session, create_dialog):
def check_user_prompt_closed_with_exception(dialog_type, retval):
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
create_dialog(dialog_type, text=dialog_type)
@@ -49,8 +38,7 @@ def check_user_prompt_closed_with_exception(session, create_dialog):
assert_error(response, "unexpected alert open")
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
-
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
return check_user_prompt_closed_with_exception
@@ -58,7 +46,7 @@ def check_user_prompt_closed_with_exception(session, create_dialog):
@pytest.fixture
def check_user_prompt_not_closed_but_exception(session, create_dialog):
def check_user_prompt_not_closed_but_exception(dialog_type):
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
create_dialog(dialog_type, text=dialog_type)
@@ -68,7 +56,7 @@ def check_user_prompt_not_closed_but_exception(session, create_dialog):
assert session.alert.text == dialog_type
session.alert.dismiss()
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
return check_user_prompt_not_closed_but_exception
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/maximize.py b/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/maximize.py
index 77af0b99169..b3ed7a680a9 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/maximize.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/maximize.py
@@ -1,4 +1,5 @@
from tests.support.asserts import assert_error, assert_success
+from tests.support.helpers import document_hidden, is_fullscreen
def maximize(session):
@@ -6,17 +7,6 @@ def maximize(session):
"POST", "session/{session_id}/window/maximize".format(**vars(session)))
-def is_fullscreen(session):
- # At the time of writing, WebKit does not conform to the
- # Fullscreen API specification.
- #
- # Remove the prefixed fallback when
- # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
- return session.execute_script("""
- return !!(window.fullScreen || document.webkitIsFullScreen)
- """)
-
-
def test_no_browsing_context(session, closed_window):
response = maximize(session)
assert_error(response, "no such window")
@@ -24,16 +14,16 @@ def test_no_browsing_context(session, closed_window):
def test_fully_exit_fullscreen(session):
session.window.fullscreen()
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
response = maximize(session)
assert_success(response)
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
def test_restore_the_window(session):
session.window.minimize()
- assert session.execute_script("return document.hidden") is True
+ assert document_hidden(session)
response = maximize(session)
assert_success(response)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/minimize.py b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/minimize.py
index be161a62e20..279511caf0a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/minimize.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/minimize.py
@@ -1,4 +1,7 @@
+# META: timeout=long
+
from tests.support.asserts import assert_error, assert_success
+from tests.support.helpers import document_hidden, is_fullscreen
def minimize(session):
@@ -6,21 +9,6 @@ def minimize(session):
"POST", "session/{session_id}/window/minimize".format(**vars(session)))
-def is_fullscreen(session):
- # At the time of writing, WebKit does not conform to the
- # Fullscreen API specification.
- #
- # Remove the prefixed fallback when
- # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
- return session.execute_script("""
- return !!(window.fullScreen || document.webkitIsFullScreen)
- """)
-
-
-def is_minimized(session):
- return session.execute_script("return document.hidden")
-
-
def test_no_browsing_context(session, closed_window):
response = minimize(session)
assert_error(response, "no such window")
@@ -33,19 +21,19 @@ def test_fully_exit_fullscreen(session):
response = minimize(session)
assert_success(response)
assert not is_fullscreen(session)
- assert is_minimized(session)
+ assert document_hidden(session)
def test_minimize(session):
- assert not is_minimized(session)
+ assert not document_hidden(session)
response = minimize(session)
assert_success(response)
- assert is_minimized(session)
+ assert document_hidden(session)
def test_payload(session):
- assert not is_minimized(session)
+ assert not document_hidden(session)
response = minimize(session)
value = assert_success(response)
@@ -61,16 +49,16 @@ def test_payload(session):
assert isinstance(value["x"], int)
assert isinstance(value["y"], int)
- assert is_minimized(session)
+ assert document_hidden(session)
def test_minimize_twice_is_idempotent(session):
- assert not is_minimized(session)
+ assert not document_hidden(session)
first_response = minimize(session)
assert_success(first_response)
- assert is_minimized(session)
+ assert document_hidden(session)
second_response = minimize(session)
assert_success(second_response)
- assert is_minimized(session)
+ assert document_hidden(session)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/user_prompts.py
index 1551e3af626..19059b3c395 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/user_prompts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/user_prompts.py
@@ -3,6 +3,7 @@
import pytest
from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
+from tests.support.helpers import document_hidden
def minimize(session):
@@ -10,23 +11,17 @@ def minimize(session):
"POST", "session/{session_id}/window/minimize".format(**vars(session)))
-def is_minimized(session):
- return session.execute_script("return document.hidden")
-
-
@pytest.fixture
def check_user_prompt_closed_without_exception(session, create_dialog):
def check_user_prompt_closed_without_exception(dialog_type, retval):
- assert not is_minimized(session)
-
+ assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)
response = minimize(session)
assert_success(response)
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
-
- assert is_minimized(session)
+ assert document_hidden(session)
return check_user_prompt_closed_without_exception
@@ -34,16 +29,14 @@ def check_user_prompt_closed_without_exception(session, create_dialog):
@pytest.fixture
def check_user_prompt_closed_with_exception(session, create_dialog):
def check_user_prompt_closed_with_exception(dialog_type, retval):
- assert not is_minimized(session)
-
+ assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)
response = minimize(session)
assert_error(response, "unexpected alert open")
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
-
- assert not is_minimized(session)
+ assert not document_hidden(session)
return check_user_prompt_closed_with_exception
@@ -51,8 +44,7 @@ def check_user_prompt_closed_with_exception(session, create_dialog):
@pytest.fixture
def check_user_prompt_not_closed_but_exception(session, create_dialog):
def check_user_prompt_not_closed_but_exception(dialog_type):
- assert not is_minimized(session)
-
+ assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)
response = minimize(session)
@@ -61,7 +53,7 @@ def check_user_prompt_not_closed_but_exception(session, create_dialog):
assert session.alert.text == dialog_type
session.alert.dismiss()
- assert not is_minimized(session)
+ assert not document_hidden(session)
return check_user_prompt_not_closed_but_exception
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
index 928fd622efc..c6eae2886e9 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py
@@ -5,6 +5,7 @@ import pytest
from webdriver.transport import Response
from tests.support.asserts import assert_error, assert_success
+from tests.support.helpers import document_hidden, is_fullscreen
def set_window_rect(session, rect):
@@ -13,17 +14,6 @@ def set_window_rect(session, rect):
rect)
-def is_fullscreen(session):
- # At the time of writing, WebKit does not conform to the
- # Fullscreen API specification.
- #
- # Remove the prefixed fallback when
- # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
- return session.execute_script("""
- return !!(window.fullScreen || document.webkitIsFullScreen)
- """)
-
-
def test_null_parameter_value(session, http):
path = "/session/{session_id}/window/rect".format(**vars(session))
with http.post(path, None) as response:
@@ -142,26 +132,26 @@ def test_no_change(session, rect):
def test_fully_exit_fullscreen(session):
session.window.fullscreen()
- assert is_fullscreen(session) is True
+ assert is_fullscreen(session)
response = set_window_rect(session, {"width": 400, "height": 400})
value = assert_success(response)
assert value["width"] == 400
assert value["height"] == 400
- assert is_fullscreen(session) is False
+ assert not is_fullscreen(session)
def test_restore_from_minimized(session):
session.window.minimize()
- assert session.execute_script("return document.hidden") is True
+ assert document_hidden(session)
response = set_window_rect(session, {"width": 450, "height": 450})
value = assert_success(response)
assert value["width"] == 450
assert value["height"] == 450
- assert session.execute_script("return document.hidden") is False
+ assert not document_hidden(session)
def test_restore_from_maximized(session):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
index 5dd7a323d8c..dd733809fd5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py
@@ -5,6 +5,8 @@ import sys
import webdriver
from tests.support import defaults
+from tests.support.sync import Poll
+
def ignore_exceptions(f):
def inner(*args, **kwargs):
@@ -119,6 +121,24 @@ def is_element_in_viewport(session, element):
""", args=(element,))
+def document_hidden(session):
+ """Polls for the document to become hidden."""
+ def hidden(session):
+ return session.execute_script("return document.hidden")
+ return Poll(session, timeout=3, raises=None).until(hidden)
+
+
+def is_fullscreen(session):
+ # At the time of writing, WebKit does not conform to the
+ # Fullscreen API specification.
+ #
+ # Remove the prefixed fallback when
+ # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
+ return session.execute_script("""
+ return !!(window.fullScreen || document.webkitIsFullScreen)
+ """)
+
+
def document_dimensions(session):
return tuple(session.execute_script("""
let {devicePixelRatio} = window;
diff --git a/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm b/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm
index e5747331a8c..72e27a5947c 100644
--- a/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm
+++ b/tests/wpt/web-platform-tests/xhr/getallresponseheaders.htm
@@ -7,37 +7,29 @@
async_test((t) => {
const client = new XMLHttpRequest()
client.onload = t.step_func_done(() => {
- assert_equals(client.getAllResponseHeaders(), "foo-test: 1, 2, 3\r\n")
- })
- client.onerror = t.unreached_func("unexpected error")
- client.open("GET", "resources/headers-basic.asis")
- client.send(null)
-})
-
-async_test((t) => {
- const client = new XMLHttpRequest()
- client.onload = t.step_func_done(() => {
assert_equals(client.getAllResponseHeaders(), "also-here: Mr. PB\r\newok: lego\r\nfoo-test: 1, 2\r\n")
})
client.onerror = t.unreached_func("unexpected error")
client.open("GET", "resources/headers.asis")
client.send(null)
-})
-
-test(() => {
- const client = new XMLHttpRequest
- client.open("GET", "resources/header-content-length.asis", false)
- client.send()
- assert_equals(client.getAllResponseHeaders(), "content-length: 0\r\n")
-})
+});
-async_test(t => {
- const client = new XMLHttpRequest();
- client.onload = t.step_func_done(() => {
- assert_equals(client.getAllResponseHeaders(), "www-authenticate: 1, 2, 3, 4\r\n");
+[
+ ["content-length", "0", "header-content-length"],
+ ["content-length", "0, 0", "header-content-length-twice"],
+ ["double-trouble", ", ", "headers-double-empty"],
+ ["foo-test", "1, 2, 3", "headers-basic"],
+ ["heya", ", \u000B\u000C, 1, , , 2", "headers-some-are-empty"],
+ ["www-authenticate", "1, 2, 3, 4", "headers-www-authenticate"],
+].forEach(testValues => {
+ async_test(t => {
+ const client = new XMLHttpRequest();
+ client.onload = t.step_func_done(() => {
+ assert_equals(client.getAllResponseHeaders(), testValues[0] + ": " + testValues[1] + "\r\n");
+ });
+ client.onerror = t.unreached_func("unexpected error");
+ client.open("GET", "resources/" + testValues[2] + ".asis");
+ client.send();
});
- client.onerror = t.unreached_func("unexpected error");
- client.open("GET", "resources/headers-www-authenticate.asis");
- client.send();
});
</script>
diff --git a/tests/wpt/web-platform-tests/xhr/getresponseheader.any.js b/tests/wpt/web-platform-tests/xhr/getresponseheader.any.js
index 4ff791aeb16..6eeccd03f62 100644
--- a/tests/wpt/web-platform-tests/xhr/getresponseheader.any.js
+++ b/tests/wpt/web-platform-tests/xhr/getresponseheader.any.js
@@ -1,19 +1,18 @@
-async_test(t => {
- const client = new XMLHttpRequest();
- client.onload = t.step_func_done(() => {
- assert_equals(client.getResponseHeader("foo-test"), "1, 2, 3");
- });
- client.onerror = t.unreached_func("unexpected error");
- client.open("GET", "resources/headers-basic.asis");
- client.send();
-}, "getResponseHeader('foo-test')");
-
-async_test(t => {
- const client = new XMLHttpRequest();
- client.onload = t.step_func_done(() => {
- assert_equals(client.getResponseHeader("www-authenticate"), "1, 2, 3, 4");
- });
- client.onerror = t.unreached_func("unexpected error");
- client.open("GET", "resources/headers-www-authenticate.asis");
- client.send();
-}, "getResponseHeader('www-authenticate')");
+[
+ ["content-length", "0", "header-content-length"],
+ ["content-length", "0, 0", "header-content-length-twice"],
+ ["double-trouble", ", ", "headers-double-empty"],
+ ["foo-test", "1, 2, 3", "headers-basic"],
+ ["heya", ", \u000B\u000C, 1, , , 2", "headers-some-are-empty"],
+ ["www-authenticate", "1, 2, 3, 4", "headers-www-authenticate"],
+].forEach(testValues => {
+ async_test(t => {
+ const client = new XMLHttpRequest();
+ client.onload = t.step_func_done(() => {
+ assert_equals(client.getResponseHeader(testValues[0]), testValues[1]);
+ });
+ client.onerror = t.unreached_func("unexpected error");
+ client.open("GET", "resources/" + testValues[2] + ".asis");
+ client.send();
+ }, "getResponseHeader('" + testValues[0] + "') expects " + testValues[1]);
+});
diff --git a/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.any.js b/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.any.js
new file mode 100644
index 00000000000..b3125b014be
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.any.js
@@ -0,0 +1,12 @@
+async_test(t => {
+ const client = new XMLHttpRequest();
+ client.overrideMimeType('text/plain;charset=Shift-JIS');
+ client.onreadystatechange = t.step_func(() => {
+ if (client.readyState === 4) {
+ assert_equals( client.responseText, 'テスト' );
+ t.done();
+ }
+ });
+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=iso-8859-1')+'&content=%83%65%83%58%83%67');
+ client.send( '' );
+}, "XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding");
diff --git a/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm b/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm
deleted file mode 100644
index 98dfe1436d9..00000000000
--- a/tests/wpt/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding</title>
- <meta charset="utf-8">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" />
- </head>
- <body>
- <div id="log"></div>
- <script>
- var test = async_test();
- test.step(function() {
- var client = new XMLHttpRequest();
- client.overrideMimeType('text/plain;charset=Shift-JIS');
- client.onreadystatechange = function() {
- if (client.readyState !== 4) return;
- assert_equals( client.responseText, 'テスト' );
- test.done();
- };
- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=iso-8859-1')+'&content=%83%65%83%58%83%67');
- client.send( '' );
- });
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/xhr/resources/header-content-length-twice.asis b/tests/wpt/web-platform-tests/xhr/resources/header-content-length-twice.asis
new file mode 100755
index 00000000000..e3196984c06
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/resources/header-content-length-twice.asis
@@ -0,0 +1,3 @@
+HTTP/1.0 200 NANANA
+CONTENT-LENGTH: 0
+content-length: 0
diff --git a/tests/wpt/web-platform-tests/xhr/resources/headers-double-empty.asis b/tests/wpt/web-platform-tests/xhr/resources/headers-double-empty.asis
new file mode 100644
index 00000000000..14304b2b434
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/resources/headers-double-empty.asis
@@ -0,0 +1,3 @@
+HTTP/1.1 444 HI
+double-trouble:
+double-trouble:
diff --git a/tests/wpt/web-platform-tests/xhr/resources/headers-some-are-empty.asis b/tests/wpt/web-platform-tests/xhr/resources/headers-some-are-empty.asis
new file mode 100644
index 00000000000..1783e1a11b4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/resources/headers-some-are-empty.asis
@@ -0,0 +1,7 @@
+HTTP/1.0 200 MEH
+HEYA:
+HEYA:
+HEYA: 1
+HEYA:
+HEYA:
+HEYA: 2
diff --git a/tests/wpt/web-platform-tests/xhr/setrequestheader-combining.window.js b/tests/wpt/web-platform-tests/xhr/setrequestheader-combining.window.js
new file mode 100644
index 00000000000..fc847eb79a8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/xhr/setrequestheader-combining.window.js
@@ -0,0 +1,12 @@
+test(() => {
+ const client = new XMLHttpRequest();
+ client.open("POST", "resources/inspect-headers.py?filter_name=test-me", false);
+ client.setRequestHeader("test-me", "");
+ client.setRequestHeader("test-me", "");
+ client.setRequestHeader("test-me", " ");
+ client.setRequestHeader("test-me", "\t");
+ client.setRequestHeader("test-me", "x\tx");
+ client.setRequestHeader("test-me", "");
+ client.send();
+ assert_equals(client.responseText, "test-me: , , , , x\tx, \n");
+}, "setRequestHeader() combining header values");