mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Update web-platform-tests to revision 2d42384cf21efd71843295d319c1bab85b3acf4a
This commit is contained in:
parent
f2b224d610
commit
e851ef0cd2
1014 changed files with 5653 additions and 1590 deletions
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,4 @@
|
||||||
|
[hittest-overlapping-margin.html]
|
||||||
|
[Flexboxes should perform hit testing in reverse paint order for overlapping elements: negative margin case (crbug.com/844505)]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hittest-overlapping-relative.html]
|
||||||
|
[Flexboxes should perform hit testing in reverse paint order for overlapping elements: relative case (crbug.com/844505)]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -332,3 +332,6 @@
|
||||||
[Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
|
[Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Matching font-weight: '430' should prefer '500' over '400 425']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[tab-size-spacing-001.html]
|
||||||
|
expected: FAIL
|
19
tests/wpt/metadata/css/cssom/cssom-pagerule.html.ini
Normal file
19
tests/wpt/metadata/css/cssom/cssom-pagerule.html.ini
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
[cssom-pagerule.html]
|
||||||
|
[Set selectorText to named page after rule was removed]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Sanity checks]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Page selector is initially the empty string]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Set selectorText to :left pseudo page]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Set selectorText to named page]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Set selectorText to named page with :first pseudo page]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[prefers-color-scheme.html]
|
||||||
|
[prefers-color-scheme]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[HTMLCollection-delete.html]
|
||||||
|
[Strict name]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Strict id]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[pick the first with activation behavior <a href>]
|
[pick the first with activation behavior <a href>]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[event state during post-click handling]
|
[event state during post-click handling]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
|
@ -128,6 +128,99 @@
|
||||||
[encodeInto() with A and destination length 10, offset 4, filler random]
|
[encodeInto() with A and destination length 10, offset 4, filler random]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() and a detached output buffer]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[encodeInto.any.worker.html]
|
[encodeInto.any.worker.html]
|
||||||
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 128]
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 128]
|
||||||
|
@ -259,3 +352,96 @@
|
||||||
[encodeInto() with A and destination length 10, offset 4, filler random]
|
[encodeInto() with A and destination length 10, offset 4, filler random]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() and a detached output buffer]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with A<> and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with <20>A<EFBFBD>A¥Hi and destination length 10, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with ¥¥ and destination length 4, offset 0, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 0, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler 0]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆A and destination length 3, offset 4, filler random]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[encodeInto() with 𝌆 and destination length 4, offset 4, filler 128]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,15 @@
|
||||||
[TextDecoderStream interface: attribute writable]
|
[TextDecoderStream interface: attribute writable]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: calling encodeInto(USVString, Uint8Array) on new TextEncoder() with too few arguments must throw TypeError]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: new TextEncoder() must inherit property "encodeInto(USVString, Uint8Array)" with the proper type]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: operation encodeInto(USVString, Uint8Array)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[idlharness.any.worker.html]
|
[idlharness.any.worker.html]
|
||||||
[Untitled]
|
[Untitled]
|
||||||
|
@ -141,6 +150,15 @@
|
||||||
[TextDecoderStream interface: attribute writable]
|
[TextDecoderStream interface: attribute writable]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: calling encodeInto(USVString, Uint8Array) on new TextEncoder() with too few arguments must throw TypeError]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: new TextEncoder() must inherit property "encodeInto(USVString, Uint8Array)" with the proper type]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[TextEncoder interface: operation encodeInto(USVString, Uint8Array)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[idlharness.any.serviceworker.html]
|
[idlharness.any.serviceworker.html]
|
||||||
[idlharness]
|
[idlharness]
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
|
|
||||||
[single-byte-decoder.html?XMLHttpRequest]
|
[single-byte-decoder.html?XMLHttpRequest]
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,59 @@
|
||||||
[decode-bad-chunks]
|
[decode-bad-chunks]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type undefined should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type array should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type null should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type object, not BufferSource should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type numeric should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type SharedArrayBuffer should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type shared Uint8Array should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[decode-bad-chunks.any.worker.html]
|
[decode-bad-chunks.any.worker.html]
|
||||||
[decode-bad-chunks]
|
[decode-bad-chunks]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type undefined should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type array should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type null should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type object, not BufferSource should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type numeric should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type SharedArrayBuffer should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[chunk of type shared Uint8Array should error the stream]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[decode-bad-chunks.any.serviceworker.html]
|
[decode-bad-chunks.any.serviceworker.html]
|
||||||
[decode-bad-chunks]
|
[decode-bad-chunks]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[decode-bad-chunks.any.sharedworker.html]
|
[decode-bad-chunks.any.sharedworker.html]
|
||||||
[decode-bad-chunks]
|
[decode-bad-chunks]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
[decode-utf8]
|
[decode-utf8]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[decode-utf8.any.sharedworker.html]
|
[decode-utf8.any.sharedworker.html]
|
||||||
[decode-utf8]
|
[decode-utf8]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
@ -20,6 +21,12 @@
|
||||||
[an initial empty chunk should be ignored]
|
[an initial empty chunk should be ignored]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[decoding a transferred Uint8Array chunk should give no output]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[decoding a transferred ArrayBuffer chunk should give no output]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[decode-utf8.any.worker.html]
|
[decode-utf8.any.worker.html]
|
||||||
[decoding one UTF-8 chunk should give one output string]
|
[decoding one UTF-8 chunk should give one output string]
|
||||||
|
@ -34,3 +41,9 @@
|
||||||
[an initial empty chunk should be ignored]
|
[an initial empty chunk should be ignored]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[decoding a transferred Uint8Array chunk should give no output]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[decoding a transferred ArrayBuffer chunk should give no output]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_3.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[traverse_the_history_2.html]
|
[traverse_the_history_5.html]
|
||||||
[Multiple history traversals, last would be aborted]
|
[Multiple history traversals, last would be aborted]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
|
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
|
||||||
expected: TIMEOUT
|
expected: FAIL
|
||||||
|
|
||||||
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
|
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
@ -13,3 +13,12 @@
|
||||||
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
|
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[picture: source (max-width:500px) broken image, img valid image, resize to narrow]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[img (srcset 1 cand) valid image, resize to narrow]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[picture: same URL in source (max-width:500px) and img, resize to narrow]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
[non-active-document.html]
|
|
||||||
[DOMParser]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[createHTMLDocument]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<template>]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[toggleEvent.html]
|
||||||
|
[Calling open twice on 'details' fires only one toggle event]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
[PerformanceObserver interface: attribute supportedEntryTypes]
|
[PerformanceObserver interface: attribute supportedEntryTypes]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[PerformanceMark interface: attribute detail]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[PerformanceMark interface: mark must inherit property "detail" with the proper type]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[idlharness.any.html]
|
[idlharness.any.html]
|
||||||
[Untitled]
|
[Untitled]
|
||||||
|
@ -48,6 +54,12 @@
|
||||||
[PerformanceObserver interface: attribute supportedEntryTypes]
|
[PerformanceObserver interface: attribute supportedEntryTypes]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[PerformanceMark interface: attribute detail]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[PerformanceMark interface: mark must inherit property "detail" with the proper type]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
[idlharness.https.any.serviceworker.html]
|
[idlharness.https.any.serviceworker.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[resource_connection_reuse.https.html]
|
||||||
|
[There should be 2 PerformanceEntries]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[paint_timing.html]
|
|
||||||
[Performance entries observer]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that AnimationWorklet inside frames with different origin causes new global scopes</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.redbox {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: #ff0000;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="target" class="redbox"></div>
|
||||||
|
|
||||||
|
<script id="main_worklet" type="text/worklet">
|
||||||
|
registerAnimator("duplicate_animator", class {
|
||||||
|
animate(currentTime, effect) {
|
||||||
|
effect.localTime = 500;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async_test(t => {
|
||||||
|
// Wait for iframe to load and start its animations.
|
||||||
|
window.onmessage = function(msg) {
|
||||||
|
window.requestAnimationFrame( _ => {
|
||||||
|
run_test(msg.data);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create and load the iframe to avoid racy cases.
|
||||||
|
var iframe = document.createElement('iframe');
|
||||||
|
iframe.src = 'resources/animator-iframe.html';
|
||||||
|
document.body.appendChild(iframe);
|
||||||
|
|
||||||
|
function run_test(data) {
|
||||||
|
runInAnimationWorklet(
|
||||||
|
document.getElementById('main_worklet').textContent
|
||||||
|
).then(_ => {
|
||||||
|
// Create an animation for duplicate animator.
|
||||||
|
const target = document.getElementById('target');
|
||||||
|
const animation = new WorkletAnimation('duplicate_animator', new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 }));
|
||||||
|
animation.play();
|
||||||
|
|
||||||
|
assert_equals(data, '0.4');
|
||||||
|
waitTwoAnimationFrames(t.step_func_done(() => {
|
||||||
|
assert_equals(getComputedStyle(target).opacity, '0.5');
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 'Both main frame and iframe should update the opacity of their target');
|
||||||
|
</script>
|
33
tests/wpt/web-platform-tests/animation-worklet/common.js
Normal file
33
tests/wpt/web-platform-tests/animation-worklet/common.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function registerPassthroughAnimator() {
|
||||||
|
return runInAnimationWorklet(`
|
||||||
|
registerAnimator('passthrough', class {
|
||||||
|
animate(currentTime, effect) { effect.localTime = currentTime; }
|
||||||
|
});
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function runInAnimationWorklet(code) {
|
||||||
|
return CSS.animationWorklet.addModule(
|
||||||
|
URL.createObjectURL(new Blob([code], {type: 'text/javascript'}))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function waitForAnimationFrames(count, callback) {
|
||||||
|
function rafCallback() {
|
||||||
|
if (count <= 0) {
|
||||||
|
callback();
|
||||||
|
} else {
|
||||||
|
count -= 1;
|
||||||
|
window.requestAnimationFrame(rafCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rafCallback();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Wait for two main thread frames to guarantee that compositor has produced
|
||||||
|
// at least one frame. Note that this is a Chrome-only concept.
|
||||||
|
function waitTwoAnimationFrames(callback) {
|
||||||
|
waitForAnimationFrames(2, callback);
|
||||||
|
};
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
.greenbox {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: #00ff00;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="../common.js"></script>
|
||||||
|
|
||||||
|
<script id="iframe_worklet" type="text/worklet">
|
||||||
|
registerAnimator("iframe_animator", class {
|
||||||
|
animate(currentTime, effect) {
|
||||||
|
effect.localTime = 600;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
registerAnimator("duplicate_animator", class {
|
||||||
|
animate(currentTime, effect) {
|
||||||
|
effect.localTime = 800;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="iframe_target" class="greenbox"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
runInAnimationWorklet(
|
||||||
|
document.getElementById('iframe_worklet').textContent
|
||||||
|
).then(_ => {
|
||||||
|
const target = document.getElementById('iframe_target');
|
||||||
|
// Only create an animation for iframe_animator.
|
||||||
|
const effect = new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 });
|
||||||
|
const animation = new WorkletAnimation('iframe_animator', effect);
|
||||||
|
animation.play();
|
||||||
|
waitTwoAnimationFrames( _ => {
|
||||||
|
window.parent.postMessage(getComputedStyle(target).opacity, '*');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,175 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Tests that ScrollTimeline works properly with writing mode and directionality</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
|
||||||
|
<script id="worklet_code" type="text/worklet">
|
||||||
|
registerAnimator("test_animator", class {
|
||||||
|
animate(currentTime, effect) {
|
||||||
|
effect.localTime = currentTime;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Creates a DOM structure like:
|
||||||
|
// - container
|
||||||
|
// - box {100x100}
|
||||||
|
// - scroller {100x100, writing-mode, direction}
|
||||||
|
// - contents
|
||||||
|
function createTestDOM(x_scroll_axis, writing_mode, direction) {
|
||||||
|
const elements = {};
|
||||||
|
|
||||||
|
elements.container = document.createElement('div');
|
||||||
|
|
||||||
|
elements.box = document.createElement('div');
|
||||||
|
elements.box.style.height = '100px';
|
||||||
|
elements.box.style.width = '100px';
|
||||||
|
|
||||||
|
elements.scroller = document.createElement('div');
|
||||||
|
elements.scroller.style.height = '100px';
|
||||||
|
elements.scroller.style.width = '100px';
|
||||||
|
if (x_scroll_axis)
|
||||||
|
elements.scroller.style.overflowX = 'scroll';
|
||||||
|
else
|
||||||
|
elements.scroller.style.overflowY = 'scroll';
|
||||||
|
elements.scroller.style.direction = direction;
|
||||||
|
elements.scroller.style.writingMode = writing_mode;
|
||||||
|
|
||||||
|
// Callers don't need access to this.
|
||||||
|
const contents = document.createElement('div');
|
||||||
|
contents.style.height = x_scroll_axis ? '100%' : '1000px';
|
||||||
|
contents.style.width = x_scroll_axis ? '1000px' : '100%';
|
||||||
|
|
||||||
|
elements.scroller.appendChild(contents);
|
||||||
|
elements.container.appendChild(elements.box);
|
||||||
|
elements.container.appendChild(elements.scroller);
|
||||||
|
document.body.appendChild(elements.container);
|
||||||
|
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createAndPlayTestAnimation(elements, timeline_orientation) {
|
||||||
|
const effect = new KeyframeEffect(
|
||||||
|
elements.box,
|
||||||
|
[{transform: 'translateY(0)'}, {transform: 'translateY(200px)'}], {
|
||||||
|
duration: 1000,
|
||||||
|
});
|
||||||
|
|
||||||
|
const timeline = new ScrollTimeline({
|
||||||
|
scrollSource: elements.scroller,
|
||||||
|
timeRange: 1000,
|
||||||
|
orientation: timeline_orientation
|
||||||
|
});
|
||||||
|
const animation = new WorkletAnimation('test_animator', effect, timeline);
|
||||||
|
animation.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
setup(setupAndRegisterTests, {explicit_done: true});
|
||||||
|
|
||||||
|
function setupAndRegisterTests() {
|
||||||
|
const worklet_code = document.getElementById('worklet_code').textContent;
|
||||||
|
runInAnimationWorklet(worklet_code).then(() => {
|
||||||
|
// Note that block horizontal-tb is tested implicitly in the basic
|
||||||
|
// ScrollTimeline tests (as it is the default).
|
||||||
|
async_test(
|
||||||
|
block_vertical_lr,
|
||||||
|
'A block ScrollTimeline should produce the correct current time for vertical-lr');
|
||||||
|
async_test(
|
||||||
|
block_vertical_rl,
|
||||||
|
'A block ScrollTimeline should produce the correct current time for vertical-rl');
|
||||||
|
// Again, inline for horizontal-tb and direction: ltr is the default
|
||||||
|
// inline mode and so is tested elsewhere.
|
||||||
|
async_test(
|
||||||
|
inline_horizontal_tb_rtl,
|
||||||
|
'An inline ScrollTimeline should produce the correct current time for horizontal-tb and direction: rtl');
|
||||||
|
async_test(
|
||||||
|
inline_vertical_writing_mode_ltr,
|
||||||
|
'An inline ScrollTimeline should produce the correct current time for vertical writing mode');
|
||||||
|
async_test(
|
||||||
|
inline_vertical_writing_mode_rtl,
|
||||||
|
'An inline ScrollTimeline should produce the correct current time for vertical writing mode and direction: rtl');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function block_vertical_lr(t) {
|
||||||
|
const elements = createTestDOM(true, 'vertical-lr', 'ltr');
|
||||||
|
createAndPlayTestAnimation(elements, 'block');
|
||||||
|
|
||||||
|
// Move the scroller to the 25% point.
|
||||||
|
const maxScroll =
|
||||||
|
elements.scroller.scrollWidth - elements.scroller.clientWidth;
|
||||||
|
elements.scroller.scrollLeft = 0.25 * maxScroll;
|
||||||
|
|
||||||
|
waitForAnimationFrames(3, t.step_func_done(() => {
|
||||||
|
assert_equals(
|
||||||
|
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function block_vertical_rl(t) {
|
||||||
|
const elements = createTestDOM(true, 'vertical-rl', 'ltr');
|
||||||
|
createAndPlayTestAnimation(elements, 'block');
|
||||||
|
|
||||||
|
// Move the scroller to the 75% point. Since it is vertical-rl, this is
|
||||||
|
// equivalent to the 25% point for the ScrollTimeline.
|
||||||
|
const maxScroll =
|
||||||
|
elements.scroller.scrollWidth - elements.scroller.clientWidth;
|
||||||
|
elements.scroller.scrollLeft = 0.75 * maxScroll;
|
||||||
|
|
||||||
|
waitForAnimationFrames(3, t.step_func_done(() => {
|
||||||
|
assert_equals(
|
||||||
|
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function inline_horizontal_tb_rtl(t) {
|
||||||
|
const elements = createTestDOM(true, 'horizontal-tb', 'rtl');
|
||||||
|
createAndPlayTestAnimation(elements, 'inline');
|
||||||
|
|
||||||
|
// Move the scroller to the 75% point. Since it is direction: rtl, this is
|
||||||
|
// equivalent to the 25% point for the ScrollTimeline.
|
||||||
|
const maxScroll =
|
||||||
|
elements.scroller.scrollWidth - elements.scroller.clientWidth;
|
||||||
|
elements.scroller.scrollLeft = 0.75 * maxScroll;
|
||||||
|
|
||||||
|
waitForAnimationFrames(3, t.step_func_done(() => {
|
||||||
|
assert_equals(
|
||||||
|
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function inline_vertical_writing_mode_ltr(t) {
|
||||||
|
const elements = createTestDOM(false, 'vertical-lr', 'ltr');
|
||||||
|
createAndPlayTestAnimation(elements, 'inline');
|
||||||
|
|
||||||
|
// Move the scroller to the 25% point.
|
||||||
|
const maxScroll =
|
||||||
|
elements.scroller.scrollHeight - elements.scroller.clientHeight;
|
||||||
|
elements.scroller.scrollTop = 0.25 * maxScroll;
|
||||||
|
|
||||||
|
waitForAnimationFrames(3, t.step_func_done(() => {
|
||||||
|
assert_equals(
|
||||||
|
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function inline_vertical_writing_mode_rtl(t) {
|
||||||
|
const elements = createTestDOM(false, 'vertical-lr', 'rtl');
|
||||||
|
createAndPlayTestAnimation(elements, 'inline');
|
||||||
|
|
||||||
|
// Move the scroller to the 75% point. Since this is a vertical writing mode
|
||||||
|
// and direction: rtl, this is 25% of the ScrollTimeline currentTime.
|
||||||
|
const maxScroll =
|
||||||
|
elements.scroller.scrollHeight - elements.scroller.clientHeight;
|
||||||
|
elements.scroller.scrollTop = 0.75 * maxScroll;
|
||||||
|
|
||||||
|
waitForAnimationFrames(3, t.step_func_done(() => {
|
||||||
|
assert_equals(
|
||||||
|
getComputedStyle(elements.box).transform, 'matrix(1, 0, 0, 1, 0, 50)');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -0,0 +1,107 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that worklet animation works with different fill modes</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.target {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function CreateTest(target, effect, verify, test_name) {
|
||||||
|
async_test(t => {
|
||||||
|
runInAnimationWorklet(
|
||||||
|
document.getElementById('simple_animate').textContent
|
||||||
|
).then(_ => {
|
||||||
|
const animation = new WorkletAnimation('test_animator', effect);
|
||||||
|
animation.play();
|
||||||
|
|
||||||
|
waitTwoAnimationFrames(() => {
|
||||||
|
// waitTwoAnimationFrames guarantees a compositor frame that could update
|
||||||
|
// the opacity value in the worklet. Meanwhile, getComputedStyle needs an
|
||||||
|
// extra frame to fetch the updated value.
|
||||||
|
window.requestAnimationFrame(t.step_func_done(() => {
|
||||||
|
verify();
|
||||||
|
animation.cancel();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, test_name);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script id="simple_animate" type="text/worklet">
|
||||||
|
registerAnimator("test_animator", class {
|
||||||
|
animate(currentTime, effect) {
|
||||||
|
effect.localTime = 2000;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="target1" class='target'></div>
|
||||||
|
<div id="target2" class='target'></div>
|
||||||
|
<div id="target3" class='target'></div>
|
||||||
|
<div id="target4" class='target'></div>
|
||||||
|
<div id="target5" class='target'></div>
|
||||||
|
<div id="target6" class='target'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const effect_with_fill_forwards = new KeyframeEffect(
|
||||||
|
target1,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 1000, fill: 'forwards' });
|
||||||
|
CreateTest(target1,
|
||||||
|
effect_with_fill_forwards,
|
||||||
|
function() { assert_equals(getComputedStyle(target1).opacity, '0'); },
|
||||||
|
"Effect with fill mode forwards in after phase produces output that is equivalent to effect's end value.");
|
||||||
|
|
||||||
|
const effect_without_fill_forwards = new KeyframeEffect(
|
||||||
|
target2,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 1000 });
|
||||||
|
CreateTest(target2,
|
||||||
|
effect_without_fill_forwards,
|
||||||
|
function() { assert_equals(getComputedStyle(target2).opacity, '1'); },
|
||||||
|
'Effect without fill mode forwards in after phase (local time beyond end) should deactivate the animation.');
|
||||||
|
|
||||||
|
const effect_without_fill_forwards_at_end = new KeyframeEffect(
|
||||||
|
target3,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 2000 });
|
||||||
|
CreateTest(target3,
|
||||||
|
effect_without_fill_forwards_at_end,
|
||||||
|
function() { assert_equals(getComputedStyle(target3).opacity, '1'); },
|
||||||
|
'Effect without fill mode in after phase (local time at end) should deactivate the animation.');
|
||||||
|
|
||||||
|
const effect_with_fill_backwards = new KeyframeEffect(
|
||||||
|
target4,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 1000, delay: 2001, fill: 'backwards' });
|
||||||
|
CreateTest(target4,
|
||||||
|
effect_with_fill_backwards,
|
||||||
|
function() { assert_equals(getComputedStyle(target4).opacity, '0.5'); },
|
||||||
|
"Effect with fill mode backwards in before phase produces output that is equivalent to effect's start value.");
|
||||||
|
|
||||||
|
const effect_without_fill_backwards = new KeyframeEffect(
|
||||||
|
target5,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 1000, delay: 2001 });
|
||||||
|
CreateTest(target5,
|
||||||
|
effect_without_fill_backwards,
|
||||||
|
function() { assert_equals(getComputedStyle(target5).opacity, '1'); },
|
||||||
|
'Effect without fill mode backwards in before phase (local time before start) should deactivate the animation.');
|
||||||
|
|
||||||
|
const effect_without_fill_backwards_at_start = new KeyframeEffect(
|
||||||
|
target6,
|
||||||
|
{ opacity: [0.5, 0] },
|
||||||
|
{ duration: 1000, delay: 2000 });
|
||||||
|
CreateTest(target6,
|
||||||
|
effect_without_fill_backwards_at_start,
|
||||||
|
function() { assert_equals(getComputedStyle(target6).opacity, '0.5'); },
|
||||||
|
'Effect with local time at start point is in active phase.');
|
||||||
|
</script>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that worklet animation with invalid effect cannot be played</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="target"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
registerPassthroughAnimator();
|
||||||
|
let playFunc = function() {
|
||||||
|
let effect = new KeyframeEffect(
|
||||||
|
document.getElementById('target'),
|
||||||
|
[
|
||||||
|
// No keyframe.
|
||||||
|
],
|
||||||
|
{ duration: 1000 }
|
||||||
|
);
|
||||||
|
let animation = new WorkletAnimation('passthrough', effect);
|
||||||
|
animation.play();
|
||||||
|
}
|
||||||
|
assert_throws('InvalidStateError', playFunc);
|
||||||
|
}, 'Trying to play invalid worklet animation should throw an exception.');
|
||||||
|
</script>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="form-action 'none'; script-src 'self' 'nonce-noncynonce'; connect-src 'self';">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<form action='/content-security-policy/support/postmessage-pass-to-opener.html'
|
||||||
|
id='form_id'
|
||||||
|
target="_blank">
|
||||||
|
<input type="submit" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Test that "form-action 'none'" doesn't create a violation report if the event was prevented.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script nonce='noncynonce'>
|
||||||
|
async_test(t => {
|
||||||
|
document.addEventListener('securitypolicyviolation', function(e) {
|
||||||
|
assert_unreached('Form submission was blocked.');
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('message', function(event) {
|
||||||
|
assert_unreached('Form submission was blocked.');
|
||||||
|
})
|
||||||
|
|
||||||
|
window.addEventListener("load", function() {
|
||||||
|
let form = document.getElementById("form_id");
|
||||||
|
form.addEventListener("submit", e => {
|
||||||
|
e.preventDefault();
|
||||||
|
setTimeout(() => {
|
||||||
|
t.done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
// clicking the input is used here as form.submit() will submit a form without an event and should also be blocked.
|
||||||
|
form.querySelector("input").click();
|
||||||
|
});
|
||||||
|
}, "The form submission should not be blocked by when javascript prevents the load.");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</html>
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
{
|
{
|
||||||
color: green;
|
color: green;
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
|
line-height: 2;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
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