Auto merge of #26022 - servo-wpt-sync:wpt_update_24-03-2020, r=servo-wpt-sync

Sync WPT with upstream (24-03-2020)

Automated downstream sync of changes from upstream as of 24-03-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-03-24 07:02:04 -04:00 committed by GitHub
commit d5e5414be3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
119 changed files with 4676 additions and 523 deletions

View file

@ -0,0 +1,226 @@
[idlharness.tentative.https.window.html]
[BluetoothDevice interface: operation watchAdvertisements(optional WatchAdvertisementsOptions)]
expected: FAIL
[BluetoothPermissionResult interface: attribute devices]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "getDevices()" with the proper type]
expected: FAIL
[BluetoothRemoteGATTService interface: attribute oncharacteristicvaluechanged]
expected: FAIL
[Bluetooth interface: attribute onserviceadded]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "oncharacteristicvaluechanged" with the proper type]
expected: FAIL
[BluetoothServiceDataMap interface object length]
expected: FAIL
[BluetoothManufacturerDataMap interface: existence and properties of interface prototype object]
expected: FAIL
[BluetoothAdvertisingEvent interface: attribute manufacturerData]
expected: FAIL
[BluetoothRemoteGATTDescriptor interface: operation readValue()]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "onadvertisementreceived" with the proper type]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "uuids" with the proper type]
expected: FAIL
[Bluetooth interface: operation requestDevice(optional RequestDeviceOptions)]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation readValue()]
expected: FAIL
[BluetoothRemoteGATTServer interface: operation connect()]
expected: FAIL
[Bluetooth interface: attribute referringDevice]
expected: FAIL
[BluetoothAdvertisingEvent interface: attribute uuids]
expected: FAIL
[Stringification of event]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation getDescriptors(optional BluetoothDescriptorUUID)]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation stopNotifications()]
expected: FAIL
[BluetoothManufacturerDataMap interface: existence and properties of interface object]
expected: FAIL
[Bluetooth interface: attribute onadvertisementreceived]
expected: FAIL
[BluetoothRemoteGATTDescriptor interface: operation writeValue(BufferSource)]
expected: FAIL
[BluetoothAdvertisingEvent must be primary interface of event]
expected: FAIL
[BluetoothServiceDataMap interface: existence and properties of interface object]
expected: FAIL
[Bluetooth interface: operation getDevices()]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "onserviceremoved" with the proper type]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation writeValueWithResponse(BufferSource)]
expected: FAIL
[BluetoothServiceDataMap interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "manufacturerData" with the proper type]
expected: FAIL
[BluetoothManufacturerDataMap interface object length]
expected: FAIL
[BluetoothAdvertisingEvent interface: attribute serviceData]
expected: FAIL
[Bluetooth interface: attribute onserviceremoved]
expected: FAIL
[BluetoothManufacturerDataMap interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation getDescriptor(BluetoothDescriptorUUID)]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "txPower" with the proper type]
expected: FAIL
[ValueEvent interface: attribute value]
expected: FAIL
[BluetoothManufacturerDataMap interface object name]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation startNotifications()]
expected: FAIL
[BluetoothServiceDataMap interface object name]
expected: FAIL
[BluetoothDevice interface: attribute onservicechanged]
expected: FAIL
[Bluetooth interface: attribute onservicechanged]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "ongattserverdisconnected" with the proper type]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation writeValue(BufferSource)]
expected: FAIL
[BluetoothRemoteGATTCharacteristic interface: operation writeValueWithoutResponse(BufferSource)]
expected: FAIL
[BluetoothRemoteGATTServer interface: operation getPrimaryService(BluetoothServiceUUID)]
expected: FAIL
[BluetoothDevice interface: attribute oncharacteristicvaluechanged]
expected: FAIL
[BluetoothRemoteGATTService interface: operation getIncludedServices(optional BluetoothServiceUUID)]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "device" with the proper type]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "name" with the proper type]
expected: FAIL
[BluetoothManufacturerDataMap interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[ValueEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[BluetoothRemoteGATTServer interface: operation getPrimaryServices(optional BluetoothServiceUUID)]
expected: FAIL
[Bluetooth interface: attribute ongattserverdisconnected]
expected: FAIL
[ValueEvent interface: existence and properties of interface prototype object]
expected: FAIL
[ValueEvent interface object length]
expected: FAIL
[BluetoothRemoteGATTService interface: operation getCharacteristics(optional BluetoothCharacteristicUUID)]
expected: FAIL
[ValueEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[ValueEvent interface: existence and properties of interface object]
expected: FAIL
[Bluetooth interface: operation getAvailability()]
expected: FAIL
[BluetoothRemoteGATTService interface: operation getIncludedService(BluetoothServiceUUID)]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "rssi" with the proper type]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "appearance" with the proper type]
expected: FAIL
[BluetoothServiceDataMap interface: existence and properties of interface prototype object]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "onserviceadded" with the proper type]
expected: FAIL
[BluetoothDevice interface: attribute onserviceremoved]
expected: FAIL
[ValueEvent interface object name]
expected: FAIL
[BluetoothRemoteGATTService interface: operation getCharacteristic(BluetoothCharacteristicUUID)]
expected: FAIL
[BluetoothDevice interface: attribute onserviceadded]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "referringDevice" with the proper type]
expected: FAIL
[Bluetooth interface: navigator.bluetooth must inherit property "onservicechanged" with the proper type]
expected: FAIL
[BluetoothServiceDataMap interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[BluetoothDevice interface: attribute onadvertisementreceived]
expected: FAIL
[BluetoothAdvertisingEvent interface: event must inherit property "serviceData" with the proper type]
expected: FAIL
[Bluetooth interface: attribute oncharacteristicvaluechanged]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,2 @@
[animation-base-response-001.html]
expected: ERROR

View file

@ -0,0 +1,4 @@
[animation-base-response-002.html]
[Animated font-size on root affects rem units]
expected: FAIL

View file

@ -0,0 +1,16 @@
[animation-important-001.html]
[Interpolated value is observable]
expected: FAIL
[Important rules override animations (::before)]
expected: FAIL
[Non-overriden interpolations are observable]
expected: FAIL
[Important rules do not override animations on :visited as seen from JS]
expected: FAIL
[Important rules override animations]
expected: FAIL

View file

@ -0,0 +1,2 @@
[animation-important-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[stretch-obeys-min-max-002.html]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -0,0 +1,2 @@
[transition-base-response-001.html]
expected: ERROR

View file

@ -0,0 +1,4 @@
[transition-base-response-002.html]
[Transitioning font-size on root affects rem units]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -17,6 +17,3 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,4 @@
[CSSStyleSheet-constructable-replace-on-regular-sheet.html]
[replace / replaceSync on non-constructed stylesheet]
expected: FAIL

View file

@ -0,0 +1,79 @@
[fetch-destination.https.html]
[HTMLVideoElement fetches with a "video" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=video fetches with a "video" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=script fetches with a "script" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=sharedworker fetches with a "sharedworker" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=manifest fetches with a "manifest" Request.destination]
expected: FAIL
[HTMLImageElement with srcset attribute fetches with an "image" Request.destination]
expected: FAIL
[SVGImageElement fetches with an "image" Request.destination]
expected: FAIL
[HTMLAudioElement fetches with an "audio" Request.destination]
expected: FAIL
[HTMLScriptElement fetches with a "script" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=audio fetches with a "audio" Request.destination]
expected: FAIL
[HTMLImageElement with a HTMLPictureElement parent attribute fetches with an "image" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=document fetches with a "document" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=stylesheet fetches with a "style" Request.destination]
expected: FAIL
[HTMLImageElement fetches with an "image" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=style fetches with a "style" Request.destination]
expected: FAIL
[XMLHttpRequest() fetches with an empty string Request.destination]
expected: FAIL
[EventSource() fetches with an empty string Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=fetch fetches with an empty string Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=font fetches with a "font" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=xslt fetches with a "xslt" Request.destination]
expected: FAIL
[Initialize global state]
expected: FAIL
[HTMLLinkElement with rel=preload and as=track fetches with a "track" Request.destination]
expected: FAIL
[fetch() fetches with an empty string Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=image fetches with a "image" Request.destination]
expected: FAIL
[AudioWorklet module fetches with a "audioworklet" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=worker fetches with a "worker" Request.destination]
expected: FAIL

View file

@ -312,24 +312,24 @@
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
expected: NOTRUN
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -11,3 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -0,0 +1,8 @@
[skip-document-with-fragment.html]
expected: TIMEOUT
[Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL

View file

@ -7,10 +7,10 @@
expected: NOTRUN
[Element with tabindex should support autofocus]
expected: FAIL
expected: TIMEOUT
[Non-HTMLElement should not support autofocus]
expected: TIMEOUT
expected: NOTRUN
[Area element should support autofocus]
expected: NOTRUN

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-1.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,2 @@
[image-loading-subpixel-clip.html]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -0,0 +1,2 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT

View file

@ -14,3 +14,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44048 more errors.\n\tMax AbsError of 1.9986611604690552e+0 at index of 37130.\n\t[37130\]\t-9.9994289875030518e-1\t9.9871826171875000e-1\t1.9986611604690552e+0\t2.0012262087101997e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44051 more errors.\n\tMax AbsError of 1.9798262119293213e+0 at index of 27116.\n\t[27116\]\t9.9151444435119629e-1\t-9.8831176757812500e-1\t1.9798262119293213e+0\t2.0032405531110080e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -23,3 +23,9 @@
[X SNR (-349.52143104912756 dB) is not greater than or equal to 85.58. Got -349.52143104912756.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t1.1378110271370935e+22\t5.6332010030746460e-1\t1.1378110271370935e+22\t2.0198303353920215e+22\t9.0957000000000003e-5\n\t[31081\]\t4.5877110423530186e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 1.1378110271370935e+22 at index of 31080.\n\tMax RelError of 2.0198303353920215e+22 at index of 31080.\n]
expected: FAIL
[X SNR (-397.6873168264859 dB) is not greater than or equal to 85.58. Got -397.6873168264859.]
expected: FAIL

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[shared-worker-parse-error-failure.html]
[Classic shared worker construction for script with syntax error should dispatch an event named error.]
expected: FAIL
[Static import on classic shared worker should dispatch an event named error.]
expected: FAIL

View file

@ -117356,6 +117356,19 @@
{}
]
],
"animation-important-002.html": [
"2a68f8e0cacf06e2e5761ef392b90a4f89fcc843",
[
null,
[
[
"/css/css-animations/animation-important-002-ref.html",
"=="
]
],
{}
]
],
"animation-opacity-pause-and-set-time.html": [
"c63c2f3b9fe3fd0b2e4a727398f1843febf339eb",
[
@ -131000,6 +131013,19 @@
{}
]
],
"align-baseline.html": [
"31bcca69771751f3277d6f078456f982a375d067",
[
null,
[
[
"/css/css-flexbox/reference/align-baseline-ref.html",
"=="
]
],
{}
]
],
"align-content-001.htm": [
"785538714268efec18bcd80cb1cbe89c40d545b1",
[
@ -136724,6 +136750,45 @@
{}
]
],
"stretch-obeys-min-max-001.html": [
"4b7eb5a1f76a39fdad6956953270ab9bdf8a14c1",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"stretch-obeys-min-max-002.html": [
"339b68ae1ec588c0baffdc08b81a4a2c756451ec",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"stretch-obeys-min-max-003.html": [
"626cb2f57c59e6519003bedb870cd4a510a24579",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square-only.html",
"=="
]
],
{}
]
],
"table-as-item-auto-min-width.html": [
"66a77327f0f25e07db87e342ebb590358d045f7a",
[
@ -141034,6 +141099,32 @@
{}
]
],
"grid-auto-repeat-multiple-values-002.html": [
"723d876a6a31b38b3ba8964c6e6d4c958d35eef4",
[
null,
[
[
"/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html",
"=="
]
],
{}
]
],
"grid-auto-repeat-multiple-values-003.html": [
"486259a5d3e34bfc949021192b3444f13de32be2",
[
null,
[
[
"/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html",
"=="
]
],
{}
]
],
"grid-layout-auto-tracks.html": [
"2cc3614d9ec60581f01b4e5ff7ffe624d7f3ce11",
[
@ -141073,6 +141164,32 @@
{}
]
],
"grid-support-named-grid-lines-002.html": [
"6b3b19ef97f413dea4ed68fbb26edcb7a0ed1f55",
[
null,
[
[
"/css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html",
"=="
]
],
{}
]
],
"grid-support-named-grid-lines-003.html": [
"c2c722485f1f9b0c0667a317649e5817ecdefb34",
[
null,
[
[
"/css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html",
"=="
]
],
{}
]
],
"grid-template-columns-fit-content-001.html": [
"83b53db39b154dc8001dbef809aeb0eff7774c2a",
[
@ -143906,6 +144023,19 @@
{}
]
],
"repeat-auto-fill-008.html": [
"28238178f0d9d66139cced2acdd6675fe77c6b36",
[
null,
[
[
"/css/css-grid/subgrid/repeat-auto-fill-008-ref.html",
"=="
]
],
{}
]
],
"subgrid-item-block-size-001.html": [
"29e82197831fec5e996d0f682a8f42eca819a8ed",
[
@ -227318,6 +227448,19 @@
{}
]
],
"image-loading-subpixel-clip.html": [
"de62d7d73599c144228b82139654660d2e8b1bfc",
[
null,
[
[
"/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip-ref.html",
"=="
]
],
{}
]
],
"img-with-containment-and-size.html": [
"a095adc7cf6775e9c9b63832c0c5c9df23756b6c",
[
@ -280679,6 +280822,10 @@
"ddc7da67ddf5fed83e653d1130a65f5c1e3a6dec",
[]
],
"animation-important-002-ref.html": [
"52855cb91e6b780fc6375280b0643335802dd4e3",
[]
],
"animation-opacity-pause-and-set-time-ref.html": [
"ab9f614ed8e7e846b9c5f3c5d66a0827db4d6637",
[]
@ -283976,6 +284123,10 @@
"12e94ba598e74cd253f0f91daf7e88f44884b7fc",
[]
],
"align-baseline-ref.html": [
"d5b88e8c7dae73b57c7f993260d7cce363eeebaa",
[]
],
"align-content-001-ref.html": [
"bd468820339bb2bacbaf91ba64911ec24fc1de26",
[]
@ -291528,6 +291679,22 @@
[]
],
"grid-definition": {
"grid-auto-repeat-multiple-values-002-ref.html": [
"754fec3fa0f34787bcd1394c41b67b1c8b02cbb1",
[]
],
"grid-auto-repeat-multiple-values-003-ref.html": [
"975c94b795c1c1e53759a5f1e0ec0f6ee1a6889f",
[]
],
"grid-support-named-grid-lines-002-ref.html": [
"d65696428c2542c4851207df24e1d3638e6c49af",
[]
],
"grid-support-named-grid-lines-003-ref.html": [
"33f88bf37440db7dbf9d7902debf6859f58ee6e8",
[]
],
"grid-template-columns-fit-content-001-ref.html": [
"f29a13e0fe060ae15835bacf8bc1bf3436c0b50f",
[]
@ -291894,6 +292061,10 @@
"9bc2eeff1c7dd57873058439c9072eaa16f9d441",
[]
],
"repeat-auto-fill-008-ref.html": [
"4cbb1540de1972dd6baaa0c56d2c18dcf10e1103",
[]
],
"subgrid-item-block-size-001-ref.html": [
"d264a3455a6c580976d2519ab4e0eb206b1164bf",
[]
@ -291907,6 +292078,12 @@
[]
]
},
"support": {
"grid-child-utils.js": [
"d75ad6eb7061349e5453c204235a172778528f6a",
[]
]
},
"table-grid-item-dynamic-001-ref.html": [
"362904334aaef447de9d895e413474a9b4d2c5a6",
[]
@ -310386,7 +310563,7 @@
[]
],
"crashtest.md": [
"76ae46b1e592762f5b8561e7041eca336a14c8d0",
"fa5c4ee67ecda24c4ad87f62008df752aa08503d",
[]
],
"css-metadata.md": [
@ -316344,6 +316521,10 @@
"4e798cd9f5d3f756df077a43ce9a1a6f9b41fd28",
[]
],
"cache-storage-reporting.js": [
"af36ccf9d3df852f75af46339e7df6bff23a5402",
[]
],
"coep-frame.html": [
"78c13311324683c3a6eff72e55bd733268edd6ec",
[]
@ -316425,7 +316606,7 @@
[]
],
"script-factory.js": [
"9db755226020479fd87e87f42ea622c999b38f7d",
"ab7286e57ac18ca4b34f6c6d75d17b6d9198f7c0",
[]
],
"sw-store-to-cache-storage.js": [
@ -322603,6 +322784,10 @@
"2fb0255609adc25a3394ae3edbd75ce4a43cb06d",
[]
],
"image-loading-subpixel-clip-ref.html": [
"4b3c2d708a88a5451e3eef922dac44e1eae5b433",
[]
],
"image.png": [
"d26878c9f22d53bb44be515fa9f0ffbb90a71cbd",
[]
@ -325931,7 +326116,7 @@
[]
],
"geolocation-sensor.idl": [
"ef172f63ea0eb141cb20551da76e578cbff733d0",
"baa0f5c7a1e78a2e2ee9772ffada53790116cd55",
[]
],
"geometry.idl": [
@ -325955,7 +326140,7 @@
[]
],
"image-capture.idl": [
"e9016a1f9bab87e9ed62a4bc99e7bcd0d958abf4",
"148bd7bb4cd0bd58162da962a5b230dc53116303",
[]
],
"input-events.idl": [
@ -326023,7 +326208,7 @@
[]
],
"mediastream-recording.idl": [
"2d849ba9affe476a23141c9f3976c65b2d9f7ef4",
"52295125da66d8562f66366f279d57ae05a7fe86",
[]
],
"mst-content-hint.idl": [
@ -326239,7 +326424,7 @@
[]
],
"web-bluetooth.idl": [
"cbf09e1d7ed736f27f2c2a0ee185da681e1ffed6",
"73371e26996568e9051990fbb67f1e08deaed5eb",
[]
],
"web-locks.idl": [
@ -326311,7 +326496,7 @@
[]
],
"webxr.idl": [
"e95acca7ca3d1f8170cd0fd28d0281581fb59544",
"1b005c3cdb39667e55875d31a53f574ac8d388e3",
[]
],
"worklets.idl": [
@ -328516,7 +328701,7 @@
[]
],
"subframe-with-origin-policy.py": [
"258f23754ef7ef0b5c68f351c7c330c7e288c0c8",
"68e3e20718545bd9ba1fd0db3b6d773b8c5dbdb6",
[]
]
}
@ -340989,7 +341174,7 @@
}
},
"tox.ini": [
"6dd70cd7b2a36e0e766d4a559a32897739b646db",
"46ab21ab29d5b21103677fe5e44cd4b9e9d4068b",
[]
],
"webdriver": {
@ -344451,7 +344636,7 @@
[]
],
"RTCPeerConnection-helper.js": [
"25ddd99bb0981db40b4d147580a343e773fc7f1a",
"24b3db7a0880fcc20cb8841e8d03e09731b8e0c0",
[]
],
"RTCRtpCapabilities-helper.js": [
@ -347863,6 +348048,10 @@
"f0884cc1d26a3ac6bc942d9c22a194338329b03d",
[]
],
"check-error-arguments.js": [
"64441f9225ec6cb662ace4b3f137fcc20121d125",
[]
],
"empty-worker.js": [
"49ceb2648a93410bdd5ee53ef0e114146210741b",
[]
@ -357514,7 +357703,7 @@
]
],
"idlharness.any.js": [
"efb84661e8044d146ab0704f18a6a3805ff3c803",
"12c304589ab90da254f98b872661f23c8ba59742",
[
"IndexedDB/idlharness.any.html",
{
@ -357530,8 +357719,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
],
[
@ -357549,8 +357743,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
],
[
@ -357568,8 +357767,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
],
[
@ -357587,8 +357791,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
]
],
@ -377541,6 +377750,20 @@
{}
]
],
"animation-base-response-001.html": [
"c6731e179823584577f42a649f6f3665611a522a",
[
null,
{}
]
],
"animation-base-response-002.html": [
"e9ea964f75da4def5e94875deed3761e622d23d7",
[
null,
{}
]
],
"animation-before-initial-box-construction-001.html": [
"558c5ea18699f3856c7d34b976f920b1fd7fd5b0",
[
@ -377548,6 +377771,13 @@
{}
]
],
"animation-important-001.html": [
"5bc3ecfa7501b3e3eae771212d6c8ac94b6ddcdf",
[
null,
{}
]
],
"animation-iteration-count-calc.html": [
"44e1e96a589a4e1c5b98e919e7246d05097b0604",
[
@ -383970,7 +384200,7 @@
]
],
"grid-template-columns-computed-withcontent.html": [
"a788ca22f77c188e6a574852ca23936bd6349071",
"ed67f03f6c226ad32370b76a36f431e4636b463a",
[
null,
{}
@ -383997,6 +384227,20 @@
{}
]
],
"grid-template-repeat-auto-computed-withcontent-001.html": [
"c18f296abc9cd32a77abef8e12f41282a52cfafb",
[
null,
{}
]
],
"grid-template-repeat-auto-computed-withcontent-002.html": [
"8cb9209ceedac17ca0be48a8c965db0061fee90d",
[
null,
{}
]
],
"grid-template-rows-computed-nogrid.html": [
"057a7fa0615fae3797939aa77c762b8335a90f2b",
[
@ -384062,6 +384306,15 @@
{}
]
]
},
"subgrid": {
"grid-template-computed-nogrid.html": [
"6c2042fde784a42c24c7a967693f95734eff50e4",
[
null,
{}
]
]
}
},
"css-images": {
@ -393169,6 +393422,20 @@
{}
]
],
"transition-base-response-001.html": [
"b4188985ac5d40cbf03efd6e780001baf3e96d01",
[
null,
{}
]
],
"transition-base-response-002.html": [
"89c6ff25bc5a080bdd87eb180194d63124eab438",
[
null,
{}
]
],
"transition-delay-001.html": [
"921525ea72d2e1e28d2321c1594085deaf2330f0",
[
@ -397300,6 +397567,13 @@
{}
]
],
"CSSStyleSheet-constructable-replace-on-regular-sheet.html": [
"d059258d90a64ac7dee02a14d92c677afe3fdb47",
[
null,
{}
]
],
"CSSStyleSheet-constructable.html": [
"fbee4298c1411937f8c45a2f6001ee78dccadbb5",
[
@ -398953,7 +399227,7 @@
]
},
"idlharness.any.js": [
"e7de16e8d62904986610a484b046a4caf0f161e3",
"5df3aaf4b28842d05f4d038ba2ec0b18f828b6fc",
[
"css/filter-effects/idlharness.any.html",
{
@ -398965,8 +399239,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
],
[
@ -398980,8 +399259,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
]
],
@ -417321,10 +417605,12 @@
]
],
"feature-policy-nested-header-policy-allowed-for-self.https.sub.html": [
"274b3ebe9073f1558e0d2b378dc01a427528371b",
"62ddd967495a251bcb76988d9236429af6cc8691",
[
null,
{}
{
"timeout": "long"
}
]
],
"feature-policy-nested-header-policy-disallowed-for-all.https.sub.html": [
@ -419907,7 +420193,7 @@
]
],
"fetch-destination.https.html": [
"27b510268dde9f24b2500756f5d55940cd98d884",
"0094b0b6fe8eac2049fac57580bc6deb3c185922",
[
null,
{}
@ -424760,8 +425046,22 @@
{}
]
],
"cache-storage-reporting.https.html": [
"4ef9eb21d69b35429b7a542b1f9c37a2b5042b18",
"cache-storage-reporting-dedicated-worker.https.html": [
"468861a9df60fc790e10515d3d01fd9fbd818266",
[
null,
{}
]
],
"cache-storage-reporting-document.https.html": [
"a6a2c355cb2287c6792c13e5a29e5e654ea00d3f",
[
null,
{}
]
],
"cache-storage-reporting-service-worker.https.html": [
"6b5b78bba088671d4d6eb5b7833bf1c873963eee",
[
null,
{
@ -424769,6 +425069,13 @@
}
]
],
"cache-storage-reporting-shared-worker.https.html": [
"2cbdb21ee12d2bd971284d2a54e42d4bbf2a041d",
[
null,
{}
]
],
"coep-frame-javascript.https.html": [
"d3e090bd7f7b08bbb75ec8541a1981d928a28e37",
[
@ -424941,7 +425248,7 @@
]
],
"coep-blob-popup.https.html": [
"c66988d0a659b1c0cf00bd88e06f3b2c3dded975",
"c317f6bdf9baa9311abb93fe3a1fd174bb824b3b",
[
null,
{}
@ -443983,14 +444290,14 @@
]
],
"frac-parameters-1.html": [
"b7efbc78ca01a3919b83edfed67c2721025d4e69",
"57b35fdeb0750d27d1f8b26a1da6d9b57ac95005",
[
null,
{}
]
],
"frac-parameters-2.html": [
"368fc0676d2135b6cd5381a822dd9ec92bf71512",
"b913a34b99043580083c2782d5ab35dc3a459aad",
[
null,
{}
@ -445839,7 +446146,7 @@
]
],
"idlharness.https.window.js": [
"594e1121b005ea3cd7ef1f30aa15fbed07dff1a4",
"b10e8dbb046d656e4b06c3572fb4ee069c9e0897",
[
"mediacapture-streams/idlharness.https.window.html",
{
@ -445851,8 +446158,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
]
]
@ -479300,7 +479612,7 @@
]
],
"idlharness.window.js": [
"6cfcbb2e95fd7e3e7d32aab6faae7cb231c6fec6",
"77eb6a1be9083214d78d8d4c659952b18be4db8e",
[
"speech-api/idlharness.window.html",
{
@ -479312,8 +479624,13 @@
[
"script",
"/resources/idlharness.js"
],
[
"timeout",
"long"
]
]
],
"timeout": "long"
}
]
]
@ -498990,7 +499307,7 @@
]
],
"RTCPeerConnection-onnegotiationneeded.html": [
"3b65faca927fad96d45911350be355a1886ba3fb",
"2eda7b5b341ca965dca970cdfa5c73b2f57e3189",
[
null,
{}
@ -499011,7 +499328,7 @@
]
],
"RTCPeerConnection-operations.https.html": [
"e88c8b28172c1c0edbfaef4dda10a306470ad96f",
"a0921d315a3c20a2237cade41c51b2a34306b5d7",
[
null,
{}
@ -507777,6 +508094,13 @@
null,
{}
]
],
"shared-worker-parse-error-failure.html": [
"0d8e390382f1127856ed3c26ec5b3cd0a1648280",
[
null,
{}
]
]
},
"name-property.html": [
@ -508192,6 +508516,13 @@
{}
]
],
"shared-worker-parse-error-failure.html": [
"3f1b4c5d85f403876f6b562cf09fdc1e1d37ab45",
[
null,
{}
]
],
"worker-performance.worker.js": [
"c913b2e7375067c1a21bdc655f394b5c27bc5aed",
[
@ -508333,10 +508664,12 @@
]
],
"paint-worklet-csp.https.html": [
"bf3b733b72b129d6979014b7a8ac5f522ce061b8",
"61019d19efa149cbbf9d885d0b4d8792b5fb04c3",
[
null,
{}
{
"timeout": "long"
}
]
],
"paint-worklet-import.https.html": [

View file

@ -239,3 +239,6 @@
[BluetoothRemoteGATTService interface: operation getCharacteristics(optional BluetoothCharacteristicUUID)]
expected: FAIL
[BluetoothDevice interface: operation watchAdvertisements(optional WatchAdvertisementsOptions)]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,2 @@
[animation-base-response-001.html]
expected: ERROR

View file

@ -0,0 +1,4 @@
[animation-base-response-002.html]
[Animated font-size on root affects rem units]
expected: FAIL

View file

@ -0,0 +1,16 @@
[animation-important-001.html]
[Interpolated value is observable]
expected: FAIL
[Important rules override animations (::before)]
expected: FAIL
[Non-overriden interpolations are observable]
expected: FAIL
[Important rules do not override animations on :visited as seen from JS]
expected: FAIL
[Important rules override animations]
expected: FAIL

View file

@ -0,0 +1,2 @@
[animation-important-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[stretch-obeys-min-max-002.html]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -0,0 +1,2 @@
[transition-base-response-001.html]
expected: ERROR

View file

@ -0,0 +1,4 @@
[transition-base-response-002.html]
[Transitioning font-size on root affects rem units]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -21,6 +21,3 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -0,0 +1,4 @@
[CSSStyleSheet-constructable-replace-on-regular-sheet.html]
[replace / replaceSync on non-constructed stylesheet]
expected: FAIL

View file

@ -4,55 +4,85 @@
[Fetch destination tests]
expected: FAIL
[Initialize global state]
expected: FAIL
[HTMLImageElement fetches with an "image" Request.destination]
expected: FAIL
[HTMLImageElement with srcset attribute fetches with an "image" Request.destination]
expected: FAIL
[HTMLImageElement with a HTMLPictureElement parent attribute fetches with an "image" Request.destination]
expected: FAIL
[SVGImageElement fetches with an "image" Request.destination]
expected: FAIL
[fetch() fetches with an empty string Request.destination]
expected: FAIL
[XMLHttpRequest() fetches with an empty string Request.destination]
expected: FAIL
[EventSource() fetches with an empty string Request.destination]
expected: FAIL
[HTMLAudioElement fetches with an "audio" Request.destination]
expected: FAIL
[HTMLVideoElement fetches with a "video" Request.destination]
expected: FAIL
[HTMLScriptElement fetches with a "script" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=stylesheet fetches with a "style" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=fetch fetches with an empty string Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=style fetches with a "style" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=script fetches with a "script" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=font fetches with a "font" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=image fetches with a "image" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=audio fetches with a "audio" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=video fetches with a "video" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=track fetches with a "track" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=document fetches with a "document" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=worker fetches with a "worker" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=sharedworker fetches with a "sharedworker" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=xslt fetches with a "xslt" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=preload and as=manifest fetches with a "manifest" Request.destination]
expected: FAIL
[HTMLLinkElement with rel=prefetch fetches with an empty string Request.destination]
expected: FAIL
[AudioWorklet module fetches with a "audioworklet" Request.destination]
expected: FAIL

View file

@ -312,24 +312,24 @@
[fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -11,3 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
[X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

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

View file

@ -1,4 +1,8 @@
[skip-document-with-fragment.html]
expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL
[Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
expected: TIMEOUT

View file

@ -4,7 +4,7 @@
expected: FAIL
[Element with tabindex should support autofocus]
expected: FAIL
expected: TIMEOUT
[Host element with delegatesFocus including no focusable descendants should be skipped]
expected: NOTRUN
@ -16,5 +16,5 @@
expected: NOTRUN
[Non-HTMLElement should not support autofocus]
expected: TIMEOUT
expected: NOTRUN

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,2 @@
[image-loading-subpixel-clip.html]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -83,3 +83,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44048 more errors.\n\tMax AbsError of 1.9986611604690552e+0 at index of 37130.\n\t[37130\]\t-9.9994289875030518e-1\t9.9871826171875000e-1\t1.9986611604690552e+0\t2.0012262087101997e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 14112.\n\t[14112\]\t-9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44051 more errors.\n\tMax AbsError of 1.9798262119293213e+0 at index of 27116.\n\t[27116\]\t9.9151444435119629e-1\t-9.8831176757812500e-1\t1.9798262119293213e+0\t2.0032405531110080e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -254,3 +254,9 @@
[X SNR (-349.52143104912756 dB) is not greater than or equal to 85.58. Got -349.52143104912756.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t1.1378110271370935e+22\t5.6332010030746460e-1\t1.1378110271370935e+22\t2.0198303353920215e+22\t9.0957000000000003e-5\n\t[31081\]\t4.5877110423530186e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 1.1378110271370935e+22 at index of 31080.\n\tMax RelError of 2.0198303353920215e+22 at index of 31080.\n]
expected: FAIL
[X SNR (-397.6873168264859 dB) is not greater than or equal to 85.58. Got -397.6873168264859.]
expected: FAIL

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[shared-worker-parse-error-failure.html]
[Classic shared worker construction for script with syntax error should dispatch an event named error.]
expected: FAIL
[Static import on classic shared worker should dispatch an event named error.]
expected: FAIL

View file

@ -1,6 +1,7 @@
// META: global=window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: timeout=long
idl_test(
['IndexedDB'],

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<title>Test that non-animated style is responsive to animated properties</title>
<link rel="help" href="https://drafts.csswg.org/css-animations/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@keyframes font_size_animation {
from { font-size: 10px; }
to { font-size: 20px; }
}
@keyframes var_animation {
from { --x: 10px; }
to { --x: 20px; }
}
#targets > div {
animation-duration: 1000s;
animation-delay: -500s;
animation-timing-function: steps(2, end);
}
#target1 {
animation-name: font_size_animation;
font-size: 1px;
width: 1em;
}
#ref1 {
width: 15px;
}
#target2 {
animation-name: font_size_animation;
font-size: 1px;
width: 1ex;
}
#ref2 {
font-size: 15px;
width: 1ex;
}
#target3 {
animation-name: var_animation;
--x: 0px;
width: var(--x);
}
#ref3 {
width: 20px;
}
</style>
<div id="targets">
<div id="target1"></div>
<div id="target2"></div>
<div id="target3"></div>
</div>
<div id="refs">
<div id="ref1"></div>
<div id="ref2"></div>
<div id="ref3"></div>
</div>
<script>
// Test that the computed value of the given property is equal on
// 'target' and 'ref'.
function test_ref(target, ref, property, description) {
test(() => {
let actual = getComputedStyle(target).getPropertyValue(property);
let expected = getComputedStyle(ref).getPropertyValue(property);
assert_equals(actual, expected);
}, description);
}
test_ref(target1, ref1, 'width', 'em units respond to font-size animation');
test_ref(target2, ref2, 'width', 'ex units respond to font-size animation');
test_ref(target3, ref3, 'width', 'var() references respond to custom property animation');
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>Test that rem units are responsive to animated font-size on root</title>
<link rel="help" href="https://drafts.csswg.org/css-animations/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@keyframes font_size_animation {
from { font-size: 10px; }
to { font-size: 20px; }
}
:root {
font-size: 1px;
animation: font_size_animation steps(2, end) 1000s -500s;
}
#target1 {
width: 1rem;
}
</style>
<div id="target1"></div>
<script>
test(() => {
assert_equals(getComputedStyle(target1).getPropertyValue('width'), '15px');
}, 'Animated font-size on root affects rem units');
</script>

View file

@ -0,0 +1,72 @@
<!DOCTYPE html>
<title>Test !important declarations vs. animation effects</title>
<link rel="help" href="https://drafts.csswg.org/css-cascade/#cascade-origin">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@keyframes bgcolor_animation {
from { background-color: rgb(10, 10, 10); }
to { background-color: rgb(20, 20, 20); }
}
@keyframes color_and_bg_animation {
from { background-color: rgb(10, 10, 10); color: rgb(10, 10, 10); }
to { background-color: rgb(20, 20, 20); color: rgb(20, 20, 20); }
}
a, div, ::before{
animation-duration: 1000s;
animation-delay: -500s;
animation-timing-function: steps(2, end);
}
#target1 {
animation-name: bgcolor_animation;
}
#target2 {
background-color: rgb(0, 128, 0) !important;
animation-name: bgcolor_animation;
}
#target3 {
color: rgb(0, 128, 0) !important;
animation-name: color_and_bg_animation;
}
#target4::before {
color: rgb(0, 128, 0) !important;
animation-name: color_and_bg_animation;
content: " ";
}
#target5 {
animation-name: color_and_bg_animation;
}
#target5:visited {
color: rgb(0, 128, 0) !important;
}
</style>
<div id="target1"></div>
<div id="target2"></div>
<div id="target3"></div>
<div id="target4"></div>
<a href="" id="target5"></a>
<script>
test(() => {
assert_equals(getComputedStyle(target1).backgroundColor, 'rgb(15, 15, 15)');
}, 'Interpolated value is observable');
test(() => {
assert_equals(getComputedStyle(target2).backgroundColor, 'rgb(0, 128, 0)');
}, 'Important rules override animations');
test(() => {
assert_equals(getComputedStyle(target3).color, 'rgb(0, 128, 0)');
assert_equals(getComputedStyle(target3).backgroundColor, 'rgb(15, 15, 15)');
}, 'Non-overriden interpolations are observable');
test(() => {
assert_equals(getComputedStyle(target4, '::before').color, 'rgb(0, 128, 0)');
assert_equals(getComputedStyle(target4, '::before').backgroundColor, 'rgb(15, 15, 15)');
}, 'Important rules override animations (::before)');
test(() => {
assert_equals(getComputedStyle(target5).color, 'rgb(15, 15, 15)');
assert_equals(getComputedStyle(target5).backgroundColor, 'rgb(15, 15, 15)');
}, 'Important rules do not override animations on :visited as seen from JS');
</script>

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<style>
a {
text-decoration: underline;
background-color: rgb(0, 150, 0);
}
</style>
<a style="color: rgb(150, 0, 0)">Unvisited</a>
<a style="color: white">Visited</a>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>Test that animated properties on :visited are overridden by !important</title>
<link rel="help" href="https://drafts.csswg.org/css-cascade/#cascade-origin">
<link rel="match" href="animation-important-002-ref.html">
<style>
@keyframes color_and_bg_animation {
from { background-color: rgb(0, 100, 0); color: rgb(100, 0, 0); }
to { background-color: rgb(0, 200, 0); color: rgb(200, 0, 0); }
}
a {
animation-name: color_and_bg_animation;
animation-duration: 1000s;
animation-delay: -500s;
animation-timing-function: steps(2, end);
}
a:visited {
color: white !important;
}
</style>
<a href="#unvisited">Unvisited</a>
<a href="">Visited</a>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<link href="support/flexbox.css" rel="stylesheet">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-align-items-baseline">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-flex-direction-column">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#valdef-flex-wrap-wrap-reverse">
<link rel="match" href="reference/align-baseline-ref.html">
<style>
body {
margin: 0;
}
</style>
<body>
<div class='flexbox column align-items-baseline'>
<h1>This text</h1>
<p>should be left aligned.</p>
</div>
<div class='flexbox column align-items-baseline wrap-reverse'>
<h1>This text</h1>
<p>should be right aligned.</p>
</div>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<link href="../support/flexbox.css" rel="stylesheet">
<style>
body {
margin: 0;
}
</style>
<body>
<div class='flexbox column align-items-flex-start'>
<h1>This text</h1>
<p>should be left aligned.</p>
</div>
<div class='flexbox column align-items-flex-start wrap-reverse'>
<h1>This text</h1>
<p>should be right aligned.</p>
</div>
</body>
</html>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>item's min/max cross sizes</title>
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="flags" content="" />
<meta name="assert" content="specified max cross size on stretched items is honored pre-flexing" />
<style>
.inline-block {
display: inline-block;
width: 40px;
height: 50px;
}
#reference-overlapped-red {
position: absolute;
background-color: red;
width: 100px;
height: 100px;
z-index: -1;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="reference-overlapped-red"></div>
<div style="display:flex; flex-direction: column; width: 100px; background: green">
<div style="max-width: 50px; line-height: 0px;">
<!-- An engine where these inline blocks don't wrap will give green height 50px. -->
<div class=inline-block></div><div class=inline-block></div>
</div>
</div>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<title>item's min/max cross sizes</title>
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="flags" content="" />
<meta name="assert" content="specified max cross size on ortho stretched items is honored pre-flexing" />
<style>
.inline-block {
display: inline-block;
width: 50px;
height: 55px;
}
#reference-overlapped-red {
position: absolute;
background-color: red;
width: 100px;
height: 100px;
z-index: -1;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="reference-overlapped-red"></div>
<div style="display:flex; height: 110px;">
<div style="writing-mode: vertical-lr; max-height: 100px; line-height: 0px; background: green;">
<div class=inline-block></div><div class=inline-block></div>
</div>
</div>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>item's min/max cross sizes</title>
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" title="Bullet 1">
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
<meta name="flags" content="" />
<meta name="assert" content="specified min cross size on stretched items is honored pre-flexing" />
<style>
.inline-block {
display: inline-block;
width: 1px;
height: 100px;
}
</style>
<p>Test passes if there is a filled green square.</p>
<div style="display:flex; flex-direction: column; width: 0px;">
<div style="background: green; min-width: 100px; line-height: 0px;">
<div class=inline-block></div><div class=inline-block></div>
</div>
</div>

View file

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat">
<head>
<style>
.grid-container {
height: 30px;
width: 300px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container > * { float: left; height: 30px; }
.grid-container > :nth-child(2n) { background: sienna; }
.grid-container > :nth-child(2n + 1) { background: orange; }
</style>
</head>
<body>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="grid-container">
<div style="width: 10px;"></div>
<div style="width: 20px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
</div>
<div class="grid-container">
<div style="width: 10px;"></div>
<div style="width: 20px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 30px;"></div>
<div style="width: 50px; margin-left: 40px;"></div>
</div>
<div class="grid-container">
<div style="width: 20px; margin-left: 10px"></div>
<div style="width: 30px;"></div>
<div style="width: 30px; margin-left: 40px;"></div>
<div style="width: 40px;"></div>
<div style="width: 50px;"></div>
<div style="width: 60px;"></div>
</div>
</body>
</html>

View file

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat">
<link rel="match" href="grid-auto-repeat-multiple-values-002-ref.html">
<head>
<style>
.holder {
height: 30px;
width: 300px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container {
display: grid;
grid-template-columns: 10px 20px repeat(auto-fill, 30px 40px) 50px 60px;
grid-template-rows: repeat(auto-fill, minmax(30px, auto));
}
.grid-container > :nth-child(2n) { background: sienna; }
.grid-container > :nth-child(2n+1) { background: orange; }
</style>
</head>
<body>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div style="grid-column: 7;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column: 2;"></div>
<div></div>
<div style="grid-column: 5;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,104 @@
<!DOCTYPE html>
<html>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat">
<head>
<style>
.grid-container {
height: 30px;
width: 300px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container > * { float: left; height: 30px; }
.grid-container > :nth-child(2n) { background: sienna; }
.grid-container > :nth-child(2n + 1) { background: orange; }
.auto-fit-long {
width: 650px;
}
.auto-fit-long > :nth-child(2n) { width: 30px; }
.auto-fit-long > :nth-child(2n+1) { width: 40px; }
.auto-medium-fit {
width: 510px;
}
</style>
</head>
<body>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="grid-container">
<div style="width: 10px;"></div>
<div style="width: 20px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
</div>
<div class="grid-container">
<div style="width: 10px;"></div>
<div style="width: 20px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 30px;"></div>
<div style="width: 50px;"></div>
</div>
<div class="grid-container auto-fit-long">
<div style="width: 20px; margin-left: 10px"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="grid-container auto-fit-long">
<div style="width: 20px; margin-left: 10px"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="grid-container auto-fit-long">
<div style="width: 20px; margin-left: 10px"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="grid-container">
<div style="width: 20px; margin-left: 10px"></div>
<div style="width: 30px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 50px;"></div>
<div style="width: 60px;"></div>
</div>
<div class="grid-container">
<div style="width: 10px;"></div>
<div style="width: 20px;"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 50px;"></div>
<div style="width: 60px;"></div>
</div>
<div class="grid-container">
<div style="width: 40px; margin-left: 30px"></div>
<div style="width: 30px;"></div>
<div style="width: 40px;"></div>
<div style="width: 50px;"></div>
<div style="width: 60px;"></div>
</div>
<div class="grid-container auto-medium-fit">
<div style="width: 10px;"></div>
<div style="width: 110px; margin-left: 20px"></div>
<div style="width: 30px;"></div>
</div>
</body>
</html>

View file

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat">
<link rel="match" href="grid-auto-repeat-multiple-values-003-ref.html">
<head>
<style>
.holder {
height: 30px;
width: 300px;
border-bottom: 2px solid #cfbfcf;
}
.wide-holder {
height: 30px;
width: 650px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container {
display: grid;
grid-template-columns: 10px 20px repeat(auto-fit, 30px 40px) 50px 60px;
grid-template-rows: repeat(auto-fill, minmax(30px, auto));
}
.grid-container > :nth-child(2n) { background: sienna; }
.grid-container > :nth-child(2n+1) { background: orange; }
</style>
</head>
<body>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div style="grid-column: 7;"></div>
</div>
</div>
<!-- Test correct tracking of collapsed tracks -->
<div class="holder" style="width: 650px">
<div class="grid-container">
<div style="grid-column: 2;"></div>
<div></div>
<div style="grid-column: 6;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder" style="width: 650px">
<div class="grid-container">
<div style="grid-column: 2;"></div>
<div></div>
<div style="grid-column: 10;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder" style="width: 650px">
<div class="grid-container">
<div style="grid-column: 2;"></div>
<div></div>
<div style="grid-column: 12;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column: 2;"></div>
<div></div>
<div style="grid-column: 5;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div style="grid-column: 5;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Test correct tracking of collapsed tracks when the grid begins in the middle of the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column: 4;"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Test grid span with correct tracking of collapsed tracks. -->
<div class="holder" style="width: 510px">
<div class="grid-container">
<div></div>
<div style="grid-column: 4 / 7;"></div>
<div></div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,216 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(&lt;custom-ident\&gt;*)' syntax">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions">
<style>
.holder {
width: 300px;
height: 20px;
border-bottom: 2px solid #cfbfcf;
}
.holder > :nth-child(2) {
clear: left; /* Forces the div to a new line to simulate a new grid row. */
padding-top: 2px; /* Simulates the grid row gap. */
}
.grid-container > * { float: left; height: 8px; }
.grid-container > :nth-child(3n) { background: sienna; }
.grid-container > :nth-child(3n+1) { background: gold; }
.grid-container > :nth-child(3n+2) { background: orange; }
.alt-color > :nth-child(2n) { background: sienna; }
.alt-color > :nth-child(2n+1) { background: orange; }
.invis { width: 0px; visibility: none; }
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="holder">
<div class="grid-container">
<div style="width:30px; margin-left:30px"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:50px; margin-left:170px"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:30px; margin-left:30px"></div>
<div style="width:30px; margin-left:40px"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:30px; margin-left:20px"></div>
<div style="width:30px; margin-left:40px"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:30px; margin-left:30px"></div>
<div style="width:50px; margin-left:110px"></div>
<div style="width:60px;"></div>
</div>
<div class="grid-container">
<div style="width:10px"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:30px; margin-left:20px"></div>
<div style="width:50px; margin-left:110px"></div>
<div style="width:60px;"></div>
</div>
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:50px; margin-left:10px;"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:90px; margin-left:10px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:90px;"></div>
<div class="invis"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div class="invis"></div>
<div style="width:10px;"></div>
<div style="width:120px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:90px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:50px;"></div>
<div class="invis"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div class="invis"></div>
<div style="width:10px;"></div>
<div style="width:90px;"></div>
<div style="width:30px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:50px;"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:20px;"></div>
<div style="width:140px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:20px;"></div>
<div class="invis"></div>
<div style="width:140px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="width:30px;"></div>
<div style="width:140px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:140px; margin-left:20px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:210px;"></div>
</div>
</div>

View file

@ -0,0 +1,219 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Support for named grid lines when 'grid-template-columns' and 'grid-template-rows' have multiple values inside of a repeat.</title>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(&lt;custom-ident\&gt;*)' syntax">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions">
<link rel="match" href="grid-support-named-grid-lines-002-ref.html">
<style>
.holder {
width: 300px;
height: 20px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container {
display: grid;
/*
Defines the grid areas 'repeat', which covers the repeat only, and
'around-repeat' which covers the repeat and one track on either end.
Provides the line name 'all' in every track, the line names 'v' and 'u'
which alternate in every grid line.
*/
grid-template-columns: [v] 10px [around-repeat-start a t-start w-start u all] 20px [repeat-start b] repeat(auto-fill, [all x v] 30px [all w-end y u] 40px [all t-end z]) [repeat-end c v] 50px [around-repeat-end all d u] 60px [e v];
grid-template-rows:
[w-start t-start around-repeat-start repeat-start]
repeat(auto-fill, 8px)
[w-end t-end around-repeat-end repeat-end ]
8px;
grid-row-gap: 2px;
}
.grid-container > :nth-child(3n) { background: sienna; }
.grid-container > :nth-child(3n+1) { background: gold; }
.grid-container > :nth-child(3n+2) { background: orange; }
/* Alternate colors for some grid containers, where sometimes multiple grid
items would appear as one item or the actual ordering would be ambiguous
otherwise. */
.alt-color > :nth-child(2n) { background: sienna; }
.alt-color > :nth-child(2n+1) { background: orange; }
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<!-- Use the line names just before and just after the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column:b / span 1"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column:c / span 1"></div>
</div>
</div>
<!-- Use line names that are inside a repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column-start:x"></div>
<div style="grid-column-start:z"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-column-start:x"></div>
<div style="grid-column-start:z"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column-start:x 1"></div>
<div style="grid-column-start:z 2"></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-column-start:x 1"></div>
<div style="grid-column-start:z 2"></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using a span that goes from outside a repeat to inside the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column:u / y"></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column:u / z"></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using an area which has one end inside the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using an area which spans the entire repeat. -->
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: around-repeat;"></div>
<div></div>
</div>
</div>

View file

@ -0,0 +1,222 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(&lt;custom-ident\&gt;*)' syntax">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions">
<style>
.holder {
width: 300px;
height: 20px;
border-bottom: 2px solid #cfbfcf;
}
.holder > :nth-child(2) {
clear: left; /* Forces the div to a new line to simulate a new grid row. */
padding-top: 2px; /* Simulates the grid row gap. */
}
.grid-container > * { float: left; height: 8px; }
.grid-container > :nth-child(3n) { background: sienna; }
.grid-container > :nth-child(3n+1) { background: gold; }
.grid-container > :nth-child(3n+2) { background: orange; }
.alt-color > :nth-child(2n) { background: sienna; }
.alt-color > :nth-child(2n+1) { background: orange; }
.invis { width: 0px; visibility: none; }
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<div class="holder">
<div class="grid-container">
<div style="width:30px; margin-left:30px"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:30px; margin-left:20px"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:30px; margin-left:30px"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
<div class="grid-container">
<div style="width:10px"></div>
<div style="width:20px"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:30px; margin-left:20px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px"></div>
<div style="width:20px"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:50px; margin-left:10px;"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:90px; margin-left:10px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:90px;"></div>
<div class="invis"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div class="invis"></div>
<div style="width:10px;"></div>
<div style="width:120px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:90px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:50px;"></div>
<div class="invis"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div class="invis"></div>
<div style="width:10px;"></div>
<div style="width:90px;"></div>
<div style="width:30px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:50px;"></div>
<div style="width:40px;"></div>
<div style="width:30px;"></div>
<div style="width:40px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:20px;"></div>
<div style="width:140px;"></div>
<div style="width:50px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:20px;"></div>
<div class="invis"></div>
<div style="width:140px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="width:30px;"></div>
<div style="width:140px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:140px; margin-left:20px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="width:10px;"></div>
<div style="width:210px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="width:10px;"></div>
<div style="width:210px;"></div>
<div style="width:60px;"></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div class="invis"></div>
<div style="width:10px;"></div>
<div class="invis"></div>
<div style="width:210px;"></div>
</div>
</div>

View file

@ -0,0 +1,224 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Support for named grid lines when 'grid-template-columns' and 'grid-template-rows' have multiple values inside of a repeat.</title>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(&lt;custom-ident\&gt;*)' syntax">
<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions">
<link rel="match" href="grid-support-named-grid-lines-003-ref.html">
<style>
.holder {
width: 300px;
height: 20px;
border-bottom: 2px solid #cfbfcf;
}
.grid-container {
display: grid;
/*
Defines the grid areas 'repeat', which covers the repeat only, and
'around-repeat' which covers the repeat and one track on either end.
Provides the line name 'all' in every track, the line names 'v' and 'u'
which alternates in every grid line.
*/
grid-template-columns: [v] 10px [around-repeat-start a t-start w-start u all] 20px [repeat-start b] repeat(auto-fit, [all x v] 30px [all w-end y u] 40px [all t-end z]) [repeat-end c v] 50px [around-repeat-end all d u] 60px [e v];
grid-template-rows:
[w-start t-start around-repeat-start repeat-start]
repeat(auto-fit, 8px)
[w-end t-end around-repeat-end repeat-end ]
8px;
grid-row-gap: 2px;
}
.grid-container > :nth-child(3n) { background: sienna; }
.grid-container > :nth-child(3n+1) { background: gold; }
.grid-container > :nth-child(3n+2) { background: orange; }
/* Alternate colors for some grid containers, where sometimes multiple grid
items would appear as one item or the actual ordering would be ambiguous
otherwise. */
.alt-color > :nth-child(2n) { background: sienna; }
.alt-color > :nth-child(2n+1) { background: orange; }
</style>
<p>The test passes if it has the same visual effect as reference.</p>
<!-- Use line names that are inside a repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column-start:x"></div>
<div style="grid-column-start:z"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-column-start:x"></div>
<div style="grid-column-start:z"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column-start:x 1"></div>
<div style="grid-column-start:z 2"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-column-start:x 1"></div>
<div style="grid-column-start:z 2"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using a span that goes from outside a repeat to inside the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-column:u / y"></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-column:u / z"></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using an area which has one end inside the repeat. -->
<div class="holder">
<div class="grid-container">
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: t;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: w;"></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
<!-- Using an area which spans the entire repeat. -->
<div class="holder">
<div class="grid-container">
<div></div>
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div></div>
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div></div>
<div style="grid-area: around-repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container alt-color">
<div></div>
<div style="grid-area: around-repeat;"></div>
<div></div>
</div>
</div>
<div class="holder">
<div class="grid-container">
<div style="grid-area: around-repeat;"></div>
<div></div>
</div>
</div>

View file

@ -80,6 +80,12 @@ test_computed_value("grid-template-columns", 'repeat(auto-fill, minmax(100px, 5f
'100px [two] 100px [two] 100px [two]');
test_computed_value("grid-template-columns", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])',
'[three] 240px [four]');
test_computed_value('grid-template-columns', '[a] 21px [b] repeat(auto-fill, [c] 22px [d] 23px [e]) [f] 24px [g]',
'[a] 21px [b c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e f] 24px [g]');
test_computed_value('grid-template-columns', '[a] 21px [b c] repeat(auto-fill, [d e] 22px [f g h] 23px [i j k l]) [m n] 24px [o]',
'[a] 21px [b c d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l m n] 24px [o]');
test_computed_value('grid-template-columns', '[a] repeat(2, [b] 20px [c d] 21px [e f g]) [h i] repeat(auto-fit, [j] 22px [k l m] 23px [n o p q]) [r s]',
'[a b] 20px [c d] 21px [e f g b] 20px [c d] 21px [e f g h i j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q r s]');
// <auto-track-list> =
// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?

View file

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
<meta name="assert" content="grid-template-columns computed value is the keyword none or a computed track list.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<script src="/css/css-grid/support/grid-child-utils.js"></script>
<style>
#target {
display: grid;
width: 32px;
height: 10px;
};
</style>
</head>
<body>
<div id="container">
<div id="target">
<div></div>
<div></div>
<div id="child"></div>
<div style="grid-column: 7"></div>
<div></div>
</div>
</div>
<script>
let autoFitTester = new GridChildHelper(gridChildHelperCol,
"[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h]) [i] 5px [k] 6px [l m] ");
let autoFillTester = new GridChildHelper(gridChildHelperCol,
"[a] 1px [b] 2px [c d] repeat(auto-fill, [e f] 3px [g] 4px [h]) [i] 5px [k] 6px [l m] ");
// Auto-fit
autoFitTester.runTest(3, "[a] 1px [b] 2px [c d e f] 3px [g] 0px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest(4, "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest(5, "[a] 1px [b] 2px [c d e f] 0px [g] 0px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest(6, "[a] 1px [b] 2px [c d e f] 0px [g] 0px [h e f] 0px [g] 4px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest("4 / 5", "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest("4 / 6", "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]");
autoFitTester.runTest("3 / 6", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]");
// Auto-fill. These tests are semi-redundant, but should still pass.
autoFillTester.runTest(3, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]");
autoFillTester.runTest(4, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]");
autoFillTester.runTest(5, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]");
autoFillTester.runTest("4 / 7", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]");
autoFillTester.runTest("3 / 6", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]");
</script>
</body>
</html>

View file

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
<meta name="assert" content="grid-template-columns computed value is the keyword none or a computed track list.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<script src="/css/css-grid/support/grid-child-utils.js"></script>
<style>
#target {
display: grid;
width: 54px;
height: 32px;
};
</style>
</head>
<body>
<div id="container">
<div id="target">
<div></div>
<div></div>
<div style="grid-column: 4"></div>
<div id="child"></div>
<div style="grid-column: 10"></div>
<div></div>
</div>
</div>
<script>
// Style with 3 repeat tracks.
let style3 =
"[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h] 5px [i j]) [k] 7px [k] 8px [l m]";
let col3Tester = new GridChildHelper(gridChildHelperCol, style3);
let rowTester = new GridChildHelper(gridChildHelperRow, style3);
// Style with 2 repeat tracks.
let style2 =
"[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h]) [i j] 7px [k] 8px [l m]";
let col2Tester = new GridChildHelper(gridChildHelperCol, style2);
rowTester.runTest(3,
"[a] 1px [b] 2px [c d e f] 3px [g] 0px [h] 0px [i j k] 7px [k] 8px [l m]");
rowTester.runTest(5,
"[a] 1px [b] 2px [c d e f] 0px [g] 0px [h] 5px [i j k] 7px [k] 8px [l m]");
rowTester.runTest("3 / 8",
"[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
rowTester.runTest("4 / span 2",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
rowTester.runTest("4 / 5",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest(3,
"[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest(6,
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 3px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest("3 / 8",
"[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 5px [i j e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest("5 / span 2",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j e f] 3px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest("7 / span 2",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest("5 / 8",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col3Tester.runTest("8 / 10",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 0px [g] 0px [h] 5px [i j e f] 3px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]");
col2Tester.runTest(3,
"[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 0px [g] 0px [h e f] 0px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]");
col2Tester.runTest(6,
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 4px [h e f] 0px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]");
col2Tester.runTest("3 / 8",
"[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]");
col2Tester.runTest("6 / span 2",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]");
col2Tester.runTest("5 / 10",
"[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]");
</script>
</body>
</html>

View file

@ -0,0 +1,49 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-grid-2/#resolved-track-list" "title"="2.3. Resolved Value of a Track Listing">
<meta name="assert" content="Checks the resolved value of grid-template-columns or grid-template-columns on an element which is not a grid container.">
<style>
#target {
display: block;
height: 1px;
font-size: 1px;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<div id="target"></div>
<script>
test_computed_value("grid-template-columns", "subgrid [a]");
test_computed_value("grid-template-columns", "subgrid [a] [b]");
test_computed_value("grid-template-columns", "subgrid [a] [b] [b] [c]");
test_computed_value("grid-template-columns", "subgrid [a] [b c d] [e f] [e f] [g]");
test_computed_value("grid-template-columns", "subgrid [a b c] [d] [e f]");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c]) [g]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c]) [g h]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c d])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c d]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c d]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c d]) [g]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c d]) [g h]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c d])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c] [d]) [g]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d e])");
test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d e]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]");
test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c] [d e]) [g]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]");
test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d e])");
</script>

View file

@ -0,0 +1,322 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<head>
<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 [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
.fill-0b { grid-template-columns: subgrid [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
.fill-0c { grid-template-columns: subgrid [x] [y] [y] [y] [z] } /* [x] [y] [y] [y] [z] */
.fill-0d { grid-template-columns: subgrid [x] [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */
.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] [z] } /* [x] [x] [x] [x] [z] */
.fill-0f { grid-template-columns: subgrid [x] [x] [z] [z] [z] } /* [x] [x] [z] [z] [z] */
.fill-0g { grid-template-columns: subgrid [x] [y] [z] [z] } /* [x] [y] [z] [z] [] */
.fill-0h { grid-template-columns: subgrid [x] [y] [x] [y] [z] } /* [x] [y] [x] [y] [z] */
.fill-0i { grid-template-columns: subgrid [x] [y] [x] [y] } /* [x] [y] [x] [y] [] */
.fill-0j { grid-template-columns: subgrid [y] [y] [y] [z] [z] } /* [y] [y] [y] [z] [z] */
.fill-0k { grid-template-columns: subgrid [x] [y] [z] [z] } /* [x] [y] [z] [z] [] */
.fill-0l { grid-template-columns: subgrid [z] [x] [y] [z] } /* [z] [x] [y] [z] [] */
.fill-0m { grid-template-columns: subgrid [z] [x] [y] [x] [y] } /* [z] [x] [y] [x] [y] */
.fill-0n { grid-template-columns: subgrid [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
.fill-0o { grid-template-columns: subgrid [z] [x] [y] [z] } /* [z] [x] [y] [z] [] */
.fill-0p { grid-template-columns: subgrid [z] [x] [y] [z] [x] } /* [z] [x] [y] [z] [x] */
.fill-0q { grid-template-columns: subgrid [x] [y] [z] [x] } /* [x] [y] [z] [x] [] */
.fill-0r { grid-template-columns: subgrid [x] [y] [z] [y] [z] } /* [x] [y] [z] [y] [z] */
.fill-0s {
grid-column: 2 / span 5;
grid-template-columns: subgrid [w] [y] [z] [y] [z] [x]; /* [w] [y] [z] [y] [z] [x] */
}
.fill-0t {
grid-column: 1 / span 6;
grid-template-columns: subgrid [w] [y] [z] [y] [z] [x]; /* [w] [y] [z] [y] [z] [x] [] */
}
.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-0k">
<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-0l">
<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-0m">
<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-0n">
<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-0o">
<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-0p">
<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-0q">
<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-0r">
<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-0s">
<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-0t">
<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>

View file

@ -0,0 +1,358 @@
<!DOCTYPE HTML>
<html>
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="match" href="repeat-auto-fill-008-ref.html">
<link rel="help" href="https://drafts.csswg.org/css-grid-2/#resolved-track-list">
<head>
<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] [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */
.fill-0b { grid-template-columns: subgrid [z] repeat(auto-fill, [z] [z] [z]) [z] } /* [z] [z] [z] [z] [z] */
.fill-0c { grid-template-columns: subgrid [x] repeat(auto-fill, [y] [y] [y]) [z] } /* [x] [y] [y] [y] [z] */
.fill-0d { grid-template-columns: subgrid [x] repeat(auto-fill, [z] [z]) } /* [x] [z] [z] [z] [z] */
.fill-0e { grid-template-columns: subgrid repeat(auto-fill, [x] [x]) [z] } /* [x] [x] [x] [x] [z] */
.fill-0f { grid-template-columns: subgrid repeat(auto-fill, [x] [x]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */
.fill-0g { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] [z] } /* [x] [y] [z] [z] [] */
.fill-0h { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] } /* [x] [y] [x] [y] [z] */
.fill-0i { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) } /* [x] [y] [x] [y] [] */
.fill-0j { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */
.fill-0k { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] [z] } /* [x] [y] [z] [z] [] */
.fill-0l { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y]) [z] } /* [z] [x] [y] [z] [] */
.fill-0m { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y]) } /* [z] [x] [y] [x] [y] */
.fill-0n { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) repeat(100, [z])} /* [z] [z] [z] [z] [z] */
.fill-0o { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y] [z]) } /* [z] [x] [y] [z] [] */
.fill-0p { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y] [z]) [x] } /* [z] [x] [y] [z] [x] */
.fill-0q { grid-template-columns: subgrid repeat(auto-fill, [x] [y] [z]) [x] } /* [x] [y] [z] [x] [] */
.fill-0r { grid-template-columns: subgrid [x] repeat(auto-fill, [y] [z]) } /* [x] [y] [z] [y] [z] */
/* With span of 5... */
.fill-0s {
grid-column: 2 / span 5;
grid-template-columns: subgrid [w] repeat(auto-fill, [y] [z]) [x]; /* [w] [y] [z] [y] [z] [x] */
}
/* With span of 6, same as fill-0s but with room for a partial additional repetition */
.fill-0t {
grid-column: 1 / span 6;
grid-template-columns: subgrid [w] repeat(auto-fill, [y] [z]) [x]; /* [w] [y] [z] [y] [z] [x] [] */
}
.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-0k">
<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-0l">
<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-0m">
<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-0n">
<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-0o">
<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-0p">
<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-0q">
<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-0r">
<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-0s">
<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-0t">
<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>
<script>
const expectedResults = [
"subgrid [z] [z] [z] [z] [z]",
"subgrid [z] [z] [z] [z] [z]",
"subgrid [x] [y] [y] [y] [z]",
"subgrid [x] [z] [z] [z] [z]",
"subgrid [x] [x] [x] [x] [z]",
"subgrid [x] [x] [z] [z] [z]",
"subgrid [x] [y] [z] [z] []",
"subgrid [x] [y] [x] [y] [z]",
"subgrid [x] [y] [x] [y] []",
"subgrid [y] [y] [y] [z] [z]",
"subgrid [x] [y] [z] [z] []",
"subgrid [z] [x] [y] [z] []",
"subgrid [z] [x] [y] [x] [y]",
"subgrid [z] [z] [z] [z] [z]",
"subgrid [z] [x] [y] [z] []",
"subgrid [z] [x] [y] [z] [x]",
"subgrid [x] [y] [z] [x] []",
"subgrid [x] [y] [z] [y] [z]",
"subgrid [w] [y] [z] [y] [z] [x]",
"subgrid [w] [y] [z] [y] [z] [x] []",
];
[...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-columns'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
document.body.appendChild(document.createElement("br"));
}
});
</script>
</body>

View file

@ -0,0 +1,45 @@
// Any copyright is dedicated to the Public Domain.
// https://creativecommons.org/publicdomain/zero/1.0/
const gridChildHelperRow = "row";
const gridChildHelperCol = "col";
// Helper for building testcases for grid-template-* with a child div in
// multiple positions. Prop is expected ot be one of gridChildHelperRow or
// gridChildHelperCol, to select testing grid rows or grid columns,
// respectively.
// The child div is found by the id of 'child'.
function GridChildHelper(prop, style){
this.child = document.getElementById("child");
this.style = style;
this.prop = prop;
}
// Runs a test for computed values on the property the helper object was
// constructed with. The childStyle is used for choosing the grid row/column
// of the child div.
// expected is passed as-is to the computed value test.
// The child style is appended to the test name in such a way that different
// tests for the same parent style but different child style values will have
// different test names.
GridChildHelper.prototype.runTest = function(childStyle, expected) {
'use strict';
const childProps = {
[gridChildHelperCol]:"gridColumn",
[gridChildHelperRow]:"gridRow"
};
const childProp = childProps[this.prop];
const parentProps = {
[gridChildHelperCol]:"grid-template-columns",
[gridChildHelperRow]:"grid-template-rows"
};
const parentProp = parentProps[this.prop];
const oldChildStyle = this.child[childProp];
this.child.style[childProp] = childStyle;
test_computed_value(parentProp, this.style, expected, childProp + " = " + childStyle);
this.child[childProp] = oldChildStyle;
}

View file

@ -0,0 +1,74 @@
<!DOCTYPE html>
<title>Test that non-transitioned style is responsive to transitioning properties</title>
<link rel="help" href="https://drafts.csswg.org/css-transitions/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#target1 {
transition: font-size steps(2, start) 1000s;
font-size: 10px;
width: 1em;
}
#target1.change {
font-size: 20px;
}
#ref1 {
width: 15px;
}
#target2 {
transition: font-size steps(2, start) 1000s;
font-size: 10px;
width: 1ex;
}
#target2.change {
font-size: 20px;
}
#ref2 {
font-size: 15px;
width: 1ex;
}
#target3 {
transition: --x steps(2, start) 1000s;
--x: 10px;
width: var(--x);
}
#target3.change {
--x: 20px;
font-size: 20px;
}
#ref3 {
width: 20px;
}
</style>
<div id="targets">
<div id="target1"></div>
<div id="target2"></div>
<div id="target3"></div>
</div>
<div id="refs">
<div id="ref1"></div>
<div id="ref2"></div>
<div id="ref3"></div>
</div>
<script>
// Test that the computed value of the given property is equal on
// 'target' and 'ref', after applying the transition to 'target'.
function test_ref(target, ref, property, description) {
test(() => {
let unused = getComputedStyle(target).getPropertyValue(property);
target.className = 'change';
let actual = getComputedStyle(target).getPropertyValue(property);
let expected = getComputedStyle(ref).getPropertyValue(property);
assert_equals(actual, expected);
}, description);
}
test_ref(target1, ref1, 'width', 'em units respond to font-size transition');
test_ref(target2, ref2, 'width', 'ex units respond to font-size transition');
test_ref(target3, ref3, 'width', 'var() references respond to custom property transition');
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<title>Test that rem units are responsive to transitioning font-size on root</title>
<link rel="help" href="https://drafts.csswg.org/css-transitions/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
:root {
font-size: 10px;
transition: font-size steps(2, start) 10s;
}
:root.change {
font-size: 20px;
}
#target1 {
width: 1rem;
}
</style>
<div id="target1"></div>
<output id=output></output>
<script>
test(() => {
let unused = getComputedStyle(document.documentElement).getPropertyValue('font-size');
document.documentElement.className = 'change';
assert_equals(getComputedStyle(target1).getPropertyValue('width'), '15px');
}, 'Transitioning font-size on root affects rem units');
</script>

View file

@ -0,0 +1,18 @@
<!doctype html>
<title>replace / replaceSync on non-constructed stylesheet</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
<script src = '/resources/testharness.js'></script>
<script src = '/resources/testharnessreport.js'></script>
<style>:root { background-color: lime }</style>
<script>
promise_test(async function(t) {
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "precondition")
let sheet = document.styleSheets[0];
assert_throws_dom("NotAllowedError", () => sheet.replaceSync(":root { background-color: red }"), "replaceSync on non-constructed sheet should throw");
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
await promise_rejects_dom(t, "NotAllowedError", sheet.replace(":root { background-color: red }"), "replace on non-constructed sheet should return a rejected promise");
assert_equals(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 255, 0)", "old sheet should still apply after replace");
});
</script>

View file

@ -1,5 +1,6 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: timeout=long
'use strict';

View file

@ -19,3 +19,7 @@ root. At the time when the test would otherwise have ended a `TestRendered`
event is emitted; test authors can use this event to perform modifications that
are guaranteed not to be batched with the initial paint. This matches the
behaviour of [reftests](reftests).
Note that crash tests **do not** need to include `testharness.js` or use any of
the [testharness API](testharness-api.md) (e.g. they do not need to declare a
`test(..)`).

View file

@ -1,4 +1,5 @@
<!DOCTYPE html>
<meta name="timeout" content="long">
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>

View file

@ -170,6 +170,13 @@ promise_test(async t => {
});
}, 'HTMLScriptElement fetches with a "script" Request.destination');
// audioworklet destination
//////////////////////
promise_test(async t => {
let audioContext = new frame.contentWindow.AudioContext();
await audioContext.audioWorklet.addModule("dummy?dest=audioworklet");
}, 'AudioWorklet module fetches with a "audioworklet" Request.destination');
// Style destination
////////////////////

View file

@ -0,0 +1,56 @@
<!doctype html>
<html>
<head>
<title>
Check COEP report are send for CacheStorage requests in DedicatedWorker
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js">
</script>
<script src="./resources/cache-storage-reporting.js"> </script>
</head>
<script>
promise_test(async (t) => {
const worker_url = local(encode(worker_path));
const iframe_url =
local(encode(iframe_path + header_coep + header_report_to));
dedicated_worker_script = `
(async function() {
const w = new Worker('${worker_url}');
w.postMessage(\`${eval_script}\`);
})();
`;
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(dedicated_worker_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on DedicatedWorker.")
promise_test(async (t) => {
const worker_url = local(encode(worker_path));
const iframe_url =
local(encode(iframe_path + header_coep_report_only + header_report_to));
dedicated_worker_script = `
(async function() {
const w = new Worker('${worker_url}');
w.postMessage(\`${eval_script}\`);
})();
`;
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(dedicated_worker_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on DedicatedWorker.")
</script>
</html>

View file

@ -0,0 +1,42 @@
<!doctype html>
<html>
<head>
<title>
Check COEP report are send for CacheStorage requests in Document.
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js">
</script>
<script src="./resources/cache-storage-reporting.js"></script>
</head>
<script>
promise_test(async (t) => {
const iframe_url =
local(encode(iframe_path + header_coep + header_report_to));
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(iframe_url.toString()));
}, "COEP support on document.")
promise_test(async (t) => {
const iframe_url =
local(encode(iframe_path + header_coep_report_only + header_report_to));
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(iframe_url.toString()));
}, "COEP-Report-Only support on document.")
</script>
</html>

View file

@ -0,0 +1,53 @@
<!doctype html>
<html>
<head>
<title>
Check COEP report are send for CacheStorage requests in ServiceWorker.
</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js">
</script>
<script src="./resources/cache-storage-reporting.js"></script>
</head>
<script>
promise_test(async (t) => {
const worker_url = local(encode(
worker_path + header_coep + header_report_to + header_service_worker_allowed
));
const reg =
await service_worker_unregister_and_register(t, worker_url, SW_SCOPE);
add_completion_callback(() => reg.unregister());
const worker = reg.installing || reg.waiting || reg.active;
reports = fetchReport();
worker.postMessage(eval_script);
const report = await reports;
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on ServiceWorker.")
promise_test(async (t) => {
const worker_url = local(encode(
worker_path + header_coep_report_only + header_report_to + header_service_worker_allowed
))
const reg =
await service_worker_unregister_and_register(t, worker_url, SW_SCOPE);
add_completion_callback(() => reg.unregister());
const worker = reg.installing || reg.waiting || reg.active;
reports = fetchReport();
worker.postMessage(eval_script);
const report = await reports;
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on ServiceWorker.")
</script>
</html>

View file

@ -0,0 +1,43 @@
<!doctype html>
<html>
<head>
<title>
Check COEP report are send for CacheStorage requests in DedicatedWorker
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js">
</script>
<script src="./resources/cache-storage-reporting.js"> </script>
</head>
<script>
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep + header_report_to));
const worker = new Worker(worker_url);
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on SharedWorker.")
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep_report_only + header_report_to));
const worker = new Worker(worker_url);
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on SharedWorker.")
</script>
</html>

View file

@ -1,237 +0,0 @@
<!doctype html>
<html>
<head>
<title> Check COEP report are send for CacheStorage requests</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js">
</script>
</head>
<script>
function remote(path) {
const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN;
return new URL(path, REMOTE_ORIGIN);
}
function local(path) {
return new URL(path, location.origin);
}
let encode = function(url) {
return encodeURI(url).replace(/\;/g,"%3B");
}
const resource_path = (new URL("./resources", location)).pathname;
const report_token= token();
const report_endpoint_url = local(resource_path + `/report.py?key=${report_token}`)
const endpoint =
{
"group":"endpoint",
"max_age":3600,
"endpoints":[{ "url":report_endpoint_url.toString() }]
};
let endpoint_string =
JSON.stringify(endpoint)
.replace(/,/g, "\\,")
.replace(/\(/g, "\\\(")
.replace(/\)/g, "\\\)=");
const header_report_to = `|header(report-to,${endpoint_string})`;
const header_coep =
'|header(Cross-Origin-Embedder-Policy,require-corp;report-to="endpoint")';
const header_coep_report_only =
'|header(Cross-Origin-Embedder-Policy-Report-Only,require-corp;report-to="endpoint")';
const SW_SCOPE = local(resource_path + "/");
const header_service_worker_allowed =
`|header(service-worker-allowed,${SW_SCOPE})`;
const iframe_path = resource_path + "/iframe.html?pipe=";
const worker_path = resource_path + "/universal-worker.js?pipe=";
const image_url = remote("/images/blue.png");
// This script attempt to load a COEP:require-corp CORP:undefined response from
// the CacheStorage.
//
// Executed from different context:
// - A Document
// - A ServiceWorker
// - A DedicatedWorker
// - A SharedWorker
//
// The context has either COEP or COEP-Report-Only defined.
const eval_script = `
(async function() {
try {
const cache = await caches.open('v1');
const request = new Request('${image_url}', { mode: 'no-cors' });
const response = await cache.match(request);
} catch(e) {
}
})()
`;
promise_setup(async (t) => {
const cache = await caches.open('v1');
const fetch_request = new Request(image_url, {mode: 'no-cors'});
const fetch_response = await fetch(fetch_request);
await cache.put(fetch_request, fetch_response);
}, "Setup: store a CORS:cross-origin COEP:none response into CacheStorage")
async function makeIframe(test, iframe_url) {
const iframe = document.createElement("iframe");
test.add_cleanup(() => iframe.remove());
iframe.src = iframe_url;
const iframe_loaded = new Promise(resolve => iframe.onload = resolve);
document.body.appendChild(iframe);
await iframe_loaded;
return iframe;
}
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
}
async function fetchReport() {
const fetch_report_path = resource_path + `/report.py?key=${report_token}`;
for(let i = 0; i<20; ++i) {
const response = await fetch(encode(fetch_report_path));
const reports = await response.json();
if (reports.length == 0) {
wait(200);
continue;
}
if (reports.length != 1)
throw "Too many reports received";
return reports[0];
}
throw "Report not send";
}
// Remove parts of the URL that are differ at runtime.
function normalize(url) {
url = new URL(url);
return url.origin + url.pathname;
}
promise_test(async (t) => {
const iframe_url =
local(encode(iframe_path + header_coep + header_report_to));
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(iframe_url.toString()));
}, "COEP support on document.")
promise_test(async (t) => {
const iframe_url =
local(encode(iframe_path + header_coep_report_only + header_report_to));
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(iframe_url.toString()));
}, "COEP-Report-Only support on document.")
promise_test(async (t) => {
const worker_url = local(encode(worker_path));
const iframe_url =
local(encode(iframe_path + header_coep + header_report_to));
dedicated_worker_script = `
(async function() {
const w = new Worker('${worker_url}');
w.postMessage(\`${eval_script}\`);
})();
`;
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(dedicated_worker_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on DedicatedWorker.")
promise_test(async (t) => {
const worker_url = local(encode(worker_path));
const iframe_url =
local(encode(iframe_path + header_coep_report_only + header_report_to));
dedicated_worker_script = `
(async function() {
const w = new Worker('${worker_url}');
w.postMessage(\`${eval_script}\`);
})();
`;
const iframe = await makeIframe(t, iframe_url);
iframe.contentWindow.postMessage(dedicated_worker_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on DedicatedWorker.")
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep + header_report_to));
const worker = new Worker(worker_url);
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on SharedWorker.")
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep_report_only + header_report_to));
const worker = new Worker(worker_url);
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on SharedWorker.")
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep + header_service_worker_allowed));
const reg =
await service_worker_unregister_and_register(t, worker_url, SW_SCOPE);
add_completion_callback(() => reg.unregister());
const worker = reg.installing || reg.waiting || reg.active;
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP support on ServiceWorker.")
promise_test(async (t) => {
const worker_url =
local(encode(worker_path + header_coep_report_only + header_service_worker_allowed))
const reg =
await service_worker_unregister_and_register(t, worker_url, SW_SCOPE);
add_completion_callback(() => reg.unregister());
const worker = reg.installing || reg.waiting || reg.active;
worker.postMessage(eval_script);
const report = await fetchReport();
assert_equals(report["body"]["blocked-url"], image_url.toString());
assert_equals(report["body"]["type"], "corp");
assert_equals(report["type"], "coep");
assert_equals(normalize(report["url"]), normalize(worker_url.toString()));
}, "COEP-Report-Only support on ServiceWorker.")
</script>
</html>

View file

@ -0,0 +1,104 @@
function remote(path) {
const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN;
return new URL(path, REMOTE_ORIGIN);
}
function local(path) {
return new URL(path, location.origin);
}
let encode = function(url) {
return encodeURI(url).replace(/\;/g,"%3B");
}
const resource_path = (new URL("./resources", location)).pathname;
const report_token= token();
const report_endpoint_url = local(resource_path + `/report.py?key=${report_token}`)
const endpoint =
{
"group":"endpoint",
"max_age":3600,
"endpoints":[{ "url":report_endpoint_url.toString() }]
};
let endpoint_string =
JSON.stringify(endpoint)
.replace(/,/g, "\\,")
.replace(/\(/g, "\\\(")
.replace(/\)/g, "\\\)=");
const header_report_to = `|header(report-to,${endpoint_string})`;
const header_coep =
'|header(Cross-Origin-Embedder-Policy,require-corp;report-to="endpoint")';
const header_coep_report_only =
'|header(Cross-Origin-Embedder-Policy-Report-Only,require-corp;report-to="endpoint")';
const SW_SCOPE = local(resource_path + "/");
const header_service_worker_allowed =
`|header(service-worker-allowed,${SW_SCOPE})`;
const iframe_path = resource_path + "/iframe.html?pipe=";
const worker_path = resource_path + "/universal-worker.js?pipe=";
const image_url = remote("/images/blue.png");
// This script attempt to load a COEP:require-corp CORP:undefined response from
// the CacheStorage.
//
// Executed from different context:
// - A Document
// - A ServiceWorker
// - A DedicatedWorker
// - A SharedWorker
//
// The context has either COEP or COEP-Report-Only defined.
const eval_script = `
(async function() {
try {
const cache = await caches.open('v1');
const request = new Request('${image_url}', { mode: 'no-cors' });
const response = await cache.match(request);
} catch(e) {
}
})()
`;
promise_setup(async (t) => {
const cache = await caches.open('v1');
const fetch_request = new Request(image_url, {mode: 'no-cors'});
const fetch_response = await fetch(fetch_request);
await cache.put(fetch_request, fetch_response);
}, "Setup: store a CORS:cross-origin COEP:none response into CacheStorage")
async function makeIframe(test, iframe_url) {
const iframe = document.createElement("iframe");
test.add_cleanup(() => iframe.remove());
iframe.src = iframe_url;
const iframe_loaded = new Promise(resolve => iframe.onload = resolve);
document.body.appendChild(iframe);
await iframe_loaded;
return iframe;
}
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
}
async function fetchReport() {
const fetch_report_path = resource_path + `/report.py?key=${report_token}`;
while(true) {
const response = await fetch(encode(fetch_report_path));
const reports = await response.json();
if (reports.length == 0) {
wait(200);
continue;
}
if (reports.length != 1)
throw "Too many reports received";
return reports[0];
}
throw "Report not send";
}
// Remove parts of the URL that are different at runtime.
function normalize(url) {
url = new URL(url);
return url.origin + url.pathname;
}

View file

@ -1,8 +1,9 @@
// This creates a serialized <script> element that is useful for blob/data/srcdoc-style tests.
function createScript(sameOrigin, crossOrigin, parent="parent", id="") {
function createScript(sameOrigin, crossOrigin, type="parent", id="") {
return `<script>
const data = { id: "${id}",
opener: !!window.opener,
origin: window.origin,
sameOriginNoCORPSuccess: false,
crossOriginNoCORPFailure: false };
@ -18,6 +19,14 @@ if ("${sameOrigin}" !== "null") {
records.push(record(fetch("${sameOrigin}/common/blank.html", { mode: "no-cors" }), "sameOriginNoCORPSuccess", true));
}
Promise.all(records).then(() => window.${parent}.postMessage(data, "*"));
Promise.all(records).then(() => {
// Using BroadcastChannel is useful for blob: URLs, which are always same-origin
if ("${type}" === "channel") {
const bc = new BroadcastChannel("${id}");
bc.postMessage(data);
} else {
window.${type}.postMessage(data, "*");
}
});
<\/script>`;
}

View file

@ -9,8 +9,9 @@
promise_test(t => {
const origins = get_host_info();
const id = `tut mir leid ${type}`;
const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "opener", id)], {type: "text/html"});
const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)], {type: "text/html"});
const blobURL = URL.createObjectURL(blob);
const bc = new BroadcastChannel(id);
if (type === "window.open()") {
const popup = window.open(blobURL);
@ -32,13 +33,18 @@
}
return new Promise(resolve => {
window.addEventListener("message", t.step_func(({ data }) => {
bc.onmessage = t.step_func(({ data }) => {
assert_equals(data.id, id);
assert_equals(data.origin, window.origin);
assert_true(data.sameOriginNoCORPSuccess, "Same-origin without CORP did not succeed");
assert_true(data.crossOriginNoCORPFailure, "Cross-origin without CORP did not fail");
if (type === "<a rel=noopener>") {
assert_false(data.opener);
} else {
assert_true(data.opener);
}
resolve();
}));
});
});
}, `COOP+COEP blob URL popup: ${type}`);
});

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<style>
* {
margin: 0;
}
</style>
<html class="reftest-wait" style="overflow: hidden">
<head>
<title>Images with loading='lazy' load under subpixel-offset clips</title>
<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
<link rel="help" href="https://html.spec.whatwg.org/#lazy-loading-attributes">
</head>
<div style="height: 3.7499995rem; "></div>
<div style="position: relative; font-size: 0; background: lightblue">
<img id=target loading="lazy" data-sizes="auto" src="resources/image.png"
title="" width="1600">
</div>
</html>
<script src="/common/reftest-wait.js"></script>
<script>
target.onload = takeScreenshot;
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<style>
* {
margin: 0;
}
</style>
<html class="reftest-wait" style="overflow: hidden">
<head>
<title>Images with loading='lazy' load under subpixel-offset clips</title>
<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
<link rel="help" href="https://html.spec.whatwg.org/#lazy-loading-attributes">
<link rel="match" href="image-loading-subpixel-clip-ref.html">
</head>
<div style="height: 3.7499995rem"></div>
<div style="overflow: hidden">
<div style="position: relative; font-size: 0; background: lightblue">
<img id=target loading="lazy" data-sizes="auto" src="resources/image.png"
title="" width="1600">
</div>
</div>
</html>
<script src="/common/reftest-wait.js"></script>
<script>
target.onload = takeScreenshot;
</script>

Some files were not shown because too many files have changed in this diff Show more