mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Update web-platform-tests to revision c583bcd7eb30f38cb2d673031cde245776f1da5a
This commit is contained in:
parent
ba1ed11ced
commit
bd791500b2
107 changed files with 2870 additions and 469 deletions
File diff suppressed because it is too large
Load diff
|
@ -326,3 +326,12 @@
|
|||
[Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-weight: '500' should prefer '400' over '350 399']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
|
||||
expected: FAIL
|
||||
|
||||
[Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[registered-property-invalidation-001.https.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,2 @@
|
|||
[registered-property-invalidation-002.https.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,2 @@
|
|||
[letter-spacing-end-of-line-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[letter-spacing-nesting-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[overflow-wrap-break-word-005.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[trailing-ideographic-space-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[trailing-ideographic-space-002.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[trailing-ideographic-space-004.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[word-break-keep-all-005.html]
|
||||
expected: FAIL
|
|
@ -509,7 +509,7 @@
|
|||
|
||||
|
||||
[single-byte-decoder.html?XMLHttpRequest]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -535,7 +535,91 @@
|
|||
expected: FAIL
|
||||
|
||||
[windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1258: cp1258 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1253: x-cp1253 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1256: cp1256 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: iso_8859-9 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: iso88599 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: iso-8859-9 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1258: x-cp1258 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1257: windows-1257 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: windows-1254 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[x-mac-cyrillic: x-mac-ukrainian (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: csisolatin5 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1257: cp1257 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1255: x-cp1255 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1257: x-cp1257 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: cp1254 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: iso8859-9 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1253: windows-1253 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1253: cp1253 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: l5 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: x-cp1254 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: latin5 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1255: cp1255 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1254: iso-ir-148 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1258: windows-1258 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1255: windows-1255 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1256: x-cp1256 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[x-mac-cyrillic: x-mac-cyrillic (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
[windows-1256: windows-1256 (XMLHttpRequest)]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[single-byte-decoder.html?TextDecoder]
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[no_window_open_when_term_nesting_level_nonzero.window.html]
|
||||
[no popups from synchronously reachable window]
|
||||
expected: FAIL
|
||||
|
||||
[no popups with frame navigation]
|
||||
expected: FAIL
|
||||
|
||||
[no popups from another synchronously reachable window]
|
||||
expected: FAIL
|
||||
|
|
@ -278,3 +278,12 @@
|
|||
[<br> ("<br>")]
|
||||
expected: FAIL
|
||||
|
||||
[text-transform handles Turkish casing ("<div><div lang='tr' style='text-transform:uppercase'>i ı")]
|
||||
expected: FAIL
|
||||
|
||||
[No tab on table-cell itself ("<table><tr><td id=target>abc</td><td>def</td>")]
|
||||
expected: FAIL
|
||||
|
||||
[No newline on table-row itself ("<table><tr id=target><td>abc</td><td>def</td></tr><tr id=target><td>ghi</td><td>jkl</td></tr>")]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -5,5 +5,5 @@
|
|||
expected: NOTRUN
|
||||
|
||||
[calling play() on a sufficiently long video should trigger timeupdate event]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -8,8 +8,26 @@
|
|||
expected: FAIL
|
||||
|
||||
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
|
||||
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 wide]
|
||||
expected: FAIL
|
||||
|
||||
[picture: same URL in source (max-width:500px) and img, resize to wide]
|
||||
expected: FAIL
|
||||
|
||||
[img (srcset 1 cand) valid image, resize to narrow]
|
||||
expected: FAIL
|
||||
|
||||
[picture: source (max-width:500px) valid image, img broken image, resize to wide]
|
||||
expected: FAIL
|
||||
|
||||
[picture: same URL in source (max-width:500px) and img, resize to narrow]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
[parse-a-sizes-attribute-quirks-mode.html]
|
||||
[<img srcset="/images/green-1x1.png?e38b 50w, /images/green-16x16.png?e38b 51w" sizes="(min-width:max(-200vw, 0)) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f49b 50w, /images/green-16x16.png?f49b 51w" sizes="(min-width:0) max(-200vw, 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f48a 50w, /images/green-16x16.png?f48a 51w" sizes="min(1px, 200vw"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e36b 50w, /images/green-16x16.png?e36b 51w" sizes="min(-100px, 1px)"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e62 50w, /images/green-16x16.png?e62 51w" sizes="(min-width:0) or unknown-general-enclosed(foo) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e59 50w, /images/green-16x16.png?e59 51w" sizes="(min-width:0) or (min-width:unknown-mf-value) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e38 50w, /images/green-16x16.png?e38 51w" sizes="(min-width:calc(0)) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e60 50w, /images/green-16x16.png?e60 51w" sizes="(min-width:0) or (min-width:-1px) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f49a 50w, /images/green-16x16.png?f49a 51w" sizes="(min-width:0) min(1px, 200vw"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e38a 50w, /images/green-16x16.png?e38a 51w" sizes="(min-width:min(0, 200vw)) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e58 50w, /images/green-16x16.png?e58 51w" sizes="(min-width:0) or (unknown-mf-name) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e37a 50w, /images/green-16x16.png?e37a 51w" sizes="(min-width:0) min(1px, 100px)"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f48b 50w, /images/green-16x16.png?f48b 51w" sizes="max(-200vw, 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e106 50w, /images/green-16x16.png?e106 51w" sizes="(min-width:0) or (unknown-general-enclosed !) 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e61 50w, /images/green-16x16.png?e61 51w" sizes="(min-width:0) or (unknown "general-enclosed") 1px"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e37b 50w, /images/green-16x16.png?e37b 51w" sizes="(min-width:0) max(-100px, 1px)"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e36a 50w, /images/green-16x16.png?e36a 51w" sizes="min(1px, 100px)"> ref sizes="1px" (quirks mode)]
|
||||
expected: FAIL
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
[parse-a-sizes-attribute-width-1000px.html]
|
||||
[<img srcset="/images/green-1x1.png?e37a 50w, /images/green-16x16.png?e37a 51w" sizes="(min-width:0) min(1px, 100px)"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f49b 50w, /images/green-16x16.png?f49b 51w" sizes="(min-width:0) max(-200vw, 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e38b 50w, /images/green-16x16.png?e38b 51w" sizes="(min-width:max(-200vw, 0)) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e60 50w, /images/green-16x16.png?e60 51w" sizes="(min-width:0) or (min-width:-1px) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e37b 50w, /images/green-16x16.png?e37b 51w" sizes="(min-width:0) max(-100px, 1px)"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e38a 50w, /images/green-16x16.png?e38a 51w" sizes="(min-width:min(0, 200vw)) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e61 50w, /images/green-16x16.png?e61 51w" sizes="(min-width:0) or (unknown "general-enclosed") 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e36b 50w, /images/green-16x16.png?e36b 51w" sizes="min(-100px, 1px)"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f48b 50w, /images/green-16x16.png?f48b 51w" sizes="max(-200vw, 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f48a 50w, /images/green-16x16.png?f48a 51w" sizes="min(1px, 200vw"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e38 50w, /images/green-16x16.png?e38 51w" sizes="(min-width:calc(0)) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e58 50w, /images/green-16x16.png?e58 51w" sizes="(min-width:0) or (unknown-mf-name) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e62 50w, /images/green-16x16.png?e62 51w" sizes="(min-width:0) or unknown-general-enclosed(foo) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e59 50w, /images/green-16x16.png?e59 51w" sizes="(min-width:0) or (min-width:unknown-mf-value) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e106 50w, /images/green-16x16.png?e106 51w" sizes="(min-width:0) or (unknown-general-enclosed !) 1px"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?e36a 50w, /images/green-16x16.png?e36a 51w" sizes="min(1px, 100px)"> ref sizes="1px" (width:1000px)]
|
||||
expected: FAIL
|
||||
|
||||
[<img srcset="/images/green-1x1.png?f49a 50w, /images/green-16x16.png?f49a 51w" sizes="(min-width:0) min(1px, 200vw"> ref sizes="1px" (width:1000px)]
|
||||
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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[script-onerror-insertion-point-2.html]
|
||||
expected: TIMEOUT
|
|
@ -2,6 +2,3 @@
|
|||
[document.open() after parser is aborted]
|
||||
expected: FAIL
|
||||
|
||||
[async document.open() after parser is aborted]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -9,6 +9,3 @@
|
|||
[document.open should throw an InvalidStateError with XML document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
|
||||
expected: FAIL
|
||||
|
||||
[document.open should throw an InvalidStateError with XML document even when there is an active parser executing script]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -12,6 +12,3 @@
|
|||
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Verifies the resolution of performance.now() is at least 5 microseconds.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,283 @@
|
|||
[limited-quirks.html]
|
||||
[top: -\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1A]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1a]
|
||||
expected: FAIL
|
||||
|
||||
[top: @1]
|
||||
expected: FAIL
|
||||
|
||||
[top: "1a"]
|
||||
expected: FAIL
|
||||
|
||||
[top: @a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: "1"]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -/**/1]
|
||||
expected: FAIL
|
||||
|
||||
[top: +/**/1]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: @1a]
|
||||
expected: FAIL
|
||||
|
||||
[top: 1\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[top: url('1')]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[top: calc(1)]
|
||||
expected: FAIL
|
||||
|
||||
[top: \\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: 1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #0001]
|
||||
expected: FAIL
|
||||
|
||||
[top: calc(2 * 2px)]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: 1a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: A]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #01]
|
||||
expected: FAIL
|
||||
|
||||
[top: +\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #1]
|
||||
expected: FAIL
|
||||
|
||||
[top: -/**/1]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: \\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: calc(1)]
|
||||
expected: FAIL
|
||||
|
||||
[top: #001]
|
||||
expected: FAIL
|
||||
|
||||
[top: +\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1.5]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: @a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: @1]
|
||||
expected: FAIL
|
||||
|
||||
[top: #1]
|
||||
expected: FAIL
|
||||
|
||||
[top: 1a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1A]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: "a"]
|
||||
expected: FAIL
|
||||
|
||||
[top: #00001]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[top: "1"]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: 1.5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: url('1')]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1.5]
|
||||
expected: FAIL
|
||||
|
||||
[top: \\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: "1a"]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: calc(2 * 2px)]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: 1\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +/**/1]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #00001]
|
||||
expected: FAIL
|
||||
|
||||
[top: url(1)]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #001]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1a]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1A]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: url(1)]
|
||||
expected: FAIL
|
||||
|
||||
[top: a]
|
||||
expected: FAIL
|
||||
|
||||
[top: A]
|
||||
expected: FAIL
|
||||
|
||||
[top: #000001]
|
||||
expected: FAIL
|
||||
|
||||
[top: 1]
|
||||
expected: FAIL
|
||||
|
||||
[top: 1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: 1]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: #000001]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +A]
|
||||
expected: FAIL
|
||||
|
||||
[top: 1.5]
|
||||
expected: FAIL
|
||||
|
||||
[top: +A]
|
||||
expected: FAIL
|
||||
|
||||
[top: +a]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1.5]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1\\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1a]
|
||||
expected: FAIL
|
||||
|
||||
[top: +1A]
|
||||
expected: FAIL
|
||||
|
||||
[top: @1a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: \\31 .5]
|
||||
expected: FAIL
|
||||
|
||||
[top: "a"]
|
||||
expected: FAIL
|
||||
|
||||
[top: #01]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: +1.5]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -A]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -a]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[top: #0001]
|
||||
expected: FAIL
|
||||
|
||||
[bottom: -1]
|
||||
expected: FAIL
|
||||
|
||||
[top: -\\31 ]
|
||||
expected: FAIL
|
||||
|
||||
[top: -A]
|
||||
expected: FAIL
|
||||
|
||||
[top: -a]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1]
|
||||
expected: FAIL
|
||||
|
||||
[top: -1\\31 ]
|
||||
expected: FAIL
|
||||
|
|
@ -191,3 +191,6 @@
|
|||
[HTMLElement interface: attribute ontouchcancel]
|
||||
expected: FAIL
|
||||
|
||||
[idl_test setup]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
[urlencoded-parser.any.html]
|
||||
[request.formData() with input: &&&a=b&&&&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
[request.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -11,10 +8,10 @@
|
|||
[response.formData() with input: a&b&c]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a=b&c=d&]
|
||||
[response.formData() with input: _charset_=windows-1252&test=%C2x]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a=b&c=d]
|
||||
[response.formData() with input: &&&a=b&&&&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
|
@ -28,6 +25,9 @@
|
|||
[request.formData() with input: a=b&c=d]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: _charset_=windows-1252&test=%C2x]
|
||||
[request.formData() with input: &&&a=b&&&&c=d&]
|
||||
expected: FAIL
|
||||
|
||||
[response.formData() with input: a=b&c=d]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,95 @@
|
|||
[dedicated-worker-options-credentials.html]
|
||||
expected: ERROR
|
||||
[DedicatedWorker: WorkerOptions 'credentials']
|
||||
expected: FAIL
|
||||
|
||||
[new Worker() with credentials=omit should not send the credentials]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[new Worker() with type=classic should always send the credentials regardless of the credentials option (include).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials regardless of the credentials option (default).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials regardless of the credentials option (omit).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=include should send the credentials for same-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials for same-origin dynamic imports regardless of the credentials option (include).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should never send the credentials for cross-origin dynamic imports regardless of the credentials option (same-origin).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type-module credentials=omit should not send the credentials for cross-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type-module credentials=omit should not send the credentials for cross-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=omit should not send the credentials for same-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=omit should not send the credentials for same-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=include should send the credentials for cross-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=same-origin should not send the credentials for cross-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should never send the credentials for cross-origin dynamic imports regardless of the credentials option (include).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=same-origin should not send the credentials for cross-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should never send the credentials for cross-origin dynamic imports regardless of the credentials option (omit).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and default credentials option should behave as credentials=same-origin and not send the credentials for cross-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials for same-origin dynamic imports regardless of the credentials option (omit).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=omit should not send the credentials]
|
||||
expected: FAIL
|
||||
|
||||
[new Worker() with type=module and default credentials option should behave as credentials=same-origin and send the credentials for same-origin static imports]
|
||||
expected: TIMEOUT
|
||||
|
||||
[new Worker() with type=classic should always send the credentials regardless of the credentials option (same-origin).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should never send the credentials for cross-origin dynamic imports regardless of the credentials option (default).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials for same-origin dynamic imports regardless of the credentials option (default).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=include should send the credentials for cross-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=classic should always send the credentials for same-origin dynamic imports regardless of the credentials option (same-origin).]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and default credentials option should behave as credentials=same-origin and not send the credentials for cross-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=same-origin should send the credentials for same-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=same-origin should send the credentials for same-origin static imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and default credentials option should behave as credentials=same-origin and send the credentials for same-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
[new Worker() with type=module and credentials=include should send the credentials for same-origin dynamic imports]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
[005.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[dedicated worker in shared worker in dedicated worker]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ matrix:
|
|||
apt:
|
||||
packages:
|
||||
- libnss3-tools
|
||||
env: JOB=wpt_integration TOXENV=py27,py27-flake8 SCRIPT=tools/ci/ci_wpt.sh
|
||||
env: JOB=wpt_integration TOXENV=py27 SCRIPT=tools/ci/ci_wpt.sh
|
||||
- name: "resources/ tests"
|
||||
if: type = pull_request
|
||||
os: linux
|
||||
|
|
|
@ -43,6 +43,19 @@
|
|||
}, val[0])
|
||||
})
|
||||
|
||||
;["Request", "Response"].forEach(val => {
|
||||
test(() => {
|
||||
const obj = new self[0][val]("about:blank");
|
||||
assert_global(obj);
|
||||
|
||||
const cloneObj = obj.clone();
|
||||
assert_global(cloneObj);
|
||||
|
||||
const involvedCloneObj = self[val].prototype["clone"].call(cloneObj);
|
||||
assert_global(cloneObj);
|
||||
}, val)
|
||||
})
|
||||
|
||||
// Note: these are not [NewObject] and can be cached. But across globals?
|
||||
;[["getElementsByTagName", "x"],
|
||||
["getElementsByTagNameNS", null, "x"],
|
||||
|
|
|
@ -42,3 +42,10 @@ function test_entries(actualEntries, expectedEntries) {
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
function delayedLoadListener(callback) {
|
||||
window.addEventListener('load', function() {
|
||||
// TODO(cvazac) Remove this setTimeout when spec enforces sync entries.
|
||||
step_timeout(callback, 0)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -14,6 +14,15 @@ function importWorklet(worklet, code) {
|
|||
return worklet.addModule(url);
|
||||
}
|
||||
|
||||
async function animationFrames(frames) {
|
||||
for (let i = 0; i < frames; i++)
|
||||
await new Promise(requestAnimationFrame);
|
||||
}
|
||||
|
||||
async function workletPainted() {
|
||||
await animationFrames(2);
|
||||
}
|
||||
|
||||
// To make sure that we take the snapshot at the right time, we do double
|
||||
// requestAnimationFrame. In the second frame, we take a screenshot, that makes
|
||||
// sure that we already have a full frame.
|
||||
|
@ -24,10 +33,6 @@ async function importWorkletAndTerminateTestAfterAsyncPaint(worklet, code) {
|
|||
}
|
||||
|
||||
await importWorklet(worklet, code);
|
||||
|
||||
requestAnimationFrame(function() {
|
||||
requestAnimationFrame(function() {
|
||||
takeScreenshot();
|
||||
});
|
||||
});
|
||||
await workletPainted();
|
||||
takeScreenshot();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Whitespace across display:contents shadow host</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-rules">
|
||||
<link rel="match" href="../reference/pass_if_two_words.html">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
<div id="host" style="display:contents"></div> <span>words</span>
|
||||
<script>
|
||||
host.attachShadow({mode:"open"}).innerHTML = "two";
|
||||
</script>
|
|
@ -3,7 +3,7 @@
|
|||
<title>CSS Flexbox Test: Flex item - contiguous text runs - node removal</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-items">
|
||||
<link rel="match" href="anonymous-flex-item-ref.html">
|
||||
<link rel="match" href="../reference/pass_if_two_words.html">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
<div style="display:flex">two <span id="spanRemove"></span>words</div>
|
||||
<script>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
<title>CSS Flexbox Test: Flex item - contiguous text runs - display:none</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-items">
|
||||
<link rel="match" href="anonymous-flex-item-ref.html">
|
||||
<link rel="match" href="../reference/pass_if_two_words.html">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
<div style="display:flex">two <span style="display:none"></span>words</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<title>CSS Flexbox Test: Flex item - contiguous text runs - display:none dynamic</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-items">
|
||||
<link rel="match" href="anonymous-flex-item-ref.html">
|
||||
<link rel="match" href="../reference/pass_if_two_words.html">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
<div style="display:flex">two <span id="noneSpan"></span>words</div>
|
||||
<script>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
spec: https://drafts.csswg.org/css-overscroll-behavior/
|
||||
suggested_reviewers:
|
||||
- majido
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Inheritance of CSS Overscroll Behavior properties</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-overscroll-behavior/#property-index">
|
||||
<meta name="assert" content="Properties inherit or not according to the spec.">
|
||||
<meta name="assert" content="Properties have initial values according to the spec.">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/css/support/inheritance-testcommon.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="target"></div>
|
||||
</div>
|
||||
<script>
|
||||
assert_not_inherited('overscroll-behavior-x', 'auto', 'contain');
|
||||
assert_not_inherited('overscroll-behavior-y', 'auto', 'contain');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,49 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="reftest-wait">
|
||||
<title>Registering a property causes invalidation for initial value</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples">
|
||||
<link rel="match" href="parse-input-arguments-ref.html">
|
||||
<script src="/common/reftest-wait.js"></script>
|
||||
<script src="/common/worklet-reftest.js"></script>
|
||||
<body>
|
||||
<style>
|
||||
#target {
|
||||
background: paint(geometry);
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
</style>
|
||||
<div id="target"></div>
|
||||
<script id="code" type="text/worklet">
|
||||
registerPaint('geometry', class {
|
||||
static get inputProperties() { return ['--color']; }
|
||||
paint(ctx, geom, styleMap) {
|
||||
ctx.strokeStyle = styleMap.get('--color').toString();
|
||||
ctx.lineWidth = 4;
|
||||
ctx.strokeRect(0, 0, geom.width, geom.height);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
async function test() {
|
||||
getComputedStyle(target);
|
||||
let code = document.getElementById('code').textContent;
|
||||
await importWorklet(CSS.paintWorklet, code);
|
||||
await workletPainted();
|
||||
CSS.registerProperty({
|
||||
name: '--color',
|
||||
syntax: '<color>',
|
||||
initialValue: 'green',
|
||||
inherits: false
|
||||
});
|
||||
await workletPainted();
|
||||
takeScreenshot();
|
||||
}
|
||||
|
||||
test();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="reftest-wait">
|
||||
<title>Registering a property causes invalidation for applied value</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-paint-api-1/#examples">
|
||||
<link rel="match" href="parse-input-arguments-ref.html">
|
||||
<script src="/common/reftest-wait.js"></script>
|
||||
<script src="/common/worklet-reftest.js"></script>
|
||||
<body>
|
||||
<style>
|
||||
#target {
|
||||
background: paint(geometry);
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
--length: 100px;
|
||||
}
|
||||
</style>
|
||||
<div id="target"></div>
|
||||
<script id="code" type="text/worklet">
|
||||
registerPaint('geometry', class {
|
||||
static get inputProperties() { return ['--length']; }
|
||||
paint(ctx, geom, styleMap) {
|
||||
let value = styleMap.get('--length');
|
||||
let pass = value.value === 100 && value.unit === 'px';
|
||||
ctx.strokeStyle = pass ? 'green' : 'red';
|
||||
ctx.lineWidth = 4;
|
||||
ctx.strokeRect(0, 0, geom.width, geom.height);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
async function test() {
|
||||
getComputedStyle(target);
|
||||
let code = document.getElementById('code').textContent;
|
||||
await importWorklet(CSS.paintWorklet, code);
|
||||
await workletPainted();
|
||||
CSS.registerProperty({
|
||||
name: '--length',
|
||||
syntax: '<length>',
|
||||
initialValue: '0px',
|
||||
inherits: false
|
||||
});
|
||||
await workletPainted();
|
||||
takeScreenshot();
|
||||
}
|
||||
|
||||
test();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/CSS22/visufx.html#propdef-overflow">
|
||||
<style>
|
||||
/* Avoid auto scrollbars on the viewport, because that might trigger re-layout
|
||||
(and thus hide bugs). */
|
||||
body { overflow:hidden; }
|
||||
|
||||
.container { width:100px; }
|
||||
</style>
|
||||
<p>There should be a blue rectangle below, and possibly a scrollbar (depending
|
||||
on OS / browser), that shouldn not obscure any parts of the rectangle. The
|
||||
word "FAIL" should not be seen.</p>
|
||||
<div class="container" style="overflow:auto; height:200px;">
|
||||
<div id="child" style="display:inline-block; box-sizing:border-box; width:100%; height:100%; border:10px solid blue;"></div>
|
||||
<br>FAIL
|
||||
</div>
|
||||
|
||||
<div class="container" style="visibility:hidden; overflow:scroll;">
|
||||
<div id="ref"></div>
|
||||
</div>
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(()=> {
|
||||
var child = document.getElementById("child");
|
||||
assert_equals(child.offsetWidth, ref.offsetWidth);
|
||||
}, "Auto scrollbar affects size of children");
|
||||
</script>
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: letter spacing after bidi</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#letter-spacing-property">
|
||||
<link rel="match" href="reference/letter-spacing-bidi-001-ref.html">
|
||||
<meta name="assert" content="Letter spacing is inserted after RTL reordering, so letter spacing cannot apply to any of the letters in the span below,
|
||||
since they get split appart.">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
span {
|
||||
letter-spacing: 1ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 4.
|
||||
<div>12345</div>
|
||||
<div>a<span>bא</span>ב</div>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: letter spacing at bidi fragment boudary</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#letter-spacing-property">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#bidi-fragmentation">
|
||||
<link rel="match" href="reference/letter-spacing-bidi-002-ref.html">
|
||||
<meta name="assert" content="When bidi would cause to pieces of a single inline box to be appart if there was enough room to fit everything in one line,
|
||||
the two pieces are separate fragments even if they end up next to eachother due to line breaking.
|
||||
Letter spacing at the boundary of such separate fragments comes from their common ancestor,
|
||||
not from the letter-spacing property on the fragmented inline box itself.">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
width: 0;
|
||||
}
|
||||
span {
|
||||
letter-spacing: 1ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 3.
|
||||
<div>12345</div>
|
||||
<div>a<span>aב</span> ב</div>
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: letter spacing at end of line</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#letter-spacing-property">
|
||||
<link rel="match" href="reference/letter-spacing-end-of-line-001-ref.html">
|
||||
<meta name="assert" content="Letter-spacing must not be applied at the beginning or at the end of a line.">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
span {
|
||||
float:left;
|
||||
letter-spacing: 1ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 4.
|
||||
<div>12345</div>
|
||||
<div><span>aa</span>a</div>
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: letter on nested element</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#letter-spacing-property">
|
||||
<link rel="match" href="reference/letter-spacing-nesting-001-ref.html">
|
||||
<meta name="assert" content="A given value of letter-spacing only affects the spacing between characters completely contained within the element for which it is specified">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
span {
|
||||
letter-spacing: 1ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 5.
|
||||
<div>123456</div>
|
||||
<div>a<span>aa</span>a</div>
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: letter spacing on element with single character</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#letter-spacing-property">
|
||||
<link rel="match" href="reference/letter-spacing-nesting-002-ref.html">
|
||||
<meta name="assert" content="Applying letter-spacing to an element containing only a single character has no effect on the rendered result">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
span {
|
||||
letter-spacing: 1ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 3.
|
||||
<div>12345</div>
|
||||
<div>a<span>a</span>a</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 4.
|
||||
<div>12345</div>
|
||||
<div>abאב</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 3.
|
||||
<div>12345</div>
|
||||
<div>aaב<br>ב</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 4.
|
||||
<div>12345</div>
|
||||
<div>a aa</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 5.
|
||||
<div>123456</div>
|
||||
<div>aa aa</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
font-family: monospace;
|
||||
font-size: 3em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the rightmost character of the line that starts with “a” is under the number 3.
|
||||
<div>12345</div>
|
||||
<div>aaa</div>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text Test: overflow-wrap: break-word</title>
|
||||
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
|
||||
<meta name="flags" content="ahem">
|
||||
<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
|
||||
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
|
||||
<style>
|
||||
div {
|
||||
position: relative;
|
||||
font-size: 20px;
|
||||
font-family: Ahem;
|
||||
}
|
||||
.fail {
|
||||
position: absolute;
|
||||
color: red;
|
||||
z-index: -1;
|
||||
}
|
||||
span { color: green; }
|
||||
.test {
|
||||
color: green;
|
||||
line-height: 1em;
|
||||
width: 5ch;
|
||||
|
||||
white-space: pre-wrap;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||
<div class="fail">XXX<span>XX<br></span><span>XXXXX<br></span>XXXXX<br>XXXX<span>X<br></span><span>XXXXX</span></div>
|
||||
<div class="test">XXX
|
||||
XXXXXXXXX</div>
|
||||
</body>
|
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is no red.
|
||||
<div>ああ<br>ああ</div>
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<style>
|
||||
div { white-space: pre; }
|
||||
span { background: blue; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is a blue rectangle at the end of the first line.
|
||||
<div>ああ<span> </span><br>ああ</div>
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<style>
|
||||
div { white-space: pre; }
|
||||
span { background: blue; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is a blue rectangle at the end of the first line.
|
||||
<div>ああ<span>      </span><br>ああ</div>
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<style>
|
||||
div { white-space: pre; }
|
||||
span {
|
||||
background: blue;
|
||||
|
||||
/* to make the span go under the right border */
|
||||
z-index:-1;
|
||||
position: relative;
|
||||
}
|
||||
aside {
|
||||
display: inline-block;
|
||||
width: 0.5em;
|
||||
border-right: 1em white solid;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is a blue rectangle at the end of the first line.
|
||||
<div>ああ<aside><span> </span></aside><br>ああ</div>
|
|
@ -1,3 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<p>There should be a space between "Two" and "words".</p>
|
||||
Two words
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: ideographic space at the end of line must be removed</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-001-ref.html">
|
||||
<meta name="assert" content="An ideographic space (U+3000) at the end of the line must be removed.">
|
||||
<style>
|
||||
div { width: 2em; }
|
||||
span { background: red; } /* If the space hangs instead of being removed, there will be red */
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is no red.
|
||||
<div>ああ<span> </span>ああ</div>
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: sequence of spaces and ideographic spaces at the end of line must be removed</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-001-ref.html">
|
||||
<meta name="assert" content="An sequence ideographic space (U+3000) and regular spaces at the end of the line must be removed.">
|
||||
<style>
|
||||
div { width: 2em; }
|
||||
span { background: red; } /* If the space hangs instead of being removed, there will be red */
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is no red.
|
||||
<div>ああ<span>      </span>ああ</div>
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: preserved ideographic space at the end of line must hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-003-ref.html">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-alt-003-ref.html">
|
||||
<meta name="assert" content="An ideographic space (U+3000) at the end of the line must hang if white-space preserves spaces.">
|
||||
<style>
|
||||
div {
|
||||
width: 2.5em;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
span { background: blue; } /* If the space is removed instead of hanging, there will be no blue box*/
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is a blue rectangle at the end of the first line.
|
||||
<div>ああ<span> </span>ああ</div>
|
||||
|
||||
<!--
|
||||
We're using a 2.5em width and two references, instead of 2em and just the first one,
|
||||
because in addition to requiring the spaces to hang,
|
||||
the spec allows, but does not require, browsers to visually collapse the advance widths of characters that overflow.
|
||||
In browsers that don't do that, the whole sequence of preserved spaces will be visible, and the first ref will be matched.
|
||||
In browsers that do, only the first 0.5em worth of space will be preserved, and the second ref will match.
|
||||
-->
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: preserved sequences of spaces and ideographic spaces at the end of line must hang</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-004-ref.html">
|
||||
<link rel="match" href="reference/trailing-ideographic-space-alt-003-ref.html">
|
||||
<meta name="assert" content="An sequence ideographic space (U+3000) and regular spaces at the end of the line must hang if white-space preserves spaces.">
|
||||
<style>
|
||||
div {
|
||||
width: 2.5em;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
span { background: blue; } /* If the spaces are removed instead of hanging, there will be no blue box*/
|
||||
</style>
|
||||
|
||||
<p>Test passes if the characters below are arranged in a square and if there is a blue rectangle at the end of the first line.
|
||||
<div>ああ<span>      </span>ああ</div>
|
||||
|
||||
<!--
|
||||
We're using a 2.5em width and two references, instead of 2em and just the first one,
|
||||
because in addition to requiring the spaces to hang,
|
||||
the spec allows, but does not require, browsers to visually collapse the advance widths of characters that overflow.
|
||||
In browsers that don't do that, the whole space will be visible, and the first ref will be matched.
|
||||
In browsers that do, only the first 0.5em worth of space will be preserved, and the second ref will match.
|
||||
-->
|
|
@ -1,11 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-rules">
|
||||
<link rel="match" href="reference/white-space-empty-text-sibling-ref.html">
|
||||
<p>There should be a space between "Two" and "words".</p>
|
||||
<link rel="match" href="../../reference/pass_if_two_words.html">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
<div id="block"> <span>words</span></div>
|
||||
<script>
|
||||
block.insertBefore(document.createTextNode(""), block.firstChild);
|
||||
block.insertBefore(document.createTextNode(""), block.firstChild);
|
||||
block.offsetTop;
|
||||
block.firstChild.data = "Two";
|
||||
block.firstChild.data = "two";
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS test reference</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<style>
|
||||
div {
|
||||
border: 5px solid;
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
div::nth-of-type(1) { border-color: blue; }
|
||||
div::nth-of-type(2) { border-color: green; }
|
||||
div::nth-of-type(3) { border-color: orange; }
|
||||
|
||||
</style>
|
||||
|
||||
<p>Test passes if the text in each of the following 3 boxes is broken into separate lines at the same points.
|
||||
|
||||
<div lang=ja>あ<br>い)<br>あ<br>(い</div>
|
||||
<div lang=ja>あ<br>い)<br>あ<br>(い</div>
|
||||
<div lang=ja>あ<br>い)<br>あ<br>(い</div>
|
|
@ -0,0 +1,7 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS-Text reference file</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
|
||||
<p>This test passes if the four characters below are arranged in a two-by-two square.
|
||||
<div>字字<br>字字</div>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Text level 3 Test: break-all and punctuation</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#word-break-property">
|
||||
<link rel="match" href="reference/word-break-break-all-020-ref.html">
|
||||
<meta name="assert" content="work-break:break-all does not affect rules governing the soft wrap opportunities created by punctuation.">
|
||||
<style>
|
||||
div {
|
||||
border: 5px solid;
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
div::nth-of-type(1) { border-color: blue; }
|
||||
div::nth-of-type(2) { border-color: green; }
|
||||
div::nth-of-type(3) { border-color: orange; }
|
||||
|
||||
div::nth-of-type(3) { word-break: break-word; }
|
||||
</style>
|
||||
|
||||
<p>Test passes if the text in each of the following 3 boxes is broken into separate lines at the same points.
|
||||
<div lang=ja>あい)あ(い</div>
|
||||
<div lang=ja>あ<br>い)<br>あ<br>(い</div>
|
||||
<div lang=ja>あい)あ(い</div>
|
||||
|
||||
<!--
|
||||
If the first box (blue) is wrong,
|
||||
customary rules for line breaking japanese are not implemented (or not correctly).
|
||||
|
||||
If the third box (orange) is wrong,
|
||||
customary rules for line breaking japanese are discarded
|
||||
when applying 'word-break: break-all', which is a spec violation.
|
||||
-->
|
|
@ -0,0 +1,28 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS-Text test: word-break keep-all does not affect U+3000</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
<meta name=flags content="">
|
||||
<meta name=assert content="U+3000, despite being called Ideographic Space, does not belong to the ID line breaking class, or any other class whose wrapping opportunities are suppressed by word-break:keep-all. A break after it should still be allowed.">
|
||||
<link rel="match" href="reference/word-break-keep-all-005-ref.html">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
|
||||
<style>
|
||||
div {
|
||||
width: 4em;
|
||||
word-break: keep-all;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This test passes if the four characters below are arranged in a two-by-two square.
|
||||
<div lang=ja>字字 字字</div>
|
||||
<!--
|
||||
If keep-all has no effect at all, breaks are allowed everywhere,
|
||||
and the result will be:
|
||||
字字 字
|
||||
字
|
||||
|
||||
If keep-all correctly suppresses wrapping opportunities between CJK ideographs
|
||||
but also incorrectly suppresses the wrapping opportunity after U+3000,
|
||||
no wrapping is possible, and the result will be:
|
||||
字字 字字
|
||||
-->
|
|
@ -0,0 +1,33 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>CSS-Text test: word-break keep-all does not affect punctuation</title>
|
||||
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
|
||||
<meta name=flags content="">
|
||||
<meta name=assert content="word-break:keep-all does not affect rules governing the soft wrap opportunities created by punctuation">
|
||||
<link rel="match" href="reference/word-break-keep-all-005-ref.html">
|
||||
<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-word-break">
|
||||
<style>
|
||||
div {
|
||||
width: 4em;
|
||||
word-break: keep-all;
|
||||
}
|
||||
span { color: transparent }
|
||||
</style>
|
||||
|
||||
<p>This test passes if the four characters below are arranged in a two-by-two square.
|
||||
<div lang=ja>字字<span>、</span>字字</div>
|
||||
<!--
|
||||
U+3001 : IDEOGRAPHIC COMMA is made transparent for visual simplicity,
|
||||
the change in color has no effect on layout.
|
||||
|
||||
If keep-all has no effect at all, breaks are allowed everywhere
|
||||
(except before U+3001, but this has no incidence in this case)
|
||||
and the result will be:
|
||||
字字、字
|
||||
字
|
||||
|
||||
If keep-all correctly suppresses wrapping opportunities between CJK ideographs
|
||||
but also incorrectly suppresses the wrapping opportunity after U+3001,
|
||||
no wrapping is possible, and the result will be:
|
||||
字字、字字
|
||||
-->
|
|
@ -1,6 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Reftest Reference</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org">
|
||||
<p>There should be a space between "two" and "words" below.</p>
|
||||
two words
|
|
@ -0,0 +1,113 @@
|
|||
test(function() {
|
||||
var test_window = window.open('', '', 'height=1,width=1');
|
||||
var test_document = test_window.document;
|
||||
|
||||
var frame = test_document.createElement('iframe');
|
||||
test_document.body.appendChild(frame);
|
||||
|
||||
frame.contentWindow.onpagehide = function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during pagehide");
|
||||
};
|
||||
frame.contentDocument.onvisibilitychange = function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during visibilitychange");
|
||||
};
|
||||
frame.contentWindow.onbeforeunload = function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during beforeunload");
|
||||
};
|
||||
frame.contentWindow.onunload = function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during unload");
|
||||
};
|
||||
|
||||
frame.remove();
|
||||
}, 'no popups with frame removal');
|
||||
|
||||
async_test(function(t) {
|
||||
var test_window = window.open('', '', 'height=1,width=1');
|
||||
var test_document = test_window.document;
|
||||
|
||||
var frame = test_document.createElement('iframe');
|
||||
test_document.body.appendChild(frame);
|
||||
|
||||
frame.contentWindow.onpagehide = t.step_func(function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during pagehide");
|
||||
});
|
||||
frame.contentDocument.onvisibilitychange = t.step_func(function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during visibilitychange");
|
||||
});
|
||||
frame.contentWindow.onbeforeunload = t.step_func(function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during beforeunload");
|
||||
});
|
||||
frame.contentWindow.onunload = t.step_func(function(evt) {
|
||||
assert_equals(frame.contentWindow.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during unload");
|
||||
});
|
||||
|
||||
frame.onload = t.step_func_done();
|
||||
|
||||
frame.contentWindow.location.href = "about:blank";
|
||||
}, 'no popups with frame navigation');
|
||||
|
||||
async_test(function(t) {
|
||||
var test_window = window.open('', '', 'height=1,width=1');
|
||||
var test_document = test_window.document;
|
||||
|
||||
var frame = test_document.createElement('iframe');
|
||||
test_document.body.appendChild(frame);
|
||||
|
||||
frame.contentWindow.onpagehide = t.step_func(function(evt) {
|
||||
assert_equals(test_window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during pagehide");
|
||||
});
|
||||
frame.contentDocument.onvisibilitychange = t.step_func(function(evt) {
|
||||
assert_equals(test_window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during visibilitychange");
|
||||
});
|
||||
frame.contentWindow.onbeforeunload = t.step_func(function(evt) {
|
||||
assert_equals(test_window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during beforeunload");
|
||||
});
|
||||
frame.contentWindow.onunload = t.step_func(function(evt) {
|
||||
assert_equals(test_window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during unload");
|
||||
});
|
||||
|
||||
frame.onload = t.step_func_done();
|
||||
|
||||
frame.contentWindow.location.href = "about:blank";
|
||||
}, 'no popups from synchronously reachable window');
|
||||
|
||||
async_test(function(t) {
|
||||
var test_window = window.open('', '', 'height=1,width=1');
|
||||
var test_document = test_window.document;
|
||||
|
||||
var frame = test_document.createElement('iframe');
|
||||
test_document.body.appendChild(frame);
|
||||
|
||||
frame.contentWindow.onpagehide = t.step_func(function(evt) {
|
||||
assert_equals(window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during pagehide");
|
||||
});
|
||||
frame.contentDocument.onvisibilitychange = t.step_func(function(evt) {
|
||||
assert_equals(window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during visibilitychange");
|
||||
});
|
||||
frame.contentWindow.onbeforeunload = t.step_func(function(evt) {
|
||||
assert_equals(window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during beforeunload");
|
||||
});
|
||||
frame.contentWindow.onunload = t.step_func(function(evt) {
|
||||
assert_equals(window.open('', '', 'height=1,width=1'), null,
|
||||
"expected no popup during unload");
|
||||
});
|
||||
|
||||
frame.onload = t.step_func_done();
|
||||
|
||||
frame.contentWindow.location.href = "about:blank";
|
||||
}, 'no popups from another synchronously reachable window');
|
|
@ -251,6 +251,8 @@ testText("<div><table style='border-collapse:collapse'><tr><td>abc<td>def</table
|
|||
testText("<div><table><tfoot>x</tfoot><tbody>y</tbody></table>", "xy", "tfoot not reordered");
|
||||
testText("<table><tfoot><tr><td>footer</tfoot><thead><tr><td style='visibility:collapse'>thead</thead><tbody><tr><td>tbody</tbody></table>",
|
||||
"footer\n\ntbody", "");
|
||||
testText("<table><tr><td id=target>abc</td><td>def</td>", "abc", "No tab on table-cell itself");
|
||||
testText("<table><tr id=target><td>abc</td><td>def</td></tr><tr id=target><td>ghi</td><td>jkl</td></tr>", "abc\tdef", "No newline on table-row itself");
|
||||
|
||||
/**** Table captions ****/
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<html>
|
||||
<title>MediaRecorder destroy script execution context</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<iframe src="support/MediaRecorder-iframe.html" id="subFrame-stop" name="subFrameStop"></iframe>
|
||||
<iframe src="support/MediaRecorder-iframe.html" id="subFrame-allTrackEnded" name="subFrameAllTrackEnded"></iframe>
|
||||
<script>
|
||||
var iframeForCallingStop = document.getElementById('subFrame-stop');
|
||||
var iframeForAllTrackEnded = document.getElementById('subFrame-allTrackEnded');
|
||||
|
||||
var testForCallingStop = async_test('MediaRecorder will not fire the stop event when stop() is called and the script execution context is going away');
|
||||
var testForAllTrackEnded = async_test('MediaRecorder will not fire the stop event when all tracks are ended and the script execution context is going away');
|
||||
|
||||
iframeForCallingStop.onload = function(e) {
|
||||
subFrameStop.window.prepareForTest();
|
||||
const recorder = subFrameStop.window.recorder;
|
||||
recorder.ondataavailable = testForCallingStop.step_func(blobEvent => {
|
||||
iframeForCallingStop.remove();
|
||||
testForCallingStop.step_timeout(testForCallingStop.step_func_done(), 0);
|
||||
});
|
||||
recorder.onstop = testForCallingStop.unreached_func('Unexpected stop event');
|
||||
recorder.start();
|
||||
assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
|
||||
subFrameStop.window.drawSomethingOnCanvas();
|
||||
recorder.stop();
|
||||
};
|
||||
|
||||
iframeForAllTrackEnded.onload = function(e) {
|
||||
subFrameAllTrackEnded.window.prepareForTest();
|
||||
const recorder = subFrameAllTrackEnded.window.recorder;
|
||||
recorder.ondataavailable = testForAllTrackEnded.step_func(blobEvent => {
|
||||
iframeForAllTrackEnded.remove();
|
||||
testForAllTrackEnded.step_timeout(testForAllTrackEnded.step_func_done(), 0);
|
||||
});
|
||||
recorder.onstop = testForAllTrackEnded.unreached_func('Unexpected stop event');
|
||||
recorder.start();
|
||||
assert_equals(recorder.state, 'recording', 'MediaRecorder has been started successfully');
|
||||
subFrameAllTrackEnded.window.drawSomethingOnCanvas();
|
||||
subFrameAllTrackEnded.window.video.getVideoTracks()[0].stop();
|
||||
};
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,50 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>MediaRecorder Stop</title>
|
||||
<link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="canvas" width="200" height="200">
|
||||
</canvas>
|
||||
<script>
|
||||
function createVideoStream() {
|
||||
let canvas = document.getElementById("canvas");
|
||||
canvas.getContext('2d');
|
||||
return canvas.captureStream();
|
||||
}
|
||||
|
||||
async_test(t => {
|
||||
let video = createVideoStream();
|
||||
let recorder = new MediaRecorder(video);
|
||||
recorder.onstop = t.step_func(errorEvent => {
|
||||
assert_equals(errorEvent.type, 'stop', 'the error type should be stop');
|
||||
assert_true(errorEvent.isTrusted, 'isTrusted should be true when the event is created by C++');
|
||||
assert_equals(recorder.state, "inactive", "MediaRecorder has been stopped when all tracks are ended");
|
||||
t.done();
|
||||
});
|
||||
assert_equals(video.getVideoTracks().length, 1, "video mediastream starts with one track");
|
||||
recorder.start();
|
||||
assert_equals(recorder.state, "recording", "MediaRecorder has been started successfully");
|
||||
video.getVideoTracks()[0].stop();
|
||||
}, "MediaRecorder will stop recording and fire a stop event when all tracks are ended");
|
||||
|
||||
async_test(t => {
|
||||
let video = createVideoStream();
|
||||
let recorder = new MediaRecorder(video);
|
||||
recorder.onstop = t.step_func(errorEvent => {
|
||||
assert_equals(errorEvent.type, 'stop', 'the error type should be stop');
|
||||
assert_true(errorEvent.isTrusted, 'isTrusted should be true when the event is created by C++');
|
||||
assert_equals(recorder.state, "inactive", "MediaRecorder has been stopped when stop() is called");
|
||||
t.done();
|
||||
});
|
||||
recorder.start();
|
||||
assert_equals(recorder.state, "recording", "MediaRecorder has been started successfully");
|
||||
recorder.stop();
|
||||
assert_equals(recorder.state, "recording", "State should remain the same until stop event is fired");
|
||||
}, "MediaRecorder will stop recording and fire a stop event when stop() is called");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Start a MediaRecorder</title>
|
||||
<html>
|
||||
<body>
|
||||
<canvas id="canvas" width="200px" height="200px"></canvas>
|
||||
<script>
|
||||
var context;
|
||||
var recorder;
|
||||
var video;
|
||||
|
||||
function createVideoStream() {
|
||||
const canvas = document.getElementById("canvas");
|
||||
context = canvas.getContext('2d');
|
||||
return canvas.captureStream();
|
||||
}
|
||||
|
||||
function drawSomethingOnCanvas() {
|
||||
context.fillStyle = "red";
|
||||
context.fillRect(0, 0, 10, 10);
|
||||
}
|
||||
|
||||
function prepareForTest() {
|
||||
video = createVideoStream();
|
||||
recorder = new MediaRecorder(video);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Tests for PaymentRequest.canMakePayment() method</title>
|
||||
<link rel="help" href="https://w3c.github.io/browser-payment-api/#show-method">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src='/resources/testdriver-vendor.js'></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script>
|
||||
const basicCard = Object.freeze({ supportedMethods: "basic-card" });
|
||||
const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay" });
|
||||
const defaultMethods = Object.freeze([basicCard, applePay]);
|
||||
const defaultDetails = Object.freeze({
|
||||
total: {
|
||||
label: "Total",
|
||||
amount: {
|
||||
currency: "USD",
|
||||
value: "1.00",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
promise_test(async t => {
|
||||
// This test might never actually hit its assertion, but that's allowed.
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
try {
|
||||
await request.canMakePayment();
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"NotAllowedError",
|
||||
"if it throws, then it must be a NotAllowedError."
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
try {
|
||||
await new PaymentRequest(defaultMethods, defaultDetails).canMakePayment();
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"NotAllowedError",
|
||||
"if it throws, then it must be a NotAllowedError."
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`);
|
||||
</script>
|
||||
|
||||
<small>
|
||||
If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
|
||||
and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>.
|
||||
</small>
|
|
@ -20,6 +20,56 @@ const defaultDetails = Object.freeze({
|
|||
},
|
||||
});
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
assert_true(await request.canMakePayment(), "one of the methods should be supported");
|
||||
}, `If payment method identifier and serialized parts are supported, resolve promise with true.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
const acceptPromise = test_driver.bless("show payment request", () => {
|
||||
request.show() // Sets state to "interactive"
|
||||
});
|
||||
const canMakePaymentPromise = request.canMakePayment();
|
||||
try {
|
||||
const result = await canMakePaymentPromise;
|
||||
assert_true(
|
||||
false,
|
||||
`canMakePaymentPromise should have thrown InvalidStateError`
|
||||
);
|
||||
} catch (err) {
|
||||
await promise_rejects(t, "InvalidStateError", canMakePaymentPromise);
|
||||
} finally {
|
||||
await request.abort();
|
||||
await promise_rejects(t, "AbortError", acceptPromise);
|
||||
}
|
||||
// The state should be "closed"
|
||||
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
|
||||
}, 'If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.');
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
const acceptPromise = test_driver.bless("show payment request", () => {
|
||||
request.show() // Sets state to "interactive"
|
||||
});
|
||||
acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
|
||||
await request.abort(); // The state is now "closed"
|
||||
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
|
||||
try {
|
||||
const result = await request.canMakePayment();
|
||||
assert_true(
|
||||
false,
|
||||
`should have thrown InvalidStateError, but instead returned "${result}"`
|
||||
);
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"InvalidStateError",
|
||||
"must be an InvalidStateError."
|
||||
);
|
||||
}
|
||||
}, 'If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.');
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
try {
|
||||
|
@ -40,11 +90,6 @@ promise_test(async t => {
|
|||
}
|
||||
}, `If request.[[state]] is "created", then return a promise that resolves to true for known method.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
assert_true(await request.canMakePayment(), "one of the methods should be supported");
|
||||
}, `If payment method identifier and serialized parts are supported, resolve promise with true.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const unsupportedMethods = [
|
||||
"this-is-not-supported",
|
||||
|
@ -92,81 +137,6 @@ promise_test(async t => {
|
|||
}
|
||||
}
|
||||
}, `If payment method identifier is unknown, resolve promise with false.`);
|
||||
|
||||
promise_test(async t => {
|
||||
// This test might never actually hit its assertion, but that's allowed.
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
try {
|
||||
await request.canMakePayment();
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"NotAllowedError",
|
||||
"if it throws, then it must be a NotAllowedError."
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < 1000; i++) {
|
||||
try {
|
||||
await new PaymentRequest(defaultMethods, defaultDetails).canMakePayment();
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"NotAllowedError",
|
||||
"if it throws, then it must be a NotAllowedError."
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
const acceptPromise = test_driver.bless("show payment request", () => {
|
||||
request.show() // Sets state to "interactive"
|
||||
});
|
||||
const canMakePaymentPromise = request.canMakePayment();
|
||||
try {
|
||||
const result = await canMakePaymentPromise;
|
||||
assert_true(
|
||||
false,
|
||||
`canMakePaymentPromise should have thrown InvalidStateError`
|
||||
);
|
||||
} catch (err) {
|
||||
await promise_rejects(t, "InvalidStateError", canMakePaymentPromise);
|
||||
} finally {
|
||||
await request.abort();
|
||||
await promise_rejects(t, "AbortError", acceptPromise);
|
||||
}
|
||||
// The state should be "closed"
|
||||
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
|
||||
}, 'If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.');
|
||||
|
||||
promise_test(async t => {
|
||||
const request = new PaymentRequest(defaultMethods, defaultDetails);
|
||||
const acceptPromise = test_driver.bless("show payment request", () => {
|
||||
request.show() // Sets state to "interactive"
|
||||
});
|
||||
acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
|
||||
await request.abort(); // The state is now "closed"
|
||||
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
|
||||
try {
|
||||
const result = await request.canMakePayment();
|
||||
assert_true(
|
||||
false,
|
||||
`should have thrown InvalidStateError, but instead returned "${result}"`
|
||||
);
|
||||
} catch (err) {
|
||||
assert_equals(
|
||||
err.name,
|
||||
"InvalidStateError",
|
||||
"must be an InvalidStateError."
|
||||
);
|
||||
}
|
||||
}, 'If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.');
|
||||
|
||||
</script>
|
||||
|
||||
<small>
|
||||
|
|
|
@ -23,6 +23,12 @@
|
|||
mojo.internal.loadMojomIfNecessary(
|
||||
'mojo/public/mojom/base/string16.mojom', '../../../../mojo/public/mojom/base/string16.mojom.js');
|
||||
}
|
||||
var url$ =
|
||||
mojo.internal.exposeNamespace('url.mojom');
|
||||
if (mojo.config.autoLoadMojomDeps) {
|
||||
mojo.internal.loadMojomIfNecessary(
|
||||
'url/mojom/url.mojom', '../../../../url/mojom/url.mojom.js');
|
||||
}
|
||||
|
||||
|
||||
var UsbOpenDeviceError = {};
|
||||
|
@ -518,6 +524,7 @@
|
|||
this.manufacturerName = null;
|
||||
this.productName = null;
|
||||
this.serialNumber = null;
|
||||
this.webusbLandingPage = null;
|
||||
this.configurations = null;
|
||||
};
|
||||
UsbDeviceInfo.prototype.initFields_ = function(fields) {
|
||||
|
@ -534,7 +541,7 @@
|
|||
return err;
|
||||
|
||||
var kVersionSizes = [
|
||||
{version: 0, numBytes: 64}
|
||||
{version: 0, numBytes: 72}
|
||||
];
|
||||
err = messageValidator.validateStructVersion(offset, kVersionSizes);
|
||||
if (err !== validator.validationError.NONE)
|
||||
|
@ -576,16 +583,22 @@
|
|||
return err;
|
||||
|
||||
|
||||
// validate UsbDeviceInfo.webusbLandingPage
|
||||
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 48, url$.Url, true);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
|
||||
|
||||
// validate UsbDeviceInfo.configurations
|
||||
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 48, 8, new codec.PointerTo(UsbConfigurationInfo), false, [0], 0);
|
||||
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 56, 8, new codec.PointerTo(UsbConfigurationInfo), false, [0], 0);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
return validator.validationError.NONE;
|
||||
};
|
||||
|
||||
UsbDeviceInfo.encodedSize = codec.kStructHeaderSize + 56;
|
||||
UsbDeviceInfo.encodedSize = codec.kStructHeaderSize + 64;
|
||||
|
||||
UsbDeviceInfo.decode = function(decoder) {
|
||||
var packed;
|
||||
|
@ -610,6 +623,7 @@
|
|||
val.manufacturerName = decoder.decodeStructPointer(string16$.String16);
|
||||
val.productName = decoder.decodeStructPointer(string16$.String16);
|
||||
val.serialNumber = decoder.decodeStructPointer(string16$.String16);
|
||||
val.webusbLandingPage = decoder.decodeStructPointer(url$.Url);
|
||||
val.configurations = decoder.decodeArrayPointer(new codec.PointerTo(UsbConfigurationInfo));
|
||||
return val;
|
||||
};
|
||||
|
@ -636,6 +650,7 @@
|
|||
encoder.encodeStructPointer(string16$.String16, val.manufacturerName);
|
||||
encoder.encodeStructPointer(string16$.String16, val.productName);
|
||||
encoder.encodeStructPointer(string16$.String16, val.serialNumber);
|
||||
encoder.encodeStructPointer(url$.Url, val.webusbLandingPage);
|
||||
encoder.encodeArrayPointer(new codec.PointerTo(UsbConfigurationInfo), val.configurations);
|
||||
};
|
||||
function UsbControlTransferParams(values) {
|
||||
|
@ -2578,6 +2593,98 @@
|
|||
encoder.writeUint32(0);
|
||||
encoder.encodeArrayPointer(new codec.PointerTo(UsbIsochronousPacket), val.packets);
|
||||
};
|
||||
function UsbDeviceClient_OnDeviceOpened_Params(values) {
|
||||
this.initDefaults_();
|
||||
this.initFields_(values);
|
||||
}
|
||||
|
||||
|
||||
UsbDeviceClient_OnDeviceOpened_Params.prototype.initDefaults_ = function() {
|
||||
};
|
||||
UsbDeviceClient_OnDeviceOpened_Params.prototype.initFields_ = function(fields) {
|
||||
for(var field in fields) {
|
||||
if (this.hasOwnProperty(field))
|
||||
this[field] = fields[field];
|
||||
}
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceOpened_Params.validate = function(messageValidator, offset) {
|
||||
var err;
|
||||
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
var kVersionSizes = [
|
||||
{version: 0, numBytes: 8}
|
||||
];
|
||||
err = messageValidator.validateStructVersion(offset, kVersionSizes);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
return validator.validationError.NONE;
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceOpened_Params.encodedSize = codec.kStructHeaderSize + 0;
|
||||
|
||||
UsbDeviceClient_OnDeviceOpened_Params.decode = function(decoder) {
|
||||
var packed;
|
||||
var val = new UsbDeviceClient_OnDeviceOpened_Params();
|
||||
var numberOfBytes = decoder.readUint32();
|
||||
var version = decoder.readUint32();
|
||||
return val;
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceOpened_Params.encode = function(encoder, val) {
|
||||
var packed;
|
||||
encoder.writeUint32(UsbDeviceClient_OnDeviceOpened_Params.encodedSize);
|
||||
encoder.writeUint32(0);
|
||||
};
|
||||
function UsbDeviceClient_OnDeviceClosed_Params(values) {
|
||||
this.initDefaults_();
|
||||
this.initFields_(values);
|
||||
}
|
||||
|
||||
|
||||
UsbDeviceClient_OnDeviceClosed_Params.prototype.initDefaults_ = function() {
|
||||
};
|
||||
UsbDeviceClient_OnDeviceClosed_Params.prototype.initFields_ = function(fields) {
|
||||
for(var field in fields) {
|
||||
if (this.hasOwnProperty(field))
|
||||
this[field] = fields[field];
|
||||
}
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceClosed_Params.validate = function(messageValidator, offset) {
|
||||
var err;
|
||||
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
var kVersionSizes = [
|
||||
{version: 0, numBytes: 8}
|
||||
];
|
||||
err = messageValidator.validateStructVersion(offset, kVersionSizes);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
return validator.validationError.NONE;
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceClosed_Params.encodedSize = codec.kStructHeaderSize + 0;
|
||||
|
||||
UsbDeviceClient_OnDeviceClosed_Params.decode = function(decoder) {
|
||||
var packed;
|
||||
var val = new UsbDeviceClient_OnDeviceClosed_Params();
|
||||
var numberOfBytes = decoder.readUint32();
|
||||
var version = decoder.readUint32();
|
||||
return val;
|
||||
};
|
||||
|
||||
UsbDeviceClient_OnDeviceClosed_Params.encode = function(encoder, val) {
|
||||
var packed;
|
||||
encoder.writeUint32(UsbDeviceClient_OnDeviceClosed_Params.encodedSize);
|
||||
encoder.writeUint32(0);
|
||||
};
|
||||
var kUsbDevice_Open_Name = 0;
|
||||
var kUsbDevice_Close_Name = 1;
|
||||
var kUsbDevice_SetConfiguration_Name = 2;
|
||||
|
@ -2617,13 +2724,13 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.open = function() {
|
||||
var params = new UsbDevice_Open_Params();
|
||||
var params_ = new UsbDevice_Open_Params();
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_Open_Name,
|
||||
codec.align(UsbDevice_Open_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_Open_Params, params);
|
||||
builder.encodeStruct(UsbDevice_Open_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2641,13 +2748,13 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.close = function() {
|
||||
var params = new UsbDevice_Close_Params();
|
||||
var params_ = new UsbDevice_Close_Params();
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_Close_Name,
|
||||
codec.align(UsbDevice_Close_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_Close_Params, params);
|
||||
builder.encodeStruct(UsbDevice_Close_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2665,14 +2772,14 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.setConfiguration = function(value) {
|
||||
var params = new UsbDevice_SetConfiguration_Params();
|
||||
params.value = value;
|
||||
var params_ = new UsbDevice_SetConfiguration_Params();
|
||||
params_.value = value;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_SetConfiguration_Name,
|
||||
codec.align(UsbDevice_SetConfiguration_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_SetConfiguration_Params, params);
|
||||
builder.encodeStruct(UsbDevice_SetConfiguration_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2690,14 +2797,14 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.claimInterface = function(interfaceNumber) {
|
||||
var params = new UsbDevice_ClaimInterface_Params();
|
||||
params.interfaceNumber = interfaceNumber;
|
||||
var params_ = new UsbDevice_ClaimInterface_Params();
|
||||
params_.interfaceNumber = interfaceNumber;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_ClaimInterface_Name,
|
||||
codec.align(UsbDevice_ClaimInterface_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_ClaimInterface_Params, params);
|
||||
builder.encodeStruct(UsbDevice_ClaimInterface_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2715,14 +2822,14 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.releaseInterface = function(interfaceNumber) {
|
||||
var params = new UsbDevice_ReleaseInterface_Params();
|
||||
params.interfaceNumber = interfaceNumber;
|
||||
var params_ = new UsbDevice_ReleaseInterface_Params();
|
||||
params_.interfaceNumber = interfaceNumber;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_ReleaseInterface_Name,
|
||||
codec.align(UsbDevice_ReleaseInterface_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_ReleaseInterface_Params, params);
|
||||
builder.encodeStruct(UsbDevice_ReleaseInterface_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2740,15 +2847,15 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.setInterfaceAlternateSetting = function(interfaceNumber, alternateSetting) {
|
||||
var params = new UsbDevice_SetInterfaceAlternateSetting_Params();
|
||||
params.interfaceNumber = interfaceNumber;
|
||||
params.alternateSetting = alternateSetting;
|
||||
var params_ = new UsbDevice_SetInterfaceAlternateSetting_Params();
|
||||
params_.interfaceNumber = interfaceNumber;
|
||||
params_.alternateSetting = alternateSetting;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_SetInterfaceAlternateSetting_Name,
|
||||
codec.align(UsbDevice_SetInterfaceAlternateSetting_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_SetInterfaceAlternateSetting_Params, params);
|
||||
builder.encodeStruct(UsbDevice_SetInterfaceAlternateSetting_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2766,13 +2873,13 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.reset = function() {
|
||||
var params = new UsbDevice_Reset_Params();
|
||||
var params_ = new UsbDevice_Reset_Params();
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_Reset_Name,
|
||||
codec.align(UsbDevice_Reset_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_Reset_Params, params);
|
||||
builder.encodeStruct(UsbDevice_Reset_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2790,14 +2897,14 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.clearHalt = function(endpoint) {
|
||||
var params = new UsbDevice_ClearHalt_Params();
|
||||
params.endpoint = endpoint;
|
||||
var params_ = new UsbDevice_ClearHalt_Params();
|
||||
params_.endpoint = endpoint;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_ClearHalt_Name,
|
||||
codec.align(UsbDevice_ClearHalt_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_ClearHalt_Params, params);
|
||||
builder.encodeStruct(UsbDevice_ClearHalt_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2815,16 +2922,16 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.controlTransferIn = function(params, length, timeout) {
|
||||
var params = new UsbDevice_ControlTransferIn_Params();
|
||||
params.params = params;
|
||||
params.length = length;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_ControlTransferIn_Params();
|
||||
params_.params = params;
|
||||
params_.length = length;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_ControlTransferIn_Name,
|
||||
codec.align(UsbDevice_ControlTransferIn_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_ControlTransferIn_Params, params);
|
||||
builder.encodeStruct(UsbDevice_ControlTransferIn_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2842,16 +2949,16 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.controlTransferOut = function(params, data, timeout) {
|
||||
var params = new UsbDevice_ControlTransferOut_Params();
|
||||
params.params = params;
|
||||
params.data = data;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_ControlTransferOut_Params();
|
||||
params_.params = params;
|
||||
params_.data = data;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_ControlTransferOut_Name,
|
||||
codec.align(UsbDevice_ControlTransferOut_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_ControlTransferOut_Params, params);
|
||||
builder.encodeStruct(UsbDevice_ControlTransferOut_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2869,16 +2976,16 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.genericTransferIn = function(endpointNumber, length, timeout) {
|
||||
var params = new UsbDevice_GenericTransferIn_Params();
|
||||
params.endpointNumber = endpointNumber;
|
||||
params.length = length;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_GenericTransferIn_Params();
|
||||
params_.endpointNumber = endpointNumber;
|
||||
params_.length = length;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_GenericTransferIn_Name,
|
||||
codec.align(UsbDevice_GenericTransferIn_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_GenericTransferIn_Params, params);
|
||||
builder.encodeStruct(UsbDevice_GenericTransferIn_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2896,16 +3003,16 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.genericTransferOut = function(endpointNumber, data, timeout) {
|
||||
var params = new UsbDevice_GenericTransferOut_Params();
|
||||
params.endpointNumber = endpointNumber;
|
||||
params.data = data;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_GenericTransferOut_Params();
|
||||
params_.endpointNumber = endpointNumber;
|
||||
params_.data = data;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_GenericTransferOut_Name,
|
||||
codec.align(UsbDevice_GenericTransferOut_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_GenericTransferOut_Params, params);
|
||||
builder.encodeStruct(UsbDevice_GenericTransferOut_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2923,16 +3030,16 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.isochronousTransferIn = function(endpointNumber, packetLengths, timeout) {
|
||||
var params = new UsbDevice_IsochronousTransferIn_Params();
|
||||
params.endpointNumber = endpointNumber;
|
||||
params.packetLengths = packetLengths;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_IsochronousTransferIn_Params();
|
||||
params_.endpointNumber = endpointNumber;
|
||||
params_.packetLengths = packetLengths;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_IsochronousTransferIn_Name,
|
||||
codec.align(UsbDevice_IsochronousTransferIn_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_IsochronousTransferIn_Params, params);
|
||||
builder.encodeStruct(UsbDevice_IsochronousTransferIn_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -2950,17 +3057,17 @@
|
|||
};
|
||||
|
||||
UsbDeviceProxy.prototype.isochronousTransferOut = function(endpointNumber, data, packetLengths, timeout) {
|
||||
var params = new UsbDevice_IsochronousTransferOut_Params();
|
||||
params.endpointNumber = endpointNumber;
|
||||
params.data = data;
|
||||
params.packetLengths = packetLengths;
|
||||
params.timeout = timeout;
|
||||
var params_ = new UsbDevice_IsochronousTransferOut_Params();
|
||||
params_.endpointNumber = endpointNumber;
|
||||
params_.data = data;
|
||||
params_.packetLengths = packetLengths;
|
||||
params_.timeout = timeout;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var builder = new codec.MessageV1Builder(
|
||||
kUsbDevice_IsochronousTransferOut_Name,
|
||||
codec.align(UsbDevice_IsochronousTransferOut_Params.encodedSize),
|
||||
codec.kMessageExpectsResponse, 0);
|
||||
builder.encodeStruct(UsbDevice_IsochronousTransferOut_Params, params);
|
||||
builder.encodeStruct(UsbDevice_IsochronousTransferOut_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
|
@ -3405,6 +3512,124 @@
|
|||
};
|
||||
UsbDeviceStub.prototype.validator = validateUsbDeviceRequest;
|
||||
UsbDeviceProxy.prototype.validator = validateUsbDeviceResponse;
|
||||
var kUsbDeviceClient_OnDeviceOpened_Name = 0;
|
||||
var kUsbDeviceClient_OnDeviceClosed_Name = 1;
|
||||
|
||||
function UsbDeviceClientPtr(handleOrPtrInfo) {
|
||||
this.ptr = new bindings.InterfacePtrController(UsbDeviceClient,
|
||||
handleOrPtrInfo);
|
||||
}
|
||||
|
||||
function UsbDeviceClientAssociatedPtr(associatedInterfacePtrInfo) {
|
||||
this.ptr = new associatedBindings.AssociatedInterfacePtrController(
|
||||
UsbDeviceClient, associatedInterfacePtrInfo);
|
||||
}
|
||||
|
||||
UsbDeviceClientAssociatedPtr.prototype =
|
||||
Object.create(UsbDeviceClientPtr.prototype);
|
||||
UsbDeviceClientAssociatedPtr.prototype.constructor =
|
||||
UsbDeviceClientAssociatedPtr;
|
||||
|
||||
function UsbDeviceClientProxy(receiver) {
|
||||
this.receiver_ = receiver;
|
||||
}
|
||||
UsbDeviceClientPtr.prototype.onDeviceOpened = function() {
|
||||
return UsbDeviceClientProxy.prototype.onDeviceOpened
|
||||
.apply(this.ptr.getProxy(), arguments);
|
||||
};
|
||||
|
||||
UsbDeviceClientProxy.prototype.onDeviceOpened = function() {
|
||||
var params_ = new UsbDeviceClient_OnDeviceOpened_Params();
|
||||
var builder = new codec.MessageV0Builder(
|
||||
kUsbDeviceClient_OnDeviceOpened_Name,
|
||||
codec.align(UsbDeviceClient_OnDeviceOpened_Params.encodedSize));
|
||||
builder.encodeStruct(UsbDeviceClient_OnDeviceOpened_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.accept(message);
|
||||
};
|
||||
UsbDeviceClientPtr.prototype.onDeviceClosed = function() {
|
||||
return UsbDeviceClientProxy.prototype.onDeviceClosed
|
||||
.apply(this.ptr.getProxy(), arguments);
|
||||
};
|
||||
|
||||
UsbDeviceClientProxy.prototype.onDeviceClosed = function() {
|
||||
var params_ = new UsbDeviceClient_OnDeviceClosed_Params();
|
||||
var builder = new codec.MessageV0Builder(
|
||||
kUsbDeviceClient_OnDeviceClosed_Name,
|
||||
codec.align(UsbDeviceClient_OnDeviceClosed_Params.encodedSize));
|
||||
builder.encodeStruct(UsbDeviceClient_OnDeviceClosed_Params, params_);
|
||||
var message = builder.finish();
|
||||
this.receiver_.accept(message);
|
||||
};
|
||||
|
||||
function UsbDeviceClientStub(delegate) {
|
||||
this.delegate_ = delegate;
|
||||
}
|
||||
UsbDeviceClientStub.prototype.onDeviceOpened = function() {
|
||||
return this.delegate_ && this.delegate_.onDeviceOpened && this.delegate_.onDeviceOpened();
|
||||
}
|
||||
UsbDeviceClientStub.prototype.onDeviceClosed = function() {
|
||||
return this.delegate_ && this.delegate_.onDeviceClosed && this.delegate_.onDeviceClosed();
|
||||
}
|
||||
|
||||
UsbDeviceClientStub.prototype.accept = function(message) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
switch (reader.messageName) {
|
||||
case kUsbDeviceClient_OnDeviceOpened_Name:
|
||||
var params = reader.decodeStruct(UsbDeviceClient_OnDeviceOpened_Params);
|
||||
this.onDeviceOpened();
|
||||
return true;
|
||||
case kUsbDeviceClient_OnDeviceClosed_Name:
|
||||
var params = reader.decodeStruct(UsbDeviceClient_OnDeviceClosed_Params);
|
||||
this.onDeviceClosed();
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
UsbDeviceClientStub.prototype.acceptWithResponder =
|
||||
function(message, responder) {
|
||||
var reader = new codec.MessageReader(message);
|
||||
switch (reader.messageName) {
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
function validateUsbDeviceClientRequest(messageValidator) {
|
||||
var message = messageValidator.message;
|
||||
var paramsClass = null;
|
||||
switch (message.getName()) {
|
||||
case kUsbDeviceClient_OnDeviceOpened_Name:
|
||||
if (!message.expectsResponse() && !message.isResponse())
|
||||
paramsClass = UsbDeviceClient_OnDeviceOpened_Params;
|
||||
break;
|
||||
case kUsbDeviceClient_OnDeviceClosed_Name:
|
||||
if (!message.expectsResponse() && !message.isResponse())
|
||||
paramsClass = UsbDeviceClient_OnDeviceClosed_Params;
|
||||
break;
|
||||
}
|
||||
if (paramsClass === null)
|
||||
return validator.validationError.NONE;
|
||||
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
|
||||
}
|
||||
|
||||
function validateUsbDeviceClientResponse(messageValidator) {
|
||||
return validator.validationError.NONE;
|
||||
}
|
||||
|
||||
var UsbDeviceClient = {
|
||||
name: 'device.mojom.UsbDeviceClient',
|
||||
kVersion: 0,
|
||||
ptrClass: UsbDeviceClientPtr,
|
||||
proxyClass: UsbDeviceClientProxy,
|
||||
stubClass: UsbDeviceClientStub,
|
||||
validateRequest: validateUsbDeviceClientRequest,
|
||||
validateResponse: null,
|
||||
};
|
||||
UsbDeviceClientStub.prototype.validator = validateUsbDeviceClientRequest;
|
||||
UsbDeviceClientProxy.prototype.validator = null;
|
||||
exports.UsbOpenDeviceError = UsbOpenDeviceError;
|
||||
exports.UsbTransferDirection = UsbTransferDirection;
|
||||
exports.UsbControlTransferType = UsbControlTransferType;
|
||||
|
@ -3421,4 +3646,7 @@
|
|||
exports.UsbDevice = UsbDevice;
|
||||
exports.UsbDevicePtr = UsbDevicePtr;
|
||||
exports.UsbDeviceAssociatedPtr = UsbDeviceAssociatedPtr;
|
||||
exports.UsbDeviceClient = UsbDeviceClient;
|
||||
exports.UsbDeviceClientPtr = UsbDeviceClientPtr;
|
||||
exports.UsbDeviceClientAssociatedPtr = UsbDeviceClientAssociatedPtr;
|
||||
})();
|
||||
|
|
79
tests/wpt/web-platform-tests/resources/chromium/url.mojom.js
Normal file
79
tests/wpt/web-platform-tests/resources/chromium/url.mojom.js
Normal file
|
@ -0,0 +1,79 @@
|
|||
// Copyright 2014 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
'use strict';
|
||||
|
||||
(function() {
|
||||
var mojomId = 'url/mojom/url.mojom';
|
||||
if (mojo.internal.isMojomLoaded(mojomId)) {
|
||||
console.warn('The following mojom is loaded multiple times: ' + mojomId);
|
||||
return;
|
||||
}
|
||||
mojo.internal.markMojomLoaded(mojomId);
|
||||
var bindings = mojo;
|
||||
var associatedBindings = mojo;
|
||||
var codec = mojo.internal;
|
||||
var validator = mojo.internal;
|
||||
|
||||
var exports = mojo.internal.exposeNamespace('url.mojom');
|
||||
|
||||
|
||||
|
||||
function Url(values) {
|
||||
this.initDefaults_();
|
||||
this.initFields_(values);
|
||||
}
|
||||
|
||||
|
||||
Url.prototype.initDefaults_ = function() {
|
||||
this.url = null;
|
||||
};
|
||||
Url.prototype.initFields_ = function(fields) {
|
||||
for(var field in fields) {
|
||||
if (this.hasOwnProperty(field))
|
||||
this[field] = fields[field];
|
||||
}
|
||||
};
|
||||
|
||||
Url.validate = function(messageValidator, offset) {
|
||||
var err;
|
||||
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
var kVersionSizes = [
|
||||
{version: 0, numBytes: 16}
|
||||
];
|
||||
err = messageValidator.validateStructVersion(offset, kVersionSizes);
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
|
||||
// validate Url.url
|
||||
err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
|
||||
if (err !== validator.validationError.NONE)
|
||||
return err;
|
||||
|
||||
return validator.validationError.NONE;
|
||||
};
|
||||
|
||||
Url.encodedSize = codec.kStructHeaderSize + 8;
|
||||
|
||||
Url.decode = function(decoder) {
|
||||
var packed;
|
||||
var val = new Url();
|
||||
var numberOfBytes = decoder.readUint32();
|
||||
var version = decoder.readUint32();
|
||||
val.url = decoder.decodeStruct(codec.String);
|
||||
return val;
|
||||
};
|
||||
|
||||
Url.encode = function(encoder, val) {
|
||||
var packed;
|
||||
encoder.writeUint32(Url.encodedSize);
|
||||
encoder.writeUint32(0);
|
||||
encoder.encodeStruct(codec.String, val.url);
|
||||
};
|
||||
exports.Url = Url;
|
||||
})();
|
|
@ -305,13 +305,7 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options)
|
|||
if (parsed[dep_type]) {
|
||||
const inheriting = parsed[dep_type];
|
||||
const inheritor = parsed.name || parsed.target;
|
||||
const deps = [inheriting];
|
||||
// For A includes B, we can ignore A unless B is being tested.
|
||||
if (dep_type !== "includes"
|
||||
|| (inheriting in this.members && !this.members[inheriting].untested)) {
|
||||
deps.push(inheritor);
|
||||
}
|
||||
for (const dep of deps) {
|
||||
for (const dep of [inheriting, inheritor]) {
|
||||
new_options.only.push(dep);
|
||||
all_deps.add(dep);
|
||||
follow_up.add(dep);
|
||||
|
@ -326,7 +320,7 @@ IdlArray.prototype.add_dependency_idls = function(raw_idls, options)
|
|||
next.forEach(process);
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
}.bind(this);
|
||||
|
||||
for (let parsed of parsed_idls) {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/performance-timeline-utils.js"></script>
|
||||
<script src="/common/get-host-info.sub.js"></script>
|
||||
<script>
|
||||
|
@ -20,7 +20,7 @@
|
|||
document.getElementsByTagName('script')[0].parentNode.appendChild(img)
|
||||
})
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
delayedLoadListener(function() {
|
||||
function assertServerTimingEntries(url, expectedEntryCount) {
|
||||
test_equals(performance.getEntriesByName(url)[0].serverTiming.length,
|
||||
expectedEntryCount,
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/performance-timeline-utils.js"></script>
|
||||
<script>
|
||||
setup({explicit_done: true})
|
||||
window.addEventListener('load', function(){
|
||||
delayedLoadListener(function(){
|
||||
assert_not_equals(typeof performance.getEntriesByType('navigation')[0].serverTiming, 'undefined',
|
||||
'An instance of `PerformanceNavigationTiming` should have a `serverTiming` attribute.')
|
||||
done()
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/performance-timeline-utils.js"></script>
|
||||
<script>
|
||||
setup({explicit_done: true})
|
||||
window.addEventListener('load', function(){
|
||||
delayedLoadListener(function(){
|
||||
assert_not_equals(typeof performance.getEntriesByType('resource')[0].serverTiming, 'undefined',
|
||||
'An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute.')
|
||||
done()
|
||||
|
|
|
@ -7,7 +7,7 @@ tests generated by:
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/performance-timeline-utils.js"></script>
|
||||
<script>
|
||||
setup({explicit_done: true})
|
||||
|
@ -49,6 +49,6 @@ tests generated by:
|
|||
document.getElementsByTagName('head')[0].appendChild(script)
|
||||
urlToIndex[script.src] = i
|
||||
}
|
||||
window.addEventListener('load', runTests)
|
||||
delayedLoadListener(runTests)
|
||||
</script>
|
||||
</head>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
(async () => {
|
||||
const scope = 'does/not/exist'
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/performance-timeline-utils.js"></script>
|
||||
<script>
|
||||
setup({explicit_done: true})
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
delayedLoadListener(function() {
|
||||
// there should be exactly three server-timing entries, 2 for document, 1 for img#one
|
||||
test_entries(performance.getEntriesByType('navigation')[0].serverTiming, [{
|
||||
duration: 1.1,
|
||||
|
|
5
tests/wpt/web-platform-tests/signed-exchange/META.yml
Normal file
5
tests/wpt/web-platform-tests/signed-exchange/META.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
spec: https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html
|
||||
suggested_reviewers:
|
||||
- irori
|
||||
- jyasskin
|
||||
- nyaxt
|
|
@ -1,32 +0,0 @@
|
|||
environment:
|
||||
global:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
matrix:
|
||||
- PYTHON: 'C:\\Python27'
|
||||
- PYTHON: 'C:\\Python35'
|
||||
- PYTHON: 'C:\\Python36'
|
||||
|
||||
# Needed to make py.test believe our top level can be imported (we
|
||||
# otherwise end up in a wpt-tools directory, and of course you cannot
|
||||
# import a name including a hyphen in Python, so it ignores the fact
|
||||
# we have a __init__.py at the top level).
|
||||
clone_folder: 'C:\projects\wpttools'
|
||||
|
||||
init:
|
||||
- 'git config --global core.autocrlf true'
|
||||
|
||||
install:
|
||||
- 'rm .git\index'
|
||||
- 'git reset --hard'
|
||||
- 'SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%'
|
||||
- 'git submodule update --init --recursive'
|
||||
- 'python.exe -m pip install tox codecov'
|
||||
|
||||
build: off
|
||||
|
||||
test_script:
|
||||
- 'tox -e py'
|
||||
|
||||
on_success:
|
||||
- 'coverage combine'
|
||||
- 'codecov'
|
|
@ -18,4 +18,10 @@ select = E,W,F,N
|
|||
# N801: class names should use CapWords convention
|
||||
# N802: function name should be lowercase
|
||||
ignore = E128,E129,E221,E226,E231,E251,E265,E302,E303,E305,E402,E731,E901,W601,N801,N802
|
||||
exclude =
|
||||
.tox,
|
||||
pywebsocket,
|
||||
third_party,
|
||||
wptserve/docs/conf.py,
|
||||
wptserve/tests/functional/docroot/invalid.py
|
||||
max-line-length = 141
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
flake8==3.5.0
|
||||
pycodestyle==2.3.1
|
||||
pyflakes==1.6.0
|
||||
pep8-naming==0.4.1
|
|
@ -1,26 +1,20 @@
|
|||
[tox]
|
||||
envlist = py27,py36,pypy
|
||||
envlist = py27,py36,pypy,py27-flake8
|
||||
skipsdist=True
|
||||
|
||||
[testenv]
|
||||
# flake8 versions should be kept in sync across tools/tox.ini, tools/wpt/tox.ini, and tools/wptrunner/tox.ini
|
||||
deps =
|
||||
flake8==3.5.0
|
||||
pycodestyle==2.3.1
|
||||
pyflakes==1.6.0
|
||||
pep8-naming==0.4.1
|
||||
pytest
|
||||
pytest-cov
|
||||
mock
|
||||
hypothesis
|
||||
pytest-catchlog
|
||||
|
||||
commands =
|
||||
pytest --cov {posargs}
|
||||
flake8 --append-config=flake8.ini
|
||||
commands = pytest --cov {posargs}
|
||||
|
||||
passenv =
|
||||
HYPOTHESIS_PROFILE
|
||||
|
||||
[flake8]
|
||||
exclude = .tox,html5lib,third_party,pywebsocket,six,_venv,webencodings,wptserve/docs,wptserve/tests/functional/docroot/,wpt,wptrunner
|
||||
[testenv:py27-flake8]
|
||||
deps = -r{toxinidir}/requirements_flake8.txt
|
||||
commands = flake8 --append-config={toxinidir}/flake8.ini {posargs}
|
||||
|
|
|
@ -46,7 +46,7 @@ class Browser(object):
|
|||
return NotImplemented
|
||||
|
||||
@abstractmethod
|
||||
def version(self, binary=None):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
"""Retrieve the release version of the installed browser."""
|
||||
return NotImplemented
|
||||
|
||||
|
@ -367,7 +367,7 @@ class Firefox(Browser):
|
|||
|
||||
return path
|
||||
|
||||
def version(self, binary=None):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
"""Retrieve the release version of the installed browser."""
|
||||
version_string = call(binary, "--version").strip()
|
||||
m = re.match(r"Mozilla Firefox (.*)", version_string)
|
||||
|
@ -394,7 +394,7 @@ class Fennec(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary=None):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
||||
|
||||
|
@ -458,7 +458,7 @@ class Chrome(Browser):
|
|||
os.chmod(path, st.st_mode | stat.S_IEXEC)
|
||||
return path
|
||||
|
||||
def version(self, binary=None):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
binary = binary or self.binary
|
||||
if uname[0] != "Windows":
|
||||
try:
|
||||
|
@ -497,7 +497,7 @@ class ChromeAndroid(Browser):
|
|||
chrome = Chrome()
|
||||
return chrome.install_webdriver(dest, channel)
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
||||
class Opera(Browser):
|
||||
|
@ -562,7 +562,7 @@ class Opera(Browser):
|
|||
os.chmod(path, st.st_mode | stat.S_IEXEC)
|
||||
return path
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
"""Retrieve the release version of the installed browser."""
|
||||
binary = binary or self.binary
|
||||
try:
|
||||
|
@ -593,7 +593,7 @@ class Edge(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
||||
|
||||
|
@ -619,7 +619,7 @@ class InternetExplorer(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
||||
|
||||
|
@ -647,8 +647,24 @@ class Safari(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
return None
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
if webdriver_binary is None:
|
||||
logger.warn("Cannot find Safari version without safaridriver")
|
||||
return None
|
||||
# Use `safaridriver --version` to get the version. Example output:
|
||||
# "Included with Safari 12.1 (14607.1.11)"
|
||||
# "Included with Safari Technology Preview (Release 67, 13607.1.9.0.1)"
|
||||
# The `--version` flag was added in STP 67, so allow the call to fail.
|
||||
try:
|
||||
version_string = call(webdriver_binary, "--version").strip()
|
||||
except subprocess.CalledProcessError:
|
||||
logger.warn("Failed to call %s --version", webdriver_binary)
|
||||
return None
|
||||
m = re.match(r"Included with Safari (.*)", version_string)
|
||||
if not m:
|
||||
logger.warn("Failed to extract version from: s%", version_string)
|
||||
return None
|
||||
return m.group(1)
|
||||
|
||||
|
||||
class SafariWebDriver(Safari):
|
||||
|
@ -707,7 +723,7 @@ class Servo(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
"""Retrieve the release version of the installed browser."""
|
||||
output = call(binary, "--version")
|
||||
m = re.search(r"Servo ([0-9\.]+-[a-f0-9]+)?(-dirty)?$", output.strip())
|
||||
|
@ -737,7 +753,7 @@ class Sauce(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
||||
|
||||
|
@ -759,5 +775,5 @@ class WebKit(Browser):
|
|||
def install_webdriver(self, dest=None, channel=None):
|
||||
raise NotImplementedError
|
||||
|
||||
def version(self, binary):
|
||||
def version(self, binary=None, webdriver_binary=None):
|
||||
return None
|
||||
|
|
|
@ -509,7 +509,8 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
|
|||
|
||||
venv.install_requirements(os.path.join(wptrunner_path, "requirements.txt"))
|
||||
|
||||
kwargs['browser_version'] = setup_cls.browser.version(kwargs.get("binary"))
|
||||
kwargs['browser_version'] = setup_cls.browser.version(binary=kwargs.get("binary"),
|
||||
webdriver_binary=kwargs.get("webdriver_binary"))
|
||||
return kwargs
|
||||
|
||||
|
||||
|
|
32
tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py
Normal file
32
tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import mock
|
||||
import subprocess
|
||||
|
||||
from tools.wpt import browser
|
||||
|
||||
@mock.patch('subprocess.check_output')
|
||||
def test_safari_version(mocked_check_output):
|
||||
safari = browser.Safari()
|
||||
|
||||
# Safari
|
||||
mocked_check_output.return_value = 'Included with Safari 12.1 (14607.1.11)'
|
||||
assert safari.version(webdriver_binary="safaridriver") == '12.1 (14607.1.11)'
|
||||
|
||||
# Safari Technology Preview
|
||||
mocked_check_output.return_value = 'Included with Safari Technology Preview (Release 67, 13607.1.9.0.1)'
|
||||
assert safari.version(webdriver_binary="safaridriver") == 'Technology Preview (Release 67, 13607.1.9.0.1)'
|
||||
|
||||
@mock.patch('subprocess.check_output')
|
||||
def test_safari_version_errors(mocked_check_output):
|
||||
safari = browser.Safari()
|
||||
|
||||
# No webdriver_binary
|
||||
assert safari.version() is None
|
||||
|
||||
# `safaridriver --version` return gibberish
|
||||
mocked_check_output.return_value = 'gibberish'
|
||||
assert safari.version(webdriver_binary="safaridriver") is None
|
||||
|
||||
# `safaridriver --version` fails (as it does for Safari <=12.0)
|
||||
mocked_check_output.return_value = 'dummy'
|
||||
mocked_check_output.side_effect = subprocess.CalledProcessError(1, 'cmd')
|
||||
assert safari.version(webdriver_binary="safaridriver") is None
|
|
@ -57,9 +57,9 @@ def test_setup_wptrunner(venv, product):
|
|||
parser = run.create_parser()
|
||||
kwargs = vars(parser.parse_args(["--channel=nightly", product]))
|
||||
kwargs["prompt"] = False
|
||||
kwargs["webdriver_binary"] = "fake"
|
||||
# Hack to get a real existing path
|
||||
kwargs["binary"] = sys.argv[0]
|
||||
kwargs["webdriver_binary"] = sys.argv[0]
|
||||
if kwargs["product"] == "sauce":
|
||||
kwargs["product"] = "sauce:firefox:63"
|
||||
run.setup_wptrunner(venv, **kwargs)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[tox]
|
||||
envlist = py27,py27-flake8
|
||||
envlist = py27
|
||||
skipsdist=True
|
||||
|
||||
[testenv]
|
||||
|
@ -14,14 +14,3 @@ deps =
|
|||
|
||||
commands =
|
||||
pytest --cov {posargs}
|
||||
|
||||
[testenv:py27-flake8]
|
||||
# flake8 versions should be kept in sync across tools/tox.ini, tools/wpt/tox.ini, and tools/wptrunner/tox.ini
|
||||
deps =
|
||||
flake8==3.5.0
|
||||
pycodestyle==2.3.1
|
||||
pyflakes==1.6.0
|
||||
pep8-naming==0.4.1
|
||||
|
||||
commands =
|
||||
flake8 --append-config=../flake8.ini {posargs}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
xfail_strict=true
|
||||
|
||||
[tox]
|
||||
envlist = {py27}-{base,chrome,edge,firefox,ie,opera,safari,sauce,servo},py27-flake8
|
||||
envlist = py27-{base,chrome,edge,firefox,ie,opera,safari,sauce,servo}
|
||||
|
||||
[testenv]
|
||||
deps =
|
||||
|
@ -23,14 +23,3 @@ deps =
|
|||
commands = pytest {posargs:--cov}
|
||||
|
||||
setenv = CURRENT_TOX_ENV = {envname}
|
||||
|
||||
[testenv:py27-flake8]
|
||||
# flake8 versions should be kept in sync across tools/tox.ini, tools/wpt/tox.ini, and tools/wptrunner/tox.ini
|
||||
deps =
|
||||
flake8==3.5.0
|
||||
pycodestyle==2.3.1
|
||||
pyflakes==1.6.0
|
||||
pep8-naming==0.4.1
|
||||
|
||||
commands =
|
||||
flake8 --append-config=../flake8.ini
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<!doctype html>
|
||||
<title>just one argument</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
test(function() {
|
||||
postMessage('');
|
||||
this.done();
|
||||
});
|
||||
</script>
|
|
@ -42,6 +42,7 @@ let loadChromiumResources = Promise.resolve().then(() => {
|
|||
[
|
||||
'/resources/chromium/mojo_bindings.js',
|
||||
'/resources/chromium/string16.mojom.js',
|
||||
'/resources/chromium/url.mojom.js',
|
||||
'/resources/chromium/device.mojom.js',
|
||||
'/resources/chromium/device_manager.mojom.js',
|
||||
'/resources/chromium/web_usb_service.mojom.js',
|
||||
|
|
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