Update web-platform-tests to revision f1e1bd6bfa544af8059ff8ef79d622281f9ec0a8

This commit is contained in:
WPT Sync Bot 2019-10-01 10:52:57 +00:00
parent 1b6715158d
commit 38ab56be1a
64 changed files with 5155 additions and 165 deletions

View file

@ -7,7 +7,7 @@
expected: FAIL expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.] [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.] [Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL expected: FAIL

View file

@ -14,9 +14,6 @@
[Revoke blob URL after creating Request, will fetch] [Revoke blob URL after creating Request, will fetch]
expected: FAIL expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL
[url-with-fetch.any.html] [url-with-fetch.any.html]
[Untitled] [Untitled]

View file

@ -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": [
[ [
"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": [
[ [
"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/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": [ "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [
[] []
], ],
@ -273882,6 +273990,9 @@
"interfaces/webrtc-dscp.idl": [ "interfaces/webrtc-dscp.idl": [
[] []
], ],
"interfaces/webrtc-identity.idl": [
[]
],
"interfaces/webrtc-stats.idl": [ "interfaces/webrtc-stats.idl": [
[] []
], ],
@ -275679,6 +275790,12 @@
"payment-handler/app-change-payment-method.js": [ "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": [ "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.js": [
[ [
"console/console-is-a-namespace.any.html", "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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"webxr/xrRigidTransform_constructor.https.html", "webxr/xrRigidTransform_constructor.https.html",
@ -446181,7 +446507,7 @@
"support" "support"
], ],
".taskcluster.yml": [ ".taskcluster.yml": [
"dffccbb7971382d599ff622fb31a949fa570fa49", "b23cc93e633021686192b5cc1acbb7d8b6b3fe96",
"support" "support"
], ],
".well-known/README.md": [ ".well-known/README.md": [
@ -458201,7 +458527,7 @@
"reftest" "reftest"
], ],
"compression/decompression-bad-chunks.any.js": [ "compression/decompression-bad-chunks.any.js": [
"8f44ffd902f0838cecf72be50245ab4c683fc09c", "b8954905cbfce79893152e32200cc16e6c3f815b",
"testharness" "testharness"
], ],
"compression/decompression-constructor-error.any.js": [ "compression/decompression-constructor-error.any.js": [
@ -458212,6 +458538,18 @@
"11d8736cb225d6ce575677dcdb70b0a19dd4f65f", "11d8736cb225d6ce575677dcdb70b0a19dd4f65f",
"testharness" "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": [ "conformance-checkers/META.yml": [
"978b5c85721c28f267ec21ceb620017514441385", "978b5c85721c28f267ec21ceb620017514441385",
"support" "support"
@ -480868,6 +481206,14 @@
"d5c9b8ada3f1bce6ebfe35efd0d6f288aa5ca5e3", "d5c9b8ada3f1bce6ebfe35efd0d6f288aa5ca5e3",
"testharness" "testharness"
], ],
"cookies/samesite/about-blank-subresource.https.html": [
"0a19f30d34758e0b9865b2300e5658ec6efbfe0c",
"testharness"
],
"cookies/samesite/about-blank-toplevel.https.html": [
"3a4dde7673d13dec2daf7f83b3082a5589e2e688",
"testharness"
],
"cookies/samesite/fetch.https.html": [ "cookies/samesite/fetch.https.html": [
"4daf357004a71cea5b0e58a44bf8919d96ad7ce8", "4daf357004a71cea5b0e58a44bf8919d96ad7ce8",
"testharness" "testharness"
@ -480909,7 +481255,7 @@
"support" "support"
], ],
"cookies/samesite/resources/iframe-subresource-report.html": [ "cookies/samesite/resources/iframe-subresource-report.html": [
"fad80534f22bdc63e7a4827cef07b17335134b71", "1dceb4e43681c81b6c1b8877fd2d9f2b34391a02",
"support" "support"
], ],
"cookies/samesite/resources/navigate.html": [ "cookies/samesite/resources/navigate.html": [
@ -546112,6 +546458,10 @@
"dde409360faf79a301c3ae3ea34a995d154d7bb4", "dde409360faf79a301c3ae3ea34a995d154d7bb4",
"support" "support"
], ],
"css/css-box/animation/margin-interpolation.html": [
"088836cbbd18d0daf203de7dbacfb65733e35813",
"testharness"
],
"css/css-box/animation/padding-interpolation.html": [ "css/css-box/animation/padding-interpolation.html": [
"3bf284117960fe78300e95140244d309f8f439a4", "3bf284117960fe78300e95140244d309f8f439a4",
"testharness" "testharness"
@ -546520,6 +546870,10 @@
"4b39fdcf796083ace917f0a021a697c6e4eb7214", "4b39fdcf796083ace917f0a021a697c6e4eb7214",
"testharness" "testharness"
], ],
"css/css-color/animation/opacity-interpolation.html": [
"ce26a8c79939e1d35f5ea35686fc272aad765914",
"testharness"
],
"css/css-color/blacktext-ref.html": [ "css/css-color/blacktext-ref.html": [
"ddfa9100cbef6094375df8b40eeb9673e690d4f7", "ddfa9100cbef6094375df8b40eeb9673e690d4f7",
"support" "support"
@ -551276,6 +551630,10 @@
"da69a06891ee2d16f91db5d839e14aa2d876b604", "da69a06891ee2d16f91db5d839e14aa2d876b604",
"testharness" "testharness"
], ],
"css/css-flexbox/animation/order-interpolation.html": [
"8096fc3db661078029f991a45f789f439108849c",
"testharness"
],
"css/css-flexbox/anonymous-flex-item-001.html": [ "css/css-flexbox/anonymous-flex-item-001.html": [
"3e749d43f76981a5cc0b372c7ba0c364c350b6b2", "3e749d43f76981a5cc0b372c7ba0c364c350b6b2",
"reftest" "reftest"
@ -565808,6 +566166,50 @@
"4a0edd7e6d5aefe06fc0d9989c84d3871ea61a14", "4a0edd7e6d5aefe06fc0d9989c84d3871ea61a14",
"reftest" "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": [ "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [
"d264a3455a6c580976d2519ab4e0eb206b1164bf", "d264a3455a6c580976d2519ab4e0eb206b1164bf",
"support" "support"
@ -567640,6 +568042,10 @@
"7f92755b092845d3d550568e0572453801451f3d", "7f92755b092845d3d550568e0572453801451f3d",
"support" "support"
], ],
"css/css-masking/animations/clip-path-interpolation.html": [
"21c34f1f2b75ec7345a97b00db62a49b038cf026",
"testharness"
],
"css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [ "css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [
"269e8feed2d3c21774a7c94729c3551899ce4d92", "269e8feed2d3c21774a7c94729c3551899ce4d92",
"reftest" "reftest"
@ -570712,6 +571118,10 @@
"2ed8d2687a33608e0e70884ad2ea59330d2b09e3", "2ed8d2687a33608e0e70884ad2ea59330d2b09e3",
"reftest" "reftest"
], ],
"css/css-overflow/overflow-codependent-scrollbars.html": [
"eb0e4f5ea2ed9a97c0931c2c53de5e62e72ba1dd",
"testharness"
],
"css/css-overflow/overflow-inline-transform-relative.html": [ "css/css-overflow/overflow-inline-transform-relative.html": [
"4df7b6389432cc6c65bae3fe3b5b9c2f00ba7bde", "4df7b6389432cc6c65bae3fe3b5b9c2f00ba7bde",
"testharness" "testharness"
@ -578424,6 +578834,10 @@
"91439a69c9b1765cdbaf7e9614180d080ab32907", "91439a69c9b1765cdbaf7e9614180d080ab32907",
"reftest" "reftest"
], ],
"css/css-tables/animations/border-spacing-interpolation.html": [
"02e1cc62296501417b7ce8d02136b57e5342f332",
"testharness"
],
"css/css-tables/anonymous-table-cell-margin-collapsing.html": [ "css/css-tables/anonymous-table-cell-margin-collapsing.html": [
"23b467ebacc983122a632f4d5971c8daca569420", "23b467ebacc983122a632f4d5971c8daca569420",
"reftest" "reftest"
@ -649657,11 +650071,11 @@
"support" "support"
], ],
"interfaces/css-animation-worklet.idl": [ "interfaces/css-animation-worklet.idl": [
"4aca84e5a024efdc2d3e674540bf2091758551c9", "2c46cc7c94c65d6928db9f4e90a57c6188815d8e",
"support" "support"
], ],
"interfaces/css-animations.idl": [ "interfaces/css-animations.idl": [
"f87015f6a87fccc0accab30920cd8371eee99e63", "9b34bde2330497afe6628da8e01946c27cf89821",
"support" "support"
], ],
"interfaces/css-conditional.idl": [ "interfaces/css-conditional.idl": [
@ -649713,7 +650127,7 @@
"support" "support"
], ],
"interfaces/css-transitions.idl": [ "interfaces/css-transitions.idl": [
"be5a635112b83cb4315006ac5a86ae7edc7fa43c", "15ce4b30f211012b5fd9e6a713d92c0ea1045a54",
"support" "support"
], ],
"interfaces/css-typed-om.idl": [ "interfaces/css-typed-om.idl": [
@ -649745,7 +650159,7 @@
"support" "support"
], ],
"interfaces/entries-api.idl": [ "interfaces/entries-api.idl": [
"548aec13ab70eeedb9ba01ff96e0b3cb1d783510", "52693138a4cd9d86f9a48a8e5300a8006298defb",
"support" "support"
], ],
"interfaces/event-timing.idl": [ "interfaces/event-timing.idl": [
@ -649945,7 +650359,7 @@
"support" "support"
], ],
"interfaces/presentation-api.idl": [ "interfaces/presentation-api.idl": [
"c1e566538aa0211ecebbd8d177765fc1dd02c2ce", "dfaa022b95249eb020e6fb8e0495156a8c0744ee",
"support" "support"
], ],
"interfaces/proximity.idl": [ "interfaces/proximity.idl": [
@ -650009,7 +650423,7 @@
"support" "support"
], ],
"interfaces/shape-detection-api.idl": [ "interfaces/shape-detection-api.idl": [
"0144f04e046720d20f91a98af9d5c651e95b06fd", "51c996959bea2acc1b2d0a3c3be438b0c6182e23",
"support" "support"
], ],
"interfaces/speech-api.idl": [ "interfaces/speech-api.idl": [
@ -650061,11 +650475,11 @@
"support" "support"
], ],
"interfaces/web-animations.idl": [ "interfaces/web-animations.idl": [
"89993896508fa04e87ec965211b3152e24975934", "6fd172ce425d570d097fcb573115091c83cc5484",
"support" "support"
], ],
"interfaces/web-bluetooth.idl": [ "interfaces/web-bluetooth.idl": [
"f515dda1a814ee1121623033684b3020c355f9ec", "ec7a8e71ca09c7648801e6f2bb91c711c857fe34",
"support" "support"
], ],
"interfaces/web-nfc.idl": [ "interfaces/web-nfc.idl": [
@ -650077,7 +650491,7 @@
"support" "support"
], ],
"interfaces/webaudio.idl": [ "interfaces/webaudio.idl": [
"1b6af25b3b363411bfb365b1b3b21639584cfa76", "3869d5d14a66c39e0281bb94a2e41ee5f2e395ba",
"support" "support"
], ],
"interfaces/webauthn.idl": [ "interfaces/webauthn.idl": [
@ -650104,6 +650518,10 @@
"732230b4a339d2484fa5242fdfc77224400796b2", "732230b4a339d2484fa5242fdfc77224400796b2",
"support" "support"
], ],
"interfaces/webrtc-identity.idl": [
"5a59a4887ac7eb0ad39cfd82fee052828d7af316",
"support"
],
"interfaces/webrtc-stats.idl": [ "interfaces/webrtc-stats.idl": [
"c2dc1f7a0b0a482d226b881995414b558fbe2baf", "c2dc1f7a0b0a482d226b881995414b558fbe2baf",
"support" "support"
@ -650113,7 +650531,7 @@
"support" "support"
], ],
"interfaces/webusb.idl": [ "interfaces/webusb.idl": [
"fcca851b8b535f4886bd56f30714971cf22c8c40", "ad5c480454d7cd6feb178fa450663b9977eb51cd",
"support" "support"
], ],
"interfaces/webvtt.idl": [ "interfaces/webvtt.idl": [
@ -663272,6 +663690,14 @@
"0e5a4768e7626f666077e794e0731c9a1e3e9d35", "0e5a4768e7626f666077e794e0731c9a1e3e9d35",
"support" "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": [ "payment-handler/app-supports-shipping-contact-delegation.js": [
"770e2de64f13eeef8a1ee21783c2997facc8ff0b", "770e2de64f13eeef8a1ee21783c2997facc8ff0b",
"support" "support"
@ -663308,6 +663734,14 @@
"56690d2b26ed671f773a16853463126e57735f77", "56690d2b26ed671f773a16853463126e57735f77",
"manual" "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": [ "payment-handler/idlharness.https.any.js": [
"878114ec7ed878d3e754341cbffa138092fee129", "878114ec7ed878d3e754341cbffa138092fee129",
"testharness" "testharness"
@ -676353,7 +676787,7 @@
"support" "support"
], ],
"resources/chromium/mock-barcodedetection.js": [ "resources/chromium/mock-barcodedetection.js": [
"2558bbda58913ec51c36bdce28e0f84a1aea32e7", "703db425590d8a8450f285878abb025a42a15122",
"support" "support"
], ],
"resources/chromium/mock-barcodedetection.js.headers": [ "resources/chromium/mock-barcodedetection.js.headers": [
@ -676361,7 +676795,7 @@
"support" "support"
], ],
"resources/chromium/mock-facedetection.js": [ "resources/chromium/mock-facedetection.js": [
"1275e4dd2f5e24988e723a728dbf5bb4acc4c6cb", "01306a2a0c7f470f56d746aa68dff3fe3636c575",
"support" "support"
], ],
"resources/chromium/mock-facedetection.js.headers": [ "resources/chromium/mock-facedetection.js.headers": [
@ -692097,7 +692531,7 @@
"support" "support"
], ],
"tools/wpt/tests/test_wpt.py": [ "tools/wpt/tests/test_wpt.py": [
"a2498333c2b51e7c985e28124d0c75a0fd5352c3", "6569580e9ff471784e307b7e84555935dec99586",
"support" "support"
], ],
"tools/wpt/tox.ini": [ "tools/wpt/tox.ini": [
@ -692365,7 +692799,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/browsers/chrome.py": [ "tools/wptrunner/wptrunner/browsers/chrome.py": [
"71f246f4b6d8452f321517ac62dc42e0db978e42", "c9de22038ddcd69daf4b8181dc938444d9266a10",
"support" "support"
], ],
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [ "tools/wptrunner/wptrunner/browsers/chrome_android.py": [
@ -692589,7 +693023,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/metadata.py": [ "tools/wptrunner/wptrunner/metadata.py": [
"42f3b00dab5b926f918c23a352bef935f07bbf4c", "15bbf94c33cea80ab4d0fdd958618f264fa57ab1",
"support" "support"
], ],
"tools/wptrunner/wptrunner/products.py": [ "tools/wptrunner/wptrunner/products.py": [
@ -693457,7 +693891,7 @@
"support" "support"
], ],
"trusted-types/trusted-types-reporting.tentative.https.html": [ "trusted-types/trusted-types-reporting.tentative.https.html": [
"11ef305064d2af10ffc07ca09e51dcb1a3661e76", "0104ba358058199a77f1af5afb27e3255da8da64",
"testharness" "testharness"
], ],
"trusted-types/trusted-types-reporting.tentative.https.html.headers": [ "trusted-types/trusted-types-reporting.tentative.https.html.headers": [
@ -699164,6 +699598,10 @@
"90363662f742fbf1d31634030d2b470e08fe1421", "90363662f742fbf1d31634030d2b470e08fe1421",
"support" "support"
], ],
"webrtc-identity/idlharness.https.window.js": [
"da1cb85a8e7ef147729d4a4f1a77493862dea48c",
"testharness"
],
"webrtc-quic/META.yml": [ "webrtc-quic/META.yml": [
"740c8d2fe84beafbcb7f98cef29aff2378721132", "740c8d2fe84beafbcb7f98cef29aff2378721132",
"support" "support"
@ -704305,7 +704743,7 @@
"support" "support"
], ],
"webxr/resources/webxr_test_asserts.js": [ "webxr/resources/webxr_test_asserts.js": [
"24b5274bc23d4e601e94eebd93968d9c30942b08", "863b994572441d0efdbe92dbd8aec29f9152069f",
"support" "support"
], ],
"webxr/resources/webxr_test_constants.js": [ "webxr/resources/webxr_test_constants.js": [
@ -704444,6 +704882,10 @@
"cfa3cc7ca2fe7cfbd656d9164b0d1ab3dd60ca41", "cfa3cc7ca2fe7cfbd656d9164b0d1ab3dd60ca41",
"testharness" "testharness"
], ],
"webxr/xrReferenceSpace_originOffset_viewer.https.html": [
"2f93914e851ed55d5f9e60cc131316132e7ca226",
"testharness"
],
"webxr/xrRigidTransform_constructor.https.html": [ "webxr/xrRigidTransform_constructor.https.html": [
"15a7f2b5771a78dba2036ec46933e826c9a54355", "15a7f2b5771a78dba2036ec46933e826c9a54355",
"testharness" "testharness"

View file

@ -0,0 +1,4 @@
[opacity-interpolation.html]
[opacity interpolation]
expected: FAIL

View file

@ -0,0 +1,4 @@
[order-interpolation.html]
[order interpolation]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -315,15 +315,18 @@
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: combined response Content-Type: text/html */*]
expected: FAIL expected: FAIL
[<iframe>: combined 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;" text/plain]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL expected: FAIL

View file

@ -53,9 +53,9 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
[separate text/javascript x/x] [separate text/javascript x/x]
expected: FAIL expected: FAIL
[separate text/javascript error]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,5 +1,24 @@
[open-features-negative-top-left.html] [open-features-negative-top-left.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`] [HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL 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

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html] [embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents] [opener and "removed" embedded documents]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[xrBoundedReferenceSpace_updates.https.html] [xrBoundedReferenceSpace_updates.https.html]
expected: ERROR expected: TIMEOUT
['XRBoundedReferenceSpace updates properly when the changes are applied] ['XRBoundedReferenceSpace updates properly when the changes are applied]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,2 +0,0 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -282,7 +282,6 @@ tasks:
export TOXENV=py27; export TOXENV=py27;
./tools/ci/run_tc.py \ ./tools/ci/run_tc.py \
--browser=firefox \ --browser=firefox \
--channel=experimental \
--xvfb \ --xvfb \
resources_unittest \ resources_unittest \
tools/ci/ci_resources_unittest.sh tools/ci/ci_resources_unittest.sh

View file

@ -34,20 +34,16 @@ const badChunks = [
{ {
name: 'shared Uint8Array', name: 'shared Uint8Array',
get value() { get value() {
new Uint8Array(new SharedArrayBuffer()) return new Uint8Array(new SharedArrayBuffer())
} }
}, },
{ {
name: 'invalid deflate bytes', name: 'invalid deflate bytes',
get value() { 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])
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', name: 'invalid gzip bytes',
get value() { 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])
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])
}
}, },
]; ];

View file

@ -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');

View file

@ -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`);
}

View file

@ -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');

View file

@ -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>

View file

@ -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>

View file

@ -6,7 +6,8 @@ function reportSubresourceCookies() {
credFetch(SECURE_ORIGIN + "/cookies/resources/list.py") credFetch(SECURE_ORIGIN + "/cookies/resources/list.py")
.then(r => r.json()) .then(r => r.json())
.then(cookies => { cookies.type = "COOKIES"; .then(cookies => { cookies.type = "COOKIES";
window.parent.postMessage(cookies, "*");}); target = window.opener ? window.opener : window.parent;
target.postMessage(cookies, "*");});
} }
</script> </script>
</head> </head>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -22,12 +22,12 @@ interface WorkletAnimationEffect {
attribute double? localTime; attribute double? localTime;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (DOMString animatorName, interface WorkletAnimation : Animation {
constructor(DOMString animatorName,
optional (AnimationEffect or sequence<AnimationEffect>)? effects = null, optional (AnimationEffect or sequence<AnimationEffect>)? effects = null,
optional AnimationTimeline? timeline, optional AnimationTimeline? timeline,
optional any options)] optional any options);
interface WorkletAnimation : Animation {
readonly attribute DOMString animatorName; readonly attribute DOMString animatorName;
}; };

View file

@ -3,9 +3,9 @@
// (https://github.com/tidoust/reffy-reports) // (https://github.com/tidoust/reffy-reports)
// Source: CSS Animations Level 1 (https://drafts.csswg.org/css-animations/) // Source: CSS Animations Level 1 (https://drafts.csswg.org/css-animations/)
[Exposed=Window, [Exposed=Window]
Constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {})]
interface AnimationEvent : Event { interface AnimationEvent : Event {
constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict = {});
readonly attribute CSSOMString animationName; readonly attribute CSSOMString animationName;
readonly attribute double elapsedTime; readonly attribute double elapsedTime;
readonly attribute CSSOMString pseudoElement; readonly attribute CSSOMString pseudoElement;

View file

@ -3,9 +3,9 @@
// (https://github.com/tidoust/reffy-reports) // (https://github.com/tidoust/reffy-reports)
// Source: CSS Transitions (https://drafts.csswg.org/css-transitions/) // Source: CSS Transitions (https://drafts.csswg.org/css-transitions/)
[Exposed=Window, [Exposed=Window]
Constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {})]
interface TransitionEvent : Event { interface TransitionEvent : Event {
constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict = {});
readonly attribute CSSOMString propertyName; readonly attribute CSSOMString propertyName;
readonly attribute double elapsedTime; readonly attribute double elapsedTime;
readonly attribute CSSOMString pseudoElement; readonly attribute CSSOMString pseudoElement;

View file

@ -18,6 +18,7 @@ partial interface DataTransferItem {
callback ErrorCallback = void (DOMException err); callback ErrorCallback = void (DOMException err);
[Exposed=Window]
interface FileSystemEntry { interface FileSystemEntry {
readonly attribute boolean isFile; readonly attribute boolean isFile;
readonly attribute boolean isDirectory; readonly attribute boolean isDirectory;
@ -29,6 +30,7 @@ interface FileSystemEntry {
optional ErrorCallback errorCallback); optional ErrorCallback errorCallback);
}; };
[Exposed=Window]
interface FileSystemDirectoryEntry : FileSystemEntry { interface FileSystemDirectoryEntry : FileSystemEntry {
FileSystemDirectoryReader createReader(); FileSystemDirectoryReader createReader();
void getFile(optional USVString? path, void getFile(optional USVString? path,
@ -48,18 +50,21 @@ dictionary FileSystemFlags {
callback FileSystemEntryCallback = void (FileSystemEntry entry); callback FileSystemEntryCallback = void (FileSystemEntry entry);
[Exposed=Window]
interface FileSystemDirectoryReader { interface FileSystemDirectoryReader {
void readEntries(FileSystemEntriesCallback successCallback, void readEntries(FileSystemEntriesCallback successCallback,
optional ErrorCallback errorCallback); optional ErrorCallback errorCallback);
}; };
callback FileSystemEntriesCallback = void (sequence<FileSystemEntry> entries); callback FileSystemEntriesCallback = void (sequence<FileSystemEntry> entries);
[Exposed=Window]
interface FileSystemFileEntry : FileSystemEntry { interface FileSystemFileEntry : FileSystemEntry {
void file(FileCallback successCallback, void file(FileCallback successCallback,
optional ErrorCallback errorCallback); optional ErrorCallback errorCallback);
}; };
callback FileCallback = void (File file); callback FileCallback = void (File file);
[Exposed=Window]
interface FileSystem { interface FileSystem {
readonly attribute USVString name; readonly attribute USVString name;
readonly attribute FileSystemDirectoryEntry root; readonly attribute FileSystemDirectoryEntry root;

View file

@ -48,7 +48,6 @@ dictionary PresentationConnectionAvailableEventInit : EventInit {
}; };
enum PresentationConnectionState { "connecting", "connected", "closed", "terminated" }; enum PresentationConnectionState { "connecting", "connected", "closed", "terminated" };
enum BinaryType { "blob", "arraybuffer" };
[SecureContext, Exposed=Window] [SecureContext, Exposed=Window]
interface PresentationConnection : EventTarget { interface PresentationConnection : EventTarget {

View file

@ -4,9 +4,9 @@
// Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/) // Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/)
[Exposed=(Window,Worker), [Exposed=(Window,Worker),
SecureContext, SecureContext]
Constructor(optional FaceDetectorOptions faceDetectorOptions = {})]
interface FaceDetector { interface FaceDetector {
constructor(optional FaceDetectorOptions faceDetectorOptions = {});
Promise<sequence<DetectedFace>> detect(ImageBitmapSource image); Promise<sequence<DetectedFace>> detect(ImageBitmapSource image);
}; };
@ -35,9 +35,9 @@ enum LandmarkType {
}; };
[Exposed=(Window,Worker), [Exposed=(Window,Worker),
SecureContext, SecureContext]
Constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {})]
interface BarcodeDetector { interface BarcodeDetector {
constructor(optional BarcodeDetectorOptions barcodeDetectorOptions = {});
static Promise<sequence<BarcodeFormat>> getSupportedFormats(); static Promise<sequence<BarcodeFormat>> getSupportedFormats();
Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image); Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image);

View file

@ -12,15 +12,15 @@ dictionary DocumentTimelineOptions {
DOMHighResTimeStamp originTime = 0; DOMHighResTimeStamp originTime = 0;
}; };
[Exposed=Window, [Exposed=Window]
Constructor(optional DocumentTimelineOptions options = {})]
interface DocumentTimeline : AnimationTimeline { interface DocumentTimeline : AnimationTimeline {
constructor(optional DocumentTimelineOptions options = {});
}; };
[Exposed=Window, [Exposed=Window]
Constructor(optional AnimationEffect? effect = null,
optional AnimationTimeline? timeline)]
interface Animation : EventTarget { interface Animation : EventTarget {
constructor(optional AnimationEffect? effect = null,
optional AnimationTimeline? timeline);
attribute DOMString id; attribute DOMString id;
attribute AnimationEffect? effect; attribute AnimationEffect? effect;
readonly attribute AnimationTimeline? timeline; readonly attribute AnimationTimeline? timeline;
@ -90,12 +90,12 @@ dictionary ComputedEffectTiming : EffectTiming {
unrestricted double? currentIteration; unrestricted double? currentIteration;
}; };
[Exposed=Window, [Exposed=Window]
Constructor((Element or CSSPseudoElement)? target,
object? keyframes,
optional (unrestricted double or KeyframeEffectOptions) options = {}),
Constructor(KeyframeEffect source)]
interface KeyframeEffect : AnimationEffect { 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 (Element or CSSPseudoElement)? target;
attribute CompositeOperation composite; attribute CompositeOperation composite;
sequence<object> getKeyframes(); sequence<object> getKeyframes();
@ -155,9 +155,9 @@ Element includes Animatable;
CSSPseudoElement includes Animatable; CSSPseudoElement includes Animatable;
[Exposed=Window, [Exposed=Window]
Constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {})]
interface AnimationPlaybackEvent : Event { interface AnimationPlaybackEvent : Event {
constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict = {});
readonly attribute double? currentTime; readonly attribute double? currentTime;
readonly attribute double? timelineTime; readonly attribute double? timelineTime;
}; };

View file

@ -60,10 +60,10 @@ interface BluetoothPermissionResult : PermissionStatus {
[ [
Exposed=Window, Exposed=Window,
Constructor(DOMString type, optional ValueEventInit initDict = {}),
SecureContext SecureContext
] ]
interface ValueEvent : Event { interface ValueEvent : Event {
constructor(DOMString type, optional ValueEventInit initDict = {});
readonly attribute any value; readonly attribute any value;
}; };
@ -95,10 +95,10 @@ interface BluetoothServiceDataMap {
}; };
[ [
Exposed=Window, Exposed=Window,
Constructor(DOMString type, BluetoothAdvertisingEventInit init),
SecureContext SecureContext
] ]
interface BluetoothAdvertisingEvent : Event { interface BluetoothAdvertisingEvent : Event {
constructor(DOMString type, BluetoothAdvertisingEventInit init);
[SameObject] [SameObject]
readonly attribute BluetoothDevice device; readonly attribute BluetoothDevice device;
readonly attribute FrozenArray<UUID> uuids; readonly attribute FrozenArray<UUID> uuids;

View file

@ -38,7 +38,7 @@ interface BaseAudioContext : EventTarget {
IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback); IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback);
OscillatorNode createOscillator (); OscillatorNode createOscillator ();
PannerNode createPanner (); 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, ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0,
optional unsigned long numberOfInputChannels = 2, optional unsigned long numberOfInputChannels = 2,
optional unsigned long numberOfOutputChannels = 2); optional unsigned long numberOfOutputChannels = 2);
@ -56,9 +56,9 @@ enum AudioContextLatencyCategory {
"playback" "playback"
}; };
[Exposed=Window, [Exposed=Window]
Constructor (optional AudioContextOptions contextOptions)]
interface AudioContext : BaseAudioContext { interface AudioContext : BaseAudioContext {
constructor (optional AudioContextOptions contextOptions = {});
readonly attribute double baseLatency; readonly attribute double baseLatency;
readonly attribute double outputLatency; readonly attribute double outputLatency;
AudioTimestamp getOutputTimestamp (); AudioTimestamp getOutputTimestamp ();
@ -81,10 +81,10 @@ dictionary AudioTimestamp {
DOMHighResTimeStamp performanceTime; DOMHighResTimeStamp performanceTime;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (OfflineAudioContextOptions contextOptions),
Constructor (unsigned long numberOfChannels, unsigned long length, float sampleRate)]
interface OfflineAudioContext : BaseAudioContext { interface OfflineAudioContext : BaseAudioContext {
constructor(OfflineAudioContextOptions contextOptions);
constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate);
Promise<AudioBuffer> startRendering(); Promise<AudioBuffer> startRendering();
Promise<void> resume(); Promise<void> resume();
Promise<void> suspend(double suspendTime); Promise<void> suspend(double suspendTime);
@ -98,9 +98,9 @@ dictionary OfflineAudioContextOptions {
required float sampleRate; required float sampleRate;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict)]
interface OfflineAudioCompletionEvent : Event { interface OfflineAudioCompletionEvent : Event {
constructor (DOMString type, OfflineAudioCompletionEventInit eventInitDict);
readonly attribute AudioBuffer renderedBuffer; readonly attribute AudioBuffer renderedBuffer;
}; };
@ -108,9 +108,9 @@ dictionary OfflineAudioCompletionEventInit : EventInit {
required AudioBuffer renderedBuffer; required AudioBuffer renderedBuffer;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (AudioBufferOptions options)]
interface AudioBuffer { interface AudioBuffer {
constructor (AudioBufferOptions options);
readonly attribute float sampleRate; readonly attribute float sampleRate;
readonly attribute unsigned long length; readonly attribute unsigned long length;
readonly attribute double duration; readonly attribute double duration;
@ -192,9 +192,9 @@ interface AudioScheduledSourceNode : AudioNode {
void stop(optional double when = 0); void stop(optional double when = 0);
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional AnalyserOptions options = {})]
interface AnalyserNode : AudioNode { interface AnalyserNode : AudioNode {
constructor (BaseAudioContext context, optional AnalyserOptions options = {});
void getFloatFrequencyData (Float32Array array); void getFloatFrequencyData (Float32Array array);
void getByteFrequencyData (Uint8Array array); void getByteFrequencyData (Uint8Array array);
void getFloatTimeDomainData (Float32Array array); void getFloatTimeDomainData (Float32Array array);
@ -213,9 +213,9 @@ dictionary AnalyserOptions : AudioNodeOptions {
double smoothingTimeConstant = 0.8; double smoothingTimeConstant = 0.8;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {})]
interface AudioBufferSourceNode : AudioScheduledSourceNode { interface AudioBufferSourceNode : AudioScheduledSourceNode {
constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {});
attribute AudioBuffer? buffer; attribute AudioBuffer? buffer;
readonly attribute AudioParam playbackRate; readonly attribute AudioParam playbackRate;
readonly attribute AudioParam detune; readonly attribute AudioParam detune;
@ -256,9 +256,9 @@ interface AudioListener {
void setOrientation (float x, float y, float z, float xUp, float yUp, float zUp); void setOrientation (float x, float y, float z, float xUp, float yUp, float zUp);
}; };
[Exposed=Window, [Exposed=Window]
Constructor (DOMString type, AudioProcessingEventInit eventInitDict)]
interface AudioProcessingEvent : Event { interface AudioProcessingEvent : Event {
constructor (DOMString type, AudioProcessingEventInit eventInitDict);
readonly attribute double playbackTime; readonly attribute double playbackTime;
readonly attribute AudioBuffer inputBuffer; readonly attribute AudioBuffer inputBuffer;
readonly attribute AudioBuffer outputBuffer; readonly attribute AudioBuffer outputBuffer;
@ -281,9 +281,9 @@ enum BiquadFilterType {
"allpass" "allpass"
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional BiquadFilterOptions options = {})]
interface BiquadFilterNode : AudioNode { interface BiquadFilterNode : AudioNode {
constructor (BaseAudioContext context, optional BiquadFilterOptions options = {});
attribute BiquadFilterType type; attribute BiquadFilterType type;
readonly attribute AudioParam frequency; readonly attribute AudioParam frequency;
readonly attribute AudioParam detune; readonly attribute AudioParam detune;
@ -300,27 +300,27 @@ dictionary BiquadFilterOptions : AudioNodeOptions {
float gain = 0; float gain = 0;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional ChannelMergerOptions options = {})]
interface ChannelMergerNode : AudioNode { interface ChannelMergerNode : AudioNode {
constructor (BaseAudioContext context, optional ChannelMergerOptions options = {});
}; };
dictionary ChannelMergerOptions : AudioNodeOptions { dictionary ChannelMergerOptions : AudioNodeOptions {
unsigned long numberOfInputs = 6; unsigned long numberOfInputs = 6;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {})]
interface ChannelSplitterNode : AudioNode { interface ChannelSplitterNode : AudioNode {
constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {});
}; };
dictionary ChannelSplitterOptions : AudioNodeOptions { dictionary ChannelSplitterOptions : AudioNodeOptions {
unsigned long numberOfOutputs = 6; unsigned long numberOfOutputs = 6;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional ConstantSourceOptions options = {})]
interface ConstantSourceNode : AudioScheduledSourceNode { interface ConstantSourceNode : AudioScheduledSourceNode {
constructor (BaseAudioContext context, optional ConstantSourceOptions options = {});
readonly attribute AudioParam offset; readonly attribute AudioParam offset;
}; };
@ -328,9 +328,9 @@ dictionary ConstantSourceOptions {
float offset = 1; float offset = 1;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional ConvolverOptions options = {})]
interface ConvolverNode : AudioNode { interface ConvolverNode : AudioNode {
constructor (BaseAudioContext context, optional ConvolverOptions options = {});
attribute AudioBuffer? buffer; attribute AudioBuffer? buffer;
attribute boolean normalize; attribute boolean normalize;
}; };
@ -340,9 +340,9 @@ dictionary ConvolverOptions : AudioNodeOptions {
boolean disableNormalization = false; boolean disableNormalization = false;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional DelayOptions options = {})]
interface DelayNode : AudioNode { interface DelayNode : AudioNode {
constructor (BaseAudioContext context, optional DelayOptions options = {});
readonly attribute AudioParam delayTime; readonly attribute AudioParam delayTime;
}; };
@ -351,9 +351,9 @@ dictionary DelayOptions : AudioNodeOptions {
double delayTime = 0; double delayTime = 0;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {})]
interface DynamicsCompressorNode : AudioNode { interface DynamicsCompressorNode : AudioNode {
constructor (BaseAudioContext context, optional DynamicsCompressorOptions options = {});
readonly attribute AudioParam threshold; readonly attribute AudioParam threshold;
readonly attribute AudioParam knee; readonly attribute AudioParam knee;
readonly attribute AudioParam ratio; readonly attribute AudioParam ratio;
@ -370,9 +370,9 @@ dictionary DynamicsCompressorOptions : AudioNodeOptions {
float threshold = -24; float threshold = -24;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional GainOptions options = {})]
interface GainNode : AudioNode { interface GainNode : AudioNode {
constructor (BaseAudioContext context, optional GainOptions options = {});
readonly attribute AudioParam gain; readonly attribute AudioParam gain;
}; };
@ -380,9 +380,9 @@ dictionary GainOptions : AudioNodeOptions {
float gain = 1.0; float gain = 1.0;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, IIRFilterOptions options)]
interface IIRFilterNode : AudioNode { interface IIRFilterNode : AudioNode {
constructor (BaseAudioContext context, IIRFilterOptions options);
void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse); void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
}; };
@ -391,9 +391,9 @@ dictionary IIRFilterOptions : AudioNodeOptions {
required sequence<double> feedback; required sequence<double> feedback;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (AudioContext context, MediaElementAudioSourceOptions options)]
interface MediaElementAudioSourceNode : AudioNode { interface MediaElementAudioSourceNode : AudioNode {
constructor (AudioContext context, MediaElementAudioSourceOptions options);
[SameObject] readonly attribute HTMLMediaElement mediaElement; [SameObject] readonly attribute HTMLMediaElement mediaElement;
}; };
@ -401,15 +401,15 @@ dictionary MediaElementAudioSourceOptions {
required HTMLMediaElement mediaElement; required HTMLMediaElement mediaElement;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (AudioContext context, optional AudioNodeOptions options = {})]
interface MediaStreamAudioDestinationNode : AudioNode { interface MediaStreamAudioDestinationNode : AudioNode {
constructor (AudioContext context, optional AudioNodeOptions options = {});
readonly attribute MediaStream stream; readonly attribute MediaStream stream;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (AudioContext context, MediaStreamAudioSourceOptions options)]
interface MediaStreamAudioSourceNode : AudioNode { interface MediaStreamAudioSourceNode : AudioNode {
constructor (AudioContext context, MediaStreamAudioSourceOptions options);
[SameObject] readonly attribute MediaStream mediaStream; [SameObject] readonly attribute MediaStream mediaStream;
}; };
@ -417,9 +417,9 @@ dictionary MediaStreamAudioSourceOptions {
required MediaStream mediaStream; required MediaStream mediaStream;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options)]
interface MediaStreamTrackAudioSourceNode : AudioNode { interface MediaStreamTrackAudioSourceNode : AudioNode {
constructor (AudioContext context, MediaStreamTrackAudioSourceOptions options);
}; };
dictionary MediaStreamTrackAudioSourceOptions { dictionary MediaStreamTrackAudioSourceOptions {
@ -434,9 +434,9 @@ enum OscillatorType {
"custom" "custom"
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional OscillatorOptions options = {})]
interface OscillatorNode : AudioScheduledSourceNode { interface OscillatorNode : AudioScheduledSourceNode {
constructor (BaseAudioContext context, optional OscillatorOptions options = {});
attribute OscillatorType type; attribute OscillatorType type;
readonly attribute AudioParam frequency; readonly attribute AudioParam frequency;
readonly attribute AudioParam detune; readonly attribute AudioParam detune;
@ -461,9 +461,9 @@ enum DistanceModelType {
"exponential" "exponential"
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional PannerOptions options = {})]
interface PannerNode : AudioNode { interface PannerNode : AudioNode {
constructor (BaseAudioContext context, optional PannerOptions options = {});
attribute PanningModelType panningModel; attribute PanningModelType panningModel;
readonly attribute AudioParam positionX; readonly attribute AudioParam positionX;
readonly attribute AudioParam positionY; readonly attribute AudioParam positionY;
@ -499,9 +499,9 @@ dictionary PannerOptions : AudioNodeOptions {
double coneOuterGain = 0; double coneOuterGain = 0;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {})]
interface PeriodicWave { interface PeriodicWave {
constructor (BaseAudioContext context, optional PeriodicWaveOptions options = {});
}; };
dictionary PeriodicWaveConstraints { dictionary PeriodicWaveConstraints {
@ -519,9 +519,9 @@ interface ScriptProcessorNode : AudioNode {
readonly attribute long bufferSize; readonly attribute long bufferSize;
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional StereoPannerOptions options = {})]
interface StereoPannerNode : AudioNode { interface StereoPannerNode : AudioNode {
constructor (BaseAudioContext context, optional StereoPannerOptions options = {});
readonly attribute AudioParam pan; readonly attribute AudioParam pan;
}; };
@ -535,9 +535,9 @@ enum OverSampleType {
"4x" "4x"
}; };
[Exposed=Window, [Exposed=Window]
Constructor (BaseAudioContext context, optional WaveShaperOptions options = {})]
interface WaveShaperNode : AudioNode { interface WaveShaperNode : AudioNode {
constructor (BaseAudioContext context, optional WaveShaperOptions options = {});
attribute Float32Array? curve; attribute Float32Array? curve;
attribute OverSampleType oversample; attribute OverSampleType oversample;
}; };
@ -566,11 +566,10 @@ interface AudioParamMap {
readonly maplike<DOMString, AudioParam>; readonly maplike<DOMString, AudioParam>;
}; };
[Exposed=Window, [Exposed=Window, SecureContext]
SecureContext,
Constructor (BaseAudioContext context, DOMString name,
optional AudioWorkletNodeOptions options = {})]
interface AudioWorkletNode : AudioNode { interface AudioWorkletNode : AudioNode {
constructor (BaseAudioContext context, DOMString name,
optional AudioWorkletNodeOptions options = {});
readonly attribute AudioParamMap parameters; readonly attribute AudioParamMap parameters;
readonly attribute MessagePort port; readonly attribute MessagePort port;
attribute EventHandler onprocessorerror; attribute EventHandler onprocessorerror;
@ -584,9 +583,9 @@ dictionary AudioWorkletNodeOptions : AudioNodeOptions {
object processorOptions; object processorOptions;
}; };
[Exposed=AudioWorklet, [Exposed=AudioWorklet]
Constructor (optional AudioWorkletNodeOptions options = {})]
interface AudioWorkletProcessor { interface AudioWorkletProcessor {
constructor (optional AudioWorkletNodeOptions options = {});
readonly attribute MessagePort port; readonly attribute MessagePort port;
}; };

View file

@ -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;
};

View file

@ -39,11 +39,11 @@ dictionary USBConnectionEventInit : EventInit {
}; };
[ [
Constructor(DOMString type, USBConnectionEventInit eventInitDict),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBConnectionEvent : Event { interface USBConnectionEvent : Event {
constructor(DOMString type, USBConnectionEventInit eventInitDict);
[SameObject] readonly attribute USBDevice device; [SameObject] readonly attribute USBDevice device;
}; };
@ -110,81 +110,81 @@ dictionary USBControlTransferParameters {
}; };
[ [
Constructor(USBTransferStatus status, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBInTransferResult { interface USBInTransferResult {
constructor(USBTransferStatus status, optional DataView? data);
readonly attribute DataView? data; readonly attribute DataView? data;
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
}; };
[ [
Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBOutTransferResult { interface USBOutTransferResult {
constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0);
readonly attribute unsigned long bytesWritten; readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
}; };
[ [
Constructor(USBTransferStatus status, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBIsochronousInTransferPacket { interface USBIsochronousInTransferPacket {
constructor(USBTransferStatus status, optional DataView? data);
readonly attribute DataView? data; readonly attribute DataView? data;
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
}; };
[ [
Constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBIsochronousInTransferResult { interface USBIsochronousInTransferResult {
constructor(sequence<USBIsochronousInTransferPacket> packets, optional DataView? data);
readonly attribute DataView? data; readonly attribute DataView? data;
readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets; readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets;
}; };
[ [
Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBIsochronousOutTransferPacket { interface USBIsochronousOutTransferPacket {
constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0);
readonly attribute unsigned long bytesWritten; readonly attribute unsigned long bytesWritten;
readonly attribute USBTransferStatus status; readonly attribute USBTransferStatus status;
}; };
[ [
Constructor(sequence<USBIsochronousOutTransferPacket> packets),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBIsochronousOutTransferResult { interface USBIsochronousOutTransferResult {
constructor(sequence<USBIsochronousOutTransferPacket> packets);
readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets; readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets;
}; };
[ [
Constructor(USBDevice device, octet configurationValue),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBConfiguration { interface USBConfiguration {
constructor(USBDevice device, octet configurationValue);
readonly attribute octet configurationValue; readonly attribute octet configurationValue;
readonly attribute DOMString? configurationName; readonly attribute DOMString? configurationName;
readonly attribute FrozenArray<USBInterface> interfaces; readonly attribute FrozenArray<USBInterface> interfaces;
}; };
[ [
Constructor(USBConfiguration configuration, octet interfaceNumber),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBInterface { interface USBInterface {
constructor(USBConfiguration configuration, octet interfaceNumber);
readonly attribute octet interfaceNumber; readonly attribute octet interfaceNumber;
readonly attribute USBAlternateInterface alternate; readonly attribute USBAlternateInterface alternate;
readonly attribute FrozenArray<USBAlternateInterface> alternates; readonly attribute FrozenArray<USBAlternateInterface> alternates;
@ -192,11 +192,11 @@ interface USBInterface {
}; };
[ [
Constructor(USBInterface deviceInterface, octet alternateSetting),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBAlternateInterface { interface USBAlternateInterface {
constructor(USBInterface deviceInterface, octet alternateSetting);
readonly attribute octet alternateSetting; readonly attribute octet alternateSetting;
readonly attribute octet interfaceClass; readonly attribute octet interfaceClass;
readonly attribute octet interfaceSubclass; readonly attribute octet interfaceSubclass;
@ -217,11 +217,11 @@ enum USBEndpointType {
}; };
[ [
Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
Exposed=(DedicatedWorker,SharedWorker,Window), Exposed=(DedicatedWorker,SharedWorker,Window),
SecureContext SecureContext
] ]
interface USBEndpoint { interface USBEndpoint {
constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction);
readonly attribute octet endpointNumber; readonly attribute octet endpointNumber;
readonly attribute USBDirection direction; readonly attribute USBDirection direction;
readonly attribute USBEndpointType type; readonly attribute USBEndpointType type;
@ -242,6 +242,7 @@ dictionary USBPermissionStorage {
sequence<AllowedUSBDevice> allowedDevices = []; sequence<AllowedUSBDevice> allowedDevices = [];
}; };
[Exposed=(DedicatedWorker,SharedWorker,Window)]
interface USBPermissionResult : PermissionStatus { interface USBPermissionResult : PermissionStatus {
attribute FrozenArray<USBDevice> devices; attribute FrozenArray<USBDevice> devices;
}; };

View file

@ -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));
});

View file

@ -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));
});

View file

@ -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>

View file

@ -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>

View file

@ -9,7 +9,7 @@ var BarcodeDetectionTest = (() => {
shapeDetection.mojom.BarcodeDetectionProvider); shapeDetection.mojom.BarcodeDetectionProvider);
this.interceptor_ = new MojoInterfaceInterceptor( this.interceptor_ = new MojoInterfaceInterceptor(
shapeDetection.mojom.BarcodeDetectionProvider.name); shapeDetection.mojom.BarcodeDetectionProvider.name, "context", true);
this.interceptor_.oninterfacerequest = this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle); e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start(); this.interceptor_.start();

View file

@ -9,7 +9,7 @@ var FaceDetectionTest = (() => {
shapeDetection.mojom.FaceDetectionProvider); shapeDetection.mojom.FaceDetectionProvider);
this.interceptor_ = new MojoInterfaceInterceptor( this.interceptor_ = new MojoInterfaceInterceptor(
shapeDetection.mojom.FaceDetectionProvider.name); shapeDetection.mojom.FaceDetectionProvider.name, "context", true);
this.interceptor_.oninterfacerequest = this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle); e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start(); this.interceptor_.start();

View file

@ -346,7 +346,7 @@ def test_tests_affected_idlharness(capsys, manifest_dir):
wpt.main(argv=["tests-affected", "--metadata", manifest_dir, "%s~..%s" % (commit, commit)]) wpt.main(argv=["tests-affected", "--metadata", manifest_dir, "%s~..%s" % (commit, commit)])
assert excinfo.value.code == 0 assert excinfo.value.code == 0
out, err = capsys.readouterr() 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 @pytest.mark.slow # this updates the manifest

View file

@ -39,6 +39,7 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
executor_kwargs["supports_eager_pageload"] = False executor_kwargs["supports_eager_pageload"] = False
capabilities = { capabilities = {
"acceptInsecureCerts": True,
"goog:chromeOptions": { "goog:chromeOptions": {
"prefs": { "prefs": {
"profile": { "profile": {

View file

@ -221,8 +221,10 @@ def pack_result(data):
if not data.get("known_intermittent"): if not data.get("known_intermittent"):
return status_intern.store(data.get("status")) return status_intern.store(data.get("status"))
result = array.array("B") result = array.array("B")
result_parts = ([data["status"], data.get("expected", data["status"])] + expected = data.get("expected")
data["known_intermittent"]) if expected is None:
expected = data["status"]
result_parts = [data["status"], expected] + data["known_intermittent"]
for i, part in enumerate(result_parts): for i, part in enumerate(result_parts):
value = status_intern.store(part) value = status_intern.store(part)
if i % 2 == 0: if i % 2 == 0:
@ -688,13 +690,6 @@ class TestFileData(object):
expected.set_leak_threshold(run_info, value) expected.set_leak_threshold(run_info, value)
continue 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] test_expected = expected_by_test[test_id]
if subtest_id is None: if subtest_id is None:
item_expected = test_expected item_expected = test_expected
@ -702,7 +697,13 @@ class TestFileData(object):
if isinstance(subtest_id, str): if isinstance(subtest_id, str):
subtest_id = subtest_id.decode("utf8") subtest_id = subtest_id.decode("utf8")
item_expected = test_expected.get_subtest(subtest_id) item_expected = test_expected.get_subtest(subtest_id)
if prop == "status": 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) item_expected.set_result(run_info, value)
elif prop == "asserts": elif prop == "asserts":
item_expected.set_asserts(run_info, value) item_expected.set_asserts(run_info, value)

View file

@ -68,7 +68,7 @@
function expect_blocked_uri(s) { return e => { function expect_blocked_uri(s) { return e => {
assert_true(e.blockedURI === s, assert_true(e.blockedURI === s,
`expected "${e.blockedUri}" to be "${s}".`); `expected "${e.blockedURI}" to be "${s}".`);
return e; return e;
} } } }
@ -154,6 +154,7 @@
promise_test(t => { promise_test(t => {
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types two")) .then(promise_violation("trusted-types two"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("Element.innerHTML")) .then(expect_sample("Element.innerHTML"))
.then(expect_sample("abc")); .then(expect_sample("abc"));
expect_throws(_ => { document.getElementById("div").innerHTML = "abc" }); expect_throws(_ => { document.getElementById("div").innerHTML = "abc" });
@ -163,6 +164,7 @@
promise_test(t => { promise_test(t => {
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types two")) .then(promise_violation("trusted-types two"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLAnchorElement.href")); .then(expect_sample("HTMLAnchorElement.href"));
expect_throws(_ => { document.getElementById("anchor").href = "" }); expect_throws(_ => { document.getElementById("anchor").href = "" });
return p; return p;
@ -171,6 +173,7 @@
promise_test(t => { promise_test(t => {
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types two")) .then(promise_violation("trusted-types two"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLElement.innerText")) .then(expect_sample("HTMLElement.innerText"))
.then(expect_sample("2+2;")); .then(expect_sample("2+2;"));
expect_throws(_ => document.getElementById("script").innerText = "2+2;"); expect_throws(_ => document.getElementById("script").innerText = "2+2;");
@ -180,6 +183,7 @@
promise_test(t => { promise_test(t => {
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types one")) .then(promise_violation("trusted-types one"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("eval")) .then(expect_sample("eval"))
.then(expect_sample("2+2")) .then(expect_sample("2+2"))
.then(promise_flush()); .then(promise_flush());
@ -193,6 +197,7 @@
// start of the value, but it should not be excessively long. // start of the value, but it should not be excessively long.
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types two")) .then(promise_violation("trusted-types two"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLElement.innerText")) .then(expect_sample("HTMLElement.innerText"))
.then(expect_sample("abbb")) .then(expect_sample("abbb"))
.then(e => assert_less_than(e.sample.length, 150)); .then(e => assert_less_than(e.sample.length, 150));
@ -211,6 +216,7 @@
promise_test(t => { promise_test(t => {
let p = Promise.resolve() let p = Promise.resolve()
.then(promise_violation("trusted-types one")) .then(promise_violation("trusted-types one"))
.then(expect_blocked_uri("trusted-types-sink"))
.then(expect_sample("HTMLAnchorElement.href")) .then(expect_sample("HTMLAnchorElement.href"))
.then(expect_sample("abc")); .then(expect_sample("abc"));
expect_throws(_ => document.getElementById("customlink").href = "abc"); expect_throws(_ => document.getElementById("customlink").href = "abc");

View file

@ -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) {}
}
);

View file

@ -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 // |m1|, |m2| - arrays of floating point numbers
// |epsilon| - float specifying precision // |epsilon| - float specifying precision
// |prefix| - string used as a prefix for logging // |prefix| - string used as a prefix for logging

View file

@ -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>