aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-10-01 10:52:57 +0000
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2019-10-01 13:54:31 +0000
commit38ab56be1a5a5850d51b85b19ed730f12d294f6c (patch)
treec24ee2fe0b252985a03d87c6f1546a6642ac8e06
parent1b6715158dd9f04d63545f0c47a4605af3966aa9 (diff)
downloadservo-38ab56be1a5a5850d51b85b19ed730f12d294f6c.tar.gz
servo-38ab56be1a5a5850d51b85b19ed730f12d294f6c.zip
Update web-platform-tests to revision f1e1bd6bfa544af8059ff8ef79d622281f9ec0a8
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini3
-rw-r--r--tests/wpt/metadata/MANIFEST.json482
-rw-r--r--tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini11
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini19
-rw-r--r--tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini2
-rw-r--r--tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/.taskcluster.yml1
-rw-r--r--tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js10
-rw-r--r--tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js30
-rw-r--r--tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js44
-rw-r--r--tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js26
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html31
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html30
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html118
-rw-r--r--tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html96
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html105
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html362
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html394
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html397
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html403
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html362
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html397
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html165
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html167
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html169
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html167
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html169
-rw-r--r--tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html141
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html116
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl8
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-animations.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/css-transitions.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/entries-api.idl5
-rw-r--r--tests/wpt/web-platform-tests/interfaces/presentation-api.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl8
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-animations.idl24
-rw-r--r--tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webaudio.idl135
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl67
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webusb.idl23
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js44
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js44
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html161
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html160
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js2
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js2
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py1
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py19
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html8
-rw-r--r--tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js24
-rw-r--r--tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js25
-rw-r--r--tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html54
64 files changed, 5153 insertions, 163 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index a9e46713244..76b398963ae 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: TIMEOUT
+ expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index 6a3af4e2ece..947e223fb28 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -14,9 +14,6 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
[url-with-fetch.any.html]
[Untitled]
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 2f8103575ef..7182b446c23 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -14251,6 +14251,18 @@
{}
]
],
+ "payment-handler/change-shipping-address-manual.https.html": [
+ [
+ "payment-handler/change-shipping-address-manual.https.html",
+ {}
+ ]
+ ],
+ "payment-handler/change-shipping-option-manual.https.html": [
+ [
+ "payment-handler/change-shipping-option-manual.https.html",
+ {}
+ ]
+ ],
"payment-handler/payment-request-event-manual.https.html": [
[
"payment-handler/payment-request-event-manual.https.html",
@@ -127921,6 +127933,90 @@
{}
]
],
+ "css/css-grid/subgrid/repeat-auto-fill-001.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-001.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-002.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-002.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-003.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-003.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-004.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-004.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-005.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-005.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-006.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-006.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-007.html": [
+ [
+ "css/css-grid/subgrid/repeat-auto-fill-007.html",
+ [
+ [
+ "/css/css-grid/subgrid/repeat-auto-fill-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-grid/subgrid/subgrid-item-block-size-001.html": [
[
"css/css-grid/subgrid/subgrid-item-block-size-001.html",
@@ -250290,6 +250386,18 @@
"css/css-grid/subgrid/orthogonal-writing-mode-004-ref.html": [
[]
],
+ "css/css-grid/subgrid/repeat-auto-fill-001-ref.html": [
+ []
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-004-ref.html": [
+ []
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-005-ref.html": [
+ []
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-007-ref.html": [
+ []
+ ],
"css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [
[]
],
@@ -273882,6 +273990,9 @@
"interfaces/webrtc-dscp.idl": [
[]
],
+ "interfaces/webrtc-identity.idl": [
+ []
+ ],
"interfaces/webrtc-stats.idl": [
[]
],
@@ -275679,6 +275790,12 @@
"payment-handler/app-change-payment-method.js": [
[]
],
+ "payment-handler/app-change-shipping-address.js": [
+ []
+ ],
+ "payment-handler/app-change-shipping-option.js": [
+ []
+ ],
"payment-handler/app-supports-shipping-contact-delegation.js": [
[]
],
@@ -308474,6 +308591,144 @@
}
]
],
+ "compression/decompression-empty-input.any.js": [
+ [
+ "compression/decompression-empty-input.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-empty-input.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-empty-input.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-empty-input.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ]
+ ],
+ "compression/decompression-split-chunk.any.js": [
+ [
+ "compression/decompression-split-chunk.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-split-chunk.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-split-chunk.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-split-chunk.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ]
+ ],
+ "compression/decompression-uint8array-output.any.js": [
+ [
+ "compression/decompression-uint8array-output.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-uint8array-output.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-uint8array-output.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "compression/decompression-uint8array-output.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "worker"
+ ]
+ ]
+ }
+ ]
+ ],
"console/console-is-a-namespace.any.js": [
[
"console/console-is-a-namespace.any.html",
@@ -311807,6 +312062,18 @@
{}
]
],
+ "cookies/samesite/about-blank-subresource.https.html": [
+ [
+ "cookies/samesite/about-blank-subresource.https.html",
+ {}
+ ]
+ ],
+ "cookies/samesite/about-blank-toplevel.https.html": [
+ [
+ "cookies/samesite/about-blank-toplevel.https.html",
+ {}
+ ]
+ ],
"cookies/samesite/fetch.https.html": [
[
"cookies/samesite/fetch.https.html",
@@ -314110,6 +314377,12 @@
{}
]
],
+ "css/css-box/animation/margin-interpolation.html": [
+ [
+ "css/css-box/animation/margin-interpolation.html",
+ {}
+ ]
+ ],
"css/css-box/animation/padding-interpolation.html": [
[
"css/css-box/animation/padding-interpolation.html",
@@ -314524,6 +314797,12 @@
{}
]
],
+ "css/css-color/animation/opacity-interpolation.html": [
+ [
+ "css/css-color/animation/opacity-interpolation.html",
+ {}
+ ]
+ ],
"css/css-color/color-function-parsing.html": [
[
"css/css-color/color-function-parsing.html",
@@ -314886,6 +315165,12 @@
{}
]
],
+ "css/css-flexbox/animation/order-interpolation.html": [
+ [
+ "css/css-flexbox/animation/order-interpolation.html",
+ {}
+ ]
+ ],
"css/css-flexbox/display_flex_exist.html": [
[
"css/css-flexbox/display_flex_exist.html",
@@ -319144,6 +319429,12 @@
{}
]
],
+ "css/css-masking/animations/clip-path-interpolation.html": [
+ [
+ "css/css-masking/animations/clip-path-interpolation.html",
+ {}
+ ]
+ ],
"css/css-masking/clip-path/interpolation.html": [
[
"css/css-masking/clip-path/interpolation.html",
@@ -319552,6 +319843,12 @@
{}
]
],
+ "css/css-overflow/overflow-codependent-scrollbars.html": [
+ [
+ "css/css-overflow/overflow-codependent-scrollbars.html",
+ {}
+ ]
+ ],
"css/css-overflow/overflow-inline-transform-relative.html": [
[
"css/css-overflow/overflow-inline-transform-relative.html",
@@ -322300,6 +322597,12 @@
{}
]
],
+ "css/css-tables/animations/border-spacing-interpolation.html": [
+ [
+ "css/css-tables/animations/border-spacing-interpolation.html",
+ {}
+ ]
+ ],
"css/css-tables/border-spacing-included-in-sizes-001.html": [
[
"css/css-tables/border-spacing-included-in-sizes-001.html",
@@ -414413,6 +414716,23 @@
{}
]
],
+ "webrtc-identity/idlharness.https.window.js": [
+ [
+ "webrtc-identity/idlharness.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/WebIDLParser.js"
+ ],
+ [
+ "script",
+ "/resources/idlharness.js"
+ ]
+ ]
+ }
+ ]
+ ],
"webrtc-quic/RTCQuicStream.https.html": [
[
"webrtc-quic/RTCQuicStream.https.html",
@@ -420374,6 +420694,12 @@
{}
]
],
+ "webxr/xrReferenceSpace_originOffset_viewer.https.html": [
+ [
+ "webxr/xrReferenceSpace_originOffset_viewer.https.html",
+ {}
+ ]
+ ],
"webxr/xrRigidTransform_constructor.https.html": [
[
"webxr/xrRigidTransform_constructor.https.html",
@@ -446181,7 +446507,7 @@
"support"
],
".taskcluster.yml": [
- "dffccbb7971382d599ff622fb31a949fa570fa49",
+ "b23cc93e633021686192b5cc1acbb7d8b6b3fe96",
"support"
],
".well-known/README.md": [
@@ -458201,7 +458527,7 @@
"reftest"
],
"compression/decompression-bad-chunks.any.js": [
- "8f44ffd902f0838cecf72be50245ab4c683fc09c",
+ "b8954905cbfce79893152e32200cc16e6c3f815b",
"testharness"
],
"compression/decompression-constructor-error.any.js": [
@@ -458212,6 +458538,18 @@
"11d8736cb225d6ce575677dcdb70b0a19dd4f65f",
"testharness"
],
+ "compression/decompression-empty-input.any.js": [
+ "ff4cff522a4a7ba0ba3eedb79c4d39b0752c9caf",
+ "testharness"
+ ],
+ "compression/decompression-split-chunk.any.js": [
+ "a54541657af089e884fe995383796c5a637545d3",
+ "testharness"
+ ],
+ "compression/decompression-uint8array-output.any.js": [
+ "06c421a82071651429e831daaa20e945e8011efb",
+ "testharness"
+ ],
"conformance-checkers/META.yml": [
"978b5c85721c28f267ec21ceb620017514441385",
"support"
@@ -480868,6 +481206,14 @@
"d5c9b8ada3f1bce6ebfe35efd0d6f288aa5ca5e3",
"testharness"
],
+ "cookies/samesite/about-blank-subresource.https.html": [
+ "0a19f30d34758e0b9865b2300e5658ec6efbfe0c",
+ "testharness"
+ ],
+ "cookies/samesite/about-blank-toplevel.https.html": [
+ "3a4dde7673d13dec2daf7f83b3082a5589e2e688",
+ "testharness"
+ ],
"cookies/samesite/fetch.https.html": [
"4daf357004a71cea5b0e58a44bf8919d96ad7ce8",
"testharness"
@@ -480909,7 +481255,7 @@
"support"
],
"cookies/samesite/resources/iframe-subresource-report.html": [
- "fad80534f22bdc63e7a4827cef07b17335134b71",
+ "1dceb4e43681c81b6c1b8877fd2d9f2b34391a02",
"support"
],
"cookies/samesite/resources/navigate.html": [
@@ -546112,6 +546458,10 @@
"dde409360faf79a301c3ae3ea34a995d154d7bb4",
"support"
],
+ "css/css-box/animation/margin-interpolation.html": [
+ "088836cbbd18d0daf203de7dbacfb65733e35813",
+ "testharness"
+ ],
"css/css-box/animation/padding-interpolation.html": [
"3bf284117960fe78300e95140244d309f8f439a4",
"testharness"
@@ -546520,6 +546870,10 @@
"4b39fdcf796083ace917f0a021a697c6e4eb7214",
"testharness"
],
+ "css/css-color/animation/opacity-interpolation.html": [
+ "ce26a8c79939e1d35f5ea35686fc272aad765914",
+ "testharness"
+ ],
"css/css-color/blacktext-ref.html": [
"ddfa9100cbef6094375df8b40eeb9673e690d4f7",
"support"
@@ -551276,6 +551630,10 @@
"da69a06891ee2d16f91db5d839e14aa2d876b604",
"testharness"
],
+ "css/css-flexbox/animation/order-interpolation.html": [
+ "8096fc3db661078029f991a45f789f439108849c",
+ "testharness"
+ ],
"css/css-flexbox/anonymous-flex-item-001.html": [
"3e749d43f76981a5cc0b372c7ba0c364c350b6b2",
"reftest"
@@ -565808,6 +566166,50 @@
"4a0edd7e6d5aefe06fc0d9989c84d3871ea61a14",
"reftest"
],
+ "css/css-grid/subgrid/repeat-auto-fill-001-ref.html": [
+ "bbf5d374589b29c9c0dcb04b941160a94130b3a1",
+ "support"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-001.html": [
+ "643cde377e66416dbc4047124d1157b0679eb8f5",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-002.html": [
+ "38d0bea0d08e6e1b1691a595ac9a1c2dfea59adb",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-003.html": [
+ "b58799bd86bd1ad1f7875a6c9da7e8247136e6f8",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-004-ref.html": [
+ "07ba960200b1fe9ba69448da8e5e9ff1ebf547fd",
+ "support"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-004.html": [
+ "beacff588a2c6209ee89b8715eccd374b1847ba8",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-005-ref.html": [
+ "95976e8216d8be0cb14e57fa4d9d06600c82c98f",
+ "support"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-005.html": [
+ "0cf16d47a27e1105d12ef595e8864d46793e2790",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-006.html": [
+ "4a16d8e4a9b9c476fce6b8e2bb653dcb59431029",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-007-ref.html": [
+ "9bc2eeff1c7dd57873058439c9072eaa16f9d441",
+ "support"
+ ],
+ "css/css-grid/subgrid/repeat-auto-fill-007.html": [
+ "949d8296fef40637101cb8bdb24f18710e4e3854",
+ "reftest"
+ ],
"css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [
"d264a3455a6c580976d2519ab4e0eb206b1164bf",
"support"
@@ -567640,6 +568042,10 @@
"7f92755b092845d3d550568e0572453801451f3d",
"support"
],
+ "css/css-masking/animations/clip-path-interpolation.html": [
+ "21c34f1f2b75ec7345a97b00db62a49b038cf026",
+ "testharness"
+ ],
"css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [
"269e8feed2d3c21774a7c94729c3551899ce4d92",
"reftest"
@@ -570712,6 +571118,10 @@
"2ed8d2687a33608e0e70884ad2ea59330d2b09e3",
"reftest"
],
+ "css/css-overflow/overflow-codependent-scrollbars.html": [
+ "eb0e4f5ea2ed9a97c0931c2c53de5e62e72ba1dd",
+ "testharness"
+ ],
"css/css-overflow/overflow-inline-transform-relative.html": [
"4df7b6389432cc6c65bae3fe3b5b9c2f00ba7bde",
"testharness"
@@ -578424,6 +578834,10 @@
"91439a69c9b1765cdbaf7e9614180d080ab32907",
"reftest"
],
+ "css/css-tables/animations/border-spacing-interpolation.html": [
+ "02e1cc62296501417b7ce8d02136b57e5342f332",
+ "testharness"
+ ],
"css/css-tables/anonymous-table-cell-margin-collapsing.html": [
"23b467ebacc983122a632f4d5971c8daca569420",
"reftest"
@@ -649657,11 +650071,11 @@
"support"
],
"interfaces/css-animation-worklet.idl": [
- "4aca84e5a024efdc2d3e674540bf2091758551c9",
+ "2c46cc7c94c65d6928db9f4e90a57c6188815d8e",
"support"
],
"interfaces/css-animations.idl": [
- "f87015f6a87fccc0accab30920cd8371eee99e63",
+ "9b34bde2330497afe6628da8e01946c27cf89821",
"support"
],
"interfaces/css-conditional.idl": [
@@ -649713,7 +650127,7 @@
"support"
],
"interfaces/css-transitions.idl": [
- "be5a635112b83cb4315006ac5a86ae7edc7fa43c",
+ "15ce4b30f211012b5fd9e6a713d92c0ea1045a54",
"support"
],
"interfaces/css-typed-om.idl": [
@@ -649745,7 +650159,7 @@
"support"
],
"interfaces/entries-api.idl": [
- "548aec13ab70eeedb9ba01ff96e0b3cb1d783510",
+ "52693138a4cd9d86f9a48a8e5300a8006298defb",
"support"
],
"interfaces/event-timing.idl": [
@@ -649945,7 +650359,7 @@
"support"
],
"interfaces/presentation-api.idl": [
- "c1e566538aa0211ecebbd8d177765fc1dd02c2ce",
+ "dfaa022b95249eb020e6fb8e0495156a8c0744ee",
"support"
],
"interfaces/proximity.idl": [
@@ -650009,7 +650423,7 @@
"support"
],
"interfaces/shape-detection-api.idl": [
- "0144f04e046720d20f91a98af9d5c651e95b06fd",
+ "51c996959bea2acc1b2d0a3c3be438b0c6182e23",
"support"
],
"interfaces/speech-api.idl": [
@@ -650061,11 +650475,11 @@
"support"
],
"interfaces/web-animations.idl": [
- "89993896508fa04e87ec965211b3152e24975934",
+ "6fd172ce425d570d097fcb573115091c83cc5484",
"support"
],
"interfaces/web-bluetooth.idl": [
- "f515dda1a814ee1121623033684b3020c355f9ec",
+ "ec7a8e71ca09c7648801e6f2bb91c711c857fe34",
"support"
],
"interfaces/web-nfc.idl": [
@@ -650077,7 +650491,7 @@
"support"
],
"interfaces/webaudio.idl": [
- "1b6af25b3b363411bfb365b1b3b21639584cfa76",
+ "3869d5d14a66c39e0281bb94a2e41ee5f2e395ba",
"support"
],
"interfaces/webauthn.idl": [
@@ -650104,6 +650518,10 @@
"732230b4a339d2484fa5242fdfc77224400796b2",
"support"
],
+ "interfaces/webrtc-identity.idl": [
+ "5a59a4887ac7eb0ad39cfd82fee052828d7af316",
+ "support"
+ ],
"interfaces/webrtc-stats.idl": [
"c2dc1f7a0b0a482d226b881995414b558fbe2baf",
"support"
@@ -650113,7 +650531,7 @@
"support"
],
"interfaces/webusb.idl": [
- "fcca851b8b535f4886bd56f30714971cf22c8c40",
+ "ad5c480454d7cd6feb178fa450663b9977eb51cd",
"support"
],
"interfaces/webvtt.idl": [
@@ -663272,6 +663690,14 @@
"0e5a4768e7626f666077e794e0731c9a1e3e9d35",
"support"
],
+ "payment-handler/app-change-shipping-address.js": [
+ "df39258dc92642b130c6765f6c75d7efb523712f",
+ "support"
+ ],
+ "payment-handler/app-change-shipping-option.js": [
+ "ac3307b619ccfb464a5fa44820cea39befdd8f2e",
+ "support"
+ ],
"payment-handler/app-supports-shipping-contact-delegation.js": [
"770e2de64f13eeef8a1ee21783c2997facc8ff0b",
"support"
@@ -663308,6 +663734,14 @@
"56690d2b26ed671f773a16853463126e57735f77",
"manual"
],
+ "payment-handler/change-shipping-address-manual.https.html": [
+ "3b98d56a2516ed96c20c4c04533a129c2054c718",
+ "manual"
+ ],
+ "payment-handler/change-shipping-option-manual.https.html": [
+ "00d1aee70b991924fde8562dffc5691567d676fb",
+ "manual"
+ ],
"payment-handler/idlharness.https.any.js": [
"878114ec7ed878d3e754341cbffa138092fee129",
"testharness"
@@ -676353,7 +676787,7 @@
"support"
],
"resources/chromium/mock-barcodedetection.js": [
- "2558bbda58913ec51c36bdce28e0f84a1aea32e7",
+ "703db425590d8a8450f285878abb025a42a15122",
"support"
],
"resources/chromium/mock-barcodedetection.js.headers": [
@@ -676361,7 +676795,7 @@
"support"
],
"resources/chromium/mock-facedetection.js": [
- "1275e4dd2f5e24988e723a728dbf5bb4acc4c6cb",
+ "01306a2a0c7f470f56d746aa68dff3fe3636c575",
"support"
],
"resources/chromium/mock-facedetection.js.headers": [
@@ -692097,7 +692531,7 @@
"support"
],
"tools/wpt/tests/test_wpt.py": [
- "a2498333c2b51e7c985e28124d0c75a0fd5352c3",
+ "6569580e9ff471784e307b7e84555935dec99586",
"support"
],
"tools/wpt/tox.ini": [
@@ -692365,7 +692799,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome.py": [
- "71f246f4b6d8452f321517ac62dc42e0db978e42",
+ "c9de22038ddcd69daf4b8181dc938444d9266a10",
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [
@@ -692589,7 +693023,7 @@
"support"
],
"tools/wptrunner/wptrunner/metadata.py": [
- "42f3b00dab5b926f918c23a352bef935f07bbf4c",
+ "15bbf94c33cea80ab4d0fdd958618f264fa57ab1",
"support"
],
"tools/wptrunner/wptrunner/products.py": [
@@ -693457,7 +693891,7 @@
"support"
],
"trusted-types/trusted-types-reporting.tentative.https.html": [
- "11ef305064d2af10ffc07ca09e51dcb1a3661e76",
+ "0104ba358058199a77f1af5afb27e3255da8da64",
"testharness"
],
"trusted-types/trusted-types-reporting.tentative.https.html.headers": [
@@ -699164,6 +699598,10 @@
"90363662f742fbf1d31634030d2b470e08fe1421",
"support"
],
+ "webrtc-identity/idlharness.https.window.js": [
+ "da1cb85a8e7ef147729d4a4f1a77493862dea48c",
+ "testharness"
+ ],
"webrtc-quic/META.yml": [
"740c8d2fe84beafbcb7f98cef29aff2378721132",
"support"
@@ -704305,7 +704743,7 @@
"support"
],
"webxr/resources/webxr_test_asserts.js": [
- "24b5274bc23d4e601e94eebd93968d9c30942b08",
+ "863b994572441d0efdbe92dbd8aec29f9152069f",
"support"
],
"webxr/resources/webxr_test_constants.js": [
@@ -704444,6 +704882,10 @@
"cfa3cc7ca2fe7cfbd656d9164b0d1ab3dd60ca41",
"testharness"
],
+ "webxr/xrReferenceSpace_originOffset_viewer.https.html": [
+ "2f93914e851ed55d5f9e60cc131316132e7ca226",
+ "testharness"
+ ],
"webxr/xrRigidTransform_constructor.https.html": [
"15a7f2b5771a78dba2036ec46933e826c9a54355",
"testharness"
diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini
new file mode 100644
index 00000000000..ffd445b07e8
--- /dev/null
+++ b/tests/wpt/metadata/css/css-color/animation/opacity-interpolation.html.ini
@@ -0,0 +1,4 @@
+[opacity-interpolation.html]
+ [opacity interpolation]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini
new file mode 100644
index 00000000000..e004f85c24c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/animation/order-interpolation.html.ini
@@ -0,0 +1,4 @@
+[order-interpolation.html]
+ [order interpolation]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
deleted file mode 100644
index e6e1f29e274..00000000000
--- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[matchMedia-display-none-iframe.html]
- expected: ERROR
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 9f5fc515988..c335c5163e1 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -315,15 +315,18 @@
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index ac4cbcba706..b2ffc8abf78 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -53,9 +53,9 @@
[combined text/javascript ]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
+ [separate text/javascript x/x]
expected: FAIL
- [separate text/javascript x/x]
+ [separate text/javascript error]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
new file mode 100644
index 00000000000..385376c7321
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_4.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
index ad8840fbb68..940516ddd33 100644
--- a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
+++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html.ini
@@ -1,5 +1,24 @@
[open-features-negative-top-left.html]
type: testharness
+ expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL
+ [features "top=-204" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "top=-204.5" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "left=-204" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "top=-0" should NOT set "top=204"]
+ expected: TIMEOUT
+
+ [features "left=-204.5" should NOT set "left=204"]
+ expected: TIMEOUT
+
+ [features "left=-0" should NOT set "left=204"]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
index 442db3cb549..2532dceabac 100644
--- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
+ expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
new file mode 100644
index 00000000000..178680e5d14
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
@@ -0,0 +1,2 @@
+[script-onerror-insertion-point-2.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini b/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini
index 27f6c5ed7a2..6ff00c31bef 100644
--- a/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini
+++ b/tests/wpt/metadata/webxr/xrBoundedReferenceSpace_updates.https.html.ini
@@ -1,5 +1,5 @@
[xrBoundedReferenceSpace_updates.https.html]
- expected: ERROR
+ expected: TIMEOUT
['XRBoundedReferenceSpace updates properly when the changes are applied]
expected: TIMEOUT
diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
deleted file mode 100644
index dbea4f293ad..00000000000
--- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transition_calc_implicit.html]
- expected: TIMEOUT
diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml
index dffccbb7971..b23cc93e633 100644
--- a/tests/wpt/web-platform-tests/.taskcluster.yml
+++ b/tests/wpt/web-platform-tests/.taskcluster.yml
@@ -282,7 +282,6 @@ tasks:
export TOXENV=py27;
./tools/ci/run_tc.py \
--browser=firefox \
- --channel=experimental \
--xvfb \
resources_unittest \
tools/ci/ci_resources_unittest.sh
diff --git a/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js b/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js
index 8f44ffd902f..b8954905cbf 100644
--- a/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js
+++ b/tests/wpt/web-platform-tests/compression/decompression-bad-chunks.any.js
@@ -34,20 +34,16 @@ const badChunks = [
{
name: 'shared Uint8Array',
get value() {
- new Uint8Array(new SharedArrayBuffer())
+ return new Uint8Array(new SharedArrayBuffer())
}
},
{
name: 'invalid deflate bytes',
- get value() {
- new Uint8Array([0, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36])
- }
+ value: new Uint8Array([0, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36])
},
{
name: 'invalid gzip bytes',
- get value() {
- new Uint8Array([0, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0])
- }
+ value: new Uint8Array([0, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0])
},
];
diff --git a/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js b/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js
new file mode 100644
index 00000000000..ff4cff522a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compression/decompression-empty-input.any.js
@@ -0,0 +1,30 @@
+// META: global=worker
+
+'use strict';
+
+const gzipEmptyValue = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+const deflateEmptyValue = new Uint8Array([120, 156, 3, 0, 0, 0, 0, 1]);
+
+promise_test(async t => {
+ const ds = new DecompressionStream('gzip');
+ const reader = ds.readable.getReader();
+ const writer = ds.writable.getWriter();
+ const writePromise = writer.write(gzipEmptyValue);
+ writer.close();
+ const { value, done } = await reader.read();
+ assert_true(done, "read() should set done");
+ assert_equals(value, undefined, "value should be undefined");
+ await writePromise;
+}, 'decompressing gzip empty input should work');
+
+promise_test(async t => {
+ const ds = new DecompressionStream('deflate');
+ const reader = ds.readable.getReader();
+ const writer = ds.writable.getWriter();
+ const writePromise = writer.write(deflateEmptyValue);
+ writer.close();
+ const { value, done } = await reader.read();
+ assert_true(done, "read() should set done");
+ assert_equals(value, undefined, "value should be undefined");
+ await writePromise;
+}, 'decompressing deflate empty input should work');
diff --git a/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js b/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js
new file mode 100644
index 00000000000..a54541657af
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compression/decompression-split-chunk.any.js
@@ -0,0 +1,44 @@
+// META: global=worker
+
+'use strict';
+
+const compressedBytesWithDeflate = new Uint8Array([120, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]);
+const compressedBytesWithGzip = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]);
+const expectedChunkValue = new TextEncoder().encode('expected output');
+
+async function decompressArrayBuffer(input, format, chunkSize) {
+ const ds = new DecompressionStream(format);
+ const reader = ds.readable.getReader();
+ const writer = ds.writable.getWriter();
+ for (let beginning = 0; beginning < input.length; beginning += chunkSize) {
+ writer.write(input.slice(beginning, beginning + chunkSize));
+ }
+ writer.close();
+ const out = [];
+ let totalSize = 0;
+ while (true) {
+ const { value, done } = await reader.read();
+ if (done) break;
+ out.push(value);
+ totalSize += value.byteLength;
+ }
+ const concatenated = new Uint8Array(totalSize);
+ let offset = 0;
+ for (const array of out) {
+ concatenated.set(array, offset);
+ offset += array.byteLength;
+ }
+ return concatenated;
+}
+
+for (let chunkSize = 1; chunkSize < 16; ++chunkSize) {
+ promise_test(async t => {
+ const decompressedData = await decompressArrayBuffer(compressedBytesWithDeflate, 'deflate', chunkSize);
+ assert_array_equals(decompressedData, expectedChunkValue, "value should match");
+ }, `decompressing splitted chunk into pieces of size ${chunkSize} should work in deflate`);
+
+ promise_test(async t => {
+ const decompressedData = await decompressArrayBuffer(compressedBytesWithGzip, 'gzip', chunkSize);
+ assert_array_equals(decompressedData, expectedChunkValue, "value should match");
+ }, `decompressing splitted chunk into pieces of size ${chunkSize} should work in gzip`);
+}
diff --git a/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js b/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js
new file mode 100644
index 00000000000..06c421a8207
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compression/decompression-uint8array-output.any.js
@@ -0,0 +1,26 @@
+// META: global=worker
+
+'use strict';
+
+const deflateChunkValue = new Uint8Array([120, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36]);
+const gzipChunkValue = new Uint8Array([31, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0]);
+
+promise_test(async t => {
+ const ds = new DecompressionStream('deflate');
+ const reader = ds.readable.getReader();
+ const writer = ds.writable.getWriter();
+ const writePromise = writer.write(deflateChunkValue);
+ const { value } = await reader.read();
+ assert_equals(value.constructor, Uint8Array, "type should match");
+ await writePromise;
+}, 'decompressing deflated output should give Uint8Array chunks');
+
+promise_test(async t => {
+ const ds = new DecompressionStream('gzip');
+ const reader = ds.readable.getReader();
+ const writer = ds.writable.getWriter();
+ const writePromise = writer.write(gzipChunkValue);
+ const { value } = await reader.read();
+ assert_equals(value.constructor, Uint8Array, "type should match");
+ await writePromise;
+}, 'decompressing gzip output should give Uint8Array chunks');
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html
new file mode 100644
index 00000000000..0a19f30d347
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-subresource.https.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<head>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/cookies/resources/cookie-helper.sub.js"></script>
+</head>
+<body onload="doTests()">
+ <script>
+ function doTests() {
+ promise_test(async function(t) {
+ var child = window.open("");
+ child.onmessage = (ev) => {
+ child.opener.postMessage(ev.data, '*');
+ };
+ var grandKid = child.document.createElement("iframe");
+ child.document.body.appendChild(grandKid);
+ var value = "" + Math.random();
+ await resetSameSiteCookies(SECURE_ORIGIN, value);
+
+ // Load at what cookies a subresource below an about:blank iframe
+ // inheritting this origin gets.
+ grandKid.src = SECURE_ORIGIN + "/cookies/samesite/resources/iframe-subresource-report.html"
+ var e = await wait_for_message("COOKIES", SECURE_ORIGIN);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_unspecified", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_lax", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_strict", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_none", value, true);
+ }, "SameSite cookies on subresource of top-level about:blank window");
+ }
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html
new file mode 100644
index 00000000000..3a4dde7673d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/samesite/about-blank-toplevel.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<head>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/cookies/resources/cookie-helper.sub.js"></script>
+</head>
+<body onload="doTests()">
+ <script>
+ function doTests() {
+ promise_test(async function(t) {
+ var child = window.open("");
+ child.onmessage = (ev) => {
+ child.opener.postMessage(ev.data, '*');
+ };
+ var grandKid = child.document.createElement("iframe");
+ child.document.body.appendChild(grandKid);
+ var value = "" + Math.random();
+ await resetSameSiteCookies(SECURE_ORIGIN, value);
+
+ // Using postToParent.py here to see cookies used when navigating the page.
+ grandKid.src = SECURE_ORIGIN + "/cookies/resources/postToParent.py"
+ var e = await wait_for_message("COOKIES", SECURE_ORIGIN);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_unspecified", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_lax", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_strict", value, true);
+ assert_cookie(SECURE_ORIGIN, e.data, "samesite_none", value, true);
+ }, "SameSite cookies with top-level about:blank window");
+ }
+ </script>
+</body>
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html b/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html
index fad80534f22..1dceb4e4368 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/resources/iframe-subresource-report.html
@@ -6,7 +6,8 @@ function reportSubresourceCookies() {
credFetch(SECURE_ORIGIN + "/cookies/resources/list.py")
.then(r => r.json())
.then(cookies => { cookies.type = "COOKIES";
- window.parent.postMessage(cookies, "*");});
+ target = window.opener ? window.opener : window.parent;
+ target.postMessage(cookies, "*");});
}
</script>
</head>
diff --git a/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html b/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html
new file mode 100644
index 00000000000..088836cbbd1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/animation/margin-interpolation.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>margin interpolation</title>
+<link rel="help" href="https://www.w3.org/TR/CSS2/box.html#margin-properties">
+<meta name="assert" content="margin supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ margin: 10px;
+ border: solid;
+ display: inline-block;
+}
+
+.target {
+ width: 40px;
+ height: 40px;
+ background-color: black;
+ display: inline-block;
+ margin: 30px;
+ opacity: 0.5;
+}
+
+.expected {
+ background-color: green;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <div>
+ <div class="target"></div>
+ </div>
+</template>
+
+<script>
+test_interpolation({
+ property: 'margin',
+ from: neutralKeyframe,
+ to: '20px',
+}, [
+ {at: -0.3, expect: '33px'},
+ {at: 0, expect: '30px'},
+ {at: 0.3, expect: '27px'},
+ {at: 0.6, expect: '24px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+ property: 'margin',
+ from: 'initial',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '-6px'},
+ {at: 0, expect: '0px'},
+ {at: 0.3, expect: '6px'},
+ {at: 0.6, expect: '12px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+ property: 'margin',
+ from: 'inherit',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '7px'},
+ {at: 0, expect: '10px'},
+ {at: 0.3, expect: '13px'},
+ {at: 0.6, expect: '16px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '25px'},
+]);
+
+test_interpolation({
+ property: 'margin',
+ from: 'unset',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '-6px'},
+ {at: 0, expect: '0px'},
+ {at: 0.3, expect: '6px'},
+ {at: 0.6, expect: '12px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '30px'},
+]);
+
+test_interpolation({
+ property: 'margin',
+ from: '0px',
+ to: '10px'
+}, [
+ {at: -0.3, expect: '-3px'},
+ {at: 0, expect: '0px'},
+ {at: 0.3, expect: '3px'},
+ {at: 0.6, expect: '6px'},
+ {at: 1, expect: '10px'},
+ {at: 1.5, expect: '15px'}
+]);
+
+test_interpolation({
+ property: 'margin',
+ from: '20px 40px 60px 80px',
+ to: '30px 50px 70px 90px'
+}, [
+ {at: -0.3, expect: '17px 37px 57px 77px'},
+ {at: 0, expect: '20px 40px 60px 80px'},
+ {at: 0.3, expect: '23px 43px 63px 83px'},
+ {at: 0.6, expect: '26px 46px 66px 86px'},
+ {at: 1, expect: '30px 50px 70px 90px'},
+ {at: 1.5, expect: '35px 55px 75px 95px'}
+]);
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html b/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html
new file mode 100644
index 00000000000..ce26a8c7993
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-color/animation/opacity-interpolation.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>opacity interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-color-3/#opacity">
+<meta name="assert" content="opacity supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ opacity: 0.8;
+}
+
+.target {
+ width: 100px;
+ height: 100px;
+ background-color: black;
+ display: inline-block;
+ opacity: 0.1;
+}
+
+.expected {
+ background-color: green;
+}
+</style>
+
+<body>
+<script>
+test_interpolation({
+ property: 'opacity',
+ from: neutralKeyframe,
+ to: '0.2',
+}, [
+ {at: -0.3, expect: '0.07'},
+ {at: 0, expect: '0.1'},
+ {at: 0.3, expect: '0.13'},
+ {at: 0.6, expect: '0.16'},
+ {at: 1, expect: '0.2'},
+ {at: 1.5, expect: '0.25'},
+]);
+
+test_interpolation({
+ property: 'opacity',
+ from: 'initial',
+ to: '0.2',
+}, [
+ {at: -0.3, expect: '1'},
+ {at: 0, expect: '1'},
+ {at: 0.3, expect: '0.76'},
+ {at: 0.6, expect: '0.52'},
+ {at: 1, expect: '0.2'},
+ {at: 1.5, expect: '0'},
+]);
+
+test_interpolation({
+ property: 'opacity',
+ from: 'inherit',
+ to: '0.2',
+}, [
+ {at: -0.3, expect: '0.98'},
+ {at: 0, expect: '0.8'},
+ {at: 0.3, expect: '0.62'},
+ {at: 0.6, expect: '0.44'},
+ {at: 1, expect: '0.2'},
+ {at: 1.5, expect: '0'},
+]);
+
+test_interpolation({
+ property: 'opacity',
+ from: 'unset',
+ to: '0.2',
+}, [
+ {at: -0.3, expect: '1'},
+ {at: 0, expect: '1'},
+ {at: 0.3, expect: '0.76'},
+ {at: 0.6, expect: '0.52'},
+ {at: 1, expect: '0.2'},
+ {at: 1.5, expect: '0'},
+]);
+
+test_interpolation({
+ property: 'opacity',
+ from: '0',
+ to: '1'
+}, [
+ {at: -0.3, expect: '0'}, // CSS opacity is [0-1].
+ {at: 0, expect: '0'},
+ {at: 0.3, expect: '0.3'},
+ {at: 0.6, expect: '0.6'},
+ {at: 1, expect: '1'},
+ {at: 1.5, expect: '1'}
+]);
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html b/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html
new file mode 100644
index 00000000000..8096fc3db66
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/animation/order-interpolation.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>order interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#order-property">
+<meta name="assert" content="order supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ order: 30;
+}
+
+.target {
+ order: 10;
+}
+</style>
+<body>
+<script>
+test_interpolation({
+ property: 'order',
+ from: neutralKeyframe,
+ to: '20',
+}, [
+ {at: -3, expect: '-20'},
+ {at: -0.5, expect: '5'},
+ {at: 0, expect: '10'},
+ {at: 0.3, expect: '13'},
+ {at: 0.6, expect: '16'},
+ {at: 1, expect: '20'},
+ {at: 1.5, expect: '25'},
+]);
+
+test_interpolation({
+ property: 'order',
+ from: 'initial',
+ to: '20',
+}, [
+ {at: -3, expect: '-60'},
+ {at: -0.5, expect: '-10'},
+ {at: 0, expect: '0'},
+ {at: 0.3, expect: '6'},
+ {at: 0.6, expect: '12'},
+ {at: 1, expect: '20'},
+ {at: 1.5, expect: '30'},
+]);
+
+test_interpolation({
+ property: 'order',
+ from: 'inherit',
+ to: '20',
+}, [
+ {at: -3, expect: '60'},
+ {at: -0.5, expect: '35'},
+ {at: 0, expect: '30'},
+ {at: 0.3, expect: '27'},
+ {at: 0.6, expect: '24'},
+ {at: 1, expect: '20'},
+ {at: 1.5, expect: '15'},
+]);
+
+test_interpolation({
+ property: 'order',
+ from: 'unset',
+ to: '20',
+}, [
+ {at: -3, expect: '-60'},
+ {at: -0.5, expect: '-10'},
+ {at: 0, expect: '0'},
+ {at: 0.3, expect: '6'},
+ {at: 0.6, expect: '12'},
+ {at: 1, expect: '20'},
+ {at: 1.5, expect: '30'},
+]);
+
+test_interpolation({
+ property: 'order',
+ from: '10',
+ to: '20'
+}, [
+ {at: -3.0, expect: '-20'},
+ {at: -0.5, expect: '5'},
+ {at: 0, expect: '10'},
+ {at: 0.3, expect: '13'},
+ {at: 0.6, expect: '16'},
+ {at: 1, expect: '20'},
+ {at: 1.5, expect: '25'}
+]);
+
+test_interpolation({
+ property: 'order',
+ from: '2',
+ to: '4'
+}, [
+ {at: -3.0, expect: '-4'},
+ {at: -0.5, expect: '1'},
+ {at: 0, expect: '2'},
+ {at: 0.3, expect: '3'},
+ {at: 0.6, expect: '3'},
+ {at: 1, expect: '4'},
+ {at: 1.5, expect: '5'}
+]);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html
new file mode 100644
index 00000000000..bbf5d374589
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001-ref.html
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: repeat(auto-fill, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: 3 / span 4;
+ grid-auto-rows: 8px;
+ background: grey;
+}
+
+.subgrid > :nth-child(2n) { background: black; }
+.subgrid > :nth-child(2n+1) { background: pink; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0e">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0f">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0g">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0h">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0i">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0j">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1e">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-5">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html
new file mode 100644
index 00000000000..643cde377e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-001-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-column: 3 / span 4;
+ grid-auto-rows: 8px;
+ background: grey;
+}
+
+.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
+.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */
+.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */
+.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */
+.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */
+.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */
+.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+
+.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */
+.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */
+.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */
+.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */
+.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */
+
+.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */
+.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */
+.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */
+.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */
+
+.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */
+.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */
+.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */
+
+.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */
+.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */
+
+.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */
+
+.subgrid > :nth-child(2n) { background: black; }
+.subgrid > :nth-child(2n+1) { background: pink; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0b">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0c">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0d">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0e">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0f">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0g">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0h">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0i">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0j">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1a">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1b">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1c">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1d">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1e">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2a">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2b">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2c">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2d">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3a">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3b">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3c">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4a">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4b">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-5">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html
new file mode 100644
index 00000000000..38d0bea0d08
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html
@@ -0,0 +1,397 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill, line-names) in parent subgrid</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-001-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: 3 / span 4;
+ grid-auto-rows: 8px;
+ background: grey;
+}
+.grid > .subgrid { grid-template-rows: auto; }
+.grid > .subgrid > .subgrid { grid-column: 1 / span 4; }
+
+.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
+.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */
+.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */
+.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */
+.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */
+.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */
+.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+
+.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */
+.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */
+.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */
+.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */
+.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */
+
+.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */
+.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */
+.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */
+.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */
+
+.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */
+.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */
+.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */
+
+.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */
+.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */
+
+.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */
+
+.subgrid > .subgrid > :nth-child(2n) { background: black; }
+.subgrid > .subgrid > :nth-child(2n+1) { background: pink; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0e"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0f"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0g"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0h"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0i"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0j"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1e"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-5"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html
new file mode 100644
index 00000000000..b58799bd86b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html
@@ -0,0 +1,403 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill, line-names) in orthogonal parent subgrid</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-001-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: 3 / span 4;
+ background: grey;
+}
+.grid > .subgrid > .subgrid {
+ writing-mode: vertical-lr;
+ grid-template-rows: subgrid;
+ grid-template-columns: initial;
+ grid-column: 1 / span 4;
+ grid-auto-columns: 8px;
+ grid-auto-flow: column;
+}
+
+.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
+.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */
+.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */
+.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */
+.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */
+.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */
+.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+
+.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */
+.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */
+.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */
+.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */
+.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */
+
+.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */
+.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */
+.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */
+.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */
+
+.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */
+.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */
+.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */
+
+.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */
+.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */
+
+.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */
+
+.subgrid > .subgrid > :nth-child(2n) { background: black; }
+.subgrid > .subgrid > :nth-child(2n+1) { background: pink; }
+.subgrid > .subgrid > * { writing-mode: horizontal-tb; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0b"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0c"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0d"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0e"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0f"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0g"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0h"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0i"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0j"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1a"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1b"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1c"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1d"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1e"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2a"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2b"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2c"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2d"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3a"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3b"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3c"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4a"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4b"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-5"><div class="subgrid">
+ <div style="grid-row:y 5"></div>
+ <div style="grid-row:y 4"></div>
+ <div style="grid-row:y 3"></div>
+ <div style="grid-row:y 2"></div>
+ <div style="grid-row:y 1"></div>
+ <div style="grid-row:y -1"></div>
+ <div style="grid-row:y -2"></div>
+ <div style="grid-row:y -3"></div>
+ <div style="grid-row:y -4"></div>
+ <div style="grid-row:y -5"></div>
+</div></div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html
new file mode 100644
index 00000000000..07ba960200b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004-ref.html
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: repeat(auto-fill, line-names) in RTL/LTR subgrids</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: 3 / span 4;
+ grid-auto-rows: 8px;
+ background: grey;
+}
+
+.subgrid > :nth-child(2n) { background: black; }
+.subgrid > :nth-child(2n+1) { background: pink; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0e">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0f">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0g">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0h">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0i">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-0j">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-1e">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-2d">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-3c">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4a">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-4b">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+<div class="grid"><div class="subgrid fill-5">
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:4"></div>
+ <div style="grid-column:3"></div>
+ <div style="grid-column:2"></div>
+ <div style="grid-column:1"></div>
+</div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html
new file mode 100644
index 00000000000..beacff588a2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html
@@ -0,0 +1,397 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill, line-names) in RTL/LTR subgrids</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-004-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 15px;
+ border: 1px solid;
+}
+
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: 3 / span 4;
+ grid-auto-rows: 8px;
+ background: grey;
+}
+.grid > .subgrid { grid-template-rows: auto; direction:rtl; }
+.grid > .subgrid > .subgrid { grid-column: 1 / span 4; direction:ltr; }
+
+.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
+.fill-0b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */
+.fill-0c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */
+.fill-0d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [z] [z] */
+.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [z] */
+.fill-0f { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+.fill-0g { grid-template-columns: subgrid [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0h { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [x] [x] [x] */
+.fill-0i { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [x] [x] */
+.fill-0j { grid-template-columns: subgrid [x] [x] [x] [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [x] */
+
+.fill-1a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] [z] } /* [y] [z] [z] [z] [z] */
+.fill-1b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] [z] } /* [x] [y] [z] [z] [z] */
+.fill-1c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [x] [y] [z] [z] */
+.fill-1d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [x] [y] [z] */
+.fill-1e { grid-template-columns: subgrid [x] [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [x] [y] */
+
+.fill-2a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] [z] } /* [y] [y] [z] [z] [z] */
+.fill-2b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] [z] } /* [x] [y] [y] [z] [z] */
+.fill-2c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) [z] } /* [x] [x] [y] [y] [z] */
+.fill-2d { grid-template-columns: subgrid [x] [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [x] [y] [y] */
+
+.fill-3a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */
+.fill-3b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) [z] } /* [x] [y] [y] [y] [z] */
+.fill-3c { grid-template-columns: subgrid [x] [x] repeat(auto-fill, [y]) } /* [x] [x] [y] [y] [y] */
+
+.fill-4a { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] } /* [y] [y] [y] [y] [z] */
+.fill-4b { grid-template-columns: subgrid [x] repeat(auto-fill, [y]) } /* [x] [y] [y] [y] [y] */
+
+.fill-5 { grid-template-columns: subgrid repeat(auto-fill, [y]) } /* [y] [y] [y] [y] [y] */
+
+.subgrid > .subgrid > :nth-child(2n) { background: black; }
+.subgrid > .subgrid > :nth-child(2n+1) { background: pink; }
+
+ </style>
+</head>
+<body>
+
+<div class="grid"><div class="subgrid fill-0a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0e"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0f"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0g"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0h"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0i"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-0j"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-1e"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-2d"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-3c"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4a"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-4b"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+<div class="grid"><div class="subgrid fill-5"><div class="subgrid">
+ <div style="grid-column:y 5"></div>
+ <div style="grid-column:y 4"></div>
+ <div style="grid-column:y 3"></div>
+ <div style="grid-column:y 2"></div>
+ <div style="grid-column:y 1"></div>
+ <div style="grid-column:y -1"></div>
+ <div style="grid-column:y -2"></div>
+ <div style="grid-column:y -3"></div>
+ <div style="grid-column:y -4"></div>
+ <div style="grid-column:y -5"></div>
+</div></div></div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html
new file mode 100644
index 00000000000..95976e8216d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005-ref.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: repeat(auto-fill / INTEGER, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 20px;
+ background: lightgrey;
+}
+
+.subgrid {
+ display: grid;
+ grid: auto / subgrid;
+ grid-column: 2 / span 4;
+ background: black;
+}
+
+item {
+ min-width: 0;
+ min-height: 10px;
+ background: grey;
+}
+
+ </style>
+</head>
+<body>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:2 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:2 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:3 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:2 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:2 / 3"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-column:1 / 2"></item>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html
new file mode 100644
index 00000000000..0cf16d47a27
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill / INTEGER, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-005-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 20px;
+ background: lightgrey;
+}
+
+.subgrid {
+ display: grid;
+ grid-column: 2 / span 4;
+ background: black;
+}
+
+item {
+ min-width: 0;
+ min-height: 10px;
+ grid-column:x -2 / x -1;
+ background: grey;
+}
+
+ </style>
+</head>
+<body>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] repeat(1,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(auto-fill,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-columns:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html
new file mode 100644
index 00000000000..4a16d8e4a9b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill / INTEGER, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-005-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 20px;
+ background: lightgrey;
+}
+
+.subgrid {
+ display: grid;
+ grid-column: 2 / span 4;
+ background: black;
+ writing-mode: vertical-lr;
+}
+
+item {
+ min-width: 0;
+ min-height: 10px;
+ grid-row:x -2 / x -1;
+ background: grey;
+ writing-mode: horizontal-tb;
+}
+
+ </style>
+</head>
+<body>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html
new file mode 100644
index 00000000000..9bc2eeff1c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007-ref.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: repeat(auto-fill / INTEGER, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 20px;
+ background: lightgrey;
+}
+
+.subgrid {
+ display: grid;
+ grid: subgrid / auto;
+ grid-column: 2 / span 4;
+ background: black;
+ writing-mode: vertical-rl;
+}
+
+item {
+ min-width: 0;
+ min-height: 10px;
+ background: grey;
+ writing-mode: horizontal-tb;
+}
+
+ </style>
+</head>
+<body>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:2 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:2 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:3 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 4"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 2"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:2 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:2 / 3"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 5"></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid">
+ <item style="grid-row:1 / 2"></item>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html
new file mode 100644
index 00000000000..949d8296fef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: repeat(auto-fill / INTEGER, line-names)</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-listing">
+ <link rel="match" href="repeat-auto-fill-007-ref.html">
+ <style>
+html,body {
+ color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid-auto-columns: 20px;
+ background: lightgrey;
+}
+
+.subgrid {
+ display: grid;
+ grid-column: 2 / span 4;
+ background: black;
+ writing-mode: vertical-rl;
+}
+
+item {
+ min-width: 0;
+ min-height: 10px;
+ grid-row:x -2 / x -1;
+ background: grey;
+ writing-mode: horizontal-tb;
+}
+
+ </style>
+</head>
+<body>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [x] [x] repeat(auto-fill,[x]) [x] [x] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] repeat(1,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[]) [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(2,[x]) repeat(auto-fill,[x]) [] []">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(3,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(4,[]) repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] [] [] [] repeat(auto-fill,[x]) [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(auto-fill,[x]) [] [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid [] repeat(auto-fill,[x]) [] [] [] [x]">
+ <item></item>
+ </div>
+</div>
+
+<div class="grid">
+ <div class="subgrid" style="grid-template-rows:subgrid repeat(5,[]) repeat(auto-fill,[]) [x]">
+ <item></item>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html
new file mode 100644
index 00000000000..21c34f1f2b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-masking/animations/clip-path-interpolation.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>clip-path interpolation</title>
+<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path">
+<meta name="assert" content="clip-path supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ clip-path: circle(80% at 30% 10%);
+}
+
+.target {
+ clip-path: circle(60% at 10% 30%);
+}
+</style>
+<body>
+<script>
+test_interpolation({
+ property: 'clip-path',
+ from: neutralKeyframe,
+ to: 'circle(40% at 20% 20%)',
+}, [
+ {at: -0.3, expect: 'circle(66% at 7% 33%)'},
+ {at: 0, expect: 'circle(60% at 10% 30%)'},
+ {at: 0.3, expect: 'circle(54% at 13% 27%)'},
+ {at: 0.6, expect: 'circle(48% at 16% 24%)'},
+ {at: 1, expect: 'circle(40% at 20% 20%)'},
+ {at: 1.5, expect: 'circle(30% at 25% 15%)'},
+]);
+
+test_no_interpolation({
+ property: 'clip-path',
+ from: 'initial',
+ to: 'circle(40% at 20% 20%)',
+});
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'inherit',
+ to: 'circle(40% at 20% 20%)',
+}, [
+ {at: -0.3, expect: 'circle(92% at 33% 7%)'},
+ {at: 0, expect: 'circle(80% at 30% 10%)'},
+ {at: 0.3, expect: 'circle(68% at 27% 13%)'},
+ {at: 0.6, expect: 'circle(56% at 24% 16%)'},
+ {at: 1, expect: 'circle(40% at 20% 20%)'},
+ {at: 1.5, expect: 'circle(20% at 15% 25%)'},
+]);
+
+test_no_interpolation({
+ property: 'clip-path',
+ from: 'unset',
+ to: 'circle(40% at 20% 20%)',
+});
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'circle(100% at 0% 0%)',
+ to: 'circle(50% at 25% 25%)',
+}, [
+ {at: -0.3, expect: 'circle(115% at -7.5% -7.5%)'},
+ {at: 0, expect: 'circle(100% at 0% 0%)'},
+ {at: 0.3, expect: 'circle(85% at 7.5% 7.5%)'},
+ {at: 0.6, expect: 'circle(70% at 15% 15%)'},
+ {at: 1, expect: 'circle(50% at 25% 25%)'},
+ {at: 1.5, expect: 'circle(25% at 37.5% 37.5%)'}
+]);
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'ellipse(100% 100% at 0% 0%)',
+ to: 'ellipse(50% 50% at 25% 25%)',
+}, [
+ {at: -0.3, expect: 'ellipse(115% 115% at -7.5% -7.5%)'},
+ {at: 0, expect: 'ellipse(100% 100% at 0% 0%)'},
+ {at: 0.3, expect: 'ellipse(85% 85% at 7.5% 7.5%)'},
+ {at: 0.6, expect: 'ellipse(70% 70% at 15% 15%)'},
+ {at: 1, expect: 'ellipse(50% 50% at 25% 25%)'},
+ {at: 1.5, expect: 'ellipse(25% 25% at 37.5% 37.5%)'}
+]);
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)',
+ to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)',
+}, [
+ {at: -0.3, expect: 'polygon(nonzero, -7.5px -7.5px, 17.5px 17.5px, 42.5px 42.5px)'},
+ {at: 0, expect: 'polygon(nonzero, 0px 0px, 25px 25px, 50px 50px)'},
+ {at: 0.3, expect: 'polygon(nonzero, 7.5px 7.5px, 32.5px 32.5px, 57.5px 57.5px)'},
+ {at: 0.6, expect: 'polygon(nonzero, 15px 15px, 40px 40px, 65px 65px)'},
+ {at: 1, expect: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)'},
+ {at: 1.5, expect: 'polygon(nonzero, 37.5px 37.5px, 62.5px 62.5px, 87.5px 87.5px)'}
+]);
+
+test_no_interpolation({
+ property: 'clip-path',
+ from: 'polygon(evenodd, 0px 0px, 25px 25px, 50px 50px)',
+ to: 'polygon(nonzero, 25px 25px, 50px 50px, 75px 75px)',
+});
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'inset(100%)',
+ to: 'inset(120%)',
+}, [
+ {at: -0.3, expect: 'inset(94%)'},
+ {at: 0, expect: 'inset(100%)'},
+ {at: 0.3, expect: 'inset(106%)'},
+ {at: 0.6, expect: 'inset(112%)'},
+ {at: 1, expect: 'inset(120%)'},
+ {at: 1.5, expect: 'inset(130%)'},
+]);
+
+test_no_interpolation({
+ property: 'clip-path',
+ from: 'none',
+ to: 'ellipse(100% 100% at 0% 0%)',
+});
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'circle(25% at right 5% bottom 15px)',
+ to: 'circle(45% at right 25% bottom 35px)',
+}, [
+ {at: 0.25, expect: 'circle(30% at 90% calc(-20px + 100%))'},
+ {at: 0.5, expect: 'circle(35% at 85% calc(-25px + 100%))'},
+ {at: 0.75, expect: 'circle(40% at 80% calc(-30px + 100%))'},
+]);
+
+test_no_interpolation({
+ property: 'clip-path',
+ from: 'url("/clip-source")',
+ to: 'ellipse(100% 100% at 0% 0%)',
+});
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html b/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html
new file mode 100644
index 00000000000..eb0e4f5ea2e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-overflow/overflow-codependent-scrollbars.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<link rel="author" href="mailto:atotic@google.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://www.w3.org/TR/css-overflow-3/#scrollable">
+<meta name="assert" content="What happens when appearance of one scrollbar triggers the other one?">
+<style>
+.container {
+ width: 100px;
+ height: 100px;
+ overflow: auto;
+ background: #DDD;
+ --too-big: 120px;
+ --slightly-smaller: 95px;
+}
+.target {
+ width: 120px;
+ height: 95px;
+ background: rgba(0,255,0,0.3);
+}
+</style>
+<!-- -->
+<div class="container">
+ <div class="target" style="width:var(--too-big);height:var(--slightly-smaller)" ></div>
+</div>
+<div class="container">
+ <div class="target" style="height:var(--too-big);width:var(--slightly-smaller)" ></div>
+</div>
+
+<script>
+test(() => {
+ Array.from(document.querySelectorAll(".container")).forEach( el => {
+ let verticalScrollbar = el.offsetWidth - el.clientWidth;
+ let horizontalScrollbar = el.offsetHeight - el.clientHeight;
+ assert_equals(verticalScrollbar, horizontalScrollbar, "both scrollbars are visible.");
+ });
+}, 'appearance of one scrollbar caused the other scrollbar to appear.');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html b/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html
new file mode 100644
index 00000000000..02e1cc62296
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-tables/animations/border-spacing-interpolation.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>boder-spacing interpolation</title>
+<link rel="help" href="https://www.w3.org/TR/CSS2/tables.html#separated-borders">
+<meta name="assert" content="border-spacing supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ border-spacing: 30px;
+}
+
+.target {
+ width: 50px;
+ height: 50px;
+ background-color: black;
+ display: inline-block;
+ margin: 18px;
+ border-collapse: separate;
+ border-spacing: 10px;
+}
+
+.target td {
+ background-color: white;
+ border: 1px solid orange;
+ width: 10px;
+ height: 10px;
+}
+
+.expected {
+ background-color: green;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <table>
+ <tbody>
+ <tr>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+</template>
+
+<script>
+test_interpolation({
+ property: 'border-spacing',
+ from: neutralKeyframe,
+ to: '20px',
+}, [
+ {at: -0.3, expect: '7px 7px'},
+ {at: 0, expect: '10px 10px'},
+ {at: 0.3, expect: '13px 13px'},
+ {at: 0.6, expect: '16px 16px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.5, expect: '25px 25px'},
+]);
+
+test_interpolation({
+ property: 'border-spacing',
+ from: 'initial',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '0px 0px'},
+ {at: 0, expect: '0px 0px'},
+ {at: 0.3, expect: '6px 6px'},
+ {at: 0.6, expect: '12px 12px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.5, expect: '30px 30px'},
+]);
+
+test_interpolation({
+ property: 'border-spacing',
+ from: 'inherit',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '33px 33px'},
+ {at: 0, expect: '30px 30px'},
+ {at: 0.3, expect: '27px 27px'},
+ {at: 0.6, expect: '24px 24px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.5, expect: '15px 15px'},
+]);
+
+test_interpolation({
+ property: 'border-spacing',
+ from: 'unset',
+ to: '20px',
+}, [
+ {at: -0.3, expect: '33px 33px'},
+ {at: 0, expect: '30px 30px'},
+ {at: 0.3, expect: '27px 27px'},
+ {at: 0.6, expect: '24px 24px'},
+ {at: 1, expect: '20px 20px'},
+ {at: 1.5, expect: '15px 15px'},
+]);
+
+test_interpolation({
+ property: 'border-spacing',
+ from: '0px',
+ to: '10px'
+}, [
+ {at: -0.3, expect: '0px 0px'}, // Can't be negative.
+ {at: 0, expect: '0px 0px'},
+ {at: 0.3, expect: '3px 3px'},
+ {at: 0.6, expect: '6px 6px'},
+ {at: 1, expect: '10px 10px'},
+ {at: 1.5, expect: '15px 15px'}
+]);
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl
index 4aca84e5a02..2c46cc7c94c 100644
--- a/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl
+++ b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl
@@ -22,12 +22,12 @@ interface WorkletAnimationEffect {
attribute double? localTime;
};
-[Exposed=Window,
- Constructor (DOMString animatorName,
+[Exposed=Window]
+interface WorkletAnimation : Animation {
+ constructor(DOMString animatorName,
optional (AnimationEffect or sequence<AnimationEffect>)? effects = null,
optional AnimationTimeline? timeline,
- optional any options)]
-interface WorkletAnimation : Animation {
+ optional any options);
readonly attribute DOMString animatorName;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/css-animations.idl b/tests/wpt/web-platform-tests/interfaces/css-animations.idl
index f87015f6a87..9b34bde2330 100644
--- a/tests/wpt/web-platform-tests/interfaces/css-animations.idl
+++ b/tests/wpt/web-platform-tests/interfaces/css-animations.idl
@@ -3,9 +3,9 @@
// (https://github.com/tidoust/reffy-reports)
// Source: CSS Animations Level 1 (https://drafts.csswg.org/css-animations/)
-[Exposed=Window,
- Constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {})]
+[Exposed=Window]
interface AnimationEvent : Event {
+ constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {});
readonly attribute CSSOMString animationName;
readonly attribute double elapsedTime;
readonly attribute CSSOMString pseudoElement;
diff --git a/tests/wpt/web-platform-tests/interfaces/css-transitions.idl b/tests/wpt/web-platform-tests/interfaces/css-transitions.idl
index be5a635112b..15ce4b30f21 100644
--- a/tests/wpt/web-platform-tests/interfaces/css-transitions.idl
+++ b/tests/wpt/web-platform-tests/interfaces/css-transitions.idl
@@ -3,9 +3,9 @@
// (https://github.com/tidoust/reffy-reports)
// Source: CSS Transitions (https://drafts.csswg.org/css-transitions/)
-[Exposed=Window,
- Constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {})]
+[Exposed=Window]
interface TransitionEvent : Event {
+ constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {});
readonly attribute CSSOMString propertyName;
readonly attribute double elapsedTime;
readonly attribute CSSOMString pseudoElement;
diff --git a/tests/wpt/web-platform-tests/interfaces/entries-api.idl b/tests/wpt/web-platform-tests/interfaces/entries-api.idl
index 548aec13ab7..52693138a4c 100644
--- a/tests/wpt/web-platform-tests/interfaces/entries-api.idl
+++ b/tests/wpt/web-platform-tests/interfaces/entries-api.idl
@@ -18,6 +18,7 @@ partial interface DataTransferItem {
callback ErrorCallback = void (DOMException err);
+[Exposed=Window]
interface FileSystemEntry {
readonly attribute boolean isFile;
readonly attribute boolean isDirectory;
@@ -29,6 +30,7 @@ interface FileSystemEntry {
optional ErrorCallback errorCallback);
};
+[Exposed=Window]
interface FileSystemDirectoryEntry : FileSystemEntry {
FileSystemDirectoryReader createReader();
void getFile(optional USVString? path,
@@ -48,18 +50,21 @@ dictionary FileSystemFlags {
callback FileSystemEntryCallback = void (FileSystemEntry entry);
+[Exposed=Window]
interface FileSystemDirectoryReader {
void readEntries(FileSystemEntriesCallback successCallback,
optional ErrorCallback errorCallback);
};
callback FileSystemEntriesCallback = void (sequence<FileSystemEntry> entries);
+[Exposed=Window]
interface FileSystemFileEntry : FileSystemEntry {
void file(FileCallback successCallback,
optional ErrorCallback errorCallback);
};
callback FileCallback = void (File file);
+[Exposed=Window]
interface FileSystem {
readonly attribute USVString name;
readonly attribute FileSystemDirectoryEntry root;
diff --git a/tests/wpt/web-platform-tests/interfaces/presentation-api.idl b/tests/wpt/web-platform-tests/interfaces/presentation-api.idl
index c1e566538aa..dfaa022b952 100644
--- a/tests/wpt/web-platform-tests/interfaces/presentation-api.idl
+++ b/tests/wpt/web-platform-tests/interfaces/presentation-api.idl
@@ -48,7 +48,6 @@ dictionary PresentationConnectionAvailableEventInit : EventInit {
};
enum PresentationConnectionState { "connecting", "connected", "closed", "terminated" };
-enum BinaryType { "blob", "arraybuffer" };
[SecureContext, Exposed=Window]
interface PresentationConnection : EventTarget {
diff --git a/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl b/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl
index 0144f04e046..51c996959be 100644
--- a/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl
+++ b/tests/wpt/web-platform-tests/interfaces/shape-detection-api.idl
@@ -4,9 +4,9 @@
// Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/)
[Exposed=(Window,Worker),
- SecureContext,
- Constructor(optional FaceDetectorOptions faceDetectorOptions = {})]
+ SecureContext]
interface FaceDetector {
+ constructor(optional FaceDetectorOptions faceDetectorOptions = {});
Promise<sequence<DetectedFace>> detect(ImageBitmapSource image);
};
@@ -35,9 +35,9 @@ enum LandmarkType {
};
[Exposed=(Window,Worker),
- SecureContext,
- Constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {})]
+ SecureContext]
interface BarcodeDetector {
+ constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {});
static Promise<sequence<BarcodeFormat>> getSupportedFormats();
Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image);
diff --git a/tests/wpt/web-platform-tests/interfaces/web-animations.idl b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
index 89993896508..6fd172ce425 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-animations.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-animations.idl
@@ -12,15 +12,15 @@ dictionary DocumentTimelineOptions {
DOMHighResTimeStamp originTime = 0;
};
-[Exposed=Window,
- Constructor(optional DocumentTimelineOptions options = {})]
+[Exposed=Window]
interface DocumentTimeline : AnimationTimeline {
+ constructor(optional DocumentTimelineOptions options = {});
};
-[Exposed=Window,
- Constructor(optional AnimationEffect? effect = null,
- optional AnimationTimeline? timeline)]
+[Exposed=Window]
interface Animation : EventTarget {
+ constructor(optional AnimationEffect? effect = null,
+ optional AnimationTimeline? timeline);
attribute DOMString id;
attribute AnimationEffect? effect;
readonly attribute AnimationTimeline? timeline;
@@ -90,12 +90,12 @@ dictionary ComputedEffectTiming : EffectTiming {
unrestricted double? currentIteration;
};
-[Exposed=Window,
- Constructor((Element or CSSPseudoElement)? target,
- object? keyframes,
- optional (unrestricted double or KeyframeEffectOptions) options = {}),
- Constructor(KeyframeEffect source)]
+[Exposed=Window]
interface KeyframeEffect : AnimationEffect {
+ constructor((Element or CSSPseudoElement)? target,
+ object? keyframes,
+ optional (unrestricted double or KeyframeEffectOptions) options = {});
+ constructor(KeyframeEffect source);
attribute (Element or CSSPseudoElement)? target;
attribute CompositeOperation composite;
sequence<object> getKeyframes();
@@ -155,9 +155,9 @@ Element includes Animatable;
CSSPseudoElement includes Animatable;
-[Exposed=Window,
- Constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {})]
+[Exposed=Window]
interface AnimationPlaybackEvent : Event {
+ constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {});
readonly attribute double? currentTime;
readonly attribute double? timelineTime;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl b/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl
index f515dda1a81..ec7a8e71ca0 100644
--- a/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl
+++ b/tests/wpt/web-platform-tests/interfaces/web-bluetooth.idl
@@ -60,10 +60,10 @@ interface BluetoothPermissionResult : PermissionStatus {
[
Exposed=Window,
- Constructor(DOMString type, optional ValueEventInit initDict = {}),
SecureContext
]
interface ValueEvent : Event {
+ constructor(DOMString type, optional ValueEventInit initDict = {});
readonly attribute any value;
};
@@ -95,10 +95,10 @@ interface BluetoothServiceDataMap {
};
[
Exposed=Window,
- Constructor(DOMString type, BluetoothAdvertisingEventInit init),
SecureContext
]
interface BluetoothAdvertisingEvent : Event {
+ constructor(DOMString type, BluetoothAdvertisingEventInit init);
[SameObject]
readonly attribute BluetoothDevice device;
readonly attribute FrozenArray<UUID> uuids;
diff --git a/tests/wpt/web-platform-tests/interfaces/webaudio.idl b/tests/wpt/web-platform-tests/interfaces/webaudio.idl
index 1b6af25b3b3..3869d5d14a6 100644
--- a/tests/wpt/web-platform-tests/interfaces/webaudio.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webaudio.idl
@@ -38,7 +38,7 @@ interface BaseAudioContext : EventTarget {
IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback);
OscillatorNode createOscillator ();
PannerNode createPanner ();
- PeriodicWave createPeriodicWave (sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints constraints);
+ PeriodicWave createPeriodicWave (sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints constraints = {});
ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0,
optional unsigned long numberOfInputChannels = 2,
optional unsigned long numberOfOutputChannels = 2);
@@ -56,19 +56,19 @@ enum AudioContextLatencyCategory {
"playback"
};
-[Exposed=Window,
- Constructor (optional AudioContextOptions contextOptions)]
+[Exposed=Window]
interface AudioContext : BaseAudioContext {
- readonly attribute double baseLatency;
- readonly attribute double outputLatency;
- AudioTimestamp getOutputTimestamp ();
- Promise<void> resume ();
- Promise<void> suspend ();
- Promise<void> close ();
- MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement);
- MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream);
- MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (MediaStreamTrack mediaStreamTrack);
- MediaStreamAudioDestinationNode createMediaStreamDestination ();
+ constructor (optional AudioContextOptions contextOptions = {});
+ readonly attribute double baseLatency;
+ readonly attribute double outputLatency;
+ AudioTimestamp getOutputTimestamp ();
+ Promise<void> resume ();
+ Promise<void> suspend ();
+ Promise<void> close ();
+ MediaElementAudioSourceNode createMediaElementSource (HTMLMediaElement mediaElement);
+ MediaStreamAudioSourceNode createMediaStreamSource (MediaStream mediaStream);
+ MediaStreamTrackAudioSourceNode createMediaStreamTrackSource (MediaStreamTrack mediaStreamTrack);
+ MediaStreamAudioDestinationNode createMediaStreamDestination ();
};
dictionary AudioContextOptions {
@@ -81,10 +81,10 @@ dictionary AudioTimestamp {
DOMHighResTimeStamp performanceTime;
};
-[Exposed=Window,
- Constructor (OfflineAudioContextOptions contextOptions),
- Constructor (unsigned long numberOfChannels, unsigned long length, float sampleRate)]
+[Exposed=Window]
interface OfflineAudioContext : BaseAudioContext {
+ constructor(OfflineAudioContextOptions contextOptions);
+ constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate);
Promise<AudioBuffer> startRendering();
Promise<void> resume();
Promise<void> suspend(double suspendTime);
@@ -98,9 +98,9 @@ dictionary OfflineAudioContextOptions {
required float sampleRate;
};
-[Exposed=Window,
- Constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict)]
+[Exposed=Window]
interface OfflineAudioCompletionEvent : Event {
+ constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict);
readonly attribute AudioBuffer renderedBuffer;
};
@@ -108,9 +108,9 @@ dictionary OfflineAudioCompletionEventInit : EventInit {
required AudioBuffer renderedBuffer;
};
-[Exposed=Window,
- Constructor (AudioBufferOptions options)]
+[Exposed=Window]
interface AudioBuffer {
+ constructor (AudioBufferOptions options);
readonly attribute float sampleRate;
readonly attribute unsigned long length;
readonly attribute double duration;
@@ -192,9 +192,9 @@ interface AudioScheduledSourceNode : AudioNode {
void stop(optional double when = 0);
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional AnalyserOptions options = {})]
+[Exposed=Window]
interface AnalyserNode : AudioNode {
+ constructor (BaseAudioContext context, optional AnalyserOptions options = {});
void getFloatFrequencyData (Float32Array array);
void getByteFrequencyData (Uint8Array array);
void getFloatTimeDomainData (Float32Array array);
@@ -213,9 +213,9 @@ dictionary AnalyserOptions : AudioNodeOptions {
double smoothingTimeConstant = 0.8;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {})]
+[Exposed=Window]
interface AudioBufferSourceNode : AudioScheduledSourceNode {
+ constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {});
attribute AudioBuffer? buffer;
readonly attribute AudioParam playbackRate;
readonly attribute AudioParam detune;
@@ -256,9 +256,9 @@ interface AudioListener {
void setOrientation (float x, float y, float z, float xUp, float yUp, float zUp);
};
-[Exposed=Window,
- Constructor (DOMString type, AudioProcessingEventInit eventInitDict)]
+[Exposed=Window]
interface AudioProcessingEvent : Event {
+ constructor (DOMString type, AudioProcessingEventInit eventInitDict);
readonly attribute double playbackTime;
readonly attribute AudioBuffer inputBuffer;
readonly attribute AudioBuffer outputBuffer;
@@ -281,9 +281,9 @@ enum BiquadFilterType {
"allpass"
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional BiquadFilterOptions options = {})]
+[Exposed=Window]
interface BiquadFilterNode : AudioNode {
+ constructor (BaseAudioContext context, optional BiquadFilterOptions options = {});
attribute BiquadFilterType type;
readonly attribute AudioParam frequency;
readonly attribute AudioParam detune;
@@ -300,27 +300,27 @@ dictionary BiquadFilterOptions : AudioNodeOptions {
float gain = 0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelMergerOptions options = {})]
+[Exposed=Window]
interface ChannelMergerNode : AudioNode {
+ constructor (BaseAudioContext context, optional ChannelMergerOptions options = {});
};
dictionary ChannelMergerOptions : AudioNodeOptions {
unsigned long numberOfInputs = 6;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {})]
+[Exposed=Window]
interface ChannelSplitterNode : AudioNode {
+ constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {});
};
dictionary ChannelSplitterOptions : AudioNodeOptions {
unsigned long numberOfOutputs = 6;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ConstantSourceOptions options = {})]
+[Exposed=Window]
interface ConstantSourceNode : AudioScheduledSourceNode {
+ constructor (BaseAudioContext context, optional ConstantSourceOptions options = {});
readonly attribute AudioParam offset;
};
@@ -328,9 +328,9 @@ dictionary ConstantSourceOptions {
float offset = 1;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ConvolverOptions options = {})]
+[Exposed=Window]
interface ConvolverNode : AudioNode {
+ constructor (BaseAudioContext context, optional ConvolverOptions options = {});
attribute AudioBuffer? buffer;
attribute boolean normalize;
};
@@ -340,9 +340,9 @@ dictionary ConvolverOptions : AudioNodeOptions {
boolean disableNormalization = false;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional DelayOptions options = {})]
+[Exposed=Window]
interface DelayNode : AudioNode {
+ constructor (BaseAudioContext context, optional DelayOptions options = {});
readonly attribute AudioParam delayTime;
};
@@ -351,9 +351,9 @@ dictionary DelayOptions : AudioNodeOptions {
double delayTime = 0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {})]
+[Exposed=Window]
interface DynamicsCompressorNode : AudioNode {
+ constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {});
readonly attribute AudioParam threshold;
readonly attribute AudioParam knee;
readonly attribute AudioParam ratio;
@@ -370,9 +370,9 @@ dictionary DynamicsCompressorOptions : AudioNodeOptions {
float threshold = -24;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional GainOptions options = {})]
+[Exposed=Window]
interface GainNode : AudioNode {
+ constructor (BaseAudioContext context, optional GainOptions options = {});
readonly attribute AudioParam gain;
};
@@ -380,9 +380,9 @@ dictionary GainOptions : AudioNodeOptions {
float gain = 1.0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, IIRFilterOptions options)]
+[Exposed=Window]
interface IIRFilterNode : AudioNode {
+ constructor (BaseAudioContext context, IIRFilterOptions options);
void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
};
@@ -391,9 +391,9 @@ dictionary IIRFilterOptions : AudioNodeOptions {
required sequence<double> feedback;
};
-[Exposed=Window,
- Constructor (AudioContext context, MediaElementAudioSourceOptions options)]
+[Exposed=Window]
interface MediaElementAudioSourceNode : AudioNode {
+ constructor (AudioContext context, MediaElementAudioSourceOptions options);
[SameObject] readonly attribute HTMLMediaElement mediaElement;
};
@@ -401,15 +401,15 @@ dictionary MediaElementAudioSourceOptions {
required HTMLMediaElement mediaElement;
};
-[Exposed=Window,
- Constructor (AudioContext context, optional AudioNodeOptions options = {})]
+[Exposed=Window]
interface MediaStreamAudioDestinationNode : AudioNode {
+ constructor (AudioContext context, optional AudioNodeOptions options = {});
readonly attribute MediaStream stream;
};
-[Exposed=Window,
- Constructor (AudioContext context, MediaStreamAudioSourceOptions options)]
+[Exposed=Window]
interface MediaStreamAudioSourceNode : AudioNode {
+ constructor (AudioContext context, MediaStreamAudioSourceOptions options);
[SameObject] readonly attribute MediaStream mediaStream;
};
@@ -417,9 +417,9 @@ dictionary MediaStreamAudioSourceOptions {
required MediaStream mediaStream;
};
-[Exposed=Window,
- Constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options)]
+[Exposed=Window]
interface MediaStreamTrackAudioSourceNode : AudioNode {
+ constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options);
};
dictionary MediaStreamTrackAudioSourceOptions {
@@ -434,9 +434,9 @@ enum OscillatorType {
"custom"
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional OscillatorOptions options = {})]
+[Exposed=Window]
interface OscillatorNode : AudioScheduledSourceNode {
+ constructor (BaseAudioContext context, optional OscillatorOptions options = {});
attribute OscillatorType type;
readonly attribute AudioParam frequency;
readonly attribute AudioParam detune;
@@ -461,9 +461,9 @@ enum DistanceModelType {
"exponential"
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional PannerOptions options = {})]
+[Exposed=Window]
interface PannerNode : AudioNode {
+ constructor (BaseAudioContext context, optional PannerOptions options = {});
attribute PanningModelType panningModel;
readonly attribute AudioParam positionX;
readonly attribute AudioParam positionY;
@@ -499,9 +499,9 @@ dictionary PannerOptions : AudioNodeOptions {
double coneOuterGain = 0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {})]
+[Exposed=Window]
interface PeriodicWave {
+ constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {});
};
dictionary PeriodicWaveConstraints {
@@ -519,9 +519,9 @@ interface ScriptProcessorNode : AudioNode {
readonly attribute long bufferSize;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional StereoPannerOptions options = {})]
+[Exposed=Window]
interface StereoPannerNode : AudioNode {
+ constructor (BaseAudioContext context, optional StereoPannerOptions options = {});
readonly attribute AudioParam pan;
};
@@ -535,9 +535,9 @@ enum OverSampleType {
"4x"
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional WaveShaperOptions options = {})]
+[Exposed=Window]
interface WaveShaperNode : AudioNode {
+ constructor (BaseAudioContext context, optional WaveShaperOptions options = {});
attribute Float32Array? curve;
attribute OverSampleType oversample;
};
@@ -566,11 +566,10 @@ interface AudioParamMap {
readonly maplike<DOMString, AudioParam>;
};
-[Exposed=Window,
- SecureContext,
- Constructor (BaseAudioContext context, DOMString name,
- optional AudioWorkletNodeOptions options = {})]
+[Exposed=Window, SecureContext]
interface AudioWorkletNode : AudioNode {
+ constructor (BaseAudioContext context, DOMString name,
+ optional AudioWorkletNodeOptions options = {});
readonly attribute AudioParamMap parameters;
readonly attribute MessagePort port;
attribute EventHandler onprocessorerror;
@@ -584,9 +583,9 @@ dictionary AudioWorkletNodeOptions : AudioNodeOptions {
object processorOptions;
};
-[Exposed=AudioWorklet,
-Constructor (optional AudioWorkletNodeOptions options = {})]
+[Exposed=AudioWorklet]
interface AudioWorkletProcessor {
+ constructor (optional AudioWorkletNodeOptions options = {});
readonly attribute MessagePort port;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl
new file mode 100644
index 00000000000..5a59a4887ac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc-identity.idl
@@ -0,0 +1,67 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content was automatically extracted by Reffy into reffy-reports
+// (https://github.com/tidoust/reffy-reports)
+// Source: Identity for WebRTC 1.0 (https://w3c.github.io/webrtc-identity/identity.html)
+
+[Global, Exposed=RTCIdentityProviderGlobalScope]
+interface RTCIdentityProviderGlobalScope : WorkerGlobalScope {
+ readonly attribute RTCIdentityProviderRegistrar rtcIdentityProvider;
+};
+
+[Exposed=RTCIdentityProviderGlobalScope]
+interface RTCIdentityProviderRegistrar {
+ void register(RTCIdentityProvider idp);
+};
+
+dictionary RTCIdentityProvider {
+ required GenerateAssertionCallback generateAssertion;
+ required ValidateAssertionCallback validateAssertion;
+};
+
+callback GenerateAssertionCallback = Promise<RTCIdentityAssertionResult> (DOMString contents, DOMString origin, RTCIdentityProviderOptions options);
+
+callback ValidateAssertionCallback = Promise<RTCIdentityValidationResult> (DOMString assertion, DOMString origin);
+
+dictionary RTCIdentityAssertionResult {
+ required RTCIdentityProviderDetails idp;
+ required DOMString assertion;
+};
+
+dictionary RTCIdentityProviderDetails {
+ required DOMString domain;
+ DOMString protocol = "default";
+};
+
+dictionary RTCIdentityValidationResult {
+ required DOMString identity;
+ required DOMString contents;
+};
+
+partial interface RTCPeerConnection {
+ void setIdentityProvider(DOMString provider, optional RTCIdentityProviderOptions options);
+ Promise<DOMString> getIdentityAssertion();
+ readonly attribute Promise<RTCIdentityAssertion> peerIdentity;
+ readonly attribute DOMString? idpLoginUrl;
+ readonly attribute DOMString? idpErrorInfo;
+};
+
+dictionary RTCIdentityProviderOptions {
+ DOMString protocol = "default";
+ DOMString usernameHint;
+ DOMString peerIdentity;
+};
+
+[Constructor(DOMString idp, DOMString name), Exposed=Window]
+interface RTCIdentityAssertion {
+ attribute DOMString idp;
+ attribute DOMString name;
+};
+
+partial dictionary MediaStreamConstraints {
+ DOMString peerIdentity;
+};
+
+partial interface MediaStreamTrack {
+ readonly attribute boolean isolated;
+ attribute EventHandler onisolationchange;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/webusb.idl b/tests/wpt/web-platform-tests/interfaces/webusb.idl
index fcca851b8b5..ad5c480454d 100644
--- a/tests/wpt/web-platform-tests/interfaces/webusb.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webusb.idl
@@ -39,11 +39,11 @@ dictionary USBConnectionEventInit : EventInit {
};
[
- Constructor(DOMString type, USBConnectionEventInit eventInitDict),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBConnectionEvent : Event {
+ constructor(DOMString type, USBConnectionEventInit eventInitDict);
[SameObject] readonly attribute USBDevice device;
};
@@ -110,81 +110,81 @@ dictionary USBControlTransferParameters {
};
[
- Constructor(USBTransferStatus status, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBInTransferResult {
+ constructor(USBTransferStatus status, optional DataView? data);
readonly attribute DataView? data;
readonly attribute USBTransferStatus status;
};
[
- Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBOutTransferResult {
+ constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0);
readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status;
};
[
- Constructor(USBTransferStatus status, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBIsochronousInTransferPacket {
+ constructor(USBTransferStatus status, optional DataView? data);
readonly attribute DataView? data;
readonly attribute USBTransferStatus status;
};
[
- Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBIsochronousInTransferResult {
+ constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data);
readonly attribute DataView? data;
readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets;
};
[
- Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBIsochronousOutTransferPacket {
+ constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0);
readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status;
};
[
- Constructor(sequence<USBIsochronousOutTransferPacket> packets),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBIsochronousOutTransferResult {
+ constructor(sequence<USBIsochronousOutTransferPacket> packets);
readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets;
};
[
- Constructor(USBDevice device, octet configurationValue),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBConfiguration {
+ constructor(USBDevice device, octet configurationValue);
readonly attribute octet configurationValue;
readonly attribute DOMString? configurationName;
readonly attribute FrozenArray<USBInterface> interfaces;
};
[
- Constructor(USBConfiguration configuration, octet interfaceNumber),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBInterface {
+ constructor(USBConfiguration configuration, octet interfaceNumber);
readonly attribute octet interfaceNumber;
readonly attribute USBAlternateInterface alternate;
readonly attribute FrozenArray<USBAlternateInterface> alternates;
@@ -192,11 +192,11 @@ interface USBInterface {
};
[
- Constructor(USBInterface deviceInterface, octet alternateSetting),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBAlternateInterface {
+ constructor(USBInterface deviceInterface, octet alternateSetting);
readonly attribute octet alternateSetting;
readonly attribute octet interfaceClass;
readonly attribute octet interfaceSubclass;
@@ -217,11 +217,11 @@ enum USBEndpointType {
};
[
- Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext
]
interface USBEndpoint {
+ constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction);
readonly attribute octet endpointNumber;
readonly attribute USBDirection direction;
readonly attribute USBEndpointType type;
@@ -242,6 +242,7 @@ dictionary USBPermissionStorage {
sequence<AllowedUSBDevice> allowedDevices = [];
};
+[Exposed=(DedicatedWorker,SharedWorker,Window)]
interface USBPermissionResult : PermissionStatus {
attribute FrozenArray<USBDevice> devices;
};
diff --git a/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js
new file mode 100644
index 00000000000..df39258dc92
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-address.js
@@ -0,0 +1,44 @@
+self.addEventListener('canmakepayment', (event) => {
+ event.respondWith(true);
+});
+
+async function responder(event) {
+ const methodName = event.methodData[0].supportedMethods;
+ const shippingOption = event.shippingOptions[0].id;
+ const shippingAddress = {
+ addressLine: [
+ '1875 Explorer St #1000',
+ ],
+ city: 'Reston',
+ country: 'US',
+ dependentLocality: '',
+ organization: 'Google',
+ phone: '+15555555555',
+ postalCode: '20190',
+ recipient: 'John Smith',
+ region: 'VA',
+ sortingCode: '',
+ };
+ if (!event.changeShippingAddress) {
+ return {
+ methodName,
+ details: {
+ changeShippingAddressReturned:
+ 'The changeShippingAddress() method is not implemented.',
+ },
+ };
+ }
+ let changeShippingAddressReturned;
+ try {
+ const response = await event.changeShippingAddress(shippingAddress);
+ changeShippingAddressReturned = response;
+ } catch (err) {
+ changeShippingAddressReturned = err.message;
+ }
+ return {methodName, details: {changeShippingAddressReturned}, shippingAddress,
+ shippingOption};
+}
+
+self.addEventListener('paymentrequest', (event) => {
+ event.respondWith(responder(event));
+});
diff --git a/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js
new file mode 100644
index 00000000000..ac3307b619c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/app-change-shipping-option.js
@@ -0,0 +1,44 @@
+self.addEventListener('canmakepayment', (event) => {
+ event.respondWith(true);
+});
+
+async function responder(event) {
+ const methodName = event.methodData[0].supportedMethods;
+ const shippingOption = event.shippingOptions[0].id;
+ const shippingAddress = {
+ addressLine: [
+ '1875 Explorer St #1000',
+ ],
+ city: 'Reston',
+ country: 'US',
+ dependentLocality: '',
+ organization: 'Google',
+ phone: '+15555555555',
+ postalCode: '20190',
+ recipient: 'John Smith',
+ region: 'VA',
+ sortingCode: '',
+ };
+ if (!event.changeShippingOption) {
+ return {
+ methodName,
+ details: {
+ changeShippingOptionReturned:
+ 'The changeShippingOption() method is not implemented.',
+ },
+ };
+ }
+ let changeShippingOptionReturned;
+ try {
+ const response = await event.changeShippingOption(shippingOption);
+ changeShippingOptionReturned = response;
+ } catch (err) {
+ changeShippingOptionReturned = err.message;
+ }
+ return {methodName, details: {changeShippingOptionReturned}, shippingAddress,
+ shippingOption};
+}
+
+self.addEventListener('paymentrequest', (event) => {
+ event.respondWith(responder(event));
+});
diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html
new file mode 100644
index 00000000000..3b98d56a251
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-address-manual.https.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Tests for PaymentRequestEvent.changeShippingAddress()</title>
+
+<link rel="manifest" href="/payment-handler/basic-card.json" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="register-and-activate-service-worker.js"></script>
+<p>If the payment sheet is shown, please authorize the mock payment.</p>
+<script>
+ const methodName = window.location.origin + '/payment-handler/payment-app/';
+ function createRequest() {
+ return new PaymentRequest([{supportedMethods: methodName}], {
+ total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
+ shippingOptions: [{
+ id: 'freeShippingOption',
+ label: 'Free global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: false,
+ }],
+ }, {requestShipping: true});
+ }
+
+ async function completeAppSetUp(registration) {
+ await registration.paymentManager.instruments.clear();
+ await registration.paymentManager.instruments.set('instrument-key', {
+ name: 'Instrument Name',
+ method: methodName,
+ });
+ await navigator.serviceWorker.ready;
+ await registration.paymentManager.enableDelegations(['shippingAddress']);
+ }
+
+ async function runTests(registration) {
+ await completeAppSetUp(registration);
+ promise_test(async (t) => {
+ const request = createRequest();
+ // Intentionally do not respond to the 'shippingaddresschange' event.
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+
+ assert_equals(response.details.changeShippingAddressReturned, null);
+
+ return complete_promise;
+ }, 'If updateWith(details) is not run, changeShippingAddress() returns null.');
+
+ promise_test(async (t) => {
+ const request = createRequest();
+ request.addEventListener('shippingaddresschange', (event) => {
+ assert_equals(request.shippingAddress.organization, '', 'organization should be redacted');
+ assert_equals(request.shippingAddress.phone, '', 'phone should be redacted');
+ assert_equals(request.shippingAddress.recipient, '', 'recipient should be redacted');
+ assert_equals(request.shippingAddress.addressLine.length, 0, 'addressLine should be redacted');
+ assert_equals(request.shippingAddress.city, 'Reston');
+ assert_equals(request.shippingAddress.country, 'US');
+ assert_equals(request.shippingAddress.postalCode, '20190');
+ assert_equals(request.shippingAddress.region, 'VA');
+ event.updateWith({
+ total: {label: 'Total', amount: {currency: 'GBP', value: '0.02'}},
+ error: 'Error for test',
+ modifiers: [
+ {
+ supportedMethods: methodName,
+ data: {soup: 'potato'},
+ total: {
+ label: 'Modified total',
+ amount: {currency: 'EUR', value: '0.03'},
+ },
+ additionalDisplayItems: [
+ {
+ label: 'Modified display item',
+ amount: {currency: 'INR', value: '0.06'},
+ },
+ ],
+ },
+ {
+ supportedMethods: methodName + '2',
+ data: {soup: 'tomato'},
+ total: {
+ label: 'Modified total #2',
+ amount: {currency: 'CHF', value: '0.07'},
+ },
+ additionalDisplayItems: [
+ {
+ label: 'Modified display item #2',
+ amount: {currency: 'CAD', value: '0.08'},
+ },
+ ],
+ },
+ ],
+ displayItems: [
+ {
+ label: 'Display item',
+ amount: {currency: 'CNY', value: '0.04'},
+ },
+ ],
+ shippingOptions: [
+ {
+ id: 'freeShippingOption',
+ label: 'express global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: true,
+ }
+ ],
+ shippingAddressErrors: {
+ country: 'US only shipping',
+ }
+ });
+ });
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+ const changeShippingAddressReturned =
+ response.details.changeShippingAddressReturned;
+
+ assert_equals(changeShippingAddressReturned.total.currency, 'GBP');
+ assert_equals(changeShippingAddressReturned.total.value, '0.02');
+ assert_equals(changeShippingAddressReturned.total.label, undefined);
+ assert_equals(changeShippingAddressReturned.error, 'Error for test');
+ assert_equals(changeShippingAddressReturned.modifiers.length, 1);
+ assert_equals(changeShippingAddressReturned.displayItems, undefined);
+ assert_equals(changeShippingAddressReturned.shippingOptions.length, 1);
+ assert_equals(changeShippingAddressReturned.paymentMethodErrors, undefined);
+ assert_equals(changeShippingAddressReturned.shippingAddressErrors.country, 'US only shipping');
+
+ const shipping_option = changeShippingAddressReturned.shippingOptions[0];
+ assert_equals(shipping_option.id, 'freeShippingOption' );
+ assert_equals(shipping_option.label, 'express global shipping');
+ assert_equals(shipping_option.amount.currency, 'USD');
+ assert_equals(shipping_option.amount.value, '0');
+ assert_true(shipping_option.selected);
+
+ const modifier = changeShippingAddressReturned.modifiers[0];
+ assert_equals(modifier.supportedMethods, methodName);
+ assert_equals(modifier.data.soup, 'potato');
+ assert_equals(modifier.total.label, '');
+ assert_equals(modifier.total.amount.currency, 'EUR');
+ assert_equals(modifier.total.amount.value, '0.03');
+ assert_equals(modifier.additionalDisplayItems, undefined);
+
+ return complete_promise;
+ }, 'The changeShippingAddress() returns some details from the "shippingaddresschange" event\'s updateWith(details) call.');
+ }
+
+ registerAndActiveServiceWorker(
+ 'app-change-shipping-address.js',
+ 'payment-app/',
+ runTests
+ );
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html
new file mode 100644
index 00000000000..00d1aee70b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Tests for PaymentRequestEvent.changeShippingOption()</title>
+
+<link rel="manifest" href="/payment-handler/basic-card.json" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="register-and-activate-service-worker.js"></script>
+<p>If the payment sheet is shown, please authorize the mock payment.</p>
+<script>
+ const methodName = window.location.origin + '/payment-handler/payment-app/';
+ function createRequest() {
+ return new PaymentRequest([{supportedMethods: methodName}], {
+ total: {label: 'Total', amount: {currency: 'USD', value: '0.01'}},
+ shippingOptions: [{
+ id: 'freeShippingOption',
+ label: 'Free global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: false,
+ },
+ {
+ id: 'expressShippingOption',
+ label: 'express global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: true,
+ }],
+ }, {requestShipping: true});
+ }
+
+ async function completeAppSetUp(registration) {
+ await registration.paymentManager.instruments.clear();
+ await registration.paymentManager.instruments.set('instrument-key', {
+ name: 'Instrument Name',
+ method: methodName,
+ });
+ await navigator.serviceWorker.ready;
+ await registration.paymentManager.enableDelegations(['shippingAddress']);
+ }
+
+ async function runTests(registration) {
+ await completeAppSetUp(registration);
+ promise_test(async (t) => {
+ const request = createRequest();
+ // Intentionally do not respond to the 'shippingoptionchange' event.
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+
+ assert_equals(response.details.changeShippingOptionReturned, null);
+
+ return complete_promise;
+ }, 'If updateWith(details) is not run, changeShippingOption() returns null.');
+
+ promise_test(async (t) => {
+ const request = createRequest();
+ request.addEventListener('shippingoptionchange', (event) => {
+ assert_equals(request.shippingOption, 'freeShippingOption');
+ event.updateWith({
+ total: {label: 'Total', amount: {currency: 'GBP', value: '0.02'}},
+ error: 'Error for test',
+ modifiers: [
+ {
+ supportedMethods: methodName,
+ data: {soup: 'potato'},
+ total: {
+ label: 'Modified total',
+ amount: {currency: 'EUR', value: '0.03'},
+ },
+ additionalDisplayItems: [
+ {
+ label: 'Modified display item',
+ amount: {currency: 'INR', value: '0.06'},
+ },
+ ],
+ },
+ {
+ supportedMethods: methodName + '2',
+ data: {soup: 'tomato'},
+ total: {
+ label: 'Modified total #2',
+ amount: {currency: 'CHF', value: '0.07'},
+ },
+ additionalDisplayItems: [
+ {
+ label: 'Modified display item #2',
+ amount: {currency: 'CAD', value: '0.08'},
+ },
+ ],
+ },
+ ],
+ displayItems: [
+ {
+ label: 'Display item',
+ amount: {currency: 'CNY', value: '0.04'},
+ },
+ ],
+ shippingOptions: [
+ {
+ id: 'freeShippingOption',
+ label: 'express global shipping',
+ amount: {
+ currency: 'USD',
+ value: '0',
+ },
+ selected: true,
+ }
+ ],
+ });
+ });
+ const response = await test_driver.bless('showing a payment sheet', () =>
+ request.show()
+ );
+ const complete_promise = response.complete('success');
+ const changeShippingOptionReturned =
+ response.details.changeShippingOptionReturned;
+
+ assert_equals(changeShippingOptionReturned.total.currency, 'GBP');
+ assert_equals(changeShippingOptionReturned.total.value, '0.02');
+ assert_equals(changeShippingOptionReturned.total.label, undefined);
+ assert_equals(changeShippingOptionReturned.error, 'Error for test');
+ assert_equals(changeShippingOptionReturned.modifiers.length, 1);
+ assert_equals(changeShippingOptionReturned.displayItems, undefined);
+ assert_equals(changeShippingOptionReturned.shippingOptions.length, 1);
+ assert_equals(changeShippingOptionReturned.paymentMethodErrors, undefined);
+ assert_equals(changeShippingOptionReturned.shippingAddressErrors, undefined);
+
+ const shipping_option = changeShippingOptionReturned.shippingOptions[0];
+ assert_equals(shipping_option.id, 'freeShippingOption' );
+ assert_equals(shipping_option.label, 'express global shipping');
+ assert_equals(shipping_option.amount.currency, 'USD');
+ assert_equals(shipping_option.amount.value, '0');
+ assert_true(shipping_option.selected);
+
+ const modifier = changeShippingOptionReturned.modifiers[0];
+ assert_equals(modifier.supportedMethods, methodName);
+ assert_equals(modifier.data.soup, 'potato');
+ assert_equals(modifier.total.label, '');
+ assert_equals(modifier.total.amount.currency, 'EUR');
+ assert_equals(modifier.total.amount.value, '0.03');
+ assert_equals(modifier.additionalDisplayItems, undefined);
+
+ return complete_promise;
+ }, 'The changeShippingOption() returns some details from the "shippingoptionchange" event\'s updateWith(details) call.');
+ }
+
+ registerAndActiveServiceWorker(
+ 'app-change-shipping-option.js',
+ 'payment-app/',
+ runTests
+ );
+</script>
diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js b/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js
index 2558bbda589..703db425590 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/mock-barcodedetection.js
@@ -9,7 +9,7 @@ var BarcodeDetectionTest = (() => {
shapeDetection.mojom.BarcodeDetectionProvider);
this.interceptor_ = new MojoInterfaceInterceptor(
- shapeDetection.mojom.BarcodeDetectionProvider.name);
+ shapeDetection.mojom.BarcodeDetectionProvider.name, "context", true);
this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start();
diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js b/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js
index 1275e4dd2f5..01306a2a0c7 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/mock-facedetection.js
@@ -9,7 +9,7 @@ var FaceDetectionTest = (() => {
shapeDetection.mojom.FaceDetectionProvider);
this.interceptor_ = new MojoInterfaceInterceptor(
- shapeDetection.mojom.FaceDetectionProvider.name);
+ shapeDetection.mojom.FaceDetectionProvider.name, "context", true);
this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start();
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
index a2498333c2b..6569580e9ff 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
@@ -346,7 +346,7 @@ def test_tests_affected_idlharness(capsys, manifest_dir):
wpt.main(argv=["tests-affected", "--metadata", manifest_dir, "%s~..%s" % (commit, commit)])
assert excinfo.value.code == 0
out, err = capsys.readouterr()
- assert "webrtc-stats/idlharness.window.js\nwebrtc/idlharness.https.window.js\n" == out
+ assert "webrtc-identity/idlharness.https.window.js\nwebrtc-stats/idlharness.window.js\nwebrtc/idlharness.https.window.js\n" == out
@pytest.mark.slow # this updates the manifest
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
index 71f246f4b6d..c9de22038dd 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
@@ -39,6 +39,7 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
executor_kwargs["supports_eager_pageload"] = False
capabilities = {
+ "acceptInsecureCerts": True,
"goog:chromeOptions": {
"prefs": {
"profile": {
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py
index 42f3b00dab5..15bbf94c33c 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py
@@ -221,8 +221,10 @@ def pack_result(data):
if not data.get("known_intermittent"):
return status_intern.store(data.get("status"))
result = array.array("B")
- result_parts = ([data["status"], data.get("expected", data["status"])] +
- data["known_intermittent"])
+ expected = data.get("expected")
+ if expected is None:
+ expected = data["status"]
+ result_parts = [data["status"], expected] + data["known_intermittent"]
for i, part in enumerate(result_parts):
value = status_intern.store(part)
if i % 2 == 0:
@@ -688,13 +690,6 @@ class TestFileData(object):
expected.set_leak_threshold(run_info, value)
continue
- if prop == "status":
- status, known_intermittent = unpack_result(value)
- value = Result(status,
- known_intermittent,
- default_expected_by_type[self.item_type,
- subtest_id is not None])
-
test_expected = expected_by_test[test_id]
if subtest_id is None:
item_expected = test_expected
@@ -702,7 +697,13 @@ class TestFileData(object):
if isinstance(subtest_id, str):
subtest_id = subtest_id.decode("utf8")
item_expected = test_expected.get_subtest(subtest_id)
+
if prop == "status":
+ status, known_intermittent = unpack_result(value)
+ value = Result(status,
+ known_intermittent,
+ default_expected_by_type[self.item_type,
+ subtest_id is not None])
item_expected.set_result(run_info, value)
elif prop == "asserts":
item_expected.set_asserts(run_info, value)
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html
index 11ef305064d..0104ba35805 100644
--- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html
@@ -68,7 +68,7 @@
function expect_blocked_uri(s) { return e => {
assert_true(e.blockedURI === s,
- `expected "${e.blockedUri}" to be "${s}".`);
+ `expected "${e.blockedURI}" to be "${s}".`);
return e;
} }
@@ -154,6 +154,7 @@
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types two"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("Element.innerHTML"))
.then(expect_sample("abc"));
expect_throws(_ => { document.getElementById("div").innerHTML = "abc" });
@@ -163,6 +164,7 @@
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types two"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLAnchorElement.href"));
expect_throws(_ => { document.getElementById("anchor").href = "" });
return p;
@@ -171,6 +173,7 @@
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types two"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLElement.innerText"))
.then(expect_sample("2+2;"));
expect_throws(_ => document.getElementById("script").innerText = "2+2;");
@@ -180,6 +183,7 @@
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types one"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("eval"))
.then(expect_sample("2+2"))
.then(promise_flush());
@@ -193,6 +197,7 @@
// start of the value, but it should not be excessively long.
let p = Promise.resolve()
.then(promise_violation("trusted-types two"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLElement.innerText"))
.then(expect_sample("abbb"))
.then(e => assert_less_than(e.sample.length, 150));
@@ -211,6 +216,7 @@
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types one"))
+ .then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLAnchorElement.href"))
.then(expect_sample("abc"));
expect_throws(_ => document.getElementById("customlink").href = "abc");
diff --git a/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js b/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js
new file mode 100644
index 00000000000..da1cb85a8e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc-identity/idlharness.https.window.js
@@ -0,0 +1,24 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+ ['webrtc-identity'],
+ ['webrtc', 'mediacapture-streams', 'html', 'dom'],
+ async idlArray => {
+ idlArray.add_objects({
+ RTCPeerConnection: [`new RTCPeerConnection()`],
+ RTCIdentityAssertion: [`new RTCIdentityAssertion('idp', 'name')`],
+ MediaStreamTrack: ['track'],
+ // TODO: RTCIdentityProviderGlobalScope
+ // TODO: RTCIdentityProviderRegistrar
+ });
+
+ try {
+ self.track = await navigator.mediaDevices
+ .getUserMedia({audio: true})
+ .then(m => m.getTracks()[0]);
+ } catch (e) {}
+ }
+);
diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js
index 24b5274bc23..863b9945724 100644
--- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js
+++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_asserts.js
@@ -30,6 +30,31 @@ let assert_point_approx_equals = function(p1, p2, epsilon = FLOAT_EPSILON, prefi
}
};
+// |p1|, |p2| - objects with x, y, z, w components that are floating point numbers
+// |epsilon| - float specifying precision
+// |prefix| - string used as a prefix for logging
+let assert_point_significantly_not_equals = function(p1, p2, epsilon = FLOAT_EPSILON, prefix = "") {
+
+ assert_not_equals(p1, null, prefix + "p1 must be non-null");
+ assert_not_equals(p2, null, prefix + "p2 must be non-null");
+
+ let mismatched_component = null;
+ for (const v of ['x', 'y', 'z', 'w']) {
+ if (Math.abs(p1[v] - p2[v]) > epsilon) {
+ mismatched_component = v;
+ break;
+ }
+ }
+
+ if (mismatched_component === null) {
+ let error_message = prefix + ' Point comparison failed.\n';
+ error_message += ` p1: {x: ${p1.x}, y: ${p1.y}, z: ${p1.z}, w: ${p1.w}}\n`;
+ error_message += ` p2: {x: ${p2.x}, y: ${p2.y}, z: ${p2.z}, w: ${p2.w}}\n`;
+ error_message += ` Difference in components did not exceeded the given epsilon.\n`;
+ assert_unreached(error_message);
+ }
+};
+
// |m1|, |m2| - arrays of floating point numbers
// |epsilon| - float specifying precision
// |prefix| - string used as a prefix for logging
diff --git a/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html b/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html
new file mode 100644
index 00000000000..2f93914e851
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webxr/xrReferenceSpace_originOffset_viewer.https.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/webxr_util.js"></script>
+<script src="resources/webxr_test_constants.js"></script>
+<script src="resources/webxr_test_asserts.js"></script>
+<canvas id="webgl-canvas"></canvas>
+
+<script>
+let testName = "Creating XRReferenceSpace origin offset off of `viewer` space works.";
+
+let fakeDeviceInitParams = {
+ supportsImmersive: true,
+ viewerOrigin: VALID_POSE_TRANSFORM,
+ views: VALID_VIEWS,
+ supportedFeatures: ALL_FEATURES
+};
+
+let originOffsetPosition = new DOMPointReadOnly(0, 0, 1);
+
+let testFunction =
+ (session, fakeDeviceController, t) => new Promise((resolve) => {
+
+ session.requestReferenceSpace('local').then( (localSpace) => {
+ session.requestReferenceSpace('viewer').then( (viewerSpace) => {
+
+ let offsetSpace = viewerSpace.getOffsetReferenceSpace(
+ new XRRigidTransform(originOffsetPosition));
+
+ function OnFrame(time, frame) {
+ let viewerPose = frame.getPose(viewerSpace, localSpace);
+ let offsetPose = frame.getPose(offsetSpace, localSpace);
+
+ let viewerPose2 = frame.getPose(localSpace ,viewerSpace);
+ let offsetPose2 = frame.getPose(localSpace, offsetSpace);
+
+ t.step(() => {
+ assert_point_significantly_not_equals(viewerPose.transform.position, offsetPose.transform.position);
+ assert_point_significantly_not_equals(viewerPose2.transform.position, offsetPose2.transform.position);
+ });
+
+ resolve();
+ }
+
+ // Can only request input poses in an xr frame.
+ session.requestAnimationFrame(OnFrame);
+ });
+ });
+ });
+
+xr_session_promise_test(
+ testName, testFunction, fakeDeviceInitParams, 'immersive-vr');
+
+</script>