mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Update web-platform-tests to revision b'79fa4cf76e0d39e3fc1b7ead85e067b0a064b892'
This commit is contained in:
parent
4a46a476d7
commit
31f9c69336
83 changed files with 2200 additions and 954 deletions
|
@ -4,7 +4,7 @@
|
|||
expected: TIMEOUT
|
||||
|
||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Fetching a blob URL immediately before revoking it works in an iframe.]
|
||||
expected: FAIL
|
||||
|
|
|
@ -326,3 +326,153 @@
|
|||
[margin-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(keyword) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(numeric) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(integer) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(decimal) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-shadow shadow(shadow) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -236,156 +236,6 @@
|
|||
[margin-right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -506,3 +356,126 @@
|
|||
[word-spacing percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[background-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -326,3 +326,153 @@
|
|||
[margin-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -8,3 +8,12 @@
|
|||
[A custom property referencing a non-existent variable is treated as unset]
|
||||
expected: FAIL
|
||||
|
||||
[Custom properties in a cycle become guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
[A custom property referencing a cycle becomes guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
[A custom property referencing a non-existent variable becomes guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,7 +1,14 @@
|
|||
[request-upload.any.html]
|
||||
expected: TIMEOUT
|
||||
[Fetch with POST with ReadableStream]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with text body on 421 response should be retried once on new connection.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[request-upload.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
@ -10,6 +17,13 @@
|
|||
expected: ERROR
|
||||
|
||||
[request-upload.any.worker.html]
|
||||
expected: TIMEOUT
|
||||
[Fetch with POST with ReadableStream]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with text body on 421 response should be retried once on new connection.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -41,3 +41,45 @@
|
|||
[Content-Length%3A%20]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42,42". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30,30". Expected: 30.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30\\r\\nContent-Length: 30,30". Expected: 30.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah\\r\\nContent-Length: aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah, aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42s". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30s". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: -1". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 0x20". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 030\\r\\nContent-Length: 30". Expected: network error.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: \\"30\\"". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: ". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -309,12 +309,9 @@
|
|||
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -14,3 +14,6 @@
|
|||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit-2.html]
|
||||
[preventDefault should allow onclick submit() to succeed]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -2,9 +2,6 @@
|
|||
[input type search: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -23,42 +20,15 @@
|
|||
[input type text: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -68,9 +38,48 @@
|
|||
[input type url: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -3,6 +3,3 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
|
@ -12,5 +13,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -620,3 +620,9 @@
|
|||
[X SNR (-300.5653344749286 dB) is not greater than or equal to 65.737. Got -300.5653344749286.]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15240\]\t-6.9001540120165462e-27\t3.3531737327575684e-1\t3.3531737327575684e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[15241\]\t4.5592646835272248e-41\t3.9367997646331787e-1\t3.9367997646331787e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 3.9367997646331787e-1 at index of 15241.\n\tMax RelError of 1.0000000000000000e+0 at index of 15240.\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[7189\]\t-7.1126672850560558e-27\t-9.8956179618835449e-1\t9.8956179618835449e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[7190\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.8956179618835449e-1 at index of 7189.\n\tMax RelError of 1.0000000000000000e+0 at index of 7189.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[test_element_in_object]
|
||||
expected: FAIL
|
||||
|
||||
[test_element_in_collection]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
|
||||
expected: TIMEOUT
|
||||
|
|
|
@ -53703,6 +53703,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"floats-placement-004.html": [
|
||||
"bbfc9196c867206bef20bc9e16a79325c7b77ab0",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-placement-vertical-001a.xht": [
|
||||
"07de02887e7f28693ef23b518c4729602ff77c3b",
|
||||
[
|
||||
|
@ -285754,6 +285767,14 @@
|
|||
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
|
||||
[]
|
||||
],
|
||||
"javascript-url-srcdoc-cross-origin-iframe-inheritance-helper.sub.html": [
|
||||
"afe4753cf93f8d68884eb731ce69e004a4b5e9ff",
|
||||
[]
|
||||
],
|
||||
"navigate-parent-to-blob.html": [
|
||||
"df4a4438935a5798d3672111081984d6ef9d0ef1",
|
||||
[]
|
||||
],
|
||||
"navigate-self-to-blob.html": [
|
||||
"9ea069969cafff022e94fef3de535feafaca1de7",
|
||||
[]
|
||||
|
@ -285762,6 +285783,10 @@
|
|||
"2642b0fa06730692aa4617260b6903b7f698b4b4",
|
||||
[]
|
||||
],
|
||||
"postmessage-top.html": [
|
||||
"4f83a58dd4a80b5a6171266d2944e628d204e434",
|
||||
[]
|
||||
],
|
||||
"srcdoc-child-frame.html": [
|
||||
"9148be203d30ea043a56b38305877142735a4c49",
|
||||
[]
|
||||
|
@ -286472,7 +286497,7 @@
|
|||
[]
|
||||
],
|
||||
"checkReport.sub.js": [
|
||||
"f188d18207e71569f004070ec4bc7d367ae9d6b0",
|
||||
"ecbc69239098c6c99699e6678ec618b928cc31f1",
|
||||
[]
|
||||
],
|
||||
"dedicated-worker-helper.js": [
|
||||
|
@ -324343,7 +324368,7 @@
|
|||
[]
|
||||
],
|
||||
"common.js": [
|
||||
"65feec3b6b61c1342217ba550652f9dbfa684d6c",
|
||||
"038ef07a6d92af585101c864cdd048cffb68f3bc",
|
||||
[]
|
||||
],
|
||||
"scroll-target-align-001-iframe.html": [
|
||||
|
@ -341895,7 +341920,7 @@
|
|||
[]
|
||||
],
|
||||
"network-partition-key.py": [
|
||||
"61e0496fca35d359008a11f2b581555cb6d94027",
|
||||
"d59c74137b80a7135bb9b2c0b39014b764a61428",
|
||||
[]
|
||||
],
|
||||
"network-partition-worker-checker.html": [
|
||||
|
@ -347228,7 +347253,7 @@
|
|||
},
|
||||
"resources": {
|
||||
"dispatcher.js": [
|
||||
"45225a7f263de4ac7700febf2f99b91c473f8a8d",
|
||||
"dd96310e410b177d37c3224ece2b4cf87be34754",
|
||||
[]
|
||||
],
|
||||
"dispatcher.py": [
|
||||
|
@ -357597,11 +357622,11 @@
|
|||
[]
|
||||
],
|
||||
"webgl1.idl": [
|
||||
"95a0fa342652d5ed76ad567f2a5437b7c888f7e0",
|
||||
"46d629193c9139de5a570734c6ecaf249e3e9600",
|
||||
[]
|
||||
],
|
||||
"webgl2.idl": [
|
||||
"b2e660e6b6545f33e4acb6e378bce3517ab4d4cb",
|
||||
"518637fcc72d3e02924f00d269bf1c56794806dd",
|
||||
[]
|
||||
],
|
||||
"webhid.idl": [
|
||||
|
@ -365485,7 +365510,7 @@
|
|||
[]
|
||||
],
|
||||
"fetch-event-test-worker.js": [
|
||||
"ba8204b9bb8ae94906bb4b0964c999a6c38fc207",
|
||||
"bb59bc928651acd5274431e6d31711c4288523ba",
|
||||
[]
|
||||
],
|
||||
"fetch-event-within-sw-worker.js": [
|
||||
|
@ -378508,7 +378533,7 @@
|
|||
"urlpattern": {
|
||||
"resources": {
|
||||
"urlpatterntestdata.json": [
|
||||
"9e7fe20005bed1aa02a9db4dba749c3ba134449a",
|
||||
"ae9405ea4b1292a210c10add867f6cb0bff12013",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -380567,6 +380592,10 @@
|
|||
"META.yml": [
|
||||
"be8cb028f08842589d6c2f06391bc5c8469048d2",
|
||||
[]
|
||||
],
|
||||
"RTCRtpSynchronizationSource-helper.js": [
|
||||
"10cfd651554a259817cd34521ab44556063f4f44",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"webrtc-ice": {
|
||||
|
@ -406831,6 +406860,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"blob-url-inherits-from-initiator.sub.html": [
|
||||
"72d59325d196a816544a3a82c466e2e688484c3c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"document-write-iframe.html": [
|
||||
"a84e3a37031280ec33ccb98307f422e3ca468744",
|
||||
[
|
||||
|
@ -406873,6 +406909,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"javascript-url-srcdoc-cross-origin-iframe-inheritance.html": [
|
||||
"81210fe30f41faf10a2ca9704c9295bbd228ecfd",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"sandboxed-blob-scheme.html": [
|
||||
"590fa7ec1a9caafc6f18e6821f100629688bd300",
|
||||
[
|
||||
|
@ -415008,7 +415051,7 @@
|
|||
]
|
||||
],
|
||||
"env-in-custom-properties.tentative.html": [
|
||||
"6dadcc586b039b7fe4d69dc6ce4678a601343b77",
|
||||
"24afe2963b938a01d73fc6ff02eb944ee3822b85",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -423437,6 +423480,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"position-sticky-scrollIntoView.html": [
|
||||
"6fb4723529e49a550577d6f38d884028acc277f5",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"position-sticky-scrolled-remove-sibling.html": [
|
||||
"f2cf8a98b30a2c19a986d31bc4da99f0bdd8df9d",
|
||||
[
|
||||
|
@ -423444,6 +423494,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"position-sticky-top-and-bottom.html": [
|
||||
"c790eaaf3ee2b62916e5f151dea10af882c5568a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"position-sticky-top.html": [
|
||||
"9929fc734bab4c9816200bdb04e859eedd11b110",
|
||||
[
|
||||
|
@ -423616,7 +423673,7 @@
|
|||
]
|
||||
],
|
||||
"unit-cycles.html": [
|
||||
"5301b6fcc77b1b7885ef7602410e4f4586391b4f",
|
||||
"f8eba17f2183bbc6fc02e9e5ee2cf5fc55d30d56",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -423630,7 +423687,7 @@
|
|||
]
|
||||
],
|
||||
"var-reference-registered-properties-cycles.html": [
|
||||
"e94da5ddaef0c6906acc37ac78cab571504535d4",
|
||||
"91792ef51db097ed626839537b40814c12b98cef",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -434233,7 +434290,7 @@
|
|||
]
|
||||
],
|
||||
"variable-substitution-variable-declaration.html": [
|
||||
"678d05a1acc234362c1f8ac54f6a2190fc3a9fb1",
|
||||
"0b0ab1f0f0f868fa86673f51d6ada27245926add",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -434282,7 +434339,7 @@
|
|||
]
|
||||
],
|
||||
"variables-substitute-guaranteed-invalid.html": [
|
||||
"c30e8746db516f2ef35e904c948801b184ceecae",
|
||||
"4abfe28d1f21b2891599543b3972b26fbd15b77e",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -443066,7 +443123,7 @@
|
|||
]
|
||||
],
|
||||
"caretnavigation.html": [
|
||||
"defe7fecfc2850355fe21da8a6d14ed6c5265885",
|
||||
"c0a8eca4ac23e179ab7e8d7df741417564c4fda1",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -458162,7 +458219,7 @@
|
|||
]
|
||||
],
|
||||
"request-upload.any.js": [
|
||||
"1412816a3c220d60ca1b3c525ac5953d10157c3c",
|
||||
"82b1ac93c996dc76a641fc7f85e342c513ffe3d8",
|
||||
[
|
||||
"fetch/api/basic/request-upload.any.html",
|
||||
{
|
||||
|
@ -458174,6 +458231,14 @@
|
|||
[
|
||||
"script",
|
||||
"../resources/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/get-host-info.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
|
@ -458189,6 +458254,14 @@
|
|||
[
|
||||
"script",
|
||||
"../resources/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/get-host-info.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
|
@ -458204,6 +458277,14 @@
|
|||
[
|
||||
"script",
|
||||
"../resources/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/get-host-info.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
|
@ -458219,6 +458300,14 @@
|
|||
[
|
||||
"script",
|
||||
"../resources/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/utils.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/common/get-host-info.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
|
@ -464082,7 +464171,7 @@
|
|||
]
|
||||
],
|
||||
"parsing.window.js": [
|
||||
"73fbb482e042c1f05cfedfac8927ea789991265b",
|
||||
"5028ad943dee6ab7bdd915dd61dd87461b059ff3",
|
||||
[
|
||||
"fetch/content-length/parsing.window.html",
|
||||
{}
|
||||
|
@ -509554,7 +509643,7 @@
|
|||
]
|
||||
],
|
||||
"elementTiming.html": [
|
||||
"cdfdff55f33ba591d5068ed0aea644527b12bc4e",
|
||||
"ec71e0477ba1ff98836bca7db9a19484cc01d4d2",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -522997,7 +523086,7 @@
|
|||
]
|
||||
],
|
||||
"pointerevent_touch-action-keyboard.html": [
|
||||
"aeff71331dd61ec5e7da5c0e67e241e9e4bdd941",
|
||||
"ba087ab64151343e6e49b0ae13b2fd1ccb2f7d10",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -540277,7 +540366,7 @@
|
|||
]
|
||||
],
|
||||
"fetch-event.https.html": [
|
||||
"5e56fe248c9ef63cc9d028c15d0de123a8304612",
|
||||
"31a2cb05e2ccb44b6de35beb8000599a516368ee",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -565186,7 +565275,7 @@
|
|||
]
|
||||
],
|
||||
"RTCRtpSynchronizationSource-captureTimestamp.html": [
|
||||
"323c207f5e63e0ca77458e4254e12072c9ac9e2d",
|
||||
"11f2540c94602a9b4e685b9a5a309466c47fcccf",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
|
|
@ -326,3 +326,153 @@
|
|||
[margin-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(keyword) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-weight font-weight(numeric) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(integer) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height number(decimal) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[line-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[letter-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[word-spacing percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-indent percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[text-shadow shadow(shadow) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -206,156 +206,6 @@
|
|||
[margin-right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-height percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[max-width percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[top percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[right percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[bottom percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[left percentage(%) / events]
|
||||
expected: FAIL
|
||||
|
||||
[color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -506,3 +356,126 @@
|
|||
[text-shadow shadow(shadow) / events]
|
||||
expected: FAIL
|
||||
|
||||
[background-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(ex) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(mm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(cm) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-width length(in) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-top-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-right-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-bottom-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[border-left-color color(rgba) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pt) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(pc) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -326,3 +326,153 @@
|
|||
[margin-right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-height percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[max-width percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[top percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[right percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[bottom percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(pc) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(px) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(ex) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(cm) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left length(in) / values]
|
||||
expected: FAIL
|
||||
|
||||
[left percentage(%) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[variable-substitution-variable-declaration.html]
|
||||
[target10 --varC]
|
||||
expected: FAIL
|
||||
|
|
@ -8,3 +8,12 @@
|
|||
[A custom property referencing a non-existent variable is treated as unset]
|
||||
expected: FAIL
|
||||
|
||||
[Custom properties in a cycle become guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
[A custom property referencing a cycle becomes guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
[A custom property referencing a non-existent variable becomes guaranteed-invalid]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,12 +1,26 @@
|
|||
[request-upload.any.html]
|
||||
expected: TIMEOUT
|
||||
[Fetch with POST with ReadableStream]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with text body on 421 response should be retried once on new connection.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[request-upload.any.worker.html]
|
||||
expected: TIMEOUT
|
||||
[Fetch with POST with ReadableStream]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with text body on 421 response should be retried once on new connection.]
|
||||
expected: FAIL
|
||||
|
||||
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
[request-upload.any.serviceworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -41,3 +41,45 @@
|
|||
[Content-Length%3A%20]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42,42". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30,30". Expected: 30.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30\\r\\nContent-Length: 30,30". Expected: 30.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah\\r\\nContent-Length: aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah, aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: aaaah". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 42s". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 30s". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: -1". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 0x20". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: 030\\r\\nContent-Length: 30". Expected: network error.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: \\"30\\"". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
[Input: "Content-Length: ". Expected: 42.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -309,12 +309,9 @@
|
|||
[fetch(): separate response Content-Type: text/plain ]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
expected: TIMEOUT
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -14,3 +14,6 @@
|
|||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
[Non-HTMLElement should not support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[form-double-submit-2.html]
|
||||
[preventDefault should allow onclick submit() to succeed]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -2,9 +2,6 @@
|
|||
[input type search: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -23,42 +20,15 @@
|
|||
[input type text: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -68,9 +38,48 @@
|
|||
[input type url: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -4,6 +4,3 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
|
@ -12,5 +13,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -848,3 +848,9 @@
|
|||
[X SNR (-300.5653344749286 dB) is not greater than or equal to 65.737. Got -300.5653344749286.]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15240\]\t-6.9001540120165462e-27\t3.3531737327575684e-1\t3.3531737327575684e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[15241\]\t4.5592646835272248e-41\t3.9367997646331787e-1\t3.9367997646331787e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 3.9367997646331787e-1 at index of 15241.\n\tMax RelError of 1.0000000000000000e+0 at index of 15240.\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[7189\]\t-7.1126672850560558e-27\t-9.8956179618835449e-1\t9.8956179618835449e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[7190\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.8956179618835449e-1 at index of 7189.\n\tMax RelError of 1.0000000000000000e+0 at index of 7189.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[test_element_in_object]
|
||||
expected: FAIL
|
||||
|
||||
[test_element_in_collection]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Blob URL inherits CSP from initiator.</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
let testCases = [
|
||||
{
|
||||
initiator_origin: window.origin,
|
||||
name: "Initiator is same-origin with target frame.",
|
||||
},
|
||||
{
|
||||
initiator_origin: "http://{{hosts[alt][]}}:{{ports[http][0]}}",
|
||||
name: "Initiator is cross-origin with target frame.",
|
||||
},
|
||||
];
|
||||
|
||||
testCases.forEach(test => {
|
||||
async_test(t => {
|
||||
// Create a popup. At the beginning, the popup has no CSPs.
|
||||
let target = window.open();
|
||||
t.add_cleanup(() => target.close());
|
||||
|
||||
// Create a child frame in the popup. The child frame has
|
||||
// Content-Security-Policy: script-src 'unsafe-inline'. The child frame
|
||||
// will navigate the popup to a blob URL, which will try if eval is
|
||||
// allowed and message back.
|
||||
let initiator = target.document.createElement('iframe');
|
||||
initiator.sandbox = "allow-scripts allow-same-origin allow-top-navigation";
|
||||
initiator.src = test.initiator_origin +
|
||||
"/content-security-policy/inheritance/support/navigate-parent-to-blob.html";
|
||||
|
||||
window.addEventListener("message", t.step_func(e => {
|
||||
if (e.source !== target) return;
|
||||
assert_equals(e.data, "eval blocked",
|
||||
"Eval should be blocked by CSP in blob URL.");
|
||||
t.done();
|
||||
}));
|
||||
|
||||
target.document.body.appendChild(initiator);
|
||||
}, test.name);
|
||||
});
|
||||
</script>
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Content Security Policy: nested inheritance</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
// This test creates a page with CSP: frame-src 'self'. The page is
|
||||
// navigated to a javascript URL creating a cross-origin iframe inside a
|
||||
// srcdoc iframe. If everything works correctly, the cross-origin iframe
|
||||
// should be blocked.
|
||||
//
|
||||
// Note that most of the logic is performed by the iframe. This file is only
|
||||
// for managing testharness assertions.
|
||||
async_test(t => {
|
||||
window.addEventListener("message", t.step_func(function(e) {
|
||||
if (e.data === "frame allowed") {
|
||||
assert_unreached("Frame should have been blocked.");
|
||||
} else if (e.data === "frame blocked") {
|
||||
t.done();
|
||||
}
|
||||
}));
|
||||
}, "Nested cross-origin iframe should be blocked by frame-src 'self'.");
|
||||
</script>
|
||||
<iframe src="./support/javascript-url-srcdoc-cross-origin-iframe-inheritance-helper.sub.html"></iframe>
|
||||
</body>
|
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Security-Policy" content="frame-src 'self'">
|
||||
<script>
|
||||
// The following is the content of a srcdoc iframe. It contains:
|
||||
// - a script that catches the frame-src securitypolicyviolation event and
|
||||
// forwards the information to the parent,
|
||||
// - a cross-origin iframe.
|
||||
let doc = `
|
||||
<script>
|
||||
window.addEventListener("securitypolicyviolation", e => {
|
||||
if (e.violatedDirective === "frame-src") {
|
||||
window.top.postMessage("frame blocked", "*");
|
||||
}
|
||||
});
|
||||
</scr` + `ipt>
|
||||
<iframe src="http://{{hosts[alt][]}}:{{ports[http][0]}}/content-security-policy/inheritance/support/postmessage-top.html"></iframe>`;
|
||||
doc = doc.replaceAll('"', "\\\'");
|
||||
|
||||
const js_url = "javascript:'<iframe srcdoc=\""+ doc +"\">'";
|
||||
window.open(js_url, "_self");
|
||||
</script>
|
||||
</head>
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const blob_payload = `
|
||||
<!doctype html>
|
||||
<script>
|
||||
var i = false;
|
||||
try {
|
||||
eval('i = true');
|
||||
} catch {}
|
||||
opener.postMessage(i ? "eval allowed" : "eval blocked", '*');
|
||||
</scr` + `ipt>
|
||||
`;
|
||||
var blob_url = URL.createObjectURL(
|
||||
new Blob([blob_payload], { type: 'text/html' }));
|
||||
parent.location = blob_url;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<script>
|
||||
top.postMessage("ready", "*");
|
||||
</script>
|
|
@ -70,7 +70,7 @@
|
|||
assert_equals("false", reportExists, data.error);
|
||||
} else {
|
||||
if(reportExists != "" && reportExists == "false" && data["csp-report"]) {
|
||||
assert_unreached("CSP report sent, but not expecting one: " + JSON.stringify(data["csp-report"]));
|
||||
assert_unreached("CSP report sent, but not expecting one");
|
||||
}
|
||||
// Firefox expands 'self' or origins in a policy to the actual origin value
|
||||
// so "www.example.com" becomes "http://www.example.com:80".
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1183944">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="width:100px; display: flow-root; background: red; line-height: 0;">
|
||||
<div style="width: 100px; height: 50px; float: left; background: green;"></div>
|
||||
<div style="width: 100px; height: 10px; float: right; background: green;"></div>
|
||||
<div style="display: inline-block; width: 100px; height: 40px; background: green;"></div>
|
||||
</div>
|
|
@ -28,8 +28,8 @@
|
|||
|
||||
test(() => {
|
||||
const style = window.getComputedStyle(child);
|
||||
assert_equals(style.getPropertyValue("--var1"), " inherited");
|
||||
}, 'Substitution of unrecognized env() causes unset');
|
||||
assert_equals(style.getPropertyValue("--var1"), "");
|
||||
}, 'Substitution of unrecognized env() causes guaranteed-invalid');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Scrolling to sticky position elements uses their unshifted position</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-position-3/#stickypos-scroll" />
|
||||
<meta name="assert" content="This test checks that scrolling to sticky position elements uses their initial position" />
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<style>
|
||||
|
||||
h1 {
|
||||
position: sticky;
|
||||
background: #ddd;
|
||||
border: 1px solid black;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
}
|
||||
|
||||
section {
|
||||
height: 100vh;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<h1>Title 1</h1>
|
||||
<section></section>
|
||||
<h1>Title 2</h1>
|
||||
<section></section>
|
||||
<h1>Title 3</h1>
|
||||
<section></section>
|
||||
|
||||
<script>
|
||||
test(() => {
|
||||
window.scrollTo(0, 0);
|
||||
const element = document.querySelectorAll('h1')[2];
|
||||
element.scrollIntoView();
|
||||
assert_approx_equals(document.scrollingElement.scrollTop, element.offsetTop, 1);
|
||||
}, 'scrolling a sticky element into view should use its unshifted position');
|
||||
</script>
|
||||
</body>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<!DOCTYPE html>
|
||||
<title>position:sticky elements can be constrained by top and bottom exceeding container size</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
|
||||
<meta name="assert" content="This test checks that position:sticky elements obey both top and bottom constraints" />
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<style>
|
||||
|
||||
.scroller {
|
||||
height: 200px;
|
||||
overflow: auto;
|
||||
position: relative;
|
||||
}
|
||||
.container {
|
||||
height: 120px;
|
||||
}
|
||||
.padding, .sticky {
|
||||
height: 50px;
|
||||
}
|
||||
.overflow-padding {
|
||||
height: 200px;
|
||||
}
|
||||
.sticky {
|
||||
position: sticky;
|
||||
background: green;
|
||||
top: -25px;
|
||||
bottom: 150px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<div class="scroller">
|
||||
<div class="container">
|
||||
<div class="padding"></div>
|
||||
<div class="sticky"></div>
|
||||
</div>
|
||||
<div class="overflow-padding"></div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
test(() => {
|
||||
const scroller = document.querySelector('.scroller');
|
||||
const element = document.querySelector('.sticky');
|
||||
scroller.scrollTop = 0;
|
||||
assert_equals(element.offsetTop, 0);
|
||||
}, 'initially the sticky box should be pushed to the top of the container');
|
||||
|
||||
test(() => {
|
||||
const scroller = document.querySelector('.scroller');
|
||||
const element = document.querySelector('.sticky');
|
||||
scroller.scrollTop = 95;
|
||||
assert_equals(element.offsetTop, 70);
|
||||
}, 'when we scroll past the flow position the top constraint pushes it down');
|
||||
</script>
|
|
@ -4,7 +4,7 @@
|
|||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
function register_length(name, inherits=true) {
|
||||
function register_length(name, inherits=false) {
|
||||
CSS.registerProperty({
|
||||
name: name,
|
||||
syntax: '<length>',
|
||||
|
@ -96,19 +96,19 @@
|
|||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-em);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-em', '');
|
||||
assert_property_equals('--font-size-em', '0px');
|
||||
}, 'Lengths with em units may not be referenced from font-size');
|
||||
|
||||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-ex);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-ex', '');
|
||||
assert_property_equals('--font-size-ex', '0px');
|
||||
}, 'Lengths with ex units may not be referenced from font-size');
|
||||
|
||||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-ch);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-ch', '');
|
||||
assert_property_equals('--font-size-ch', '0px');
|
||||
}, 'Lengths with ch units may not be referenced from font-size');
|
||||
|
||||
test(function() {
|
||||
|
@ -122,7 +122,7 @@
|
|||
let root = document.documentElement;
|
||||
root.style = 'font-size: var(--font-size-rem);';
|
||||
assert_property_equals('font-size', unsetFontSize, root);
|
||||
assert_property_equals('--font-size-rem', '', root);
|
||||
assert_property_equals('--font-size-rem', '0px', root);
|
||||
}, 'Lengths with rem units may not be referenced from font-size on root element');
|
||||
|
||||
test(function() {
|
||||
|
@ -155,26 +155,26 @@
|
|||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-em-via-var);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-em-via-var', '');
|
||||
assert_property_equals('--font-size-em-via-var', '0px');
|
||||
}, 'Lengths with em units are detected via var references');
|
||||
|
||||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-ex-via-var);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-ex-via-var', '');
|
||||
assert_property_equals('--font-size-ex-via-var', '0px');
|
||||
}, 'Lengths with ex units are detected via var references');
|
||||
|
||||
test(function() {
|
||||
target.style = 'font-size: var(--font-size-ch-via-var);';
|
||||
assert_property_equals('font-size', unsetFontSize);
|
||||
assert_property_equals('--font-size-ch-via-var', '');
|
||||
assert_property_equals('--font-size-ch-via-var', '0px');
|
||||
}, 'Lengths with ch units are detected via var references');
|
||||
|
||||
test(function() {
|
||||
let root = document.documentElement;
|
||||
root.style = 'font-size: var(--font-size-rem-via-var);';
|
||||
assert_property_equals('font-size', unsetFontSize, root);
|
||||
assert_property_equals('--font-size-rem-via-var', '', root);
|
||||
assert_property_equals('--font-size-rem-via-var', '0px', root);
|
||||
root.style = 'font-size: unset';
|
||||
}, 'Lengths with rem units are detected via var references');
|
||||
|
||||
|
|
|
@ -25,13 +25,13 @@ test(function() {
|
|||
CSS.registerProperty({name: '--registered-1-d', syntax: '<length>', initialValue: '4px', inherits: false});
|
||||
|
||||
computedStyle = getComputedStyle(test1);
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-a'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-b'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '30px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '4px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), '');
|
||||
assert_equals(computedStyle.left, '50px');
|
||||
assert_equals(computedStyle.top, '60px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-a'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-b'), '2px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '2px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '2px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), '1px');
|
||||
assert_equals(computedStyle.left, '1px');
|
||||
assert_equals(computedStyle.top, '2px');
|
||||
}, "A var() cycle between two registered properties is handled correctly.");
|
||||
</script>
|
||||
|
||||
|
@ -62,18 +62,18 @@ test(function() {
|
|||
CSS.registerProperty({name: '--registered-2-e', syntax: '<length>', initialValue: '5px', inherits: false});
|
||||
|
||||
computedStyle = getComputedStyle(test2);
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-a'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-a'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-a'), '');
|
||||
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '30px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '3px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-d'), '40px');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-2-e'), '5px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '50px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), '1px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-d'), '60px');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-2-e'), '');
|
||||
assert_equals(computedStyle.left, '70px');
|
||||
assert_equals(computedStyle.left, '1px');
|
||||
assert_equals(computedStyle.top, '80px');
|
||||
}, "A var() cycle between a registered properties and an unregistered property is handled correctly.");
|
||||
</script>
|
||||
|
@ -136,7 +136,7 @@ test(function() {
|
|||
assert_equals(computedStyle.getPropertyValue('--unregistered-4-a'), '');
|
||||
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-4-b'), 'meow');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-4-c'), 'circle');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-4-c'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-4-b'), 'woof');
|
||||
assert_equals(computedStyle.getPropertyValue('--unregistered-4-c'), '');
|
||||
assert_equals(computedStyle.transitionProperty, 'water');
|
||||
|
@ -174,9 +174,10 @@ test(function() {
|
|||
let computedStyle = getComputedStyle(test5);
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-a'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-b'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-c'), 'foo');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-d'), 'bar');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-e'), 'baz');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-c'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-d'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('--registered-5-e'), '');
|
||||
assert_equals(computedStyle.getPropertyValue('color'), 'rgb(0, 128, 0)');
|
||||
}, "Invalid at computed-value time triggers 'unset' behavior");
|
||||
}, "Custom properties with universal syntax become guaranteed-invalid when " +
|
||||
"invalid at computed-value time");
|
||||
</script>
|
||||
|
|
|
@ -19,14 +19,7 @@ async function keyPress(target, key) {
|
|||
code = KEY_CODE_MAP[key];
|
||||
|
||||
// First move pointer on target and click to ensure it receives the key.
|
||||
let actions = new test_driver.Actions()
|
||||
.pointerMove(0, 0, {origin: target})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.keyDown(code)
|
||||
.keyUp(code);
|
||||
|
||||
return actions.send();
|
||||
return test_driver.send_keys(target, code);
|
||||
}
|
||||
|
||||
// Use rAF to wait for the value of the getter function passed to not change for
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
|
||||
{ element: "target10", propertyName: "--varA", expectedPropertyValue: "" },
|
||||
{ element: "target10", propertyName: "--varB", expectedPropertyValue: "" },
|
||||
{ element: "target10", propertyName: "--varC", expectedPropertyValue: " another good one" },
|
||||
{ element: "target10", propertyName: "--varC", expectedPropertyValue: "" },
|
||||
];
|
||||
|
||||
testcases.forEach(function (testcase) {
|
||||
|
|
|
@ -30,15 +30,15 @@
|
|||
let cs = getComputedStyle(target1);
|
||||
assert_equals(cs.getPropertyValue('--var1'), '');
|
||||
assert_equals(cs.getPropertyValue('--var2'), '');
|
||||
}, 'Custom properties in a cycle are guaranteed-invalid');
|
||||
}, 'Custom properties in a cycle become guaranteed-invalid');
|
||||
|
||||
test( function () {
|
||||
let cs = getComputedStyle(target1);
|
||||
assert_equals(cs.getPropertyValue('--var3'), ' inherited');
|
||||
}, 'A custom property referencing a cycle is treated as unset');
|
||||
assert_equals(cs.getPropertyValue('--var3'), '');
|
||||
}, 'A custom property referencing a cycle becomes guaranteed-invalid');
|
||||
|
||||
test( function () {
|
||||
let cs = getComputedStyle(target1);
|
||||
assert_equals(cs.getPropertyValue('--var4'), ' inherited');
|
||||
}, 'A custom property referencing a non-existent variable is treated as unset');
|
||||
assert_equals(cs.getPropertyValue('--var4'), '');
|
||||
}, 'A custom property referencing a non-existent variable becomes guaranteed-invalid');
|
||||
</script>
|
||||
|
|
|
@ -28,12 +28,7 @@ const KEY_CODE_MAP = {
|
|||
*/
|
||||
function keyPress(target, key) {
|
||||
const code = KEY_CODE_MAP[key];
|
||||
|
||||
let actions = new test_driver.Actions()
|
||||
.keyDown(code)
|
||||
.keyUp(code);
|
||||
|
||||
return actions.send();
|
||||
return test_driver.send_keys(target, code);
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// META: global=window,worker
|
||||
// META: script=../resources/utils.js
|
||||
// META: script=/common/utils.js
|
||||
// META: script=/common/get-host-info.sub.js
|
||||
|
||||
function testUpload(desc, url, method, createBody, expectedBody) {
|
||||
const requestInit = {"method": method}
|
||||
|
@ -123,3 +125,30 @@ testUploadFailure("Fetch with POST with ReadableStream containing Blob", url,
|
|||
controller.close();
|
||||
}})
|
||||
});
|
||||
|
||||
promise_test(async (test) => {
|
||||
const resp = await fetch(
|
||||
"/fetch/connection-pool/resources/network-partition-key.py?"
|
||||
+ `status=421&uuid=${token()}&partition_id=${get_host_info().ORIGIN}`
|
||||
+ `&dispatch=check_partition&addcounter=true`,
|
||||
{method: "POST", body: "foobar"});
|
||||
assert_equals(resp.status, 421);
|
||||
const text = await resp.text();
|
||||
assert_equals(text, "ok. Request was sent 2 times. 2 connections were created.");
|
||||
}, "Fetch with POST with text body on 421 response should be retried once on new connection.");
|
||||
|
||||
promise_test(async (test) => {
|
||||
const body = new ReadableStream({start: controller => {
|
||||
const encoder = new TextEncoder();
|
||||
controller.enqueue(encoder.encode("Test"));
|
||||
controller.close();
|
||||
}});
|
||||
const resp = await fetch(
|
||||
"/fetch/connection-pool/resources/network-partition-key.py?"
|
||||
+ `status=421&uuid=${token()}&partition_id=${get_host_info().ORIGIN}`
|
||||
+ `&dispatch=check_partition&addcounter=true`,
|
||||
{method: "POST", body: body});
|
||||
assert_equals(resp.status, 421);
|
||||
const text = await resp.text();
|
||||
assert_equals(text, "ok. Request was sent 1 times. 1 connections were created.");
|
||||
}, "Fetch with POST with ReadableStream on 421 response should return the response and not retry.");
|
||||
|
|
|
@ -25,15 +25,26 @@ def main(request, response):
|
|||
# Unless nocheck_partition is true, check partition_id against server_state, and update server_state.
|
||||
stash = request.server.stash
|
||||
test_failed = False
|
||||
request_count = 0;
|
||||
connection_count = 0;
|
||||
if request.GET.first(b"nocheck_partition", None) != b"True":
|
||||
# Need to grab the lock to access the Stash, since requests are made in parallel.
|
||||
with stash.lock:
|
||||
# Don't use server hostname here, since H2 allows multiple hosts to reuse a connection.
|
||||
# Server IP is not currently available, unfortunately.
|
||||
address_key = isomorphic_encode(str(request.client_address) + u"|" + str(request.url_parts.port))
|
||||
server_state = stash.take(uuid) or {b"test_failed": False}
|
||||
if address_key in server_state and server_state[address_key] != partition_id:
|
||||
server_state = stash.take(uuid) or {b"test_failed": False,
|
||||
b"request_count": 0, b"connection_count": 0}
|
||||
request_count = server_state[b"request_count"]
|
||||
request_count += 1
|
||||
server_state[b"request_count"] = request_count
|
||||
if address_key in server_state:
|
||||
if server_state[address_key] != partition_id:
|
||||
server_state[b"test_failed"] = True
|
||||
else:
|
||||
connection_count = server_state[b"connection_count"]
|
||||
connection_count += 1
|
||||
server_state[b"connection_count"] = connection_count
|
||||
server_state[address_key] = partition_id
|
||||
test_failed = server_state[b"test_failed"]
|
||||
stash.put(uuid, server_state)
|
||||
|
@ -50,9 +61,14 @@ def main(request, response):
|
|||
return handle_fetch_file(request, response, partition_id, uuid)
|
||||
|
||||
if dispatch == b"check_partition":
|
||||
status = request.GET.first(b"status", 200)
|
||||
if test_failed:
|
||||
return simple_response(request, response, 200, b"OK", b"Multiple partition IDs used on a socket")
|
||||
return simple_response(request, response, 200, b"OK", b"ok")
|
||||
return simple_response(request, response, status, b"OK", b"Multiple partition IDs used on a socket")
|
||||
body = b"ok"
|
||||
if request.GET.first(b"addcounter", False):
|
||||
body += (". Request was sent " + str(request_count) + " times. " +
|
||||
str(connection_count) + " connections were created.").encode('utf-8')
|
||||
return simple_response(request, response, status, b"OK", body)
|
||||
|
||||
if dispatch == b"clean_up":
|
||||
stash.take(uuid)
|
||||
|
|
|
@ -3,17 +3,16 @@ promise_test(() => {
|
|||
}, "Loading JSON…");
|
||||
|
||||
function runTests(testUnits) {
|
||||
testUnits.forEach(testUnit => {
|
||||
const input = encodeURIComponent(testUnit.input);
|
||||
testUnits.forEach(({ input, output }) => {
|
||||
promise_test(t => {
|
||||
const result = fetch("resources/content-length.py?length=" + input);
|
||||
if (testUnit.output === null) {
|
||||
const result = fetch(`resources/content-length.py?length=${encodeURIComponent(input)}`);
|
||||
if (output === null) {
|
||||
return promise_rejects_js(t, TypeError, result);
|
||||
} else {
|
||||
return result.then(res => res.text()).then(text => {
|
||||
assert_equals(text.length, testUnit.output);
|
||||
assert_equals(text.length, output);
|
||||
});
|
||||
}
|
||||
}, input);
|
||||
}, `Input: ${format_value(input)}. Expected: ${output === null ? "network error" : output}.`);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -10,10 +10,28 @@ const dispatcher_path =
|
|||
'/html/cross-origin-opener-policy/reporting/resources/dispatcher.py';
|
||||
const dispatcher_url = new URL(dispatcher_path, location.href).href;
|
||||
|
||||
// Return a promise, limiting the number of concurrent accesses to a shared
|
||||
// resources to |max_concurrent_access|.
|
||||
const concurrencyLimiter = (max_concurrency) => {
|
||||
let pending = 0;
|
||||
let waiting = [];
|
||||
return async (task) => {
|
||||
pending++;
|
||||
if (pending > max_concurrency)
|
||||
await new Promise(resolve => waiting.push(resolve));
|
||||
await task();
|
||||
pending--;
|
||||
waiting.shift()?.();
|
||||
};
|
||||
}
|
||||
|
||||
// The official web-platform-test runner sometimes drop POST requests when
|
||||
// too many are requested in parallel. Limiting this document to send only one
|
||||
// at a time fixes the issue.
|
||||
const sendLimiter = concurrencyLimiter(1);
|
||||
|
||||
const send = async function(uuid, message) {
|
||||
// The official web-platform-test runner sometimes drop POST requests when
|
||||
// many are requested in parallel. Using a lock fixes the issue.
|
||||
await navigator.locks.request("dispatcher_send", async lock => {
|
||||
await sendLimiter(async () => {
|
||||
await fetch(dispatcher_url + `?uuid=${uuid}`, {
|
||||
method: 'POST',
|
||||
body: message
|
||||
|
|
|
@ -36,20 +36,31 @@ let events = [];
|
|||
async_test(t => {
|
||||
let test1 = document.getElementById("test1");
|
||||
let test2 = document.getElementById("test2");
|
||||
document.getElementById("test1").addEventListener("click",
|
||||
() => {test2.style.display = "block"; test2.style.top = "100px"; test2.style.left = "0"});
|
||||
document.getElementById("test2").addEventListener("click",
|
||||
e => {events.push(e.clientX); events.push(e.clientY)});
|
||||
test1.addEventListener("click",
|
||||
() => {
|
||||
test2.style.display = "block";
|
||||
test2.style.top = "100px";
|
||||
test2.style.left = "0"});
|
||||
test2.addEventListener("click",
|
||||
e => {
|
||||
events.push(e.clientX);
|
||||
events.push(e.clientY);});
|
||||
|
||||
let div = document.getElementById("backing");
|
||||
const waitCondition = new Promise((resolve, reject)=>{setTimeout(resolve, 5000);});
|
||||
const test1ClickWatcher = new EventWatcher(t, test1, ["click"], ()=>waitCondition);
|
||||
const test2ClickWatcher = new EventWatcher(t, test2, ["click"], ()=>waitCondition);
|
||||
let waitForClicks = Promise.all([test1ClickWatcher.wait_for(["click"]), test2ClickWatcher.wait_for(["click"])]);
|
||||
let actions = new test_driver.Actions()
|
||||
.pointerMove(0, 0, {origin: test1})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.send()
|
||||
.then(()=>new test_driver.Actions()
|
||||
.pointerMove(0, 0, {origin: test2})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.send()
|
||||
.send())
|
||||
.then(()=>waitForClicks)
|
||||
.then(t.step_func_done(() => assert_array_equals(events, [50, 150])))
|
||||
.catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
|
||||
});
|
||||
|
|
|
@ -523,32 +523,32 @@ interface mixin WebGLRenderingContextBase
|
|||
sequence<DOMString>? getSupportedExtensions();
|
||||
object? getExtension(DOMString name);
|
||||
|
||||
void activeTexture(GLenum texture);
|
||||
void attachShader(WebGLProgram program, WebGLShader shader);
|
||||
void bindAttribLocation(WebGLProgram program, GLuint index, DOMString name);
|
||||
void bindBuffer(GLenum target, WebGLBuffer? buffer);
|
||||
void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
|
||||
void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
|
||||
void bindTexture(GLenum target, WebGLTexture? texture);
|
||||
void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
void blendEquation(GLenum mode);
|
||||
void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
|
||||
void blendFunc(GLenum sfactor, GLenum dfactor);
|
||||
void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB,
|
||||
undefined activeTexture(GLenum texture);
|
||||
undefined attachShader(WebGLProgram program, WebGLShader shader);
|
||||
undefined bindAttribLocation(WebGLProgram program, GLuint index, DOMString name);
|
||||
undefined bindBuffer(GLenum target, WebGLBuffer? buffer);
|
||||
undefined bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
|
||||
undefined bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
|
||||
undefined bindTexture(GLenum target, WebGLTexture? texture);
|
||||
undefined blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
undefined blendEquation(GLenum mode);
|
||||
undefined blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
|
||||
undefined blendFunc(GLenum sfactor, GLenum dfactor);
|
||||
undefined blendFuncSeparate(GLenum srcRGB, GLenum dstRGB,
|
||||
GLenum srcAlpha, GLenum dstAlpha);
|
||||
|
||||
[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target);
|
||||
void clear(GLbitfield mask);
|
||||
void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
void clearDepth(GLclampf depth);
|
||||
void clearStencil(GLint s);
|
||||
void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
void compileShader(WebGLShader shader);
|
||||
undefined clear(GLbitfield mask);
|
||||
undefined clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
undefined clearDepth(GLclampf depth);
|
||||
undefined clearStencil(GLint s);
|
||||
undefined colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
undefined compileShader(WebGLShader shader);
|
||||
|
||||
void copyTexImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
undefined copyTexImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
GLint border);
|
||||
void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
|
||||
WebGLBuffer? createBuffer();
|
||||
|
@ -558,36 +558,36 @@ interface mixin WebGLRenderingContextBase
|
|||
WebGLShader? createShader(GLenum type);
|
||||
WebGLTexture? createTexture();
|
||||
|
||||
void cullFace(GLenum mode);
|
||||
undefined cullFace(GLenum mode);
|
||||
|
||||
void deleteBuffer(WebGLBuffer? buffer);
|
||||
void deleteFramebuffer(WebGLFramebuffer? framebuffer);
|
||||
void deleteProgram(WebGLProgram? program);
|
||||
void deleteRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
||||
void deleteShader(WebGLShader? shader);
|
||||
void deleteTexture(WebGLTexture? texture);
|
||||
undefined deleteBuffer(WebGLBuffer? buffer);
|
||||
undefined deleteFramebuffer(WebGLFramebuffer? framebuffer);
|
||||
undefined deleteProgram(WebGLProgram? program);
|
||||
undefined deleteRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
||||
undefined deleteShader(WebGLShader? shader);
|
||||
undefined deleteTexture(WebGLTexture? texture);
|
||||
|
||||
void depthFunc(GLenum func);
|
||||
void depthMask(GLboolean flag);
|
||||
void depthRange(GLclampf zNear, GLclampf zFar);
|
||||
void detachShader(WebGLProgram program, WebGLShader shader);
|
||||
void disable(GLenum cap);
|
||||
void disableVertexAttribArray(GLuint index);
|
||||
void drawArrays(GLenum mode, GLint first, GLsizei count);
|
||||
void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
|
||||
undefined depthFunc(GLenum func);
|
||||
undefined depthMask(GLboolean flag);
|
||||
undefined depthRange(GLclampf zNear, GLclampf zFar);
|
||||
undefined detachShader(WebGLProgram program, WebGLShader shader);
|
||||
undefined disable(GLenum cap);
|
||||
undefined disableVertexAttribArray(GLuint index);
|
||||
undefined drawArrays(GLenum mode, GLint first, GLsizei count);
|
||||
undefined drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
|
||||
|
||||
void enable(GLenum cap);
|
||||
void enableVertexAttribArray(GLuint index);
|
||||
void finish();
|
||||
void flush();
|
||||
void framebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
undefined enable(GLenum cap);
|
||||
undefined enableVertexAttribArray(GLuint index);
|
||||
undefined finish();
|
||||
undefined flush();
|
||||
undefined framebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
WebGLRenderbuffer? renderbuffer);
|
||||
void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
|
||||
undefined framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
|
||||
WebGLTexture? texture, GLint level);
|
||||
void frontFace(GLenum mode);
|
||||
undefined frontFace(GLenum mode);
|
||||
|
||||
void generateMipmap(GLenum target);
|
||||
undefined generateMipmap(GLenum target);
|
||||
|
||||
WebGLActiveInfo? getActiveAttrib(WebGLProgram program, GLuint index);
|
||||
WebGLActiveInfo? getActiveUniform(WebGLProgram program, GLuint index);
|
||||
|
@ -621,7 +621,7 @@ interface mixin WebGLRenderingContextBase
|
|||
|
||||
[WebGLHandlesContextLoss] GLintptr getVertexAttribOffset(GLuint index, GLenum pname);
|
||||
|
||||
void hint(GLenum target, GLenum mode);
|
||||
undefined hint(GLenum target, GLenum mode);
|
||||
[WebGLHandlesContextLoss] GLboolean isBuffer(WebGLBuffer? buffer);
|
||||
[WebGLHandlesContextLoss] GLboolean isEnabled(GLenum cap);
|
||||
[WebGLHandlesContextLoss] GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
|
||||
|
@ -629,99 +629,99 @@ interface mixin WebGLRenderingContextBase
|
|||
[WebGLHandlesContextLoss] GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
||||
[WebGLHandlesContextLoss] GLboolean isShader(WebGLShader? shader);
|
||||
[WebGLHandlesContextLoss] GLboolean isTexture(WebGLTexture? texture);
|
||||
void lineWidth(GLfloat width);
|
||||
void linkProgram(WebGLProgram program);
|
||||
void pixelStorei(GLenum pname, GLint param);
|
||||
void polygonOffset(GLfloat factor, GLfloat units);
|
||||
undefined lineWidth(GLfloat width);
|
||||
undefined linkProgram(WebGLProgram program);
|
||||
undefined pixelStorei(GLenum pname, GLint param);
|
||||
undefined polygonOffset(GLfloat factor, GLfloat units);
|
||||
|
||||
void renderbufferStorage(GLenum target, GLenum internalformat,
|
||||
undefined renderbufferStorage(GLenum target, GLenum internalformat,
|
||||
GLsizei width, GLsizei height);
|
||||
void sampleCoverage(GLclampf value, GLboolean invert);
|
||||
void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
undefined sampleCoverage(GLclampf value, GLboolean invert);
|
||||
undefined scissor(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
|
||||
void shaderSource(WebGLShader shader, DOMString source);
|
||||
undefined shaderSource(WebGLShader shader, DOMString source);
|
||||
|
||||
void stencilFunc(GLenum func, GLint ref, GLuint mask);
|
||||
void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
|
||||
void stencilMask(GLuint mask);
|
||||
void stencilMaskSeparate(GLenum face, GLuint mask);
|
||||
void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
|
||||
void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
undefined stencilFunc(GLenum func, GLint ref, GLuint mask);
|
||||
undefined stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
|
||||
undefined stencilMask(GLuint mask);
|
||||
undefined stencilMaskSeparate(GLenum face, GLuint mask);
|
||||
undefined stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
|
||||
undefined stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
|
||||
void texParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
void texParameteri(GLenum target, GLenum pname, GLint param);
|
||||
undefined texParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
undefined texParameteri(GLenum target, GLenum pname, GLint param);
|
||||
|
||||
void uniform1f(WebGLUniformLocation? location, GLfloat x);
|
||||
void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
|
||||
void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
|
||||
void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
undefined uniform1f(WebGLUniformLocation? location, GLfloat x);
|
||||
undefined uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
|
||||
undefined uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
|
||||
undefined uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
|
||||
void uniform1i(WebGLUniformLocation? location, GLint x);
|
||||
void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
|
||||
void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
|
||||
void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
|
||||
undefined uniform1i(WebGLUniformLocation? location, GLint x);
|
||||
undefined uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
|
||||
undefined uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
|
||||
undefined uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
|
||||
|
||||
void useProgram(WebGLProgram? program);
|
||||
void validateProgram(WebGLProgram program);
|
||||
undefined useProgram(WebGLProgram? program);
|
||||
undefined validateProgram(WebGLProgram program);
|
||||
|
||||
void vertexAttrib1f(GLuint index, GLfloat x);
|
||||
void vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
|
||||
void vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
|
||||
void vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
undefined vertexAttrib1f(GLuint index, GLfloat x);
|
||||
undefined vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
|
||||
undefined vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
|
||||
undefined vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
|
||||
void vertexAttrib1fv(GLuint index, Float32List values);
|
||||
void vertexAttrib2fv(GLuint index, Float32List values);
|
||||
void vertexAttrib3fv(GLuint index, Float32List values);
|
||||
void vertexAttrib4fv(GLuint index, Float32List values);
|
||||
undefined vertexAttrib1fv(GLuint index, Float32List values);
|
||||
undefined vertexAttrib2fv(GLuint index, Float32List values);
|
||||
undefined vertexAttrib3fv(GLuint index, Float32List values);
|
||||
undefined vertexAttrib4fv(GLuint index, Float32List values);
|
||||
|
||||
void vertexAttribPointer(GLuint index, GLint size, GLenum type,
|
||||
undefined vertexAttribPointer(GLuint index, GLint size, GLenum type,
|
||||
GLboolean normalized, GLsizei stride, GLintptr offset);
|
||||
|
||||
void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
undefined viewport(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
};
|
||||
|
||||
interface mixin WebGLRenderingContextOverloads
|
||||
{
|
||||
void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
|
||||
void bufferData(GLenum target, [AllowShared] BufferSource? data, GLenum usage);
|
||||
void bufferSubData(GLenum target, GLintptr offset, [AllowShared] BufferSource data);
|
||||
undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
|
||||
undefined bufferData(GLenum target, [AllowShared] BufferSource? data, GLenum usage);
|
||||
undefined bufferSubData(GLenum target, GLintptr offset, [AllowShared] BufferSource data);
|
||||
|
||||
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
GLsizei width, GLsizei height, GLint border,
|
||||
[AllowShared] ArrayBufferView data);
|
||||
void compressedTexSubImage2D(GLenum target, GLint level,
|
||||
undefined compressedTexSubImage2D(GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height, GLenum format,
|
||||
[AllowShared] ArrayBufferView data);
|
||||
|
||||
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
GLsizei width, GLsizei height, GLint border, GLenum format,
|
||||
GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
|
||||
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
|
||||
|
||||
void uniform1fv(WebGLUniformLocation? location, Float32List v);
|
||||
void uniform2fv(WebGLUniformLocation? location, Float32List v);
|
||||
void uniform3fv(WebGLUniformLocation? location, Float32List v);
|
||||
void uniform4fv(WebGLUniformLocation? location, Float32List v);
|
||||
undefined uniform1fv(WebGLUniformLocation? location, Float32List v);
|
||||
undefined uniform2fv(WebGLUniformLocation? location, Float32List v);
|
||||
undefined uniform3fv(WebGLUniformLocation? location, Float32List v);
|
||||
undefined uniform4fv(WebGLUniformLocation? location, Float32List v);
|
||||
|
||||
void uniform1iv(WebGLUniformLocation? location, Int32List v);
|
||||
void uniform2iv(WebGLUniformLocation? location, Int32List v);
|
||||
void uniform3iv(WebGLUniformLocation? location, Int32List v);
|
||||
void uniform4iv(WebGLUniformLocation? location, Int32List v);
|
||||
undefined uniform1iv(WebGLUniformLocation? location, Int32List v);
|
||||
undefined uniform2iv(WebGLUniformLocation? location, Int32List v);
|
||||
undefined uniform3iv(WebGLUniformLocation? location, Int32List v);
|
||||
undefined uniform4iv(WebGLUniformLocation? location, Int32List v);
|
||||
|
||||
void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker)]
|
||||
|
|
|
@ -298,69 +298,69 @@ interface mixin WebGL2RenderingContextBase
|
|||
const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247;
|
||||
|
||||
/* Buffer objects */
|
||||
void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
|
||||
undefined copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
|
||||
GLintptr writeOffset, GLsizeiptr size);
|
||||
// MapBufferRange, in particular its read-only and write-only modes,
|
||||
// can not be exposed safely to JavaScript. GetBufferSubData
|
||||
// replaces it for the purpose of fetching data back from the GPU.
|
||||
void getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
|
||||
undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
|
||||
optional GLuint dstOffset = 0, optional GLuint length = 0);
|
||||
|
||||
/* Framebuffer objects */
|
||||
void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
|
||||
undefined blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
|
||||
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||
void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
|
||||
undefined framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
|
||||
GLint layer);
|
||||
void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
|
||||
void invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
|
||||
undefined invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
|
||||
undefined invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
|
||||
GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
void readBuffer(GLenum src);
|
||||
undefined readBuffer(GLenum src);
|
||||
|
||||
/* Renderbuffer objects */
|
||||
any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname);
|
||||
void renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
|
||||
undefined renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
|
||||
GLsizei width, GLsizei height);
|
||||
|
||||
/* Texture objects */
|
||||
void texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
|
||||
undefined texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
|
||||
GLsizei height);
|
||||
void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
|
||||
undefined texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLsizei depth);
|
||||
|
||||
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr pboOffset);
|
||||
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border, GLenum format, GLenum type,
|
||||
TexImageSource source); // May throw DOMException
|
||||
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData);
|
||||
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
|
||||
GLuint srcOffset);
|
||||
|
||||
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
|
||||
GLintptr pboOffset);
|
||||
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
|
||||
TexImageSource source); // May throw DOMException
|
||||
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
|
||||
[AllowShared] ArrayBufferView? srcData, optional GLuint srcOffset = 0);
|
||||
|
||||
void copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
|
||||
void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset);
|
||||
void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
|
||||
|
||||
void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLsizei imageSize, GLintptr offset);
|
||||
void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, [AllowShared] ArrayBufferView srcData,
|
||||
optional GLuint srcOffset = 0,
|
||||
|
@ -370,206 +370,206 @@ interface mixin WebGL2RenderingContextBase
|
|||
[WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name);
|
||||
|
||||
/* Uniforms */
|
||||
void uniform1ui(WebGLUniformLocation? location, GLuint v0);
|
||||
void uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
|
||||
void uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
|
||||
void uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
|
||||
undefined uniform1ui(WebGLUniformLocation? location, GLuint v0);
|
||||
undefined uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
|
||||
undefined uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
|
||||
undefined uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
|
||||
|
||||
void uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
|
||||
void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
|
||||
void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
|
||||
/* Vertex attribs */
|
||||
void vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
|
||||
void vertexAttribI4iv(GLuint index, Int32List values);
|
||||
void vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
|
||||
void vertexAttribI4uiv(GLuint index, Uint32List values);
|
||||
void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
|
||||
undefined vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
|
||||
undefined vertexAttribI4iv(GLuint index, Int32List values);
|
||||
undefined vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
|
||||
undefined vertexAttribI4uiv(GLuint index, Uint32List values);
|
||||
undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
|
||||
|
||||
/* Writing to the drawing buffer */
|
||||
void vertexAttribDivisor(GLuint index, GLuint divisor);
|
||||
void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
|
||||
void drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
|
||||
void drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
|
||||
undefined vertexAttribDivisor(GLuint index, GLuint divisor);
|
||||
undefined drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
|
||||
undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
|
||||
undefined drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
|
||||
|
||||
/* Multiple Render Targets */
|
||||
void drawBuffers(sequence<GLenum> buffers);
|
||||
undefined drawBuffers(sequence<GLenum> buffers);
|
||||
|
||||
void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
|
||||
undefined clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
|
||||
optional GLuint srcOffset = 0);
|
||||
void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
|
||||
undefined clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
|
||||
optional GLuint srcOffset = 0);
|
||||
void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
|
||||
undefined clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
|
||||
optional GLuint srcOffset = 0);
|
||||
|
||||
void clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
|
||||
undefined clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
|
||||
|
||||
/* Query Objects */
|
||||
WebGLQuery? createQuery();
|
||||
void deleteQuery(WebGLQuery? query);
|
||||
undefined deleteQuery(WebGLQuery? query);
|
||||
[WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query);
|
||||
void beginQuery(GLenum target, WebGLQuery query);
|
||||
void endQuery(GLenum target);
|
||||
undefined beginQuery(GLenum target, WebGLQuery query);
|
||||
undefined endQuery(GLenum target);
|
||||
WebGLQuery? getQuery(GLenum target, GLenum pname);
|
||||
any getQueryParameter(WebGLQuery query, GLenum pname);
|
||||
|
||||
/* Sampler Objects */
|
||||
WebGLSampler? createSampler();
|
||||
void deleteSampler(WebGLSampler? sampler);
|
||||
undefined deleteSampler(WebGLSampler? sampler);
|
||||
[WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler);
|
||||
void bindSampler(GLuint unit, WebGLSampler? sampler);
|
||||
void samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
|
||||
void samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
|
||||
undefined bindSampler(GLuint unit, WebGLSampler? sampler);
|
||||
undefined samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
|
||||
undefined samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
|
||||
any getSamplerParameter(WebGLSampler sampler, GLenum pname);
|
||||
|
||||
/* Sync objects */
|
||||
WebGLSync? fenceSync(GLenum condition, GLbitfield flags);
|
||||
[WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync);
|
||||
void deleteSync(WebGLSync? sync);
|
||||
undefined deleteSync(WebGLSync? sync);
|
||||
GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout);
|
||||
void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
|
||||
undefined waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
|
||||
any getSyncParameter(WebGLSync sync, GLenum pname);
|
||||
|
||||
/* Transform Feedback */
|
||||
WebGLTransformFeedback? createTransformFeedback();
|
||||
void deleteTransformFeedback(WebGLTransformFeedback? tf);
|
||||
undefined deleteTransformFeedback(WebGLTransformFeedback? tf);
|
||||
[WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback? tf);
|
||||
void bindTransformFeedback (GLenum target, WebGLTransformFeedback? tf);
|
||||
void beginTransformFeedback(GLenum primitiveMode);
|
||||
void endTransformFeedback();
|
||||
void transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
|
||||
undefined bindTransformFeedback (GLenum target, WebGLTransformFeedback? tf);
|
||||
undefined beginTransformFeedback(GLenum primitiveMode);
|
||||
undefined endTransformFeedback();
|
||||
undefined transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
|
||||
WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index);
|
||||
void pauseTransformFeedback();
|
||||
void resumeTransformFeedback();
|
||||
undefined pauseTransformFeedback();
|
||||
undefined resumeTransformFeedback();
|
||||
|
||||
/* Uniform Buffer Objects and Transform Feedback Buffers */
|
||||
void bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
|
||||
void bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
|
||||
undefined bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
|
||||
undefined bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
|
||||
any getIndexedParameter(GLenum target, GLuint index);
|
||||
sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames);
|
||||
any getActiveUniforms(WebGLProgram program, sequence<GLuint> uniformIndices, GLenum pname);
|
||||
GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName);
|
||||
any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname);
|
||||
DOMString? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex);
|
||||
void uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
|
||||
undefined uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
|
||||
|
||||
/* Vertex Array Objects */
|
||||
WebGLVertexArrayObject? createVertexArray();
|
||||
void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
|
||||
undefined deleteVertexArray(WebGLVertexArrayObject? vertexArray);
|
||||
[WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
|
||||
void bindVertexArray(WebGLVertexArrayObject? array);
|
||||
undefined bindVertexArray(WebGLVertexArrayObject? array);
|
||||
};
|
||||
|
||||
interface mixin WebGL2RenderingContextOverloads
|
||||
{
|
||||
// WebGL1:
|
||||
void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
|
||||
void bufferData(GLenum target, [AllowShared] BufferSource? srcData, GLenum usage);
|
||||
void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] BufferSource srcData);
|
||||
undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
|
||||
undefined bufferData(GLenum target, [AllowShared] BufferSource? srcData, GLenum usage);
|
||||
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] BufferSource srcData);
|
||||
// WebGL2:
|
||||
void bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset,
|
||||
undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset,
|
||||
optional GLuint length = 0);
|
||||
void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
|
||||
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
|
||||
GLuint srcOffset, optional GLuint length = 0);
|
||||
|
||||
// WebGL1 legacy entrypoints:
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
GLsizei width, GLsizei height, GLint border, GLenum format,
|
||||
GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
|
||||
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
|
||||
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height,
|
||||
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
|
||||
|
||||
// WebGL2 entrypoints:
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLint border, GLenum format, GLenum type, GLintptr pboOffset);
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLint border, GLenum format, GLenum type,
|
||||
TexImageSource source); // May throw DOMException
|
||||
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||
GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
|
||||
GLuint srcOffset);
|
||||
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
GLsizei height, GLenum format, GLenum type, GLintptr pboOffset);
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
GLsizei height, GLenum format, GLenum type,
|
||||
TexImageSource source); // May throw DOMException
|
||||
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
||||
GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
|
||||
GLuint srcOffset);
|
||||
|
||||
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLint border, GLsizei imageSize, GLintptr offset);
|
||||
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
|
||||
|
||||
void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset);
|
||||
void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
GLsizei width, GLsizei height, GLenum format,
|
||||
[AllowShared] ArrayBufferView srcData,
|
||||
optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLengthOverride = 0);
|
||||
|
||||
void uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
|
||||
void uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
void uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
|
||||
optional GLuint srcLength = 0);
|
||||
|
||||
void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
|
||||
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
|
||||
|
||||
/* Reading back pixels */
|
||||
// WebGL1:
|
||||
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
[AllowShared] ArrayBufferView? dstData);
|
||||
// WebGL2:
|
||||
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
GLintptr offset);
|
||||
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
|
||||
[AllowShared] ArrayBufferView dstData, GLuint dstOffset);
|
||||
};
|
||||
|
||||
|
|
|
@ -120,17 +120,21 @@
|
|||
});
|
||||
|
||||
// Inject keyboard scroll inputs.
|
||||
const arrow_down = "\uE015";
|
||||
const arrow_right = "\uE014";
|
||||
|
||||
actions_promise = new test_driver.Actions()
|
||||
.addPointer("mousePointer1", "mouse")
|
||||
.pointerMove(0, 0, {origin: target0})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.addTick()
|
||||
.keyDown("\uE015")
|
||||
.keyUp("\uE015")
|
||||
.keyDown("\uE014")
|
||||
.keyUp("\uE014")
|
||||
.send();
|
||||
actions_promise = actions_promise
|
||||
.then(()=>test_driver.send_keys(target0, arrow_down))
|
||||
.then(()=>test_driver.send_keys(target0, arrow_down))
|
||||
.then(()=>test_driver.send_keys(target0, arrow_right))
|
||||
.then(()=>test_driver.send_keys(target0, arrow_right));
|
||||
}
|
||||
|
||||
function updateDescriptionNextStepKeyboard() {
|
||||
|
|
|
@ -1030,5 +1030,27 @@ promise_test(async t => {
|
|||
assert_true(loadend, 'loadend');
|
||||
}, 'XHR upload progress events for network fallback');
|
||||
|
||||
promise_test(async t => {
|
||||
// Set page_url to "?ignore" so the service worker falls back to network
|
||||
// for the main resource request, and add a suffix to avoid colliding
|
||||
// with other tests.
|
||||
const page_url = 'resources/?ignore-for-request-body-fallback-string';
|
||||
|
||||
const frame = await with_iframe(page_url);
|
||||
t.add_cleanup(() => { frame.remove(); });
|
||||
// Add "?clone-and-ignore" so the service worker falls back to
|
||||
// echo-content.py.
|
||||
const echo_url = '/fetch/api/resources/echo-content.py?status=421';
|
||||
const response = await frame.contentWindow.fetch(echo_url, {
|
||||
method: 'POST',
|
||||
body: 'text body'
|
||||
});
|
||||
assert_equals(response.status, 421);
|
||||
const text = await response.text();
|
||||
assert_equals(
|
||||
text,
|
||||
'text body. Request was sent 1 times.',
|
||||
'the network fallback request should include the request body');
|
||||
}, 'Fetch with POST with text on sw 421 response should not be retried.');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -167,6 +167,17 @@ function handleCloneAndIgnore(event) {
|
|||
return;
|
||||
}
|
||||
|
||||
var handle_status_count = 0;
|
||||
function handleStatus(event) {
|
||||
handle_status_count++;
|
||||
event.respondWith(async function() {
|
||||
const res = await fetch(event.request);
|
||||
const text = await res.text();
|
||||
return new Response(`${text}. Request was sent ${handle_status_count} times.`,
|
||||
{"status": new URL(event.request.url).searchParams.get("status")});
|
||||
}());
|
||||
}
|
||||
|
||||
self.addEventListener('fetch', function(event) {
|
||||
var url = event.request.url;
|
||||
var handlers = [
|
||||
|
@ -194,6 +205,7 @@ self.addEventListener('fetch', function(event) {
|
|||
{ pattern: '?isHistoryNavigation', fn: handleIsHistoryNavigation },
|
||||
{ pattern: '?use-and-ignore', fn: handleUseAndIgnore },
|
||||
{ pattern: '?clone-and-ignore', fn: handleCloneAndIgnore },
|
||||
{ pattern: '?status', fn: handleStatus },
|
||||
];
|
||||
|
||||
var handler = null;
|
||||
|
|
|
@ -985,6 +985,14 @@
|
|||
"username": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "username": "café" },
|
||||
"input": { "username" : "café" },
|
||||
"expected": {
|
||||
"input": { "username" : "café" },
|
||||
"username": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "username": "caf%c3%a9" },
|
||||
"input": { "username" : "café" },
|
||||
|
@ -998,6 +1006,14 @@
|
|||
"password": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "password": "café" },
|
||||
"input": { "password" : "café" },
|
||||
"expected": {
|
||||
"input": { "password" : "café" },
|
||||
"password": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "password": "caf%c3%a9" },
|
||||
"input": { "password" : "café" },
|
||||
|
@ -1011,6 +1027,14 @@
|
|||
"hostname": { "input": "xn--caf-dma.com", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "hostname": "café.com" },
|
||||
"input": { "hostname" : "café.com" },
|
||||
"expected": {
|
||||
"input": { "hostname" : "café.com" },
|
||||
"hostname": { "input": "xn--caf-dma.com", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "port": "" },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
|
@ -1020,6 +1044,35 @@
|
|||
"port": { "input": "", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "protocol": "http", "port": "80" },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"expected": {
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"protocol": { "input": "http", "groups": {}},
|
||||
"port": { "input": "", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "protocol": "http", "port": "80{20}?" },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"expected": null
|
||||
},
|
||||
{
|
||||
"pattern": { "protocol": "http", "port": "80 " },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"error": true
|
||||
},
|
||||
{
|
||||
"pattern": { "port": "80" },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"expected": null
|
||||
},
|
||||
{
|
||||
"pattern": { "protocol": "http{s}?", "port": "80" },
|
||||
"input": { "protocol": "http", "port": "80" },
|
||||
"expected": null
|
||||
},
|
||||
{
|
||||
"pattern": { "port": "80" },
|
||||
"input": { "port": "80" },
|
||||
|
@ -1057,6 +1110,14 @@
|
|||
"pathname": { "input": "/caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "pathname": "/café" },
|
||||
"input": { "pathname": "/café" },
|
||||
"expected": {
|
||||
"input": { "pathname": "/café" },
|
||||
"pathname": { "input": "/caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "pathname": "/caf%c3%a9" },
|
||||
"input": { "pathname": "/café" },
|
||||
|
@ -1077,6 +1138,25 @@
|
|||
"pathname": { "input": "/foo/bar", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "pathname": "/foo/../bar" },
|
||||
"input": { "pathname": "/bar" },
|
||||
"expected": {
|
||||
"input": { "pathname": "/bar" },
|
||||
"pathname": { "input": "/bar", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "pathname": "./foo/bar", "baseURL": "https://example.com" },
|
||||
"input": { "pathname": "foo/bar", "baseURL": "https://example.com" },
|
||||
"expected": {
|
||||
"input": { "pathname": "foo/bar", "baseURL": "https://example.com" },
|
||||
"exactly_empty_components": [ "username", "password", "port" ],
|
||||
"protocol": { "input": "https", "groups": {}},
|
||||
"hostname": { "input": "example.com", "groups": {}},
|
||||
"pathname": { "input": "/foo/bar", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "pathname": "foo/bar" },
|
||||
"input": "https://example.com/foo/bar",
|
||||
|
@ -1112,6 +1192,14 @@
|
|||
"search": { "input": "q=caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "search": "q=café" },
|
||||
"input": { "search": "q=café" },
|
||||
"expected": {
|
||||
"input": { "search": "q=café" },
|
||||
"search": { "input": "q=caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "search": "q=caf%c3%a9" },
|
||||
"input": { "search": "q=café" },
|
||||
|
@ -1125,6 +1213,14 @@
|
|||
"hash": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "hash": "café" },
|
||||
"input": { "hash": "café" },
|
||||
"expected": {
|
||||
"input": { "hash": "café" },
|
||||
"hash": { "input": "caf%C3%A9", "groups": {}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"pattern": { "hash": "caf%c3%a9" },
|
||||
"input": { "hash": "café" },
|
||||
|
|
|
@ -8,145 +8,10 @@
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
|
||||
<script src="/webrtc/RTCStats-helper.js"></script>
|
||||
<script src="/webrtc-extensions/RTCRtpSynchronizationSource-helper.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
var kAbsCaptureTime =
|
||||
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
|
||||
|
||||
function addHeaderExtensionToSdp(sdp, uri) {
|
||||
const extmap = new RegExp('a=extmap:(\\d+)');
|
||||
let sdpLines = sdp.split('\r\n');
|
||||
|
||||
// This assumes at most one audio m= section and one video m= section.
|
||||
// If more are present, only the first section of each kind is munged.
|
||||
for (const section of ['audio', 'video']) {
|
||||
let found_section = false;
|
||||
let maxId = undefined;
|
||||
let maxIdLine = undefined;
|
||||
let extmapAllowMixed = false;
|
||||
|
||||
// find the largest header extension id for section.
|
||||
for (let i = 0; i < sdpLines.length; ++i) {
|
||||
if (!found_section) {
|
||||
if (sdpLines[i].startsWith('m=' + section)) {
|
||||
found_section = true;
|
||||
}
|
||||
continue;
|
||||
} else {
|
||||
if (sdpLines[i].startsWith('m=')) {
|
||||
// end of section
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sdpLines[i] === 'a=extmap-allow-mixed') {
|
||||
extmapAllowMixed = true;
|
||||
}
|
||||
let result = sdpLines[i].match(extmap);
|
||||
if (result && result.length === 2) {
|
||||
if (maxId == undefined || result[1] > maxId) {
|
||||
maxId = parseInt(result[1]);
|
||||
maxIdLine = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (maxId == 14 && !extmapAllowMixed) {
|
||||
// Reaching the limit of one byte header extension. Adding two byte header
|
||||
// extension support.
|
||||
sdpLines.splice(maxIdLine + 1, 0, 'a=extmap-allow-mixed');
|
||||
}
|
||||
if (maxIdLine !== undefined) {
|
||||
sdpLines.splice(maxIdLine + 1, 0,
|
||||
'a=extmap:' + (maxId + 1).toString() + ' ' + uri);
|
||||
}
|
||||
}
|
||||
return sdpLines.join('\r\n');
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
|
||||
// when the RTP header extension API is implemented.
|
||||
async function addAbsCaptureTimeAndExchangeOffer(caller, callee) {
|
||||
let offer = await caller.createOffer();
|
||||
|
||||
// Absolute capture time header extension may not be offered by default,
|
||||
// in such case, munge the SDP.
|
||||
offer.sdp = addHeaderExtensionToSdp(offer.sdp, kAbsCaptureTime);
|
||||
|
||||
await caller.setLocalDescription(offer);
|
||||
return callee.setRemoteDescription(offer);
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
|
||||
// when the RTP header extension API is implemented.
|
||||
async function checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
|
||||
absCaptureTimeAnswered) {
|
||||
let answer = await callee.createAnswer();
|
||||
|
||||
const extmap = new RegExp('a=extmap:\\d+ ' + kAbsCaptureTime + '\r\n', 'g');
|
||||
if (answer.sdp.match(extmap) == null) {
|
||||
// We expect that absolute capture time RTP header extension is answered.
|
||||
// But if not, there is no need to proceed with the test.
|
||||
assert_false(absCaptureTimeAnswered, 'Absolute capture time RTP ' +
|
||||
'header extension is not answered');
|
||||
} else {
|
||||
if (!absCaptureTimeAnswered) {
|
||||
// We expect that absolute capture time RTP header extension is not
|
||||
// answered, but it is, then we munge the answer to remove it.
|
||||
answer.sdp = answer.sdp.replace(extmap, '');
|
||||
}
|
||||
}
|
||||
|
||||
await callee.setLocalDescription(answer);
|
||||
return caller.setRemoteDescription(answer);
|
||||
}
|
||||
|
||||
async function exchangeOfferAndListenToOntrack(t, caller, callee,
|
||||
absCaptureTimeOffered) {
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
|
||||
// Absolute capture time header extension is expected not offered by default,
|
||||
// and thus munging is needed to enable it.
|
||||
await absCaptureTimeOffered
|
||||
? addAbsCaptureTimeAndExchangeOffer(caller, callee)
|
||||
: exchangeOffer(caller, callee);
|
||||
return ontrackPromise;
|
||||
}
|
||||
|
||||
async function initiateSingleTrackCall(t, cap, absCaptureTimeOffered,
|
||||
absCaptureTimeAnswered) {
|
||||
const caller = new RTCPeerConnection();
|
||||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
|
||||
const stream = await getNoiseStream(cap);
|
||||
stream.getTracks().forEach(track => {
|
||||
caller.addTrack(track, stream);
|
||||
t.add_cleanup(() => track.stop());
|
||||
});
|
||||
|
||||
// TODO(crbug.com/988432): `getSynchronizationSources() on the audio side
|
||||
// needs a hardware sink for the returned dictionary entries to get updated.
|
||||
const remoteVideo = document.getElementById('remote');
|
||||
|
||||
callee.ontrack = e => {
|
||||
remoteVideo.srcObject = e.streams[0];
|
||||
}
|
||||
|
||||
exchangeIceCandidates(caller, callee);
|
||||
|
||||
await exchangeOfferAndListenToOntrack(t, caller, callee,
|
||||
absCaptureTimeOffered);
|
||||
|
||||
// Exchange answer and check whether the absolute capture time RTP header
|
||||
// extension is answered.
|
||||
await checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
|
||||
absCaptureTimeAnswered);
|
||||
|
||||
return [caller, callee];
|
||||
}
|
||||
|
||||
function listenForCaptureTimestamp(t, receiver) {
|
||||
return new Promise((resolve) => {
|
||||
function listen() {
|
||||
|
@ -165,8 +30,8 @@ function listenForCaptureTimestamp(t, receiver) {
|
|||
});
|
||||
}
|
||||
|
||||
// This test only passes if the implementation is sending the absolute capture
|
||||
// timestamp header extension.
|
||||
// Passes if `getSynchronizationSources()` contains `captureTimestamp` if and
|
||||
// only if expected.
|
||||
for (const kind of ['audio', 'video']) {
|
||||
promise_test(async t => {
|
||||
const [caller, callee] = await initiateSingleTrackCall(
|
||||
|
@ -202,6 +67,9 @@ for (const kind of ['audio', 'video']) {
|
|||
'negotiated');
|
||||
}
|
||||
|
||||
// Passes if `captureTimestamp` for audio and video are comparable, which is
|
||||
// expected since the test creates a local peer connection between `caller` and
|
||||
// `callee`.
|
||||
promise_test(async t => {
|
||||
const [caller, callee] = await initiateSingleTrackCall(
|
||||
t, {audio: true, video: true}, true, true);
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
'use strict';
|
||||
|
||||
// This file depends on `webrtc/RTCPeerConnection-helper.js`
|
||||
// which should be loaded from the main HTML file.
|
||||
|
||||
var kAbsCaptureTime =
|
||||
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
|
||||
|
||||
function addHeaderExtensionToSdp(sdp, uri) {
|
||||
const extmap = new RegExp('a=extmap:(\\d+)');
|
||||
let sdpLines = sdp.split('\r\n');
|
||||
|
||||
// This assumes at most one audio m= section and one video m= section.
|
||||
// If more are present, only the first section of each kind is munged.
|
||||
for (const section of ['audio', 'video']) {
|
||||
let found_section = false;
|
||||
let maxId = undefined;
|
||||
let maxIdLine = undefined;
|
||||
let extmapAllowMixed = false;
|
||||
|
||||
// find the largest header extension id for section.
|
||||
for (let i = 0; i < sdpLines.length; ++i) {
|
||||
if (!found_section) {
|
||||
if (sdpLines[i].startsWith('m=' + section)) {
|
||||
found_section = true;
|
||||
}
|
||||
continue;
|
||||
} else {
|
||||
if (sdpLines[i].startsWith('m=')) {
|
||||
// end of section
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sdpLines[i] === 'a=extmap-allow-mixed') {
|
||||
extmapAllowMixed = true;
|
||||
}
|
||||
let result = sdpLines[i].match(extmap);
|
||||
if (result && result.length === 2) {
|
||||
if (maxId == undefined || result[1] > maxId) {
|
||||
maxId = parseInt(result[1]);
|
||||
maxIdLine = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (maxId == 14 && !extmapAllowMixed) {
|
||||
// Reaching the limit of one byte header extension. Adding two byte header
|
||||
// extension support.
|
||||
sdpLines.splice(maxIdLine + 1, 0, 'a=extmap-allow-mixed');
|
||||
}
|
||||
if (maxIdLine !== undefined) {
|
||||
sdpLines.splice(maxIdLine + 1, 0,
|
||||
'a=extmap:' + (maxId + 1).toString() + ' ' + uri);
|
||||
}
|
||||
}
|
||||
return sdpLines.join('\r\n');
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
|
||||
// when the RTP header extension API is implemented.
|
||||
async function addAbsCaptureTimeAndExchangeOffer(caller, callee) {
|
||||
let offer = await caller.createOffer();
|
||||
|
||||
// Absolute capture time header extension may not be offered by default,
|
||||
// in such case, munge the SDP.
|
||||
offer.sdp = addHeaderExtensionToSdp(offer.sdp, kAbsCaptureTime);
|
||||
|
||||
await caller.setLocalDescription(offer);
|
||||
return callee.setRemoteDescription(offer);
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
|
||||
// when the RTP header extension API is implemented.
|
||||
async function checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
|
||||
absCaptureTimeAnswered) {
|
||||
let answer = await callee.createAnswer();
|
||||
|
||||
const extmap = new RegExp('a=extmap:\\d+ ' + kAbsCaptureTime + '\r\n', 'g');
|
||||
if (answer.sdp.match(extmap) == null) {
|
||||
// We expect that absolute capture time RTP header extension is answered.
|
||||
// But if not, there is no need to proceed with the test.
|
||||
assert_false(absCaptureTimeAnswered, 'Absolute capture time RTP ' +
|
||||
'header extension is not answered');
|
||||
} else {
|
||||
if (!absCaptureTimeAnswered) {
|
||||
// We expect that absolute capture time RTP header extension is not
|
||||
// answered, but it is, then we munge the answer to remove it.
|
||||
answer.sdp = answer.sdp.replace(extmap, '');
|
||||
}
|
||||
}
|
||||
|
||||
await callee.setLocalDescription(answer);
|
||||
return caller.setRemoteDescription(answer);
|
||||
}
|
||||
|
||||
async function exchangeOfferAndListenToOntrack(t, caller, callee,
|
||||
absCaptureTimeOffered) {
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
|
||||
// Absolute capture time header extension is expected not offered by default,
|
||||
// and thus munging is needed to enable it.
|
||||
await absCaptureTimeOffered
|
||||
? addAbsCaptureTimeAndExchangeOffer(caller, callee)
|
||||
: exchangeOffer(caller, callee);
|
||||
return ontrackPromise;
|
||||
}
|
||||
|
||||
async function initiateSingleTrackCall(t, cap, absCaptureTimeOffered,
|
||||
absCaptureTimeAnswered) {
|
||||
const caller = new RTCPeerConnection();
|
||||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
|
||||
const stream = await getNoiseStream(cap);
|
||||
stream.getTracks().forEach(track => {
|
||||
caller.addTrack(track, stream);
|
||||
t.add_cleanup(() => track.stop());
|
||||
});
|
||||
|
||||
// TODO(crbug.com/988432): `getSynchronizationSources() on the audio side
|
||||
// needs a hardware sink for the returned dictionary entries to get updated.
|
||||
const remoteVideo = document.getElementById('remote');
|
||||
|
||||
callee.ontrack = e => {
|
||||
remoteVideo.srcObject = e.streams[0];
|
||||
}
|
||||
|
||||
exchangeIceCandidates(caller, callee);
|
||||
|
||||
await exchangeOfferAndListenToOntrack(t, caller, callee,
|
||||
absCaptureTimeOffered);
|
||||
|
||||
// Exchange answer and check whether the absolute capture time RTP header
|
||||
// extension is answered.
|
||||
await checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
|
||||
absCaptureTimeAnswered);
|
||||
|
||||
return [caller, callee];
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue