mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Auto merge of #27159 - servo-wpt-sync:wpt_update_03-07-2020, r=jdm
Sync WPT with upstream (03-07-2020) Automated downstream sync of changes from upstream as of 03-07-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
745eb88e32
85 changed files with 1490 additions and 309 deletions
|
@ -0,0 +1,8 @@
|
||||||
|
[url-charset.window.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[Blob charset should override any auto-detected charset.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Blob charset should override <meta charset>.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-002.html]
|
||||||
|
[Hit test float]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
[font-weight-matching.html]
|
||||||
|
[Test @font-face matching for weight 99]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 420]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 600]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 1000]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 470]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 900]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 100]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 400]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 249]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 750]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 751]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Test @font-face matching for weight 399]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -315,9 +315,6 @@
|
||||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -327,12 +324,15 @@
|
||||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*]
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript; charset=windows-1252 text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
[preserve-fragment.html]
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-frag-non-utf8-encoded-document.html]
|
||||||
|
[Fragment Navigation: fragment id should not be found in non UTF8 document]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_4.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_5.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[cross-origin-objects-on-new-window.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -171,6 +171,3 @@
|
||||||
[XHTML img usemap="#hash-id"]
|
[XHTML img usemap="#hash-id"]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[HTML (standards) IMG usemap="no-hash-name"]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[event_timeupdate.html]
|
||||||
|
expected: CRASH
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_escaping-1.html]
|
[iframe_sandbox_popups_escaping-1.html]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -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]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
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,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -11,3 +11,6 @@
|
||||||
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
|
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[XRView interface: attribute isFirstPersonObserver]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[003.html]
|
[003.html]
|
||||||
expected: ERROR
|
|
||||||
[shared]
|
[shared]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
8
tests/wpt/metadata/FileAPI/url/url-charset.window.js.ini
Normal file
8
tests/wpt/metadata/FileAPI/url/url-charset.window.js.ini
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[url-charset.window.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[Blob charset should override any auto-detected charset.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Blob charset should override <meta charset>.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
|
@ -2217,8 +2217,29 @@
|
||||||
},
|
},
|
||||||
"appmanifest": {
|
"appmanifest": {
|
||||||
"display-member": {
|
"display-member": {
|
||||||
"display-member-media-feature-manual.html": [
|
"display-member-media-feature-browser-manual.html": [
|
||||||
"d4807febee965ba42474bbb4a740a3e5ed8d07fc",
|
"e568cc538abf46056b9ceb745286228805bc60b6",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-fullscreen-manual.html": [
|
||||||
|
"77f41b0a5a9f2906f6a5ce84841cd7b5e1b6ae20",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-minimal-ui-manual.html": [
|
||||||
|
"b0a67d7867a8e8aa953d98797db6b1c7e7372c43",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-standalone-manual.html": [
|
||||||
|
"b62007b7ae6872de0561c08f903756a0a104a413",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -249078,11 +249099,35 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"display-member": {
|
"display-member": {
|
||||||
"display-member-media-feature.webmanifest": [
|
"display-member-media-feature-browser.webmanifest": [
|
||||||
|
"1b633378ad49a20434a4eca619bde612d660a958",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-browser.webmanifest.headers": [
|
||||||
|
"2bab061d43ab9e533b0160ca506231939886cd89",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-fullscreen.webmanifest": [
|
||||||
|
"a39466df1ac15bf41a80ed1e8ffe70838d40e7e7",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-fullscreen.webmanifest.headers": [
|
||||||
|
"2bab061d43ab9e533b0160ca506231939886cd89",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-minimal-ui.webmanifest": [
|
||||||
|
"471f5d5d5d0bc3387d964260f7354908ad997b7a",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-minimal-ui.webmanifest.headers": [
|
||||||
|
"2bab061d43ab9e533b0160ca506231939886cd89",
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"display-member-media-feature-standalone.webmanifest": [
|
||||||
"891bd79fbfe119c185a3dc5606063eeda60ccc47",
|
"891bd79fbfe119c185a3dc5606063eeda60ccc47",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"display-member-media-feature.webmanifest.headers": [
|
"display-member-media-feature-standalone.webmanifest.headers": [
|
||||||
"2bab061d43ab9e533b0160ca506231939886cd89",
|
"2bab061d43ab9e533b0160ca506231939886cd89",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
|
@ -268454,7 +268499,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"testharness-helper.sub.js": [
|
"testharness-helper.sub.js": [
|
||||||
"238daef65d2fb7b3cdce104699038d3456bb8de6",
|
"7714f2d804773f3b0e2cccf9931d9538616a6a64",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -324280,11 +324325,11 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"long-wav.py": [
|
"long-wav.py": [
|
||||||
"5df28eb741e670046176777955c5bd346938154e",
|
"8af2aca8a959b39c7cbd91704e9228a119f2b2d8",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"partial-script.py": [
|
"partial-script.py": [
|
||||||
"5b642c601d89dcd30632074d877252b0bbb07ee1",
|
"a9570ec355c63d60fb0731bddeb79ba87b491492",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"range-sw.js": [
|
"range-sw.js": [
|
||||||
|
@ -324292,7 +324337,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"stash-take.py": [
|
"stash-take.py": [
|
||||||
"4ec1fe57647f41ea8196dad102815d06f8b1109f",
|
"6cf6ff585bf1462af1537448e8c5e72fd180879a",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"utils.js": [
|
"utils.js": [
|
||||||
|
@ -324305,7 +324350,13 @@
|
||||||
"302-found-post-handler.py": [
|
"302-found-post-handler.py": [
|
||||||
"23bf4b2c522b7c00ab6bd0fc3eb99f0737d512ec",
|
"23bf4b2c522b7c00ab6bd0fc3eb99f0737d512ec",
|
||||||
[]
|
[]
|
||||||
|
],
|
||||||
|
"resources": {
|
||||||
|
"destination.html": [
|
||||||
|
"f98c5a8cd77717d7d37078797c57241c53e24c27",
|
||||||
|
[]
|
||||||
]
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"support": {
|
"support": {
|
||||||
|
@ -324318,15 +324369,15 @@
|
||||||
"stale-while-revalidate": {
|
"stale-while-revalidate": {
|
||||||
"resources": {
|
"resources": {
|
||||||
"stale-css.py": [
|
"stale-css.py": [
|
||||||
"a6ae546d0651f97f3020829452db6225486dc451",
|
"b87668373acb0b0483cd152e2e70adc1adc1ec7e",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"stale-image.py": [
|
"stale-image.py": [
|
||||||
"839eb84bb34bbd15e2ca7061ee4fa5724d2c64f8",
|
"36e6fc0c9bbb0cc3a3e655dd458ded951fd4bc35",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"stale-script.py": [
|
"stale-script.py": [
|
||||||
"8ad54671f4211735f56df50a55deea6ed281d5a2",
|
"731cd805654f15f324c71c98bdb9a1cda3e94b73",
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -338358,7 +338409,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"webxr-ar-module.idl": [
|
"webxr-ar-module.idl": [
|
||||||
"2a525d2da89c215057407002b6ecdd08c8472f9c",
|
"097469d400d3ef4b7030c75a80c17b6fc9e797f0",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"webxr-gamepads-module.idl": [
|
"webxr-gamepads-module.idl": [
|
||||||
|
@ -345286,11 +345337,11 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"about-blank-replacement-ping-frame.py": [
|
"about-blank-replacement-ping-frame.py": [
|
||||||
"bb07c241ad49a7535ba62ee8664a75c8c59cd64c",
|
"30fbbbb53578bf795f841c6ad6862e1e9a7c8384",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"about-blank-replacement-popup-frame.py": [
|
"about-blank-replacement-popup-frame.py": [
|
||||||
"f0b8cd578e3e05e30e72cdfc343ed89f60670a7a",
|
"04c12a6037d9d18ef395d0bc0d1b5fd3af99d9fe",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"about-blank-replacement-srcdoc-nested-frame.html": [
|
"about-blank-replacement-srcdoc-nested-frame.html": [
|
||||||
|
@ -345326,11 +345377,11 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"bytecheck-worker-imported-script.py": [
|
"bytecheck-worker-imported-script.py": [
|
||||||
"04f544b9b1b7748e7be3b1591856776818f4bc23",
|
"47e0a1179ccbd571bcff781e7cf84597e934fac5",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"bytecheck-worker.py": [
|
"bytecheck-worker.py": [
|
||||||
"df8481b7d1e95db8445cf583683ac012a5ef8385",
|
"dfce9e7ed46d8719409f45f33f21888230b1f3b8",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"claim-nested-worker-fetch-iframe.html": [
|
"claim-nested-worker-fetch-iframe.html": [
|
||||||
|
@ -345470,11 +345521,11 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"echo-content.py": [
|
"echo-content.py": [
|
||||||
"c40ef0cf2bbbd435caa68fca81204342ca1dc120",
|
"70ae4b60254cf7971cdd92dc2b1e382ef1a6196b",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"echo-cookie-worker.py": [
|
"echo-cookie-worker.py": [
|
||||||
"73e8caf7f8ed87f6e41b8510b55e56d5ac971a69",
|
"561f64a35ad42ec326a52bb3b1f6334583356d00",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"echo-message-to-source-worker.js": [
|
"echo-message-to-source-worker.js": [
|
||||||
|
@ -345554,7 +345605,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"fetch-access-control.py": [
|
"fetch-access-control.py": [
|
||||||
"61b89cbd95b4b910670e4795cb2518c51abec121",
|
"a6cc9b12ad1fab3babd088d1edde5bf27fa51dfb",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"fetch-canvas-tainting-double-write-worker.js": [
|
"fetch-canvas-tainting-double-write-worker.js": [
|
||||||
|
@ -345746,7 +345797,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"fetch-request-no-freshness-headers-script.py": [
|
"fetch-request-no-freshness-headers-script.py": [
|
||||||
"e6a392c863e33e658488e9c7a10c5a46dc4ad485",
|
"bf8df154a88cf36dc6a1fa68a97592e03d8725bc",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"fetch-request-no-freshness-headers-worker.js": [
|
"fetch-request-no-freshness-headers-worker.js": [
|
||||||
|
@ -345838,7 +345889,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"import-mime-type-worker.py": [
|
"import-mime-type-worker.py": [
|
||||||
"aa885e7a4de04820822eb562d47780999fa253e4",
|
"b6e82f31d3732a385401bf4fc3d2fd9908e8887e",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"import-relative.xsl": [
|
"import-relative.xsl": [
|
||||||
|
@ -345862,7 +345913,7 @@
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"import-scripts-echo.py": [
|
"import-scripts-echo.py": [
|
||||||
"7d92794e31b6b1270db26779f63644ac42a3d3d6",
|
"d38d660e65935d49255a3879e38bbfb9be4cd5a2",
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"import-scripts-get.py": [
|
"import-scripts-get.py": [
|
||||||
|
@ -432763,7 +432814,7 @@
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"script-resource-with-nonsniffable-types.tentative.sub.html": [
|
"script-resource-with-nonsniffable-types.tentative.sub.html": [
|
||||||
"255ff1da267af5a3fead4ad3f94584d70d9bdf4f",
|
"81e256003b685305551fb54bf729461024853cf4",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
|
@ -433723,6 +433774,13 @@
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"preserve-fragment.html": [
|
||||||
|
"72ed24c837f143191a08d6df69544c0601385863",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
|
@ -435072,6 +435130,15 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"scroll-frag-non-utf8-encoded-document.html": [
|
||||||
|
"7d4e994f0a1856ad40974741d772223f7859ff6b",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"scroll-frag-percent-encoded.html": [
|
"scroll-frag-percent-encoded.html": [
|
||||||
"aa179425c5bb6e8e521ac9871a2afe06829ca518",
|
"aa179425c5bb6e8e521ac9871a2afe06829ca518",
|
||||||
[
|
[
|
||||||
|
@ -503322,7 +503389,7 @@
|
||||||
},
|
},
|
||||||
"readable-streams": {
|
"readable-streams": {
|
||||||
"async-iterator.any.js": [
|
"async-iterator.any.js": [
|
||||||
"a1acaeb6b1f864beb0764c83481286f312e2e769",
|
"7c49fe937de87245d98c70b3398019d3586e17fd",
|
||||||
[
|
[
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-002.html]
|
||||||
|
[Hit test float]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-003.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[hit-test-floats-004.html]
|
||||||
|
[Miss float below something else]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[hit-test-floats-005.html]
|
|
||||||
[Miss clipped float]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -14,9 +14,6 @@
|
||||||
[Test @font-face matching for weight 1000]
|
[Test @font-face matching for weight 1000]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Test @font-face matching for weight 250]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test @font-face matching for weight 399]
|
[Test @font-face matching for weight 399]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -26,9 +23,6 @@
|
||||||
[Test @font-face matching for weight 400]
|
[Test @font-face matching for weight 400]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Test @font-face matching for weight 500]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test @font-face matching for weight 470]
|
[Test @font-face matching for weight 470]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -315,9 +315,6 @@
|
||||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -327,12 +324,15 @@
|
||||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*]
|
[<iframe>: separate response Content-Type: text/html */*]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: text/html */*]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,6 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[separate text/javascript; charset=windows-1252 text/javascript]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
[preserve-fragment.html]
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Redirect URL fragment takes precedence in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 303 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 307 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve intermediate fragment in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Preserve fragment in 308 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 301 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Destination URL fragment takes precedence in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve fragment in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Redirect URL fragment takes precedence in 302 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Redirect URL fragment takes precedence in 301 redirect]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Destination URL fragment takes precedence in multiple 308 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - SameOrigin\] Preserve fragment in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - SameOrigin\] Final redirect fragment takes precedence over intermediate in multiple 302 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Destination URL fragment takes precedence in multiple 307 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTP - CrossOrigin\] Preserve intermediate fragment in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[[HTTPS - CrossOrigin\] Final redirect fragment takes precedence over intermediate in multiple 303 redirects]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[scroll-frag-non-utf8-encoded-document.html]
|
||||||
|
[Fragment Navigation: fragment id should not be found in non UTF8 document]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_2.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_4.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_5.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[cross-origin-objects-on-new-window.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
||||||
[supported-elements.html]
|
[supported-elements.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Contenteditable element should support autofocus]
|
[Contenteditable element should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Area element should support autofocus]
|
[Area element should support autofocus]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[Host element with delegatesFocus should support autofocus]
|
[Host element with delegatesFocus should support autofocus]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -172,6 +172,3 @@
|
||||||
[XHTML img usemap="http://example.org/#garbage-before-hash-id"]
|
[XHTML img usemap="http://example.org/#garbage-before-hash-id"]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[HTML (standards) IMG usemap="no-hash-name"]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_escaping-1.html]
|
[iframe_sandbox_popups_escaping-1.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -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]
|
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||||
expected: TIMEOUT
|
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,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[018.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, javascript:]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[017.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[origin of the script that invoked the method, about:blank]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -11,3 +11,6 @@
|
||||||
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
|
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[XRView interface: attribute isFirstPersonObserver]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
[003.html]
|
[003.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: ERROR
|
|
||||||
[shared]
|
[shared]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test "browser" value of display member + media feature</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest#display-member" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#dom-displaymodetype-browser" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#the-display-mode-media-feature" />
|
||||||
|
<link rel="manifest" href="display-member-media-feature-browser.webmanifest" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<h1>Testing support for "browser" value of display member + media feature</h1>
|
||||||
|
<style>
|
||||||
|
.fail {
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (display-mode: browser) {
|
||||||
|
body {
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
const browser = matchMedia("(display-mode: browser)");
|
||||||
|
|
||||||
|
browser.onchange = () => {
|
||||||
|
if (browser.matches) {
|
||||||
|
document.body.classList.remove("fail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!browser.matches) {
|
||||||
|
document.body.classList.add("fail");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<p>
|
||||||
|
To pass, the background color must be green after installing.
|
||||||
|
</p>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"display": "browser"
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test "fullscreen" value of display member + media feature</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest#display-member" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#dom-displaymodetype-fullscreen" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#the-display-mode-media-feature" />
|
||||||
|
<link rel="manifest" href="display-member-media-feature-fullscreen.webmanifest" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<h1>Testing support for "fullscreen" value of display member + media feature</h1>
|
||||||
|
<style>
|
||||||
|
.fail {
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (display-mode: fullscreen) {
|
||||||
|
body {
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
const fullscreen = matchMedia("(display-mode: fullscreen)");
|
||||||
|
|
||||||
|
fullscreen.onchange = () => {
|
||||||
|
if (fullscreen.matches) {
|
||||||
|
document.body.classList.remove("fail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fullscreen.matches) {
|
||||||
|
document.body.classList.add("fail");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<p>
|
||||||
|
To pass, the background color must be green after installing.
|
||||||
|
</p>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"display": "fullscreen"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test "minimal-ui" value of display member + media feature</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest#display-member" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#dom-displaymodetype-minimal-ui" />
|
||||||
|
<link rel="help" href="https://w3c.github.io/manifest/#the-display-mode-media-feature" />
|
||||||
|
<link rel="manifest" href="display-member-media-feature-minimal-ui.webmanifest" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<h1>Testing support for "minimal-ui" value of display member + media feature</h1>
|
||||||
|
<style>
|
||||||
|
.fail {
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (display-mode: minimal-ui) {
|
||||||
|
body {
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
const minimalUi = matchMedia("(display-mode: minimal-ui)");
|
||||||
|
|
||||||
|
minimalUi.onchange = () => {
|
||||||
|
if (minimalUi.matches) {
|
||||||
|
document.body.classList.remove("fail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!minimalUi.matches) {
|
||||||
|
document.body.classList.add("fail");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<p>
|
||||||
|
To pass, the background color must be green after installing.
|
||||||
|
</p>
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"display": "minimal-ui"
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -1,10 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<title>Test that display member plus media feature is supported</title>
|
<title>Test "standalone" value of display member + media feature</title>
|
||||||
<link rel="help" href="https://w3c.github.io/manifest#display-member" />
|
<link rel="help" href="https://w3c.github.io/manifest#display-member" />
|
||||||
<link rel="help" href="https://w3c.github.io/manifest/#the-display-mode-media-feature" />
|
<link rel="help" href="https://w3c.github.io/manifest/#the-display-mode-media-feature" />
|
||||||
<link rel="manifest" href="display-member-media-feature.webmanifest" />
|
<link rel="help" href="https://w3c.github.io/manifest/#dom-displaymodetype-standalone" />
|
||||||
|
<link rel="manifest" href="display-member-media-feature-standalone.webmanifest" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<h1>Testing support for display member plus media feature</h1>
|
<h1>Testing support for "standalone" value of display member + media feature</h1>
|
||||||
<style>
|
<style>
|
||||||
.fail {
|
.fail {
|
||||||
background-color: red;
|
background-color: red;
|
|
@ -0,0 +1 @@
|
||||||
|
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -17,7 +17,7 @@ const IframeLoad = {
|
||||||
|
|
||||||
function getOrigin() {
|
function getOrigin() {
|
||||||
var url = new URL("http://{{host}}:{{ports[http][0]}}/");
|
var url = new URL("http://{{host}}:{{ports[http][0]}}/");
|
||||||
return url.toString();
|
return url.origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCrossOrigin() {
|
function getCrossOrigin() {
|
||||||
|
|
|
@ -44,7 +44,7 @@ function test(mime_type, is_blocking_expected) {
|
||||||
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
||||||
//
|
//
|
||||||
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
|
||||||
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
|
// https://crbug.com/1098938 are fixed, we should use a cross-*origin*
|
||||||
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
|
||||||
// See also https://crbug.com/918660 for more context.
|
// See also https://crbug.com/918660 for more context.
|
||||||
var src_prefix = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
|
var src_prefix = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
|
||||||
|
|
|
@ -6,9 +6,10 @@ import time
|
||||||
import re
|
import re
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
|
from wptserve.utils import isomorphic_decode
|
||||||
|
|
||||||
def create_wav_header(sample_rate, bit_depth, channels, duration):
|
def create_wav_header(sample_rate, bit_depth, channels, duration):
|
||||||
bytes_per_sample = bit_depth / 8
|
bytes_per_sample = int(bit_depth / 8)
|
||||||
block_align = bytes_per_sample * channels
|
block_align = bytes_per_sample * channels
|
||||||
byte_rate = sample_rate * block_align
|
byte_rate = sample_rate * block_align
|
||||||
sub_chunk_2_size = duration * byte_rate
|
sub_chunk_2_size = duration * byte_rate
|
||||||
|
@ -45,32 +46,32 @@ def create_wav_header(sample_rate, bit_depth, channels, duration):
|
||||||
|
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
response.headers.set("Content-Type", "audio/wav")
|
response.headers.set(b"Content-Type", b"audio/wav")
|
||||||
response.headers.set("Accept-Ranges", "bytes")
|
response.headers.set(b"Accept-Ranges", b"bytes")
|
||||||
response.headers.set("Cache-Control", "no-cache")
|
response.headers.set(b"Cache-Control", b"no-cache")
|
||||||
|
|
||||||
range_header = request.headers.get('Range', '')
|
range_header = request.headers.get(b'Range', b'')
|
||||||
range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', range_header)
|
range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', isomorphic_decode(range_header))
|
||||||
range_received_key = request.GET.first('range-received-key', '')
|
range_received_key = request.GET.first(b'range-received-key', b'')
|
||||||
accept_encoding_key = request.GET.first('accept-encoding-key', '')
|
accept_encoding_key = request.GET.first(b'accept-encoding-key', b'')
|
||||||
|
|
||||||
if range_received_key and range_header:
|
if range_received_key and range_header:
|
||||||
# Remove any current value
|
# Remove any current value
|
||||||
request.server.stash.take(range_received_key, '/fetch/range/')
|
request.server.stash.take(range_received_key, b'/fetch/range/')
|
||||||
# This is later collected using stash-take.py
|
# This is later collected using stash-take.py
|
||||||
request.server.stash.put(range_received_key, 'range-header-received', '/fetch/range/')
|
request.server.stash.put(range_received_key, u'range-header-received', b'/fetch/range/')
|
||||||
|
|
||||||
if accept_encoding_key:
|
if accept_encoding_key:
|
||||||
# Remove any current value
|
# Remove any current value
|
||||||
request.server.stash.take(
|
request.server.stash.take(
|
||||||
accept_encoding_key,
|
accept_encoding_key,
|
||||||
'/fetch/range/'
|
b'/fetch/range/'
|
||||||
)
|
)
|
||||||
# This is later collected using stash-take.py
|
# This is later collected using stash-take.py
|
||||||
request.server.stash.put(
|
request.server.stash.put(
|
||||||
accept_encoding_key,
|
accept_encoding_key,
|
||||||
request.headers.get('Accept-Encoding', ''),
|
isomorphic_decode(request.headers.get(b'Accept-Encoding', b'')),
|
||||||
'/fetch/range/'
|
b'/fetch/range/'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Audio details
|
# Audio details
|
||||||
|
@ -79,9 +80,9 @@ def main(request, response):
|
||||||
channels = 1
|
channels = 1
|
||||||
duration = 60 * 5
|
duration = 60 * 5
|
||||||
|
|
||||||
total_length = (sample_rate * bit_depth * channels * duration) / 8
|
total_length = int((sample_rate * bit_depth * channels * duration) / 8)
|
||||||
bytes_remaining_to_send = total_length
|
bytes_remaining_to_send = total_length
|
||||||
initial_write = ''
|
initial_write = b''
|
||||||
|
|
||||||
if range_header_match:
|
if range_header_match:
|
||||||
response.status = 206
|
response.status = 206
|
||||||
|
@ -103,13 +104,13 @@ def main(request, response):
|
||||||
if bytes_remaining_to_send < len(initial_write):
|
if bytes_remaining_to_send < len(initial_write):
|
||||||
initial_write = initial_write[0:bytes_remaining_to_send]
|
initial_write = initial_write[0:bytes_remaining_to_send]
|
||||||
|
|
||||||
content_range = "bytes {}-{}/{}".format(start, end or total_length - 1, total_length)
|
content_range = b"bytes %d-%d/%d" % (start, end or total_length - 1, total_length)
|
||||||
|
|
||||||
response.headers.set("Content-Range", content_range)
|
response.headers.set(b"Content-Range", content_range)
|
||||||
else:
|
else:
|
||||||
initial_write = create_wav_header(sample_rate, bit_depth, channels, duration)
|
initial_write = create_wav_header(sample_rate, bit_depth, channels, duration)
|
||||||
|
|
||||||
response.headers.set("Content-Length", bytes_remaining_to_send)
|
response.headers.set(b"Content-Length", bytes_remaining_to_send)
|
||||||
|
|
||||||
response.write_status_headers()
|
response.write_status_headers()
|
||||||
response.writer.write(initial_write)
|
response.writer.write(initial_write)
|
||||||
|
|
|
@ -2,29 +2,28 @@
|
||||||
This generates a partial response containing valid JavaScript.
|
This generates a partial response containing valid JavaScript.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
require_range = request.GET.first('require-range', '')
|
require_range = request.GET.first(b'require-range', b'')
|
||||||
pretend_offset = int(request.GET.first('pretend-offset', '0'))
|
pretend_offset = int(request.GET.first(b'pretend-offset', b'0'))
|
||||||
range_header = request.headers.get('Range', '')
|
range_header = request.headers.get(b'Range', b'')
|
||||||
|
|
||||||
if require_range and not range_header:
|
if require_range and not range_header:
|
||||||
response.set_error(412, "Range header required")
|
response.set_error(412, u"Range header required")
|
||||||
response.write()
|
response.write()
|
||||||
return
|
return
|
||||||
|
|
||||||
response.headers.set("Content-Type", "text/plain")
|
response.headers.set(b"Content-Type", b"text/plain")
|
||||||
response.headers.set("Accept-Ranges", "bytes")
|
response.headers.set(b"Accept-Ranges", b"bytes")
|
||||||
response.headers.set("Cache-Control", "no-cache")
|
response.headers.set(b"Cache-Control", b"no-cache")
|
||||||
response.status = 206
|
response.status = 206
|
||||||
|
|
||||||
to_send = 'self.scriptExecuted = true;'
|
to_send = b'self.scriptExecuted = true;'
|
||||||
length = len(to_send)
|
length = len(to_send)
|
||||||
|
|
||||||
content_range = "bytes {}-{}/{}".format(
|
content_range = b"bytes %d-%d/%d" % (
|
||||||
pretend_offset, pretend_offset + length - 1, pretend_offset + length)
|
pretend_offset, pretend_offset + length - 1, pretend_offset + length)
|
||||||
|
|
||||||
response.headers.set("Content-Range", content_range)
|
response.headers.set(b"Content-Range", content_range)
|
||||||
response.headers.set("Content-Length", length)
|
response.headers.set(b"Content-Length", length)
|
||||||
|
|
||||||
response.content = to_send
|
response.content = to_send
|
||||||
|
|
|
@ -3,5 +3,5 @@ from wptserve.handlers import json_handler
|
||||||
|
|
||||||
@json_handler
|
@json_handler
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
key = request.GET.first("key")
|
key = request.GET.first(b"key")
|
||||||
return request.server.stash.take(key, '/fetch/range/')
|
return request.server.stash.take(key, b'/fetch/range/')
|
||||||
|
|
|
@ -0,0 +1,197 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Ensure fragment is kept across redirects</title>
|
||||||
|
<script src="/common/get-host-info.sub.js"></script>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
let frame;
|
||||||
|
let message;
|
||||||
|
|
||||||
|
const HTTP_SAME_ORIGIN = "HTTP - SameOrigin";
|
||||||
|
const HTTPS_SAME_ORIGIN = "HTTPS - SameOrigin";
|
||||||
|
const HTTP_CROSS_ORIGIN = "HTTP - CrossOrigin";
|
||||||
|
const HTTPS_CROSS_ORIGIN = "HTTPS - CrossOrigin";
|
||||||
|
|
||||||
|
function messageReceived(f) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
window.addEventListener("message", (e) => {
|
||||||
|
message = e.data;
|
||||||
|
resolve();
|
||||||
|
}, {once: true});
|
||||||
|
f();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHostname(navigation_type) {
|
||||||
|
switch (navigation_type) {
|
||||||
|
case HTTP_SAME_ORIGIN:
|
||||||
|
return get_host_info().HTTP_ORIGIN;
|
||||||
|
case HTTPS_SAME_ORIGIN:
|
||||||
|
return get_host_info().HTTPS_ORIGIN
|
||||||
|
case HTTP_CROSS_ORIGIN:
|
||||||
|
return get_host_info().HTTP_REMOTE_ORIGIN
|
||||||
|
case HTTPS_CROSS_ORIGIN:
|
||||||
|
return get_host_info().HTTPS_REMOTE_ORIGIN
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'nonexistent'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Turns |path| from a relative to this file path into a full URL, with
|
||||||
|
// the host being determined by one of the ORIGIN strings above.
|
||||||
|
function relativePathToFull(path, navigation_type) {
|
||||||
|
let host = getHostname(navigation_type);
|
||||||
|
|
||||||
|
const pathname = window.location.pathname;
|
||||||
|
const base_path = pathname.substring(0, pathname.lastIndexOf('/') + 1);
|
||||||
|
|
||||||
|
return host + base_path + path;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a URL to redirect.py which will respond with the given
|
||||||
|
// redirect status |code| to the provided |to_url|. Optionally adds on a
|
||||||
|
// |fragment|, if provided, to use in the initial request to redirect.py
|
||||||
|
function buildRedirectUrl(to_url, code, fragment) {
|
||||||
|
to_url = encodeURIComponent(to_url);
|
||||||
|
let dest = `/common/redirect.py?status=${code}&location=${to_url}`;
|
||||||
|
if (fragment)
|
||||||
|
dest = dest + '#' + fragment;
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function redirectTo(url, code, navigation_type, fragment) {
|
||||||
|
const dest = buildRedirectUrl(url, code, fragment);
|
||||||
|
await messageReceived( () => {
|
||||||
|
frame.contentWindow.location = getHostname(navigation_type) + dest;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doubleRedirectTo(url, code, navigation_type, fragment, intermediate_fragment) {
|
||||||
|
const second_redirection = buildRedirectUrl(url, code, intermediate_fragment);
|
||||||
|
const first_redirection = buildRedirectUrl(second_redirection, code, fragment);
|
||||||
|
await messageReceived( () => {
|
||||||
|
frame.contentWindow.location = getHostname(navigation_type) + first_redirection;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onload = () => {
|
||||||
|
frame = document.getElementById("frame");
|
||||||
|
|
||||||
|
// The tests in this file verify fragments are correctly propagated in
|
||||||
|
// a number of HTTP redirect scenarios. Each test is run for every
|
||||||
|
// relevant redirect status code. We also run each scenario under each
|
||||||
|
// combination of navigating to cross/same origin and using http/https.
|
||||||
|
const status_codes = [301, 302, 303, 307, 308];
|
||||||
|
const navigation_types = [HTTP_SAME_ORIGIN,
|
||||||
|
HTTPS_SAME_ORIGIN,
|
||||||
|
HTTP_CROSS_ORIGIN,
|
||||||
|
HTTPS_CROSS_ORIGIN];
|
||||||
|
|
||||||
|
for (let navigation_type of navigation_types) {
|
||||||
|
// Navigate to a URL with a fragment. The URL redirects to a different
|
||||||
|
// page. Ensure we land on the redirected page with the fragment
|
||||||
|
// specified in the initial navigation's URL.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html', navigation_type);
|
||||||
|
await redirectTo(to_url, code, navigation_type, "target");
|
||||||
|
assert_true(message.url.endsWith('#target'));
|
||||||
|
assert_equals(message.scrollY, 2000, "scrolls to fragment from initial navigation.");
|
||||||
|
}, `[${navigation_type}] Preserve fragment in ${code} redirect`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Navigate to a URL with a fragment. The URL redirects to a different
|
||||||
|
// URL that also contains a fragment. Ensure we land on the redirected
|
||||||
|
// page using the fragment specified in the redirect response and not
|
||||||
|
// the one in the initial navigation.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB#fromRedirect
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html#fromRedirect', navigation_type);
|
||||||
|
await redirectTo(to_url, code, navigation_type, "target");
|
||||||
|
assert_true(message.url.endsWith('#fromRedirect'), `Unexpected fragment: ${message.url}`);
|
||||||
|
assert_equals(message.scrollY, 4000, "scrolls to fragment from redirect.");
|
||||||
|
}, `[${navigation_type}] Redirect URL fragment takes precedence in ${code} redirect`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform two redirects. The initial navigation has a fragment and
|
||||||
|
// will redirect to a URL that also responds with a redirect. Ensure we
|
||||||
|
// land on the final page with the fragment from the original
|
||||||
|
// navigation.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB -> urlC
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html', navigation_type);
|
||||||
|
await doubleRedirectTo(to_url, code, navigation_type, "target");
|
||||||
|
assert_true(message.url.endsWith('#target'), `Unexpected fragment: ${message.url}`);
|
||||||
|
assert_equals(message.scrollY, 2000, "scrolls to fragment from initial navigation.");
|
||||||
|
}, `[${navigation_type}] Preserve fragment in multiple ${code} redirects`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform two redirects. The initial navigation has a fragment and
|
||||||
|
// will redirect to a URL that also responds with a redirect. The
|
||||||
|
// second redirection to the final page also has a fragment. Ensure we
|
||||||
|
// land on the final page with the fragment from the redirection
|
||||||
|
// response URL.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB -> urlC#fromRedirect
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html#fromRedirect', navigation_type);
|
||||||
|
await doubleRedirectTo(to_url, code, navigation_type, "target");
|
||||||
|
assert_true(message.url.endsWith('#fromRedirect'), `Unexpected fragment: ${message.url}`);
|
||||||
|
assert_equals(message.scrollY, 4000, "scrolls to fragment from redirect.");
|
||||||
|
}, `[${navigation_type}] Destination URL fragment takes precedence in multiple ${code} redirects`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform two redirects. The initial navigation has a fragment and
|
||||||
|
// will redirect to a URL that also responds with a redirect. This
|
||||||
|
// time, both redirect response have a fragment. Ensure we land on the
|
||||||
|
// final page with the fragment from the last redirection response URL.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB#intermediate -> urlC#fromRedirect
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html#fromRedirect', navigation_type);
|
||||||
|
await doubleRedirectTo(to_url, code, navigation_type, "target", "intermediate");
|
||||||
|
assert_true(message.url.endsWith('#fromRedirect'), `Unexpected fragment: ${message.url}`);
|
||||||
|
assert_equals(message.scrollY, 4000, "scrolls to fragment from redirect.");
|
||||||
|
}, `[${navigation_type}] Final redirect fragment takes precedence over intermediate in multiple ${code} redirects`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform two redirects. The initial navigation has a fragment and
|
||||||
|
// will redirect to a URL that also responds with a redirect. The first
|
||||||
|
// redirect response has a fragment but the second doesn't. Ensure we
|
||||||
|
// land on the final page with the fragment from the first redirection
|
||||||
|
// response URL.
|
||||||
|
//
|
||||||
|
// Redirect chain: urlA#target -> urlB#fromRedirect -> urlC
|
||||||
|
//
|
||||||
|
for (let code of status_codes) {
|
||||||
|
promise_test(async () => {
|
||||||
|
const to_url = relativePathToFull('resources/destination.html', navigation_type);
|
||||||
|
await doubleRedirectTo(to_url, code, navigation_type, "target", "fromRedirect");
|
||||||
|
assert_true(message.url.endsWith('#fromRedirect'), `Unexpected fragment: ${message.url}`);
|
||||||
|
assert_equals(message.scrollY, 4000, "scrolls to fragment from redirect.");
|
||||||
|
}, `[${navigation_type}] Preserve intermediate fragment in multiple ${code} redirects`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<iframe id="frame" src=""></iframe>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 10000px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
window.onload = () => {
|
||||||
|
window.parent.postMessage({
|
||||||
|
url: window.location.toString(),
|
||||||
|
scrollY: window.scrollY
|
||||||
|
}, "*");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p style="top: 2000px" id="target">Target</p>
|
||||||
|
<p style="top: 4000px" id="fromRedirect">Target</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,7 +1,7 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
|
|
||||||
token = request.GET.first("token", None)
|
token = request.GET.first(b"token", None)
|
||||||
is_query = request.GET.first("query", None) != None
|
is_query = request.GET.first(b"query", None) != None
|
||||||
with request.server.stash.lock:
|
with request.server.stash.lock:
|
||||||
value = request.server.stash.take(token)
|
value = request.server.stash.take(token)
|
||||||
count = 0
|
count = 0
|
||||||
|
@ -14,15 +14,15 @@ def main(request, response):
|
||||||
count = count + 1
|
count = count + 1
|
||||||
request.server.stash.put(token, count)
|
request.server.stash.put(token, count)
|
||||||
if is_query:
|
if is_query:
|
||||||
headers = [("Count", count)]
|
headers = [(b"Count", count)]
|
||||||
content = ""
|
content = b""
|
||||||
return 200, headers, content
|
return 200, headers, content
|
||||||
else:
|
else:
|
||||||
content = "body { background: rgb(0, 128, 0); }"
|
content = b"body { background: rgb(0, 128, 0); }"
|
||||||
if count > 1:
|
if count > 1:
|
||||||
content = "body { background: rgb(255, 0, 0); }"
|
content = b"body { background: rgb(255, 0, 0); }"
|
||||||
|
|
||||||
headers = [("Content-Type", "text/css"),
|
headers = [(b"Content-Type", b"text/css"),
|
||||||
("Cache-Control", "private, max-age=0, stale-while-revalidate=60")]
|
(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60")]
|
||||||
|
|
||||||
return 200, headers, content
|
return 200, headers, content
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
|
from wptserve.utils import isomorphic_decode
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
|
|
||||||
token = request.GET.first("token", None)
|
token = request.GET.first(b"token", None)
|
||||||
is_query = request.GET.first("query", None) != None
|
is_query = request.GET.first(b"query", None) != None
|
||||||
with request.server.stash.lock:
|
with request.server.stash.lock:
|
||||||
value = request.server.stash.take(token)
|
value = request.server.stash.take(token)
|
||||||
count = 0
|
count = 0
|
||||||
|
@ -17,22 +19,22 @@ def main(request, response):
|
||||||
request.server.stash.put(token, count)
|
request.server.stash.put(token, count)
|
||||||
|
|
||||||
if is_query:
|
if is_query:
|
||||||
headers = [("Count", count)]
|
headers = [(b"Count", count)]
|
||||||
content = ""
|
content = b""
|
||||||
return 200, headers, content
|
return 200, headers, content
|
||||||
else:
|
else:
|
||||||
filename = "green-16x16.png"
|
filename = u"green-16x16.png"
|
||||||
if count > 1:
|
if count > 1:
|
||||||
filename = "green-256x256.png"
|
filename = u"green-256x256.png"
|
||||||
|
|
||||||
path = os.path.join(os.path.dirname(__file__), "../../../images", filename)
|
path = os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"../../../images", filename)
|
||||||
body = open(path, "rb").read()
|
body = open(path, "rb").read()
|
||||||
|
|
||||||
response.add_required_headers = False
|
response.add_required_headers = False
|
||||||
response.writer.write_status(200)
|
response.writer.write_status(200)
|
||||||
response.writer.write_header("content-length", len(body))
|
response.writer.write_header(b"content-length", len(body))
|
||||||
response.writer.write_header("Cache-Control", "private, max-age=0, stale-while-revalidate=60")
|
response.writer.write_header(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60")
|
||||||
response.writer.write_header("content-type", "image/png")
|
response.writer.write_header(b"content-type", b"image/png")
|
||||||
response.writer.end_headers()
|
response.writer.end_headers()
|
||||||
|
|
||||||
response.writer.write(body)
|
response.writer.write(body)
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import random, string, datetime
|
import random, string
|
||||||
|
|
||||||
def id_token():
|
def id_token():
|
||||||
letters = string.ascii_lowercase
|
letters = string.ascii_lowercase
|
||||||
return ''.join(random.choice(letters) for i in range(20))
|
return b''.join(random.choice(letters).encode("utf-8") for i in range(20))
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
token = request.GET.first("token", None)
|
token = request.GET.first(b"token", None)
|
||||||
is_query = request.GET.first("query", None) != None
|
is_query = request.GET.first(b"query", None) != None
|
||||||
with request.server.stash.lock:
|
with request.server.stash.lock:
|
||||||
value = request.server.stash.take(token)
|
value = request.server.stash.take(token)
|
||||||
count = 0
|
count = 0
|
||||||
|
@ -20,13 +20,13 @@ def main(request, response):
|
||||||
request.server.stash.put(token, count)
|
request.server.stash.put(token, count)
|
||||||
|
|
||||||
if is_query:
|
if is_query:
|
||||||
headers = [("Count", count)]
|
headers = [(b"Count", count)]
|
||||||
content = ""
|
content = u""
|
||||||
return 200, headers, content
|
return 200, headers, content
|
||||||
else:
|
else:
|
||||||
unique_id = id_token()
|
unique_id = id_token()
|
||||||
headers = [("Content-Type", "text/javascript"),
|
headers = [(b"Content-Type", b"text/javascript"),
|
||||||
("Cache-Control", "private, max-age=0, stale-while-revalidate=60"),
|
(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60"),
|
||||||
("Unique-Id", unique_id)]
|
(b"Unique-Id", unique_id)]
|
||||||
content = "report('{}')".format(unique_id)
|
content = b"report('%s')" % unique_id
|
||||||
return 200, headers, content
|
return 200, headers, content
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>Fragment Navigation: fragment id should not be found in non UTF8 document</title>
|
||||||
|
<meta name=timeout content=long>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<body>
|
||||||
|
<div></div>
|
||||||
|
<div id="塯" style="position:absolute; top:100px;"></div>
|
||||||
|
<div style="height:200vh;"></div>
|
||||||
|
<script>
|
||||||
|
async_test(test => {
|
||||||
|
assert_equals(document.characterSet, "GBK", "Document should be GBK encoded");
|
||||||
|
assert_equals(location.hash, "", "Page must be loaded with no hash");
|
||||||
|
location.hash = '%89g';
|
||||||
|
test.step_timeout(() => {
|
||||||
|
assert_equals( document.scrollingElement.scrollTop, 0 );
|
||||||
|
test.done();
|
||||||
|
}, 1);
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -23,3 +23,7 @@ partial interface XRSession {
|
||||||
// Attributes
|
// Attributes
|
||||||
readonly attribute XRInteractionMode interactionMode;
|
readonly attribute XRInteractionMode interactionMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
partial interface XRView {
|
||||||
|
readonly attribute boolean isFirstPersonObserver;
|
||||||
|
};
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
if 'nested' in request.GET:
|
if b'nested' in request.GET:
|
||||||
return (
|
return (
|
||||||
[('Content-Type', 'text/html')],
|
[(b'Content-Type', b'text/html')],
|
||||||
'failed: nested frame was not intercepted by the service worker'
|
b'failed: nested frame was not intercepted by the service worker'
|
||||||
)
|
)
|
||||||
|
|
||||||
return ([('Content-Type', 'text/html')], """
|
return ([(b'Content-Type', b'text/html')], b"""
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
if 'nested' in request.GET:
|
if b'nested' in request.GET:
|
||||||
return (
|
return (
|
||||||
[('Content-Type', 'text/html')],
|
[(b'Content-Type', b'text/html')],
|
||||||
'failed: nested frame was not intercepted by the service worker'
|
b'failed: nested frame was not intercepted by the service worker'
|
||||||
)
|
)
|
||||||
|
|
||||||
return ([('Content-Type', 'text/html')], """
|
return ([(b'Content-Type', b'text/html')], b"""
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
import time
|
import time
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
headers = [('Content-Type', 'application/javascript'),
|
headers = [(b'Content-Type', b'application/javascript'),
|
||||||
('Cache-Control', 'max-age=0')]
|
(b'Cache-Control', b'max-age=0')]
|
||||||
|
|
||||||
imported_content_type = ''
|
imported_content_type = b''
|
||||||
if 'imported' in request.GET:
|
if b'imported' in request.GET:
|
||||||
imported_content_type = request.GET['imported']
|
imported_content_type = request.GET[b'imported']
|
||||||
|
|
||||||
imported_content = 'default'
|
imported_content = b'default'
|
||||||
if imported_content_type == 'time':
|
if imported_content_type == b'time':
|
||||||
imported_content = '%f' % time.time()
|
imported_content = b'%f' % time.time()
|
||||||
|
|
||||||
body = '''
|
body = b'''
|
||||||
// %s
|
// %s
|
||||||
''' % (imported_content)
|
''' % (imported_content)
|
||||||
|
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
import time
|
import time
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
headers = [('Content-Type', 'application/javascript'),
|
headers = [(b'Content-Type', b'application/javascript'),
|
||||||
('Cache-Control', 'max-age=0')]
|
(b'Cache-Control', b'max-age=0')]
|
||||||
|
|
||||||
main_content_type = ''
|
main_content_type = b''
|
||||||
if 'main' in request.GET:
|
if b'main' in request.GET:
|
||||||
main_content_type = request.GET['main']
|
main_content_type = request.GET[b'main']
|
||||||
|
|
||||||
main_content = 'default'
|
main_content = b'default'
|
||||||
if main_content_type == 'time':
|
if main_content_type == b'time':
|
||||||
main_content = '%f' % time.time()
|
main_content = b'%f' % time.time()
|
||||||
|
|
||||||
imported_request_path = ''
|
imported_request_path = b''
|
||||||
if 'path' in request.GET:
|
if b'path' in request.GET:
|
||||||
imported_request_path = request.GET['path']
|
imported_request_path = request.GET[b'path']
|
||||||
|
|
||||||
imported_request_type = ''
|
imported_request_type = b''
|
||||||
if 'imported' in request.GET:
|
if b'imported' in request.GET:
|
||||||
imported_request_type = request.GET['imported']
|
imported_request_type = request.GET[b'imported']
|
||||||
|
|
||||||
imported_request = ''
|
imported_request = b''
|
||||||
if imported_request_type == 'time':
|
if imported_request_type == b'time':
|
||||||
imported_request = '?imported=time';
|
imported_request = b'?imported=time'
|
||||||
|
|
||||||
body = '''
|
body = b'''
|
||||||
// %s
|
// %s
|
||||||
importScripts('%sbytecheck-worker-imported-script.py%s');
|
importScripts('%sbytecheck-worker-imported-script.py%s');
|
||||||
''' % (main_content, imported_request_path, imported_request)
|
''' % (main_content, imported_request_path, imported_request)
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
# This is a copy of fetch/api/resources/echo-content.py since it's more
|
# This is a copy of fetch/api/resources/echo-content.py since it's more
|
||||||
# convenient in this directory due to service worker's path restriction.
|
# convenient in this directory due to service worker's path restriction.
|
||||||
|
from wptserve.utils import isomorphic_encode
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
|
|
||||||
headers = [("X-Request-Method", request.method),
|
headers = [(b"X-Request-Method", isomorphic_encode(request.method)),
|
||||||
("X-Request-Content-Length", request.headers.get("Content-Length", "NO")),
|
(b"X-Request-Content-Length", request.headers.get(b"Content-Length", b"NO")),
|
||||||
("X-Request-Content-Type", request.headers.get("Content-Type", "NO")),
|
(b"X-Request-Content-Type", request.headers.get(b"Content-Type", b"NO")),
|
||||||
|
|
||||||
# Avoid any kind of content sniffing on the response.
|
# Avoid any kind of content sniffing on the response.
|
||||||
("Content-Type", "text/plain")]
|
(b"Content-Type", b"text/plain")]
|
||||||
|
|
||||||
content = request.body
|
content = request.body
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
headers = [("Content-Type", "text/javascript")]
|
headers = [(b"Content-Type", b"text/javascript")]
|
||||||
|
|
||||||
values = []
|
values = []
|
||||||
for key in request.cookies:
|
for key in request.cookies:
|
||||||
for cookie in request.cookies.get_list(key):
|
for cookie in request.cookies.get_list(key):
|
||||||
values.append('"%s": "%s"' % (key, cookie.value))
|
values.append(b'"%s": "%s"' % (key, cookie.value))
|
||||||
|
|
||||||
# Update the counter to change the script body for every request to trigger
|
# Update the counter to change the script body for every request to trigger
|
||||||
# update of the service worker.
|
# update of the service worker.
|
||||||
key = request.GET['key']
|
key = request.GET[b'key']
|
||||||
counter = request.server.stash.take(key)
|
counter = request.server.stash.take(key)
|
||||||
if counter is None:
|
if counter is None:
|
||||||
counter = 0
|
counter = 0
|
||||||
counter += 1
|
counter += 1
|
||||||
request.server.stash.put(key, counter)
|
request.server.stash.put(key, counter)
|
||||||
|
|
||||||
body = """
|
body = b"""
|
||||||
// %d
|
// %d
|
||||||
self.addEventListener('message', e => {
|
self.addEventListener('message', e => {
|
||||||
e.source.postMessage({%s})
|
e.source.postMessage({%s})
|
||||||
});""" % (counter, ','.join(values))
|
});""" % (counter, b','.join(values))
|
||||||
|
|
||||||
return headers, body
|
return headers, body
|
||||||
|
|
|
@ -1,108 +1,109 @@
|
||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
from wptserve.utils import isomorphic_decode, isomorphic_encode
|
||||||
|
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
headers = []
|
headers = []
|
||||||
headers.append(('X-ServiceWorker-ServerHeader', 'SetInTheServer'))
|
headers.append((b'X-ServiceWorker-ServerHeader', b'SetInTheServer'))
|
||||||
|
|
||||||
if "ACAOrigin" in request.GET:
|
if b"ACAOrigin" in request.GET:
|
||||||
for item in request.GET["ACAOrigin"].split(","):
|
for item in request.GET[b"ACAOrigin"].split(b","):
|
||||||
headers.append(("Access-Control-Allow-Origin", item))
|
headers.append((b"Access-Control-Allow-Origin", item))
|
||||||
|
|
||||||
for suffix in ["Headers", "Methods", "Credentials"]:
|
for suffix in [b"Headers", b"Methods", b"Credentials"]:
|
||||||
query = "ACA%s" % suffix
|
query = b"ACA%s" % suffix
|
||||||
header = "Access-Control-Allow-%s" % suffix
|
header = b"Access-Control-Allow-%s" % suffix
|
||||||
if query in request.GET:
|
if query in request.GET:
|
||||||
headers.append((header, request.GET[query]))
|
headers.append((header, request.GET[query]))
|
||||||
|
|
||||||
if "ACEHeaders" in request.GET:
|
if b"ACEHeaders" in request.GET:
|
||||||
headers.append(("Access-Control-Expose-Headers", request.GET["ACEHeaders"]))
|
headers.append((b"Access-Control-Expose-Headers", request.GET[b"ACEHeaders"]))
|
||||||
|
|
||||||
if ("Auth" in request.GET and not request.auth.username) or "AuthFail" in request.GET:
|
if (b"Auth" in request.GET and not request.auth.username) or b"AuthFail" in request.GET:
|
||||||
status = 401
|
status = 401
|
||||||
headers.append(('WWW-Authenticate', 'Basic realm="Restricted"'))
|
headers.append((b'WWW-Authenticate', b'Basic realm="Restricted"'))
|
||||||
body = 'Authentication canceled'
|
body = b'Authentication canceled'
|
||||||
return status, headers, body
|
return status, headers, body
|
||||||
|
|
||||||
if "PNGIMAGE" in request.GET:
|
if b"PNGIMAGE" in request.GET:
|
||||||
headers.append(("Content-Type", "image/png"))
|
headers.append((b"Content-Type", b"image/png"))
|
||||||
body = base64.decodestring("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1B"
|
body = base64.decodestring(b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1B"
|
||||||
"AACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/KfgQLABKXJBqMG"
|
b"AACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/KfgQLABKXJBqMG"
|
||||||
"jBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=")
|
b"jBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=")
|
||||||
return headers, body
|
return headers, body
|
||||||
|
|
||||||
if "VIDEO" in request.GET:
|
if b"VIDEO" in request.GET:
|
||||||
headers.append(("Content-Type", "video/webm"))
|
headers.append((b"Content-Type", b"video/webm"))
|
||||||
body = open(os.path.join(request.doc_root, "media", "movie_5.ogv"), "rb").read()
|
body = open(os.path.join(request.doc_root, u"media", u"movie_5.ogv"), "rb").read()
|
||||||
length = len(body)
|
length = len(body)
|
||||||
# If "PartialContent" is specified, the requestor wants to test range
|
# If "PartialContent" is specified, the requestor wants to test range
|
||||||
# requests. For the initial request, respond with "206 Partial Content"
|
# requests. For the initial request, respond with "206 Partial Content"
|
||||||
# and don't send the entire content. Then expect subsequent requests to
|
# and don't send the entire content. Then expect subsequent requests to
|
||||||
# have a "Range" header with a byte range. Respond with that range.
|
# have a "Range" header with a byte range. Respond with that range.
|
||||||
if "PartialContent" in request.GET:
|
if b"PartialContent" in request.GET:
|
||||||
if length < 1:
|
if length < 1:
|
||||||
return 500, headers, "file is too small for range requests"
|
return 500, headers, b"file is too small for range requests"
|
||||||
start = 0
|
start = 0
|
||||||
end = length - 1
|
end = length - 1
|
||||||
if "Range" in request.headers:
|
if b"Range" in request.headers:
|
||||||
range_header = request.headers["Range"]
|
range_header = request.headers[b"Range"]
|
||||||
prefix = "bytes="
|
prefix = b"bytes="
|
||||||
split_header = range_header[len(prefix):].split("-")
|
split_header = range_header[len(prefix):].split(b"-")
|
||||||
# The first request might be "bytes=0-". We want to force a range
|
# The first request might be "bytes=0-". We want to force a range
|
||||||
# request, so just return the first byte.
|
# request, so just return the first byte.
|
||||||
if split_header[0] == "0" and split_header[1] == "":
|
if split_header[0] == b"0" and split_header[1] == b"":
|
||||||
end = start
|
end = start
|
||||||
# Otherwise, it is a range request. Respect the values sent.
|
# Otherwise, it is a range request. Respect the values sent.
|
||||||
if split_header[0] != "":
|
if split_header[0] != b"":
|
||||||
start = int(split_header[0])
|
start = int(split_header[0])
|
||||||
if split_header[1] != "":
|
if split_header[1] != b"":
|
||||||
end = int(split_header[1])
|
end = int(split_header[1])
|
||||||
else:
|
else:
|
||||||
# The request doesn't have a range. Force a range request by
|
# The request doesn't have a range. Force a range request by
|
||||||
# returning the first byte.
|
# returning the first byte.
|
||||||
end = start
|
end = start
|
||||||
|
|
||||||
headers.append(("Accept-Ranges", "bytes"))
|
headers.append((b"Accept-Ranges", b"bytes"))
|
||||||
headers.append(("Content-Length", str(end -start + 1)))
|
headers.append((b"Content-Length", isomorphic_encode(str(end -start + 1))))
|
||||||
headers.append(("Content-Range", "bytes %d-%d/%d" % (start, end, length)))
|
headers.append((b"Content-Range", b"bytes %d-%d/%d" % (start, end, length)))
|
||||||
chunk = body[start:(end + 1)]
|
chunk = body[start:(end + 1)]
|
||||||
return 206, headers, chunk
|
return 206, headers, chunk
|
||||||
return headers, body
|
return headers, body
|
||||||
|
|
||||||
username = request.auth.username if request.auth.username else "undefined"
|
username = request.auth.username if request.auth.username else b"undefined"
|
||||||
password = request.auth.password if request.auth.username else "undefined"
|
password = request.auth.password if request.auth.username else b"undefined"
|
||||||
cookie = request.cookies['cookie'].value if 'cookie' in request.cookies else "undefined"
|
cookie = request.cookies[b'cookie'].value if b'cookie' in request.cookies else b"undefined"
|
||||||
|
|
||||||
files = []
|
files = []
|
||||||
for key, values in request.POST.iteritems():
|
for key, values in request.POST.items():
|
||||||
assert len(values) == 1
|
assert len(values) == 1
|
||||||
value = values[0]
|
value = values[0]
|
||||||
if not hasattr(value, "file"):
|
if not hasattr(value, u"file"):
|
||||||
continue
|
continue
|
||||||
data = value.file.read()
|
data = value.file.read()
|
||||||
files.append({"key": key,
|
files.append({u"key": isomorphic_decode(key),
|
||||||
"name": value.file.name,
|
u"name": value.file.name,
|
||||||
"type": value.type,
|
u"type": value.type,
|
||||||
"error": 0, #TODO,
|
u"error": 0, #TODO,
|
||||||
"size": len(data),
|
u"size": len(data),
|
||||||
"content": data})
|
u"content": data})
|
||||||
|
|
||||||
get_data = {key:request.GET[key] for key,value in request.GET.iteritems()}
|
get_data = {isomorphic_decode(key):isomorphic_decode(request.GET[key]) for key, value in request.GET.items()}
|
||||||
post_data = {key:request.POST[key] for key,value in request.POST.iteritems()
|
post_data = {isomorphic_decode(key):isomorphic_decode(request.POST[key]) for key, value in request.POST.items()
|
||||||
if not hasattr(request.POST[key], "file")}
|
if not hasattr(request.POST[key], u"file")}
|
||||||
headers_data = {key:request.headers[key] for key,value in request.headers.iteritems()}
|
headers_data = {isomorphic_decode(key):isomorphic_decode(request.headers[key]) for key, value in request.headers.items()}
|
||||||
|
|
||||||
data = {"jsonpResult": "success",
|
data = {u"jsonpResult": u"success",
|
||||||
"method": request.method,
|
u"method": request.method,
|
||||||
"headers": headers_data,
|
u"headers": headers_data,
|
||||||
"body": request.body,
|
u"body": isomorphic_decode(request.body),
|
||||||
"files": files,
|
u"files": files,
|
||||||
"GET": get_data,
|
u"GET": get_data,
|
||||||
"POST": post_data,
|
u"POST": post_data,
|
||||||
"username": username,
|
u"username": isomorphic_decode(username),
|
||||||
"password": password,
|
u"password": isomorphic_decode(password),
|
||||||
"cookie": cookie}
|
u"cookie": isomorphic_decode(cookie)}
|
||||||
|
|
||||||
return headers, "report( %s )" % json.dumps(data)
|
return headers, u"report( %s )" % json.dumps(data)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
headers = []
|
headers = []
|
||||||
# Sets an ETag header to check the cache revalidation behavior.
|
# Sets an ETag header to check the cache revalidation behavior.
|
||||||
headers.append(("ETag", "abc123"))
|
headers.append((b"ETag", b"abc123"))
|
||||||
headers.append(("Content-Type", "text/javascript"))
|
headers.append((b"Content-Type", b"text/javascript"))
|
||||||
return headers, "/* empty script */"
|
return headers, b"/* empty script */"
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
def main(request, response):
|
def main(request, response):
|
||||||
if 'mime' in request.GET:
|
if b'mime' in request.GET:
|
||||||
return (
|
return (
|
||||||
[('Content-Type', 'application/javascript')],
|
[(b'Content-Type', b'application/javascript')],
|
||||||
"importScripts('./mime-type-worker.py?mime={0}');".format(request.GET['mime'])
|
b"importScripts('./mime-type-worker.py?mime=%s');" % request.GET[b'mime']
|
||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
[('Content-Type', 'application/javascript')],
|
[(b'Content-Type', b'application/javascript')],
|
||||||
"importScripts('./mime-type-worker.py');"
|
b"importScripts('./mime-type-worker.py');"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
def main(req, res):
|
def main(req, res):
|
||||||
return ([
|
return ([
|
||||||
('Cache-Control', 'no-cache, must-revalidate'),
|
(b'Cache-Control', b'no-cache, must-revalidate'),
|
||||||
('Pragma', 'no-cache'),
|
(b'Pragma', b'no-cache'),
|
||||||
('Content-Type', 'application/javascript')],
|
(b'Content-Type', b'application/javascript')],
|
||||||
'echo_output = "%s";\n' % req.GET['msg'])
|
b'echo_output = "%s";\n' % req.GET[b'msg'])
|
||||||
|
|
|
@ -15,10 +15,6 @@ function assert_iter_result(iterResult, value, done, message) {
|
||||||
assert_equals(iterResult.done, done, `${prefix}done`);
|
assert_equals(iterResult.done, done, `${prefix}done`);
|
||||||
}
|
}
|
||||||
|
|
||||||
test(() => {
|
|
||||||
assert_equals(ReadableStream.prototype[Symbol.asyncIterator], ReadableStream.prototype.values);
|
|
||||||
}, '@@asyncIterator() method is === to values() method');
|
|
||||||
|
|
||||||
test(() => {
|
test(() => {
|
||||||
const s = new ReadableStream();
|
const s = new ReadableStream();
|
||||||
const it = s.values();
|
const it = s.values();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue