aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-03-28 21:12:37 -0400
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-03-28 22:44:05 -0400
commit0a3e19aac871a90d58ea45a25406683f09520f89 (patch)
treececa05aa80205bea21818b32e0db76430e0844af
parentc8b0dc965d02754622c766017c2fec4145a2f15e (diff)
downloadservo-0a3e19aac871a90d58ea45a25406683f09520f89.tar.gz
servo-0a3e19aac871a90d58ea45a25406683f09520f89.zip
Update web-platform-tests to revision 592e2ed83ecd717392d37047536250ba74f1bafa
-rw-r--r--tests/wpt/metadata/MANIFEST.json428
-rw-r--r--tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini2
-rw-r--r--tests/wpt/metadata/dom/events/relatedTarget.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini19
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini5
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini5
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html37
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html36
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js9
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js6
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html3
-rw-r--r--tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js85
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html6
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html6
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html7
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js187
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html34
-rw-r--r--tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html1
-rw-r--r--tests/wpt/web-platform-tests/payment-request/OWNERS1
-rw-r--r--tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html2
-rw-r--r--tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html2
-rw-r--r--tests/wpt/web-platform-tests/resources/idlharness.js83
-rw-r--r--tests/wpt/web-platform-tests/resources/test/conftest.py3
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html45
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html21
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js7
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html24
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html15
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html15
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/reference/empty.html1
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py10
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py36
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py39
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py55
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py50
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py11
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py9
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py9
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html95
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html43
65 files changed, 1906 insertions, 106 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index b120cdca546..3e6095c3c82 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -117737,6 +117737,162 @@
{}
]
],
+ "css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-fixed.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-grid.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-grid.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-percentage.https.html": [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html",
+ [
+ [
+ "/css/css-layout-api/constraints-fixed-inline-size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-layout-api/fallback-constructor-error.https.html": [
[
"/css/css-layout-api/fallback-constructor-error.https.html",
@@ -181317,6 +181473,30 @@
{}
]
],
+ "shadow-dom/layout-slot-no-longer-assigned.html": [
+ [
+ "/shadow-dom/layout-slot-no-longer-assigned.html",
+ [
+ [
+ "/shadow-dom/reference/empty.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "shadow-dom/layout-slot-no-longer-fallback.html": [
+ [
+ "/shadow-dom/layout-slot-no-longer-fallback.html",
+ [
+ [
+ "/shadow-dom/reference/empty.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html": [
[
"/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html",
@@ -248328,6 +248508,11 @@
{}
]
],
+ "css/css-layout-api/constraints-fixed-inline-size-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-layout-api/fallback-ref.html": [
[
{}
@@ -248353,6 +248538,11 @@
{}
]
],
+ "css/css-layout-api/support/constraints-fixed-inline-size.js": [
+ [
+ {}
+ ]
+ ],
"css/css-layout-api/support/layout-child-fixed-sizes-worklet.js": [
[
{}
@@ -281293,6 +281483,11 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js": [
+ [
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
[
{}
@@ -293143,6 +293338,11 @@
{}
]
],
+ "shadow-dom/reference/empty.html": [
+ [
+ {}
+ ]
+ ],
"shadow-dom/resources/Document-prototype-currentScript-helper.js": [
[
{}
@@ -317557,6 +317757,12 @@
{}
]
],
+ "css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html",
+ {}
+ ]
+ ],
"css/css-typed-om/the-stylepropertymap/properties/clear.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/clear.html",
@@ -317587,6 +317793,12 @@
{}
]
],
+ "css/css-typed-om/the-stylepropertymap/properties/coordinate.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/coordinate.html",
+ {}
+ ]
+ ],
"css/css-typed-om/the-stylepropertymap/properties/direction.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/direction.html",
@@ -317965,12 +318177,42 @@
{}
]
],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html",
+ {}
+ ]
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html",
+ {}
+ ]
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html",
+ {}
+ ]
+ ],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html",
{}
]
],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html",
+ {}
+ ]
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration.html": [
+ [
+ "/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html",
+ {}
+ ]
+ ],
"css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html",
@@ -320839,6 +321081,12 @@
{}
]
],
+ "dom/events/relatedTarget.window.js": [
+ [
+ "/dom/events/relatedTarget.window.html",
+ {}
+ ]
+ ],
"dom/historical.html": [
[
"/dom/historical.html",
@@ -330139,6 +330387,18 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/link-load-error-events.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-load-error-events.html",
+ {}
+ ]
+ ],
+ "html/semantics/document-metadata/the-link-element/link-load-error-events.https.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html",
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/link-load-event.html": [
[
"/html/semantics/document-metadata/the-link-element/link-load-event.html",
@@ -338217,6 +338477,12 @@
{}
]
],
+ "html/webappapis/scripting/events/event-handler-attributes-window-body.html": [
+ [
+ "/html/webappapis/scripting/events/event-handler-attributes-window-body.html",
+ {}
+ ]
+ ],
"html/webappapis/scripting/events/event-handler-javascript.html": [
[
"/html/webappapis/scripting/events/event-handler-javascript.html",
@@ -502710,6 +502976,62 @@
"a999a2a7ad8981879cdc984bf602939a23a60ea6",
"testharness"
],
+ "css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html": [
+ "15f8dde88dd066b5525a6b8990206ac567f48b2a",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html": [
+ "9cb3a2b8671ef4f9926a39431d193875a5a1738a",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html": [
+ "b38fb83238cba9bef74121b1f2a07a1667e4ea63",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html": [
+ "50b56739750402d286da5a3c6cdbbc0335a60bd4",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html": [
+ "929bc22562cd2b1a3635b082c4176215d8668857",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html": [
+ "8d0459a147ed62a8c2dc6941bfb38335fa9ad4e5",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html": [
+ "888a34c8a1e40c7687a5500efce2496bb5e1b2b6",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-fixed.https.html": [
+ "d98fc7d2cdecc5f11a6853a3280aaf106a8de4e2",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html": [
+ "924c0581767d514b24b530ab012233d61d96055a",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html": [
+ "3f0077ceb95fcfa870c6c6625efbee3c8fa1e2b6",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-grid.https.html": [
+ "ec0ea758406f3bbc73d5d8b8ee2138a3fd941163",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html": [
+ "e1e299e101a6f501f2a27b867db36ab8afdc73d1",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-percentage.https.html": [
+ "c11a34aeba8f8743723b8859bb9c6fca886cda23",
+ "reftest"
+ ],
+ "css/css-layout-api/constraints-fixed-inline-size-ref.html": [
+ "1d7de325448b3132ec04b8788665829ff5d1fb02",
+ "support"
+ ],
"css/css-layout-api/fallback-constructor-error.https.html": [
"fdb9954e12f4628c114499a5e69f257b60377617",
"reftest"
@@ -502834,6 +503156,10 @@
"361b3c82c37c0068d23ae23e96d8e9185d3765b0",
"reftest"
],
+ "css/css-layout-api/support/constraints-fixed-inline-size.js": [
+ "ed0224a380c50a7e83d23a95be5a4348ce5bf706",
+ "support"
+ ],
"css/css-layout-api/support/layout-child-fixed-sizes-worklet.js": [
"5ddda72e3c9d077508622511e8685249c7803028",
"support"
@@ -523063,7 +523389,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/animation-direction.html": [
- "05e0be2c67fd695d693f2a639acf88ff78d8fd04",
+ "6c988281b4773fa25ef0d811ff6e0cd37a1e0fae",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/backface-visibility.html": [
@@ -523075,7 +523401,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/background-image.html": [
- "1255fea8e74561e14720ccf422fd841e1d3e32fa",
+ "08055b88eca1f841f3b8a9867d8ffeb93d214d1f",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/background.html": [
@@ -523126,6 +523452,10 @@
"d4139aeff755abe89ee1e04fcd34ccfba4efe91c",
"testharness"
],
+ "css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html": [
+ "3f7e38c8f71e7da0fb17e714f37821922bd3d720",
+ "testharness"
+ ],
"css/css-typed-om/the-stylepropertymap/properties/clear.html": [
"376585635ab5752db4b2078f6247fa621a954282",
"testharness"
@@ -523146,6 +523476,10 @@
"3f6faf5b2371d8be9483148f3bfa562710c9c3ef",
"testharness"
],
+ "css/css-typed-om/the-stylepropertymap/properties/coordinate.html": [
+ "f03d1956798b3bbf5d4ed421cea55b274b7fecc7",
+ "testharness"
+ ],
"css/css-typed-om/the-stylepropertymap/properties/direction.html": [
"b7c49aba4e8785f819beeb444c113d937d441089",
"testharness"
@@ -523291,7 +523625,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/mask-image.html": [
- "2a20c6818e9d71adbf3902fde74cb26136917e72",
+ "8400ca1a6caf399c5914df06028d6616fb9f9571",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/mix-blend-mode.html": [
@@ -523371,7 +523705,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
- "7e6c530cf36cce5d7b8d02abbbefbdd4370d1be1",
+ "ca6f58ecbab01ee294f4388b456b3b1bdd7a4629",
"support"
],
"css/css-typed-om/the-stylepropertymap/properties/right.html": [
@@ -523402,10 +523736,30 @@
"fe6d3765ca8fea1c1963a310d0aa35fa68089a9b",
"testharness"
],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html": [
+ "0bd9668c45b14a0c52869ed0627cc408af550a25",
+ "testharness"
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html": [
+ "f6a122cc2d44432e94e0700961868a5708cde232",
+ "testharness"
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html": [
+ "db1e8a3d65c8c0653e3412c965df11fc4917ba85",
+ "testharness"
+ ],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
"b541bd8b57f8b85f6e5f3a17a3266169debee876",
"testharness"
],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html": [
+ "50f917bbd7df4e0c235a6c84a4ec5a90243e36dc",
+ "testharness"
+ ],
+ "css/css-typed-om/the-stylepropertymap/properties/text-decoration.html": [
+ "88d9f53aa4691c682c37fe74f7644e8ac8344cc9",
+ "testharness"
+ ],
"css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [
"9419ab219034d1fb732965ebd3a03934bcaddf5a",
"testharness"
@@ -523431,7 +523785,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/transition-duration.html": [
- "b735f3ff6dba561cf2e35a8a85a8e2b93c0edc61",
+ "fe613a427b8c057fb859eb70a58d506c6a0b3cde",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/unicode-bidi.html": [
@@ -546258,6 +546612,10 @@
"40ab5636653dfd105738ab38e7d22316132eb630",
"testharness"
],
+ "dom/events/relatedTarget.window.js": [
+ "0426d2ecae3f3562be175e4364353d979365ed1c",
+ "testharness"
+ ],
"dom/historical.html": [
"ccf3d9d2d8eb3e7353ecedd8a4d8ba232f9374ec",
"testharness"
@@ -563546,8 +563904,16 @@
"1ffdecee25d1f3819f3f67241c3f0746bedbcf97",
"testharness"
],
+ "html/semantics/document-metadata/the-link-element/link-load-error-events.html": [
+ "8835935f157e5c227a8ce62f1a4fafcb46c50914",
+ "testharness"
+ ],
+ "html/semantics/document-metadata/the-link-element/link-load-error-events.https.html": [
+ "8835935f157e5c227a8ce62f1a4fafcb46c50914",
+ "testharness"
+ ],
"html/semantics/document-metadata/the-link-element/link-load-event.html": [
- "a1a8b7b20492b7fef977f7734425f9cf55322f2a",
+ "628527090c78d90d831cb80ea8eee7ffa66722f5",
"testharness"
],
"html/semantics/document-metadata/the-link-element/link-rellist.html": [
@@ -563570,6 +563936,10 @@
"04a3a89fe805fc930dc3adfa3a4134b950779697",
"support"
],
+ "html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js": [
+ "0c45045a1db6958751dfe112aa3234ca936263e7",
+ "support"
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
"2829167c82bafef6cfea06071007a231aa4277f6",
"support"
@@ -571846,6 +572216,10 @@
"c25750e626c5c2121833fd4627f656ffe9c83d38",
"testharness"
],
+ "html/webappapis/scripting/events/event-handler-attributes-window-body.html": [
+ "d5a47edd139eb2ff2fe035451f44996bfe2f414d",
+ "testharness"
+ ],
"html/webappapis/scripting/events/event-handler-javascript.html": [
"2dece90b5e8b3ac3371a732e158ff44b8ea63b00",
"testharness"
@@ -576139,7 +576513,7 @@
"testharness"
],
"navigation-timing/test_timing_server_redirect.html": [
- "10b7f221c4667e92a993f0aae70820a95ea445aa",
+ "e08cd61d0e373b0ba04e00d429b3c607df8d2fd4",
"testharness"
],
"navigation-timing/test_timing_xserver_redirect.html": [
@@ -582583,7 +582957,7 @@
"support"
],
"payment-request/OWNERS": [
- "448f2bd0db2f9cff5bbe5c2b9e80c8d609d5379f",
+ "60cf95eb7b2e583315fe8539d2caf38667412d19",
"support"
],
"payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [
@@ -582811,11 +583185,11 @@
"manual"
],
"payment-request/show-method-optional-promise-rejects-manual.https.html": [
- "62542519059ab38ee0753deff5e7e6e587f8adbf",
+ "a8dde7fa5b501688a51f23b330e4cd25273a6146",
"manual"
],
"payment-request/show-method-optional-promise-resolves-manual.https.html": [
- "a07f98e117bce1f040c5e62ef3acbd2ef7475338",
+ "a19166fd1366f8510bec53b4e9fc1033a129c44b",
"manual"
],
"payment-request/show-method-postmessage-iframe.html": [
@@ -593231,7 +593605,7 @@
"testharness"
],
"service-workers/service-worker/fetch-event.https.html": [
- "9d365e1960c873a48cf5378cda7615cbef49f5cd",
+ "1a7e0410ef0e486738ca7c76542c2612228d5bd2",
"testharness"
],
"service-workers/service-worker/fetch-frame-resource.https.html": [
@@ -595090,6 +595464,14 @@
"1469992db34a25397dc3d5a5e1eb600e8afcf71b",
"testharness"
],
+ "shadow-dom/layout-slot-no-longer-assigned.html": [
+ "224a688177941774e0bd3be74cb4aef20160d903",
+ "reftest"
+ ],
+ "shadow-dom/layout-slot-no-longer-fallback.html": [
+ "a9be2ec9174a8944a237462b51519a8f88b4987a",
+ "reftest"
+ ],
"shadow-dom/leaktests/get-elements.html": [
"ceffb5ff2e8b171975acb616d83079f0cfa7a82a",
"testharness"
@@ -595102,6 +595484,10 @@
"2e7c236bb756dfbd3a6c42c547fc7d7e897883ce",
"testharness"
],
+ "shadow-dom/reference/empty.html": [
+ "51a23151c28992fe062b36914463de216bd55fbe",
+ "support"
+ ],
"shadow-dom/resources/Document-prototype-currentScript-helper.js": [
"f7d4af7942bcd858df4a2f1a8bbda86b32baee31",
"support"
@@ -602727,7 +603113,7 @@
"wdspec"
],
"webdriver/tests/contexts/maximize_window.py": [
- "7912e2f7ebdffe2598eb3b9a20f4fc7fce22447e",
+ "e0dfeb6234371077baa7f67a45d7ffa9b61c9759",
"wdspec"
],
"webdriver/tests/contexts/resizing_and_positioning.py": [
@@ -602771,19 +603157,19 @@
"support"
],
"webdriver/tests/element_retrieval/find_element.py": [
- "699b97bd31eed625e2f0bed145aaf94c3e646853",
+ "8c9ed3ac2169f4b65a2e172a6e77b9586d83afa2",
"wdspec"
],
"webdriver/tests/element_retrieval/find_element_from_element.py": [
- "fa64a4164762861097f11252e8526261038ae1c5",
+ "4ac7c4f27f19fe0b6a42fe888b478b78d9c4ca7e",
"wdspec"
],
"webdriver/tests/element_retrieval/find_elements.py": [
- "284ae53c5c94d02fb46b26dcd70af02d7917e7b4",
+ "fa8c2de1ffd12432bf14368b9c72000567ab8d20",
"wdspec"
],
"webdriver/tests/element_retrieval/find_elements_from_element.py": [
- "90be4b09a41b8ba00529a78983fbd64cdb3453ef",
+ "0afca7c9c332ac6bc4da4dd9607ae36b42914a14",
"wdspec"
],
"webdriver/tests/element_retrieval/get_active_element.py": [
@@ -602827,7 +603213,7 @@
"wdspec"
],
"webdriver/tests/fullscreen_window.py": [
- "67cc7d992d81a176297038f5516c8a9c95018040",
+ "c244064c0595d9274ddef98c527d193355ba13fa",
"wdspec"
],
"webdriver/tests/get_window_rect.py": [
@@ -602847,7 +603233,7 @@
"testharness"
],
"webdriver/tests/minimize_window.py": [
- "ac1df5462702ac368ffa92cc12cfb5e34df226ac",
+ "08d4414ce915f1ebe7825d5d99e204dc331fe155",
"wdspec"
],
"webdriver/tests/navigation/current_url.py": [
@@ -602903,7 +603289,7 @@
"wdspec"
],
"webdriver/tests/set_window_rect.py": [
- "8a124f80e6e7732a651a80da3f6cdf8e2ed99e3e",
+ "079038aa66cb729cf205aac040a5fe075d01fd8a",
"wdspec"
],
"webdriver/tests/state/__init__.py": [
@@ -603679,7 +604065,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-track-stats.https.html": [
- "92fbaf0f4c596222975edae433725d616dac6082",
+ "f69d223cb8cd11e4b68b7687e2361ed3ea947f5e",
"testharness"
],
"webrtc/RTCPeerConnectionIceEvent-constructor.html": [
@@ -603743,7 +604129,7 @@
"testharness"
],
"webrtc/RTCRtpSender-getStats.https.html": [
- "5c480c0d64de4e3ee041b95e5ccaec6264b878b8",
+ "64c4424e36c566294a317fb423eb02e97a9ebbca",
"testharness"
],
"webrtc/RTCRtpSender-replaceTrack.html": [
diff --git a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini
new file mode 100644
index 00000000000..26435e28b09
--- /dev/null
+++ b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini
@@ -0,0 +1,2 @@
+[vh_not_refreshing_on_chrome.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini
new file mode 100644
index 00000000000..cbe3c35452c
--- /dev/null
+++ b/tests/wpt/metadata/dom/events/relatedTarget.window.js.ini
@@ -0,0 +1,4 @@
+[relatedTarget.window.html]
+ [Untitled]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini
new file mode 100644
index 00000000000..26f8670bd9a
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.html.ini
@@ -0,0 +1,10 @@
+[link-load-error-events.html]
+ [Load of non-CSS stylesheet]
+ expected: FAIL
+
+ [Import of non-CSS stylesheet]
+ expected: FAIL
+
+ [Import of import of non-CSS stylesheet]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini
new file mode 100644
index 00000000000..2070ad0264a
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html.ini
@@ -0,0 +1,19 @@
+[link-load-error-events.https.html]
+ [Load of non-CSS stylesheet]
+ expected: FAIL
+
+ [Import of non-CSS stylesheet]
+ expected: FAIL
+
+ [Import of import of non-CSS stylesheet]
+ expected: FAIL
+
+ [Load of http:// stylesheet]
+ expected: FAIL
+
+ [Import of http:// stylesheet]
+ expected: FAIL
+
+ [Import of import of http:// stylesheet]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini
new file mode 100644
index 00000000000..6cd2d9dc54b
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-window-body.html.ini
@@ -0,0 +1,4 @@
+[event-handler-attributes-window-body.html]
+ [error]
+ expected: FAIL
+
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini
deleted file mode 100644
index 1e2567027d8..00000000000
--- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[rapid-resizing.html]
- expected: TIMEOUT
- [Overall test]
- expected: NOTRUN
-
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini
deleted file mode 100644
index fb8852c9e7a..00000000000
--- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shader-with-non-reserved-words.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[shader-with-non-reserved-words.html]
- expected: TIMEOUT
- [Overall test]
- expected: NOTRUN
-
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html
new file mode 100644
index 00000000000..6b3662a16d4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-left-right.https.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ position: relative;
+ width: 120px;
+}
+
+.test {
+ background: red;
+ position: absolute;
+ left: 0px;
+ right: 20px;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html
new file mode 100644
index 00000000000..632a5dddfac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-absolute-top-bottom-vrl.https.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ position: relative;
+ height: 120px;
+}
+
+.test {
+ background: red;
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ bottom: 20px;
+ writing-mode: vertical-rl;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html
new file mode 100644
index 00000000000..a8f4dd31ac9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats-vlr.https.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ height: 200px;
+ writing-mode: vertical-lr;
+}
+
+.float {
+ float: right;
+ width: 20px;
+ height: 100px;
+}
+
+.test {
+ background: red;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="float"></div>
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html
new file mode 100644
index 00000000000..2eb6197c077
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-avoid-floats.https.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ width: 200px;
+}
+
+.float {
+ float: right;
+ width: 100px;
+ height: 20px;
+}
+
+.test {
+ background: red;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="float"></div>
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html
new file mode 100644
index 00000000000..751ea5ef759
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto-vlr.https.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ height: 120px;
+ writing-mode: vertical-lr;
+}
+
+.test {
+ margin-bottom: 20px;
+ background: red;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html
new file mode 100644
index 00000000000..1458a8bbb79
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-block-auto.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ width: 120px;
+}
+
+.test {
+ margin-right: 20px;
+ background: red;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html
new file mode 100644
index 00000000000..39ea818216d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed-vrl.https.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+.test {
+ background: red;
+ height: 100px;
+ writing-mode: vertical-rl;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html
new file mode 100644
index 00000000000..6434d339196
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-fixed.https.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+.test {
+ background: red;
+ width: 100px;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html
new file mode 100644
index 00000000000..263d45e5b0b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow-column-vrl.https.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ display: flex;
+ flex-flow: column;
+ width: 100px;
+ height: 100px;
+}
+
+.test {
+ background: red;
+ flex-grow: 1;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html
new file mode 100644
index 00000000000..d2589e62e78
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-flex-grow.https.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ display: flex;
+ width: 100px;
+}
+
+.test {
+ background: red;
+ flex-grow: 1;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html
new file mode 100644
index 00000000000..94eca6b5967
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-grid.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ display: grid;
+ grid: auto-flow / 100px;
+}
+
+.test {
+ background: red;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html
new file mode 100644
index 00000000000..0efabcb31ab
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage-vlr.https.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ height: 200px;
+ writing-mode: vertical-lr;
+}
+
+.test {
+ background: red;
+ height: 50%;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html
new file mode 100644
index 00000000000..4b5a5675ac0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-percentage.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedinlinesize">
+<link rel="match" href="constraints-fixed-inline-size-ref.html">
+<meta name="assert" content="This test checks that LayoutConstraints#fixedInlineSize is passed into the layout function correctly." />
+<style>
+body {
+ width: 200px;
+}
+
+.test {
+ background: red;
+ width: 50%;
+}
+
+@supports (display: layout(test)) {
+ .test {
+ background: green;
+ display: layout(test);
+ }
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/worklet-reftest.js"></script>
+
+<div class="test"></div>
+
+<script>
+importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-inline-size.js'});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html
new file mode 100644
index 00000000000..e5727c0e2d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/constraints-fixed-inline-size-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<style>
+.result {
+ background: green;
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<div class="result"></div>
diff --git a/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js b/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js
new file mode 100644
index 00000000000..4e591f7a736
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-layout-api/support/constraints-fixed-inline-size.js
@@ -0,0 +1,9 @@
+registerLayout('test', class {
+ *intrinsicSizes() {}
+ *layout(children, edges, constraints, styleMap) {
+ if (constraints.fixedInlineSize !== 100)
+ return {autoBlockSize: 0};
+
+ return {autoBlockSize: 100};
+ }
+});
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html
index 8ab03635042..0d4f6c02952 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/animation-direction.html
@@ -13,8 +13,7 @@
<script>
'use strict';
-// FIXME: animation-direction is list-valued. Run list-valued tests here too.
-runPropertyTests('animation-direction', [
+runListValuedPropertyTests('animation-direction', [
{ syntax: 'normal' },
{ syntax: 'reverse' },
{ syntax: 'alternate-reverse' },
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html
index d584a0ff3e4..b3dddedbe4a 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/background-image.html
@@ -13,8 +13,7 @@
<script>
'use strict';
-// FIXME: background-image is list-valued. Run list-valued tests here too.
-runPropertyTests('background-image', [
+runListValuedPropertyTests('background-image', [
{ syntax: 'none' },
{ syntax: '<image>' },
]);
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html
new file mode 100644
index 00000000000..97722ec3d5f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/center-coordinate.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'center-coordinate' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('cx', [
+ { syntax: '<percentage>' },
+ { syntax: '<length>' },
+]);
+
+runPropertyTests('cy', [
+ { syntax: '<percentage>' },
+ { syntax: '<length>' },
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html
new file mode 100644
index 00000000000..31ccbfa9b90
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/coordinate.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'coordinate' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('x', [
+ { syntax: '<percentage>' },
+ { syntax: '<length>' },
+]);
+
+runPropertyTests('y', [
+ { syntax: '<percentage>' },
+ { syntax: '<length>' },
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html
index f306fdde92b..aa858d2e46b 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/mask-image.html
@@ -13,8 +13,7 @@
<script>
'use strict';
-// FIXME: mask-image is list-valued. Run list-valued tests here too.
-runPropertyTests('mask-image', [
+runListValuedPropertyTests('mask-image', [
{ syntax: 'none' },
{ syntax: '<image>' },
]);
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js
index 2c20c05e7d0..bf2b217177c 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js
@@ -378,6 +378,12 @@ function runPropertyTests(propertyName, testCases) {
}
}
+// Same as runPropertyTests but for list-valued properties.
+function runListValuedPropertyTests(propertyName, testCases) {
+ // TODO(https://crbug.com/545318): Run list-valued tests as well.
+ runPropertyTests(propertyName, testCases);
+}
+
// Check that |propertyName| doesn't "support" examples in |testExamples|.
// |testExamples| is a list of CSS string values. An "unsupported" value
// doesn't have a corresponding Typed OM representation. It normalizes as
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html
new file mode 100644
index 00000000000..dba12630a4a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'text-decoration-line' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('text-decoration-line', [
+ { syntax: 'none' },
+ { syntax: 'underline' },
+ { syntax: 'overline' },
+ { syntax: 'line-through' },
+ { syntax: 'blink' },
+ { syntax: 'spelling-error' },
+ { syntax: 'grammar-error' },
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html
new file mode 100644
index 00000000000..57d445d7cd3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip-ink.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'text-decoration-skip-ink' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('text-decoration-skip-ink', [
+ { syntax: 'auto' },
+ { syntax: 'none' },
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html
new file mode 100644
index 00000000000..796b87790d4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'text-decoration-skip' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('text-decoration-skip', [
+ { syntax: 'none' },
+ { syntax: 'objects' },
+ { syntax: 'edges' },
+ { syntax: 'box-decoration' },
+ { syntax: 'spaces' },
+]);
+
+runUnsupportedPropertyTests('text-decoration-skip', [
+ 'objects spaces', 'leading-spaces trailing-spaces',
+ 'objects edges box-decoration'
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html
new file mode 100644
index 00000000000..43aeb165645
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration-width.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'text-decoration-width' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runPropertyTests('text-decoration-width', [
+ { syntax: 'auto' },
+ {
+ syntax: '<length>',
+ specified: assert_is_equal_with_range_handling
+ },
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html
new file mode 100644
index 00000000000..e9a9827c13d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/text-decoration.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'text-decoration' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+runUnsupportedPropertyTests('text-decoration', [
+ 'underline', 'underline dotted #ff3028', 'green wavy underline'
+]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html
index c17e717ba91..c0eb09daa76 100644
--- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html
+++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/transition-duration.html
@@ -12,8 +12,7 @@
<script>
'use strict';
-// FIXME: transition-duration is list-valued. Run list-valued tests here too.
-runPropertyTests('transition-duration', [
+runListValuedPropertyTests('transition-duration', [
{ syntax: '<time>' },
]);
diff --git a/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js b/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js
new file mode 100644
index 00000000000..d3632bb9e04
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/relatedTarget.window.js
@@ -0,0 +1,85 @@
+// https://dom.spec.whatwg.org/#concept-event-dispatch
+
+const host = document.createElement("div"),
+ child = host.appendChild(document.createElement("p")),
+ shadow = host.attachShadow({ mode: "closed" }),
+ slot = shadow.appendChild(document.createElement("slot"));
+
+test(() => {
+ for (target of [shadow, slot]) {
+ for (relatedTarget of [new XMLHttpRequest(), self, host]) {
+ const event = new FocusEvent("demo", { relatedTarget: relatedTarget });
+ target.dispatchEvent(event);
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ }
+ }
+}, "Reset if target pointed to a shadow tree");
+
+test(() => {
+ for (relatedTarget of [shadow, slot]) {
+ for (target of [new XMLHttpRequest(), self, host]) {
+ const event = new FocusEvent("demo", { relatedTarget: relatedTarget });
+ target.dispatchEvent(event);
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ }
+ }
+}, "Reset if relatedTarget pointed to a shadow tree");
+
+async_test(t => {
+ const shadowChild = shadow.appendChild(document.createElement("div"));
+ shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild)));
+ const event = new FocusEvent("demo", { relatedTarget: new XMLHttpRequest() });
+ shadowChild.dispatchEvent(event);
+ assert_equals(shadowChild.parentNode, document.body);
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ shadowChild.remove();
+ t.done();
+}, "Reset if target pointed to a shadow tree pre-dispatch");
+
+async_test(t => {
+ const shadowChild = shadow.appendChild(document.createElement("div"));
+ shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild)));
+ const event = new FocusEvent("demo", { relatedTarget: shadowChild });
+ document.body.dispatchEvent(event);
+ assert_equals(shadowChild.parentNode, document.body);
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ shadowChild.remove();
+ t.done();
+}, "Reset if relatedTarget pointed to a shadow tree pre-dispatch");
+
+async_test(t => {
+ const event = new FocusEvent("heya", { relatedTarget: shadow, cancelable: true }),
+ callback = t.unreached_func();
+ host.addEventListener("heya", callback);
+ t.add_cleanup(() => host.removeEventListener("heya", callback));
+ event.preventDefault();
+ assert_true(event.defaultPrevented);
+ assert_false(host.dispatchEvent(event));
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ // Check that the dispatch flag is cleared
+ event.initEvent("x");
+ assert_equals(event.type, "x");
+ t.done();
+}, "Reset targets on early return");
+
+async_test(t => {
+ const input = document.body.appendChild(document.createElement("input")),
+ event = new MouseEvent("click", { relatedTarget: shadow });
+ let seen = false;
+ t.add_cleanup(() => input.remove());
+ input.type = "checkbox";
+ input.oninput = t.step_func(() => {
+ assert_equals(event.target, null);
+ assert_equals(event.relatedTarget, null);
+ assert_equals(event.composedPath().length, 0);
+ seen = true;
+ });
+ assert_true(input.dispatchEvent(event));
+ assert_true(seen);
+ t.done();
+}, "Reset targets before activation behavior");
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html
new file mode 100644
index 00000000000..e4f617d4582
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<meta charset=utf-8>
+<title></title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="resources/link-load-error-events.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html
new file mode 100644
index 00000000000..e4f617d4582
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<meta charset=utf-8>
+<title></title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="resources/link-load-error-events.sub.js"></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
index 6f6172a2d62..541291350a7 100644
--- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html
@@ -3,16 +3,15 @@
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-link-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test"></link>
<script>
var saw_link_onload = false;
var t = async_test("Check if the stylesheet's load event blocks the document load event");
-document.getElementById('style_test').onload = t.step_func(function() {
- saw_link_onload = true;
-});
window.addEventListener('load', t.step_func_done(function() {
assert_true(saw_link_onload);
}));
</script>
+<link href="style.css?pipe=trickle(d3)" rel="stylesheet" id="style_test"
+ onload="t.step(function() { saw_link_onload = true; });"
+ onerror="t.step(function() { assert_unreached('Sheet should load OK'); });"></link>
</head>
</html>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js
new file mode 100644
index 00000000000..ac56a011963
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-load-error-events.sub.js
@@ -0,0 +1,187 @@
+/**
+ * This is the guts of the load/error event tests for <link rel="stylesheet">.
+ *
+ * We have a list of tests each of which is an object containing: href value,
+ * expected load success boolean, test description. Href values are set up in
+ * such a way that we guarantee that all stylesheet URLs are unique. This
+ * avoids issues around caching of sheets based on URL.
+ */
+
+var isHttps = location.protocol == "https:";
+
+var tests = [
+ // Basic tests
+ {
+ href: existingSheet(),
+ success: true,
+ description: "Basic load of stylesheet",
+ },
+ {
+ href: nonexistentSheet(),
+ success: false,
+ description: "Attempted load of nonexistent stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("${existingSheet()}")`,
+ success: true,
+ description: "Import of stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("${nonexistentSheet()}")`,
+ success: false,
+ description: "Import of nonexistent stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("data:text/css,@import url('${existingSheet()}')")`,
+ success: true,
+ description: "Import of import of stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("data:text/css,@import url('${nonexistentSheet()}')")`,
+ success: false,
+ description: "Import of import of nonexistent stylesheet",
+ },
+
+ // Non-CSS-response tests.
+ {
+ href: makeUnique(""),
+ success: false,
+ description: "Load of non-CSS stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("${makeUnique("")}")`,
+ success: false,
+ description: "Import of non-CSS stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("data:text/css,@import url('${makeUnique("")}')")`,
+ success: false,
+ description: "Import of import of non-CSS stylesheet",
+ },
+
+ // http:// tests, to test what happens with mixed content blocking.
+ {
+ href: httpSheet(),
+ success: !isHttps,
+ description: "Load of http:// stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("${httpSheet()}")`,
+ success: !isHttps,
+ description: "Import of http:// stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("data:text/css,@import url('${httpSheet()}')")`,
+ success: !isHttps,
+ description: "Import of import of http:// stylesheet",
+ },
+
+ // https:// tests just as a control
+ {
+ href: httpsSheet(),
+ success: true,
+ description: "Load of https:// stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("${httpsSheet()}")`,
+ success: true,
+ description: "Import of https:// stylesheet",
+ },
+ {
+ href: `data:text/css,@import url("data:text/css,@import url('${httpsSheet()}')")`,
+ success: true,
+ description: "Import of import of https:// stylesheet",
+ },
+
+ // Tests with multiple imports some of which are slow and some are fast.
+ {
+ href: `data:text/css,@import url("${slowResponse(existingSheet())}"); @import url("${nonexistentSheet()}");`,
+ success: false,
+ description: "Slow successful import, fast failing import",
+ },
+ {
+ href: `data:text/css,@import url("${existingSheet()}"); @import url("${slowResponse(nonexistentSheet())}");`,
+ success: false,
+ description: "Fast successful import, slow failing import",
+ }
+];
+
+// Note: Here we really do need to use "let" at least for the href,
+// because we lazily evaluate it in the unreached cases.
+for (var test of tests) {
+ let {href, success, description} = test;
+ var t = async_test(description);
+ var link = document.createElement("link");
+ link.rel = "stylesheet";
+ if (success) {
+ link.onload = t.step_func_done(() => {});
+ link.onerror = t.step_func_done(() => assert_unreached(`error fired when load expected: ${href}`) );
+ } else {
+ link.onerror = t.step_func_done(() => {});
+ link.onload = t.step_func_done(() => assert_unreached(`load fired when error expected: ${href}`) );
+ }
+ link.href = href;
+ document.head.appendChild(link);
+}
+
+/* Utility function */
+function makeUnique(url) {
+ // Make sure we copy here, even if the thing coming in is a URL, so we don't
+ // mutate our caller's data.
+ url = new URL(url, location.href);
+ // We want to generate a unique URI to avoid the various caches browsers have
+ // for stylesheets. We don't want to just use a counter, because that would
+ // not be robust to the test being reloaded or othewise run multiple times
+ // without a browser restart. We don't want to use timstamps, because those
+ // are not likely to be unique across calls to this function, especially given
+ // the degraded timer resolution browsers have due to Spectre.
+ //
+ // So just fall back on Math.random() and assume it can't duplicate values.
+ url.searchParams.append("r", Math.random());
+ return url;
+}
+
+function existingSheet() {
+ return makeUnique("resources/good.css");
+}
+
+/**
+ * Function the add values to the "pipe" search param. See
+ * http://wptserve.readthedocs.io/en/latest/pipes.html for why one would do
+ * this. Because this param uses a weird '|'-separated syntax instead of just
+ * using multiple params with the same name, we need some manual code to munge
+ * the value properly.
+ */
+function addPipe(url, pipeVal) {
+ url = new URL(url, location.href);
+ var params = url.searchParams;
+ var oldVal = params.get("pipe");
+ if (oldVal) {
+ params.set("pipe", oldVal + "|" + pipeVal);
+ } else {
+ params.set("pipe", pipeVal);
+ }
+ return url;
+}
+
+function nonexistentSheet() {
+ return addPipe(existingSheet(), "status(404)");
+}
+
+function httpSheet() {
+ var url = existingSheet();
+ url.protocol = "http";
+ url.port = {{ports[http][0]}};
+ return url;
+}
+
+function httpsSheet() {
+ var url = existingSheet();
+ url.protocol = "https";
+ url.port = {{ports[https][0]}};
+ return url;
+}
+
+function slowResponse(url) {
+ return addPipe(url, "trickle(d1)");
+}
diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html
new file mode 100644
index 00000000000..29c4c133b9e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-window-body.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>HTMLBodyElement event handlers</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<body>
+<script>
+function f() {
+ return 0;
+}
+
+var handlers = ['blur','error','focus','load','resize','scroll',
+ 'afterprint','beforeprint','beforeunload','hashchange',
+ 'languagechange','message','offline','online','pagehide',
+ 'pageshow','popstate','storage','unload'];
+handlers.forEach(function(handler) {
+ test(function() {
+ window['on' + handler] = f;
+ assert_equals(document.body['on' + handler], f);
+ }, handler);
+});
+
+handlers.forEach(function(handler) {
+ window['on' + handler] = null;
+});
+
+handlers.forEach(function(handler) {
+ test(function() {
+ assert_equals(window['on' + handler], null);
+ assert_equals(document.body['on' + handler], null);
+ }, handler + " removal");
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html b/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html
index 19147bea95a..16567e8997c 100644
--- a/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html
+++ b/tests/wpt/web-platform-tests/navigation-timing/test_timing_server_redirect.html
@@ -32,6 +32,7 @@
test_timing_order('redirectStart', 'navigationStart');
test_timing_order('redirectEnd', 'redirectStart');
test_timing_order('fetchStart', 'redirectEnd');
+ test_timing_order('requestStart', 'fetchStart');
}
</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/OWNERS b/tests/wpt/web-platform-tests/payment-request/OWNERS
index c4b8e572902..7f3eca71150 100644
--- a/tests/wpt/web-platform-tests/payment-request/OWNERS
+++ b/tests/wpt/web-platform-tests/payment-request/OWNERS
@@ -3,3 +3,4 @@
@domenic
@MSFTkihans
@mnoorenberghe
+@edenchuang
diff --git a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html
index 20d8d2d1856..ab89d7ec413 100644
--- a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-rejects-manual.https.html
@@ -220,7 +220,7 @@
});
testBadUpdate(this.textContent, badDetails, new RangeError());
">
- Updating with a displayItem with an invalid currency results in TypeError.
+ Updating with a displayItem with an invalid currency results in RangeError.
</button></li>
<li><button onclick="
diff --git a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html
index 777910ce011..623db1531b3 100644
--- a/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/show-method-optional-promise-resolves-manual.https.html
@@ -181,7 +181,7 @@ function runUpdateDetailsAlgorithm(
const request = new PaymentRequest(validMethods, failDetails, options);
const detailsPromise = Promise.resolve(details);
const acceptPromise = request.show(detailsPromise);
- assert_equals(request.id, "this cant be changed", "id must never change.");
+ assert_equals(request.id, "this cannot be changed", "id must never change.");
await promise_rejects(
t,
"AbortError",
diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js
index fee33fd15a9..c4caf4b7e1b 100644
--- a/tests/wpt/web-platform-tests/resources/idlharness.js
+++ b/tests/wpt/web-platform-tests/resources/idlharness.js
@@ -123,6 +123,28 @@ var fround =
})();
//@}
+/// IdlHarnessError ///
+// Entry point
+self.IdlHarnessError = function(message)
+//@{
+{
+ /**
+ * Message to be printed as the error's toString invocation.
+ */
+ this.message = message;
+};
+
+IdlHarnessError.prototype = Object.create(Error.prototype);
+
+//@}
+IdlHarnessError.prototype.toString = function()
+//@{
+{
+ return this.message;
+};
+
+//@}
+
/// IdlArray ///
// Entry point
self.IdlArray = function()
@@ -217,7 +239,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options)
if (options && options.only && options.except)
{
- throw "The only and except options can't be used together."
+ throw new IdlHarnessError("The only and except options can't be used together.");
}
function should_skip(name)
@@ -235,7 +257,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options)
parsed_idls.forEach(function(parsed_idl)
{
- if (parsed_idl.type == "interface" && parsed_idl.partial)
+ if (parsed_idl.partial && ["interface", "dictionary"].includes(parsed_idl.type))
{
if (should_skip(parsed_idl.name))
{
@@ -280,7 +302,7 @@ IdlArray.prototype.internal_add_idls = function(parsed_idls, options)
}
if (parsed_idl.name in this.members)
{
- throw "Duplicate identifier " + parsed_idl.name;
+ throw new IdlHarnessError("Duplicate identifier " + parsed_idl.name);
}
switch(parsed_idl.type)
{
@@ -374,7 +396,7 @@ IdlArray.prototype.recursively_get_implements = function(interface_name)
ret = ret.concat(this.recursively_get_implements(ret[i]));
if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i]))
{
- throw "Circular implements statements involving " + ret[i];
+ throw new IdlHarnessError("Circular implements statements involving " + ret[i]);
}
}
return ret;
@@ -404,7 +426,7 @@ IdlArray.prototype.recursively_get_includes = function(interface_name)
ret = ret.concat(this.recursively_get_includes(ret[i]));
if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i]))
{
- throw "Circular includes statements involving " + ret[i];
+ throw new IdlHarnessError("Circular includes statements involving " + ret[i]);
}
}
return ret;
@@ -533,7 +555,7 @@ IdlArray.prototype.is_json_type = function(type)
function exposure_set(object, default_set) {
var exposed = object.extAttrs.filter(function(a) { return a.name == "Exposed" });
if (exposed.length > 1 || exposed.length < 0) {
- throw "Unexpected Exposed extended attributes on " + memberName + ": " + exposed;
+ throw new IdlHarnessError("Unexpected Exposed extended attributes on " + memberName + ": " + exposed);
}
if (exposed.length === 0) {
@@ -567,7 +589,33 @@ function exposed_in(globals) {
return globals.indexOf("Worker") >= 0 ||
globals.indexOf("ServiceWorker") >= 0;
}
- throw "Unexpected global object";
+ throw new IdlHarnessError("Unexpected global object");
+}
+
+//@}
+/**
+ * Asserts that the given error message is thrown for the given function.
+ * @param {string|IdlHarnessError} error Expected Error message.
+ * @param {Function} idlArrayFunc Function operating on an IdlArray that should throw.
+ */
+IdlArray.prototype.assert_throws = function(error, idlArrayFunc)
+//@{
+{
+ try {
+ idlArrayFunc.call(this, this);
+ throw new IdlHarnessError(`${idlArrayFunc} did not throw the expected IdlHarnessError`);
+ } catch (e) {
+ if (e instanceof AssertionError) {
+ throw e;
+ }
+ // Assertions for behaviour of the idlharness.js engine.
+ if (error instanceof IdlHarnessError) {
+ error = error.message;
+ }
+ if (e.message !== error) {
+ throw new IdlHarnessError(`${idlArrayFunc} threw ${e}, not the expected IdlHarnessError`);
+ }
+ }
}
//@}
@@ -581,9 +629,10 @@ IdlArray.prototype.test = function()
this.partials.forEach(function(parsed_idl)
{
if (!(parsed_idl.name in this.members)
- || !(this.members[parsed_idl.name] instanceof IdlInterface))
+ || !(this.members[parsed_idl.name] instanceof IdlInterface
+ || this.members[parsed_idl.name] instanceof IdlDictionary))
{
- throw "Partial interface " + parsed_idl.name + " with no original interface";
+ throw new IdlHarnessError(`Partial ${parsed_idl.type} ${parsed_idl.name} with no original ${parsed_idl.type}`);
}
if (parsed_idl.extAttrs)
{
@@ -848,7 +897,7 @@ IdlArray.prototype.assert_type_is = function(value, type)
if (!(type in this.members))
{
- throw "Unrecognized type " + type;
+ throw new IdlHarnessError("Unrecognized type " + type);
}
if (this.members[type] instanceof IdlInterface)
@@ -876,7 +925,7 @@ IdlArray.prototype.assert_type_is = function(value, type)
}
else
{
- throw "Type " + type + " isn't an interface or dictionary";
+ throw new IdlHarnessError("Type " + type + " isn't an interface or dictionary");
}
};
//@}
@@ -1345,13 +1394,13 @@ IdlInterface.prototype.test_self = function()
{
var aliasAttrs = this.extAttrs.filter(function(o) { return o.name === "LegacyWindowAlias"; });
if (aliasAttrs.length > 1) {
- throw "Invalid IDL: multiple LegacyWindowAlias extended attributes on " + this.name;
+ throw new IdlHarnessError("Invalid IDL: multiple LegacyWindowAlias extended attributes on " + this.name);
}
if (this.is_callback()) {
- throw "Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name;
+ throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on non-interface " + this.name);
}
if (this.exposureSet.indexOf("Window") === -1) {
- throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window";
+ throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " which is not exposed in Window");
}
// TODO: when testing of [NoInterfaceObject] interfaces is supported,
// check that it's not specified together with LegacyWindowAlias.
@@ -1360,7 +1409,7 @@ IdlInterface.prototype.test_self = function()
var rhs = aliasAttrs[0].rhs;
if (!rhs) {
- throw "Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " without identifier";
+ throw new IdlHarnessError("Invalid IDL: LegacyWindowAlias extended attribute on " + this.name + " without identifier");
}
var aliases;
if (rhs.type === "identifier-list") {
@@ -1733,7 +1782,7 @@ IdlInterface.prototype.test_member_const = function(member)
//@{
{
if (!this.has_constants()) {
- throw "Internal error: test_member_const called without any constants";
+ throw new IdlHarnessError("Internal error: test_member_const called without any constants");
}
test(function()
@@ -2289,7 +2338,7 @@ IdlInterface.prototype.test_object = function(desc)
{
if (!(current_interface.name in this.array.members))
{
- throw "Interface " + current_interface.name + " not found (inherited by " + this.name + ")";
+ throw new IdlHarnessError("Interface " + current_interface.name + " not found (inherited by " + this.name + ")");
}
if (current_interface.prevent_multiple_testing && current_interface.already_tested)
{
diff --git a/tests/wpt/web-platform-tests/resources/test/conftest.py b/tests/wpt/web-platform-tests/resources/test/conftest.py
index 4688421af23..0be41eeec54 100644
--- a/tests/wpt/web-platform-tests/resources/test/conftest.py
+++ b/tests/wpt/web-platform-tests/resources/test/conftest.py
@@ -87,7 +87,8 @@ class HTMLItem(pytest.Item, pytest.Collector):
@staticmethod
def _assert_sequence(nums):
- assert nums == range(1, nums[-1] + 1)
+ if nums and len(nums) > 0:
+ assert nums == range(1, nums[-1] + 1)
@staticmethod
def _scrub_stack(test_obj):
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html
new file mode 100644
index 00000000000..f716b93ae85
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/IdlDictionary/test_partial_dictionary.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <meta charset="utf-8">
+ <title>idlharness: partial dictionaries</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/WebIDLParser.js"></script>
+ <script src="/resources/idlharness.js"></script>
+ <script src="../helper.js"></script>
+</head>
+
+<body>
+<pre id='idl'>
+dictionary A {};
+partial dictionary A {
+ boolean B;
+};
+partial dictionary A {
+ boolean C;
+};
+</pre>
+
+<script>
+'use strict';
+
+test(() => {
+ let idlArray = new IdlArray();
+ idlArray.add_idls(document.getElementById('idl').textContent);
+ idlArray.test();
+
+ let members = idlArray.members["A"].members.map(m => m.name);
+ assert_array_equals(members, ["B", "C"], 'A should contain B, C');
+}, 'Partial dictionaries');
+
+test(() => {
+ let idlArray = new IdlArray();
+ idlArray.add_idls('partial dictionary D {};');
+ idlArray.assert_throws('Partial dictionary D with no original dictionary', i => i.test());
+}, 'Partial-only dictionary definition')
+</script>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html
index da3c3faaa1c..439c203dc95 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/idlharness/basic.html
@@ -29,6 +29,27 @@
test(function() {
assert_equals(typeof WebIDL2.parse("interface Foo {};"), "object");
}, 'WebIDL2 parse method should produce an AST for correct WebIDL');
+ for (let type of ['dictionary', 'interface']) {
+ test(function() {
+ let i = new IdlArray();
+ i.add_untested_idls(`partial ${type} A {};`);
+ i.assert_throws(new IdlHarnessError(`Partial ${type} A with no original ${type}`), i => i.test());
+ }, `assert_throws should handle ${type} IdlHarnessError`);
+ test(function() {
+ let i = new IdlArray();
+ i.add_untested_idls(`partial ${type} A {};`);
+ i.assert_throws(`Partial ${type} A with no original ${type}`, i => i.test());
+ }, `assert_throws should handle ${type} IdlHarnessError from message`);
+ test(function () {
+ try {
+ let i = new IdlArray();
+ i.add_untested_idls(`${type} A {};`);
+ i.assert_throws(`Partial ${type} A with no original ${type}`, i => i.test());
+ } catch (e) {
+ assert_true(e instanceof IdlHarnessError);
+ }
+ }, `assert_throws should throw if no ${type} IdlHarnessError thrown`);
+ }
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index 23b8651bb13..86ecc1ba252 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -1247,6 +1247,13 @@ policies and contribution forms [3].
}
expose(assert_readonly, "assert_readonly");
+ /**
+ * Assert an Exception with the expected code is thrown.
+ *
+ * @param {object|number|string} code The expected exception code.
+ * @param {Function} func Function which should throw.
+ * @param {string} description Error description for the case that the error is not thrown.
+ */
function assert_throws(code, func, description)
{
try {
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html
index 9fef304adba..12b09321ed0 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html
@@ -59,6 +59,30 @@ async_test(function(t) {
}, 'Service Worker responds to fetch event with string');
async_test(function(t) {
+ var scope = 'resources/simple.html?string';
+ var frame;
+ service_worker_unregister_and_register(t, worker, scope)
+ .then(function(reg) {
+ return wait_for_state(t, reg.installing, 'activated');
+ })
+ .then(function() { return with_iframe(scope) })
+ .then(function(f) {
+ frame = f;
+ return frame.contentWindow.fetch(scope + "#foo")
+ })
+ .then(function(response) { return response.text() })
+ .then(function(text) {
+ assert_equals(
+ text,
+ 'Test string',
+ 'Service Worker should respond to fetch with a test string');
+ frame.remove();
+ return service_worker_unregister_and_done(t, scope);
+ })
+ .catch(unreached_rejection(t));
+ }, 'Service Worker responds to fetch event using request fragment with string');
+
+async_test(function(t) {
var scope = 'resources/simple.html?blob';
service_worker_unregister_and_register(t, worker, scope)
.then(function(reg) {
diff --git a/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html
new file mode 100644
index 00000000000..dfcac99da02
--- /dev/null
+++ b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-assigned.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Layout using slot elements</title>
+<link rel="author" title="Hayato Ito" href="mailto:hayato@google.com"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#shadow-tree-slots">
+<link rel="match" href="reference/empty.html"/>
+<div id="host"></div>
+<script>
+const host = document.querySelector('#host');
+const sr = host.attachShadow({ mode: 'open' });
+sr.innerHTML = '<slot name=s1></slot>'
+host.innerHTML = '<div id=d1 slot=s1></div>';
+
+document.body.offsetLeft;
+document.querySelector('#d1').setAttribute('slot', 's2');
+</script>
diff --git a/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html
new file mode 100644
index 00000000000..7507f11ac18
--- /dev/null
+++ b/tests/wpt/web-platform-tests/shadow-dom/layout-slot-no-longer-fallback.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Layout using slot elements</title>
+<link rel="author" title="Hayato Ito" href="mailto:hayato@google.com"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#shadow-tree-slots">
+<link rel="match" href="reference/empty.html"/>
+<div id="host"></div>
+<script>
+const host = document.querySelector('#host');
+const sr = host.attachShadow({ mode: 'open' });
+
+sr.innerHTML = '<slot><div id="fallback">Should not be displayed</div></slot>'
+
+document.body.offsetLeft;
+host.appendChild(document.createElement('div'));
+</script>
diff --git a/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html b/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html
new file mode 100644
index 00000000000..0e76edd65b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/shadow-dom/reference/empty.html
@@ -0,0 +1 @@
+<!DOCTYPE html>
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
index 8eabf27f47f..36a97cf72ed 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/pytestrunner/runner.py
@@ -102,7 +102,19 @@ class SubtestResultRecorder(object):
self.record(report.nodeid, "PASS")
def record_fail(self, report):
- self.record(report.nodeid, "FAIL", stack=report.longrepr)
+ # pytest outputs the stacktrace followed by an error message prefixed
+ # with "E ", e.g.
+ #
+ # def test_example():
+ # > assert "fuu" in "foobar"
+ # > E AssertionError: assert 'fuu' in 'foobar'
+ message = ""
+ for line in report.longreprtext.splitlines():
+ if line.startswith("E "):
+ message = line[1:].strip()
+ break
+
+ self.record(report.nodeid, "FAIL", message=message, stack=report.longrepr)
def record_error(self, report):
# error in setup/teardown
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py b/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py
index e9257e6fe0a..6143dc15924 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/contexts/maximize_window.py
@@ -12,6 +12,12 @@ def maximize(session):
return session.transport.send("POST", "session/%s/window/maximize" % session.session_id)
+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)")
+
+
# 10.7.3 Maximize Window
@@ -137,11 +143,11 @@ def test_fully_exit_fullscreen(session):
"""
session.window.fullscreen()
- assert session.execute_script("return window.fullScreen") is True
+ assert is_fullscreen(session) is True
response = maximize(session)
assert_success(response)
- assert session.execute_script("return window.fullScreen") is False
+ assert is_fullscreen(session) is False
def test_restore_the_window(session):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py
index 454e3c38bdc..dddb28cb333 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element.py
@@ -51,6 +51,39 @@ def test_find_element(session, using, value):
assert_success(response)
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>link text</a>", "link text"),
+ ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
+ ("<a href=#>link<br>text</a>", "link\ntext"),
+ ("<a href=#>link&amp;text</a>", "link&text"),
+ ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
+ ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
+])
+def test_find_element_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline(document)
+
+ response = find_element(session, "link text", value)
+ assert_success(response)
+
+
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>partial link text</a>", "link"),
+ ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
+ ("<a href=#>partial link text</a>", "k t"),
+ ("<a href=#>partial link<br>text</a>", "k\nt"),
+ ("<a href=#>partial link&amp;text</a>", "k&t"),
+ ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
+ ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
+])
+def test_find_element_partial_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline(document)
+
+ response = find_element(session, "partial link text", value)
+ assert_success(response)
+
+
@pytest.mark.parametrize("using,value", [("css selector", "#wontExist")])
def test_no_element(session, using, value):
# Step 8 - 9
@@ -65,7 +98,8 @@ def test_no_element(session, using, value):
("tag name", "a"),
("xpath", "//*[name()='a']")])
def test_xhtml_namespace(session, using, value):
- session.url = inline("""<a href="#" id="linkText">full link text</a>""", doctype="xhtml")
+ session.url = inline("""<a href="#" id="linkText">full link text</a>""",
+ doctype="xhtml")
expected = session.execute_script("return document.links[0]")
response = find_element(session, using, value)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py
index 2de03835186..f6b985848aa 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_element_from_element.py
@@ -31,7 +31,6 @@ def test_closed_context(session, create_window):
session.close()
response = find_element(session, "notReal", "css selector", "foo")
-
assert_error(response, "no such window")
@@ -49,6 +48,41 @@ def test_find_element(session, using, value):
assert_success(response)
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>link text</a>", "link text"),
+ ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
+ ("<a href=#>link<br>text</a>", "link\ntext"),
+ ("<a href=#>link&amp;text</a>", "link&text"),
+ ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
+ ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
+])
+def test_find_element_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<div>{0}</div>".format(document))
+ element = session.find.css("div", all=False)
+
+ response = find_element(session, element.id, "link text", value)
+ assert_success(response)
+
+
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>partial link text</a>", "link"),
+ ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
+ ("<a href=#>partial link text</a>", "k t"),
+ ("<a href=#>partial link<br>text</a>", "k\nt"),
+ ("<a href=#>partial link&amp;text</a>", "k&t"),
+ ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
+ ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
+])
+def test_find_element_partial_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<div>{0}</div>".format(document))
+ element = session.find.css("div", all=False)
+
+ response = find_element(session, element.id, "partial link text", value)
+ assert_success(response)
+
+
@pytest.mark.parametrize("using,value",[("css selector", "#wontExist")])
def test_no_element(session, using, value):
# Step 8 - 9
@@ -65,7 +99,8 @@ def test_no_element(session, using, value):
("tag name", "a"),
("xpath", "//*[name()='a']")])
def test_xhtml_namespace(session, using, value):
- session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml")
+ session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""",
+ doctype="xhtml")
from_element = session.execute_script("""return document.querySelector("p")""")
expected = session.execute_script("return document.links[0]")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py
index a00ae2358c2..781dd3b6408 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements.py
@@ -30,10 +30,7 @@ def test_closed_context(session, create_window):
session.window_handle = new_window
session.close()
- response = session.transport.send("POST",
- "session/%s/elements" % session.session_id,
- {"using": "css selector", "value": "foo"})
-
+ response = find_elements(session, "css selector", "foo")
assert_error(response, "no such window")
@@ -52,6 +49,51 @@ def test_find_elements(session, using, value):
assert len(response.body["value"]) == 1
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>link text</a>", "link text"),
+ ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
+ ("<a href=#>link<br>text</a>", "link\ntext"),
+ ("<a href=#>link&amp;text</a>", "link&text"),
+ ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
+ ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
+])
+def test_find_elements_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document))
+ expected = session.execute_script("return document.links[1];")
+
+ response = find_elements(session, "link text", value)
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ found_element = value[0]
+ assert_same_element(session, found_element, expected)
+
+
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>partial link text</a>", "link"),
+ ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
+ ("<a href=#>partial link text</a>", "k t"),
+ ("<a href=#>partial link<br>text</a>", "k\nt"),
+ ("<a href=#>partial link&amp;text</a>", "k&t"),
+ ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
+ ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
+])
+def test_find_elements_partial_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<a href=#>not wanted</a><br/>{0}".format(document))
+ expected = session.execute_script("return document.links[1];")
+
+ response = find_elements(session, "partial link text", value)
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ found_element = value[0]
+ assert_same_element(session, found_element, expected)
+
+
@pytest.mark.parametrize("using,value", [("css selector", "#wontExist")])
def test_no_element(session, using, value):
# Step 8 - 9
@@ -67,8 +109,9 @@ def test_no_element(session, using, value):
("tag name", "a"),
("xpath", "//*[name()='a']")])
def test_xhtml_namespace(session, using, value):
- session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml")
- expected = session.execute_script("return document.links[0]")
+ session.url = inline("""<a href="#" id="linkText">full link text</a>""",
+ doctype="xhtml")
+ expected = session.execute_script("return document.links[0];")
response = find_elements(session, using, value)
value = assert_success(response)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py
index 2edc0406c66..4dd8a4a538a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_retrieval/find_elements_from_element.py
@@ -48,6 +48,53 @@ def test_find_elements(session, using, value):
assert_success(response)
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>link text</a>", "link text"),
+ ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
+ ("<a href=#>link<br>text</a>", "link\ntext"),
+ ("<a href=#>link&amp;text</a>", "link&text"),
+ ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
+ ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
+])
+def test_find_elements_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document))
+ element = session.find.css("div", all=False)
+ expected = session.execute_script("return document.links[1];")
+
+ response = find_elements(session, element.id, "link text", value)
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ found_element = value[0]
+ assert_same_element(session, found_element, expected)
+
+
+@pytest.mark.parametrize("document,value", [
+ ("<a href=#>partial link text</a>", "link"),
+ ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
+ ("<a href=#>partial link text</a>", "k t"),
+ ("<a href=#>partial link<br>text</a>", "k\nt"),
+ ("<a href=#>partial link&amp;text</a>", "k&t"),
+ ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
+ ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
+])
+def test_find_elements_partial_link_text(session, document, value):
+ # Step 8 - 9
+ session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document))
+ element = session.find.css("div", all=False)
+ expected = session.execute_script("return document.links[1];")
+
+ response = find_elements(session, element.id, "partial link text", value)
+ value = assert_success(response)
+ assert isinstance(value, list)
+ assert len(value) == 1
+
+ found_element = value[0]
+ assert_same_element(session, found_element, expected)
+
+
@pytest.mark.parametrize("using,value", [("css selector", "#wontExist")])
def test_no_element(session, using, value):
# Step 8 - 9
@@ -64,7 +111,8 @@ def test_no_element(session, using, value):
("tag name", "a"),
("xpath", "//*[name()='a']")])
def test_xhtml_namespace(session, using, value):
- session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml")
+ session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""",
+ doctype="xhtml")
from_element = session.execute_script("""return document.querySelector("p")""")
expected = session.execute_script("return document.links[0]")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py
index 43eecc5fd48..36dd78f8c79 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window.py
@@ -16,6 +16,12 @@ def fullscreen(session):
return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id)
+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)")
+
+
# 10.7.5 Fullscreen Window
@@ -135,11 +141,6 @@ def test_handle_prompt_missing_value(session, create_dialog):
assert read_global(session, "dismiss3") == None
-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_fullscreen(session):
"""
4. Call fullscreen an element with the current top-level browsing
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py
index 5c0ef72bf84..ff451de9d75 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window.py
@@ -10,6 +10,11 @@ def minimize(session):
return session.transport.send("POST", "session/%s/window/minimize" % session.session_id)
+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)")
+
# 10.7.4 Minimize Window
@@ -135,11 +140,11 @@ def test_fully_exit_fullscreen(session):
"""
session.window.fullscreen()
- assert session.execute_script("return window.fullScreen") is True
+ assert is_fullscreen(session) is True
response = minimize(session)
assert_success(response)
- assert session.execute_script("return window.fullScreen") is False
+ assert is_fullscreen(session) is False
assert session.execute_script("return document.hidden") is True
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py
index f945f19a26d..d032b9b26ea 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect.py
@@ -13,6 +13,11 @@ alert_doc = inline("<script>window.alert()</script>")
def set_window_rect(session, rect):
return session.transport.send("POST", "session/%s/window/rect" % session.session_id, 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)")
+
# 10.7.2 Set Window Rect
@@ -293,14 +298,14 @@ def test_fully_exit_fullscreen(session):
3. Exit fullscreen document.
"""
session.window.fullscreen()
- assert session.execute_script("return window.fullScreen") is True
+ assert is_fullscreen(session) is True
response = set_window_rect(session, {"width": 400, "height": 400})
value = assert_success(response)
assert value["width"] == 400
assert value["height"] == 400
- assert session.execute_script("return window.fullScreen") is False
+ assert is_fullscreen(session) is False
def test_restore_from_minimized(session):
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html
index db177aebe38..04d4dedc2c8 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html
@@ -378,6 +378,52 @@
}));
}, 'replaceTrack(): original track attachment stats present after replacing');
+ promise_test(async function() {
+ const caller = new RTCPeerConnection();
+ const callee = new RTCPeerConnection();
+ let [tracks, streams] = await getUserMediaTracksAndStreams(2);
+ let sender = caller.addTrack(tracks[0], streams[0]);
+ callee.addTrack(tracks[1], streams[1]);
+ exchangeIceCandidates(caller, callee);
+ await doSignalingHandshake(caller, callee);
+ await onIceConnectionStateCompleted(caller);
+ let receiver = caller.getReceivers()[0];
+
+ // Obtain inbound and outbound RTP stream stats on a full stats report.
+ let fullReport = await caller.getStats();
+ let outboundTrackStats = findStatsByTypeAndId(
+ fullReport, 'track', sender.track.id);
+ let outboundStats = findStatsByTypeAndMember(
+ fullReport, 'outbound-rtp', 'trackId', outboundTrackStats.id);
+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream');
+ let inboundTrackStats = findStatsByTypeAndId(
+ fullReport, 'track', receiver.track.id);
+ let inboundStats = findStatsByTypeAndMember(
+ fullReport, 'inbound-rtp', 'trackId', inboundTrackStats.id);
+ assert_true(inboundStats != null, 'Has stats for inbound RTP stream');
+
+ // Perform stats selection algorithm with sender selector. The result should
+ // contain the outbound-rtp but not the inbound-rtp.
+ let senderReport = await sender.getStats();
+ assert_true(senderReport.has(outboundStats.id));
+ assert_false(senderReport.has(inboundStats.id));
+
+ // Validate the stats graph, ensuring all stats objects are reachable and
+ // valid from the outbound-rtp stats.
+ validateStatsGraph(senderReport, senderReport.get(outboundStats.id));
+ // Ensure that the stats graph contains some expected dictionaries.
+ assert_equals(findStatsOfType(senderReport, 'track').length, 1,
+ 'senderReport should contain track stats');
+ assert_equals(findStatsOfType(senderReport, 'transport').length, 1,
+ 'senderReport should contain transport stats');
+ assert_equals(findStatsOfType(senderReport, 'candidate-pair').length, 1,
+ 'senderReport should contain candidate-pair stats');
+ assert_equals(findStatsOfType(senderReport, 'local-candidate').length, 1,
+ 'senderReport should contain local-candidate stats');
+ assert_equals(findStatsOfType(senderReport, 'remote-candidate').length, 1,
+ 'senderReport should contain remote-candidate stats');
+ }, 'RTCRtpSender.getStats() contains only outbound-rtp and related stats');
+
// Helpers.
function findStatsByTypeAndId(report, type, identifier) {
@@ -400,4 +446,53 @@
return null;
}
+ function findStatsOfType(report, type) {
+ let stats = [];
+ for (let it = report.values(), n = it.next(); !n.done; n = it.next()) {
+ if (n.value.type == type)
+ stats.push(n.value);
+ }
+ return stats;
+ }
+
+ // Returns a promise that is resolved when pc.iceConnectionState changes to
+ // 'completed'. This is when transport stats can be expected to have its
+ // selectedCandidatePairId defined.
+ async function onIceConnectionStateCompleted(pc) {
+ let resolver = new Resolver();
+ pc.oniceconnectionstatechange = e => {
+ if (pc.iceConnectionState == 'completed')
+ resolver.resolve();
+ };
+ return resolver.promise;
+ }
+
+ // Explores the stats graph starting from |stat|, validating each stat
+ // (validateRtcStats) and asserting that all stats of the report were visited.
+ function validateStatsGraph(report, stat) {
+ let visitedIds = new Set();
+ validateStatsGraphRecursively(report, stat.id, visitedIds);
+ assert_equals(visitedIds.size, report.size,
+ 'Entire stats graph should have been explored.')
+ }
+
+ function validateStatsGraphRecursively(report, currentId, visitedIds) {
+ if (visitedIds.has(currentId))
+ return;
+ visitedIds.add(currentId);
+ assert_true(report.has(currentId), 'Broken reference.');
+ let stat = report.get(currentId);
+ validateRtcStats(report, stat);
+ for (let member in stat) {
+ if (member.endsWith('Id')) {
+ validateStatsGraphRecursively(report, stat[member], visitedIds);
+ } else if (member.endsWith('Ids')) {
+ let ids = stat[member];
+ for (let i = 0; i < ids.length; ++i) {
+ validateStatsGraphRecursively(report, ids[i], visitedIds);
+ }
+ }
+ }
+ }
+
</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
index e5cb1eb99fa..5342625ea0c 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
@@ -3,6 +3,7 @@
<title>RTCRtpSender.prototype.getStats</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
<script src="dictionary-helper.js"></script>
<script src="RTCStats-helper.js"></script>
<script>
@@ -12,6 +13,9 @@
// webrtc-pc 20171130
// webrtc-stats 20171122
+ // The following helper functions are called from RTCPeerConnection-helper.js:
+ // doSignalingHandshake
+
// The following helper function is called from RTCStats-helper.js
// validateStatsReport
// assert_stats_report_has_stats
@@ -35,31 +39,28 @@
objects added.
*/
- promise_test(() => {
- const pc = new RTCPeerConnection();
- const { sender } = pc.addTransceiver('audio');
+ promise_test(async () => {
+ const caller = new RTCPeerConnection();
+ const callee = new RTCPeerConnection();
+ const { sender } = caller.addTransceiver('audio');
- return sender.getStats()
- .then(statsReport => {
- validateStatsReport(statsReport);
- assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
- });
+ await doSignalingHandshake(caller, callee);
+ const statsReport = await sender.getStats();
+ validateStatsReport(statsReport);
+ assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
}, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats');
- promise_test(() => {
- const pc = new RTCPeerConnection();
-
- return navigator.mediaDevices.getUserMedia({ audio: true })
- .then(mediaStream => {
- const [track] = mediaStream.getTracks();
- const sender = pc.addTrack(track, mediaStream);
+ promise_test(async () => {
+ const caller = new RTCPeerConnection();
+ const callee = new RTCPeerConnection();
+ const stream = await navigator.mediaDevices.getUserMedia({audio:true});
+ const [track] = stream.getTracks();
+ const sender = caller.addTrack(track, stream);
- return sender.getStats()
- .then(statsReport => {
- validateStatsReport(statsReport);
- assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
- });
- })
+ await doSignalingHandshake(caller, callee);
+ const statsReport = await sender.getStats();
+ validateStatsReport(statsReport);
+ assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
}, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats');
</script>