mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
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:
commit
d5e5414be3
119 changed files with 4676 additions and 523 deletions
|
@ -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
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[animation-base-response-001.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,4 @@
|
|||
[animation-base-response-002.html]
|
||||
[Animated font-size on root affects rem units]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[animation-important-002.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[stretch-obeys-min-max-002.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[transition-base-response-001.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,4 @@
|
|||
[transition-base-response-002.html]
|
||||
[Transitioning font-size on root affects rem units]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -17,6 +17,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[CSSStyleSheet-constructable-replace-on-regular-sheet.html]
|
||||
[replace / replaceSync on non-constructed stylesheet]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[image-loading-subpixel-clip.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,4 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[realtimeanalyser-fft-scaling.html]
|
||||
expected: TIMEOUT
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
|
@ -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": [
|
||||
|
|
|
@ -239,3 +239,6 @@
|
|||
[BluetoothRemoteGATTService interface: operation getCharacteristics(optional BluetoothCharacteristicUUID)]
|
||||
expected: FAIL
|
||||
|
||||
[BluetoothDevice interface: operation watchAdvertisements(optional WatchAdvertisementsOptions)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[animation-base-response-001.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,4 @@
|
|||
[animation-base-response-002.html]
|
||||
[Animated font-size on root affects rem units]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[animation-important-002.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[stretch-obeys-min-max-002.html]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[transition-base-response-001.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,4 @@
|
|||
[transition-base-response-002.html]
|
||||
[Transitioning font-size on root affects rem units]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[elementFromPoint-001.html]
|
||||
[CSSOM View - 5 - extensions to the Document interface]
|
||||
expected: FAIL
|
||||
|
|
@ -21,6 +21,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[CSSStyleSheet-constructable-replace-on-regular-sheet.html]
|
||||
[replace / replaceSync on non-constructed stylesheet]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[image-loading-subpixel-clip.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,4 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
// META: global=window,worker
|
||||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
// META: timeout=long
|
||||
|
||||
idl_test(
|
||||
['IndexedDB'],
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 '(<custom-ident\>*)' 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>
|
||||
|
|
@ -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 '(<custom-ident\>*)' 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>
|
||||
|
|
@ -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 '(<custom-ident\>*)' 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>
|
||||
|
|
@ -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 '(<custom-ident\>*)' 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>
|
||||
|
|
@ -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>?
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,5 +1,6 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
// META: timeout=long
|
||||
|
||||
'use strict';
|
||||
|
||||
|
|
|
@ -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(..)`).
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<meta name="timeout" content="long">
|
||||
<body>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
|
|
|
@ -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
|
||||
////////////////////
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -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>`;
|
||||
}
|
||||
|
|
|
@ -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}`);
|
||||
});
|
||||
|
|
|
@ -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>
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue