mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +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]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -327,12 +324,15 @@
|
|||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -171,6 +171,3 @@
|
|||
[XHTML img usemap="#hash-id"]
|
||||
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]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
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]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[XRView interface: attribute isFirstPersonObserver]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[003.html]
|
||||
expected: ERROR
|
||||
[shared]
|
||||
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": {
|
||||
"display-member": {
|
||||
"display-member-media-feature-manual.html": [
|
||||
"d4807febee965ba42474bbb4a740a3e5ed8d07fc",
|
||||
"display-member-media-feature-browser-manual.html": [
|
||||
"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,
|
||||
{}
|
||||
|
@ -249078,11 +249099,35 @@
|
|||
[]
|
||||
],
|
||||
"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",
|
||||
[]
|
||||
],
|
||||
"display-member-media-feature.webmanifest.headers": [
|
||||
"display-member-media-feature-standalone.webmanifest.headers": [
|
||||
"2bab061d43ab9e533b0160ca506231939886cd89",
|
||||
[]
|
||||
]
|
||||
|
@ -268454,7 +268499,7 @@
|
|||
[]
|
||||
],
|
||||
"testharness-helper.sub.js": [
|
||||
"238daef65d2fb7b3cdce104699038d3456bb8de6",
|
||||
"7714f2d804773f3b0e2cccf9931d9538616a6a64",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -324280,11 +324325,11 @@
|
|||
[]
|
||||
],
|
||||
"long-wav.py": [
|
||||
"5df28eb741e670046176777955c5bd346938154e",
|
||||
"8af2aca8a959b39c7cbd91704e9228a119f2b2d8",
|
||||
[]
|
||||
],
|
||||
"partial-script.py": [
|
||||
"5b642c601d89dcd30632074d877252b0bbb07ee1",
|
||||
"a9570ec355c63d60fb0731bddeb79ba87b491492",
|
||||
[]
|
||||
],
|
||||
"range-sw.js": [
|
||||
|
@ -324292,7 +324337,7 @@
|
|||
[]
|
||||
],
|
||||
"stash-take.py": [
|
||||
"4ec1fe57647f41ea8196dad102815d06f8b1109f",
|
||||
"6cf6ff585bf1462af1537448e8c5e72fd180879a",
|
||||
[]
|
||||
],
|
||||
"utils.js": [
|
||||
|
@ -324305,7 +324350,13 @@
|
|||
"302-found-post-handler.py": [
|
||||
"23bf4b2c522b7c00ab6bd0fc3eb99f0737d512ec",
|
||||
[]
|
||||
]
|
||||
],
|
||||
"resources": {
|
||||
"destination.html": [
|
||||
"f98c5a8cd77717d7d37078797c57241c53e24c27",
|
||||
[]
|
||||
]
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"support": {
|
||||
|
@ -324318,15 +324369,15 @@
|
|||
"stale-while-revalidate": {
|
||||
"resources": {
|
||||
"stale-css.py": [
|
||||
"a6ae546d0651f97f3020829452db6225486dc451",
|
||||
"b87668373acb0b0483cd152e2e70adc1adc1ec7e",
|
||||
[]
|
||||
],
|
||||
"stale-image.py": [
|
||||
"839eb84bb34bbd15e2ca7061ee4fa5724d2c64f8",
|
||||
"36e6fc0c9bbb0cc3a3e655dd458ded951fd4bc35",
|
||||
[]
|
||||
],
|
||||
"stale-script.py": [
|
||||
"8ad54671f4211735f56df50a55deea6ed281d5a2",
|
||||
"731cd805654f15f324c71c98bdb9a1cda3e94b73",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -338358,7 +338409,7 @@
|
|||
[]
|
||||
],
|
||||
"webxr-ar-module.idl": [
|
||||
"2a525d2da89c215057407002b6ecdd08c8472f9c",
|
||||
"097469d400d3ef4b7030c75a80c17b6fc9e797f0",
|
||||
[]
|
||||
],
|
||||
"webxr-gamepads-module.idl": [
|
||||
|
@ -345286,11 +345337,11 @@
|
|||
[]
|
||||
],
|
||||
"about-blank-replacement-ping-frame.py": [
|
||||
"bb07c241ad49a7535ba62ee8664a75c8c59cd64c",
|
||||
"30fbbbb53578bf795f841c6ad6862e1e9a7c8384",
|
||||
[]
|
||||
],
|
||||
"about-blank-replacement-popup-frame.py": [
|
||||
"f0b8cd578e3e05e30e72cdfc343ed89f60670a7a",
|
||||
"04c12a6037d9d18ef395d0bc0d1b5fd3af99d9fe",
|
||||
[]
|
||||
],
|
||||
"about-blank-replacement-srcdoc-nested-frame.html": [
|
||||
|
@ -345326,11 +345377,11 @@
|
|||
[]
|
||||
],
|
||||
"bytecheck-worker-imported-script.py": [
|
||||
"04f544b9b1b7748e7be3b1591856776818f4bc23",
|
||||
"47e0a1179ccbd571bcff781e7cf84597e934fac5",
|
||||
[]
|
||||
],
|
||||
"bytecheck-worker.py": [
|
||||
"df8481b7d1e95db8445cf583683ac012a5ef8385",
|
||||
"dfce9e7ed46d8719409f45f33f21888230b1f3b8",
|
||||
[]
|
||||
],
|
||||
"claim-nested-worker-fetch-iframe.html": [
|
||||
|
@ -345470,11 +345521,11 @@
|
|||
[]
|
||||
],
|
||||
"echo-content.py": [
|
||||
"c40ef0cf2bbbd435caa68fca81204342ca1dc120",
|
||||
"70ae4b60254cf7971cdd92dc2b1e382ef1a6196b",
|
||||
[]
|
||||
],
|
||||
"echo-cookie-worker.py": [
|
||||
"73e8caf7f8ed87f6e41b8510b55e56d5ac971a69",
|
||||
"561f64a35ad42ec326a52bb3b1f6334583356d00",
|
||||
[]
|
||||
],
|
||||
"echo-message-to-source-worker.js": [
|
||||
|
@ -345554,7 +345605,7 @@
|
|||
[]
|
||||
],
|
||||
"fetch-access-control.py": [
|
||||
"61b89cbd95b4b910670e4795cb2518c51abec121",
|
||||
"a6cc9b12ad1fab3babd088d1edde5bf27fa51dfb",
|
||||
[]
|
||||
],
|
||||
"fetch-canvas-tainting-double-write-worker.js": [
|
||||
|
@ -345746,7 +345797,7 @@
|
|||
[]
|
||||
],
|
||||
"fetch-request-no-freshness-headers-script.py": [
|
||||
"e6a392c863e33e658488e9c7a10c5a46dc4ad485",
|
||||
"bf8df154a88cf36dc6a1fa68a97592e03d8725bc",
|
||||
[]
|
||||
],
|
||||
"fetch-request-no-freshness-headers-worker.js": [
|
||||
|
@ -345838,7 +345889,7 @@
|
|||
[]
|
||||
],
|
||||
"import-mime-type-worker.py": [
|
||||
"aa885e7a4de04820822eb562d47780999fa253e4",
|
||||
"b6e82f31d3732a385401bf4fc3d2fd9908e8887e",
|
||||
[]
|
||||
],
|
||||
"import-relative.xsl": [
|
||||
|
@ -345862,7 +345913,7 @@
|
|||
[]
|
||||
],
|
||||
"import-scripts-echo.py": [
|
||||
"7d92794e31b6b1270db26779f63644ac42a3d3d6",
|
||||
"d38d660e65935d49255a3879e38bbfb9be4cd5a2",
|
||||
[]
|
||||
],
|
||||
"import-scripts-get.py": [
|
||||
|
@ -432763,7 +432814,7 @@
|
|||
]
|
||||
],
|
||||
"script-resource-with-nonsniffable-types.tentative.sub.html": [
|
||||
"255ff1da267af5a3fead4ad3f94584d70d9bdf4f",
|
||||
"81e256003b685305551fb54bf729461024853cf4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -433723,6 +433774,13 @@
|
|||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"preserve-fragment.html": [
|
||||
"72ed24c837f143191a08d6df69544c0601385863",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"security": {
|
||||
|
@ -435072,6 +435130,15 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"scroll-frag-non-utf8-encoded-document.html": [
|
||||
"7d4e994f0a1856ad40974741d772223f7859ff6b",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"scroll-frag-percent-encoded.html": [
|
||||
"aa179425c5bb6e8e521ac9871a2afe06829ca518",
|
||||
[
|
||||
|
@ -503322,7 +503389,7 @@
|
|||
},
|
||||
"readable-streams": {
|
||||
"async-iterator.any.js": [
|
||||
"a1acaeb6b1f864beb0764c83481286f312e2e769",
|
||||
"7c49fe937de87245d98c70b3398019d3586e17fd",
|
||||
[
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
[Test @font-face matching for weight 250]
|
||||
expected: FAIL
|
||||
|
||||
[Test @font-face matching for weight 399]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -26,9 +23,6 @@
|
|||
[Test @font-face matching for weight 400]
|
||||
expected: FAIL
|
||||
|
||||
[Test @font-face matching for weight 500]
|
||||
expected: FAIL
|
||||
|
||||
[Test @font-face matching for weight 470]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -315,9 +315,6 @@
|
|||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -327,12 +324,15 @@
|
|||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -172,6 +172,3 @@
|
|||
[XHTML img usemap="http://example.org/#garbage-before-hash-id"]
|
||||
expected: FAIL
|
||||
|
||||
[HTML (standards) IMG usemap="no-hash-name"]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
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]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -4,6 +4,3 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,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]
|
||||
expected: FAIL
|
||||
|
||||
[XRView interface: attribute isFirstPersonObserver]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[003.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[shared]
|
||||
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>
|
||||
<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/#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">
|
||||
<h1>Testing support for display member plus media feature</h1>
|
||||
<h1>Testing support for "standalone" value of display member + media feature</h1>
|
||||
<style>
|
||||
.fail {
|
||||
background-color: red;
|
|
@ -0,0 +1 @@
|
|||
Content-Type: application/manifest+json; charset=utf-8
|
|
@ -17,7 +17,7 @@ const IframeLoad = {
|
|||
|
||||
function getOrigin() {
|
||||
var url = new URL("http://{{host}}:{{ports[http][0]}}/");
|
||||
return url.toString();
|
||||
return url.origin;
|
||||
}
|
||||
|
||||
function getCrossOrigin() {
|
||||
|
|
|
@ -44,7 +44,7 @@ function test(mime_type, is_blocking_expected) {
|
|||
// www1 is cross-origin, so the HTTP response is CORB-eligible.
|
||||
//
|
||||
// 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).
|
||||
// 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";
|
||||
|
|
|
@ -6,9 +6,10 @@ import time
|
|||
import re
|
||||
import struct
|
||||
|
||||
from wptserve.utils import isomorphic_decode
|
||||
|
||||
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
|
||||
byte_rate = sample_rate * block_align
|
||||
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):
|
||||
response.headers.set("Content-Type", "audio/wav")
|
||||
response.headers.set("Accept-Ranges", "bytes")
|
||||
response.headers.set("Cache-Control", "no-cache")
|
||||
response.headers.set(b"Content-Type", b"audio/wav")
|
||||
response.headers.set(b"Accept-Ranges", b"bytes")
|
||||
response.headers.set(b"Cache-Control", b"no-cache")
|
||||
|
||||
range_header = request.headers.get('Range', '')
|
||||
range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', range_header)
|
||||
range_received_key = request.GET.first('range-received-key', '')
|
||||
accept_encoding_key = request.GET.first('accept-encoding-key', '')
|
||||
range_header = request.headers.get(b'Range', b'')
|
||||
range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', isomorphic_decode(range_header))
|
||||
range_received_key = request.GET.first(b'range-received-key', b'')
|
||||
accept_encoding_key = request.GET.first(b'accept-encoding-key', b'')
|
||||
|
||||
if range_received_key and range_header:
|
||||
# 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
|
||||
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:
|
||||
# Remove any current value
|
||||
request.server.stash.take(
|
||||
accept_encoding_key,
|
||||
'/fetch/range/'
|
||||
b'/fetch/range/'
|
||||
)
|
||||
# This is later collected using stash-take.py
|
||||
request.server.stash.put(
|
||||
accept_encoding_key,
|
||||
request.headers.get('Accept-Encoding', ''),
|
||||
'/fetch/range/'
|
||||
isomorphic_decode(request.headers.get(b'Accept-Encoding', b'')),
|
||||
b'/fetch/range/'
|
||||
)
|
||||
|
||||
# Audio details
|
||||
|
@ -79,9 +80,9 @@ def main(request, response):
|
|||
channels = 1
|
||||
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
|
||||
initial_write = ''
|
||||
initial_write = b''
|
||||
|
||||
if range_header_match:
|
||||
response.status = 206
|
||||
|
@ -103,13 +104,13 @@ def main(request, response):
|
|||
if bytes_remaining_to_send < len(initial_write):
|
||||
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:
|
||||
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.writer.write(initial_write)
|
||||
|
|
|
@ -2,29 +2,28 @@
|
|||
This generates a partial response containing valid JavaScript.
|
||||
"""
|
||||
|
||||
|
||||
def main(request, response):
|
||||
require_range = request.GET.first('require-range', '')
|
||||
pretend_offset = int(request.GET.first('pretend-offset', '0'))
|
||||
range_header = request.headers.get('Range', '')
|
||||
require_range = request.GET.first(b'require-range', b'')
|
||||
pretend_offset = int(request.GET.first(b'pretend-offset', b'0'))
|
||||
range_header = request.headers.get(b'Range', b'')
|
||||
|
||||
if require_range and not range_header:
|
||||
response.set_error(412, "Range header required")
|
||||
response.set_error(412, u"Range header required")
|
||||
response.write()
|
||||
return
|
||||
|
||||
response.headers.set("Content-Type", "text/plain")
|
||||
response.headers.set("Accept-Ranges", "bytes")
|
||||
response.headers.set("Cache-Control", "no-cache")
|
||||
response.headers.set(b"Content-Type", b"text/plain")
|
||||
response.headers.set(b"Accept-Ranges", b"bytes")
|
||||
response.headers.set(b"Cache-Control", b"no-cache")
|
||||
response.status = 206
|
||||
|
||||
to_send = 'self.scriptExecuted = true;'
|
||||
to_send = b'self.scriptExecuted = true;'
|
||||
length = len(to_send)
|
||||
|
||||
content_range = "bytes {}-{}/{}".format(
|
||||
content_range = b"bytes %d-%d/%d" % (
|
||||
pretend_offset, pretend_offset + length - 1, pretend_offset + length)
|
||||
|
||||
response.headers.set("Content-Range", content_range)
|
||||
response.headers.set("Content-Length", length)
|
||||
response.headers.set(b"Content-Range", content_range)
|
||||
response.headers.set(b"Content-Length", length)
|
||||
|
||||
response.content = to_send
|
||||
|
|
|
@ -3,5 +3,5 @@ from wptserve.handlers import json_handler
|
|||
|
||||
@json_handler
|
||||
def main(request, response):
|
||||
key = request.GET.first("key")
|
||||
return request.server.stash.take(key, '/fetch/range/')
|
||||
key = request.GET.first(b"key")
|
||||
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):
|
||||
|
||||
token = request.GET.first("token", None)
|
||||
is_query = request.GET.first("query", None) != None
|
||||
token = request.GET.first(b"token", None)
|
||||
is_query = request.GET.first(b"query", None) != None
|
||||
with request.server.stash.lock:
|
||||
value = request.server.stash.take(token)
|
||||
count = 0
|
||||
|
@ -14,15 +14,15 @@ def main(request, response):
|
|||
count = count + 1
|
||||
request.server.stash.put(token, count)
|
||||
if is_query:
|
||||
headers = [("Count", count)]
|
||||
content = ""
|
||||
headers = [(b"Count", count)]
|
||||
content = b""
|
||||
return 200, headers, content
|
||||
else:
|
||||
content = "body { background: rgb(0, 128, 0); }"
|
||||
content = b"body { background: rgb(0, 128, 0); }"
|
||||
if count > 1:
|
||||
content = "body { background: rgb(255, 0, 0); }"
|
||||
content = b"body { background: rgb(255, 0, 0); }"
|
||||
|
||||
headers = [("Content-Type", "text/css"),
|
||||
("Cache-Control", "private, max-age=0, stale-while-revalidate=60")]
|
||||
headers = [(b"Content-Type", b"text/css"),
|
||||
(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60")]
|
||||
|
||||
return 200, headers, content
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import os.path
|
||||
|
||||
from wptserve.utils import isomorphic_decode
|
||||
|
||||
def main(request, response):
|
||||
|
||||
token = request.GET.first("token", None)
|
||||
is_query = request.GET.first("query", None) != None
|
||||
token = request.GET.first(b"token", None)
|
||||
is_query = request.GET.first(b"query", None) != None
|
||||
with request.server.stash.lock:
|
||||
value = request.server.stash.take(token)
|
||||
count = 0
|
||||
|
@ -17,22 +19,22 @@ def main(request, response):
|
|||
request.server.stash.put(token, count)
|
||||
|
||||
if is_query:
|
||||
headers = [("Count", count)]
|
||||
content = ""
|
||||
headers = [(b"Count", count)]
|
||||
content = b""
|
||||
return 200, headers, content
|
||||
else:
|
||||
filename = "green-16x16.png"
|
||||
filename = u"green-16x16.png"
|
||||
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()
|
||||
|
||||
response.add_required_headers = False
|
||||
response.writer.write_status(200)
|
||||
response.writer.write_header("content-length", len(body))
|
||||
response.writer.write_header("Cache-Control", "private, max-age=0, stale-while-revalidate=60")
|
||||
response.writer.write_header("content-type", "image/png")
|
||||
response.writer.write_header(b"content-length", len(body))
|
||||
response.writer.write_header(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60")
|
||||
response.writer.write_header(b"content-type", b"image/png")
|
||||
response.writer.end_headers()
|
||||
|
||||
response.writer.write(body)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import random, string, datetime
|
||||
import random, string
|
||||
|
||||
def id_token():
|
||||
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):
|
||||
token = request.GET.first("token", None)
|
||||
is_query = request.GET.first("query", None) != None
|
||||
token = request.GET.first(b"token", None)
|
||||
is_query = request.GET.first(b"query", None) != None
|
||||
with request.server.stash.lock:
|
||||
value = request.server.stash.take(token)
|
||||
count = 0
|
||||
|
@ -20,13 +20,13 @@ def main(request, response):
|
|||
request.server.stash.put(token, count)
|
||||
|
||||
if is_query:
|
||||
headers = [("Count", count)]
|
||||
content = ""
|
||||
headers = [(b"Count", count)]
|
||||
content = u""
|
||||
return 200, headers, content
|
||||
else:
|
||||
unique_id = id_token()
|
||||
headers = [("Content-Type", "text/javascript"),
|
||||
("Cache-Control", "private, max-age=0, stale-while-revalidate=60"),
|
||||
("Unique-Id", unique_id)]
|
||||
content = "report('{}')".format(unique_id)
|
||||
headers = [(b"Content-Type", b"text/javascript"),
|
||||
(b"Cache-Control", b"private, max-age=0, stale-while-revalidate=60"),
|
||||
(b"Unique-Id", unique_id)]
|
||||
content = b"report('%s')" % unique_id
|
||||
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
|
||||
readonly attribute XRInteractionMode interactionMode;
|
||||
};
|
||||
|
||||
partial interface XRView {
|
||||
readonly attribute boolean isFirstPersonObserver;
|
||||
};
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
def main(request, response):
|
||||
if 'nested' in request.GET:
|
||||
if b'nested' in request.GET:
|
||||
return (
|
||||
[('Content-Type', 'text/html')],
|
||||
'failed: nested frame was not intercepted by the service worker'
|
||||
[(b'Content-Type', b'text/html')],
|
||||
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>
|
||||
<html>
|
||||
<body>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
def main(request, response):
|
||||
if 'nested' in request.GET:
|
||||
if b'nested' in request.GET:
|
||||
return (
|
||||
[('Content-Type', 'text/html')],
|
||||
'failed: nested frame was not intercepted by the service worker'
|
||||
[(b'Content-Type', b'text/html')],
|
||||
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>
|
||||
<html>
|
||||
<body>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
import time
|
||||
|
||||
def main(request, response):
|
||||
headers = [('Content-Type', 'application/javascript'),
|
||||
('Cache-Control', 'max-age=0')]
|
||||
headers = [(b'Content-Type', b'application/javascript'),
|
||||
(b'Cache-Control', b'max-age=0')]
|
||||
|
||||
imported_content_type = ''
|
||||
if 'imported' in request.GET:
|
||||
imported_content_type = request.GET['imported']
|
||||
imported_content_type = b''
|
||||
if b'imported' in request.GET:
|
||||
imported_content_type = request.GET[b'imported']
|
||||
|
||||
imported_content = 'default'
|
||||
if imported_content_type == 'time':
|
||||
imported_content = '%f' % time.time()
|
||||
imported_content = b'default'
|
||||
if imported_content_type == b'time':
|
||||
imported_content = b'%f' % time.time()
|
||||
|
||||
body = '''
|
||||
body = b'''
|
||||
// %s
|
||||
''' % (imported_content)
|
||||
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
import time
|
||||
|
||||
def main(request, response):
|
||||
headers = [('Content-Type', 'application/javascript'),
|
||||
('Cache-Control', 'max-age=0')]
|
||||
headers = [(b'Content-Type', b'application/javascript'),
|
||||
(b'Cache-Control', b'max-age=0')]
|
||||
|
||||
main_content_type = ''
|
||||
if 'main' in request.GET:
|
||||
main_content_type = request.GET['main']
|
||||
main_content_type = b''
|
||||
if b'main' in request.GET:
|
||||
main_content_type = request.GET[b'main']
|
||||
|
||||
main_content = 'default'
|
||||
if main_content_type == 'time':
|
||||
main_content = '%f' % time.time()
|
||||
main_content = b'default'
|
||||
if main_content_type == b'time':
|
||||
main_content = b'%f' % time.time()
|
||||
|
||||
imported_request_path = ''
|
||||
if 'path' in request.GET:
|
||||
imported_request_path = request.GET['path']
|
||||
imported_request_path = b''
|
||||
if b'path' in request.GET:
|
||||
imported_request_path = request.GET[b'path']
|
||||
|
||||
imported_request_type = ''
|
||||
if 'imported' in request.GET:
|
||||
imported_request_type = request.GET['imported']
|
||||
imported_request_type = b''
|
||||
if b'imported' in request.GET:
|
||||
imported_request_type = request.GET[b'imported']
|
||||
|
||||
imported_request = ''
|
||||
if imported_request_type == 'time':
|
||||
imported_request = '?imported=time';
|
||||
imported_request = b''
|
||||
if imported_request_type == b'time':
|
||||
imported_request = b'?imported=time'
|
||||
|
||||
body = '''
|
||||
body = b'''
|
||||
// %s
|
||||
importScripts('%sbytecheck-worker-imported-script.py%s');
|
||||
''' % (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
|
||||
# convenient in this directory due to service worker's path restriction.
|
||||
from wptserve.utils import isomorphic_encode
|
||||
|
||||
def main(request, response):
|
||||
|
||||
headers = [("X-Request-Method", request.method),
|
||||
("X-Request-Content-Length", request.headers.get("Content-Length", "NO")),
|
||||
("X-Request-Content-Type", request.headers.get("Content-Type", "NO")),
|
||||
headers = [(b"X-Request-Method", isomorphic_encode(request.method)),
|
||||
(b"X-Request-Content-Length", request.headers.get(b"Content-Length", b"NO")),
|
||||
(b"X-Request-Content-Type", request.headers.get(b"Content-Type", b"NO")),
|
||||
|
||||
# Avoid any kind of content sniffing on the response.
|
||||
("Content-Type", "text/plain")]
|
||||
(b"Content-Type", b"text/plain")]
|
||||
|
||||
content = request.body
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
def main(request, response):
|
||||
headers = [("Content-Type", "text/javascript")]
|
||||
headers = [(b"Content-Type", b"text/javascript")]
|
||||
|
||||
values = []
|
||||
for key in request.cookies:
|
||||
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 of the service worker.
|
||||
key = request.GET['key']
|
||||
key = request.GET[b'key']
|
||||
counter = request.server.stash.take(key)
|
||||
if counter is None:
|
||||
counter = 0
|
||||
counter += 1
|
||||
request.server.stash.put(key, counter)
|
||||
|
||||
body = """
|
||||
body = b"""
|
||||
// %d
|
||||
self.addEventListener('message', e => {
|
||||
e.source.postMessage({%s})
|
||||
});""" % (counter, ','.join(values))
|
||||
});""" % (counter, b','.join(values))
|
||||
|
||||
return headers, body
|
||||
|
|
|
@ -1,108 +1,109 @@
|
|||
import base64
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from wptserve.utils import isomorphic_decode, isomorphic_encode
|
||||
|
||||
def main(request, response):
|
||||
headers = []
|
||||
headers.append(('X-ServiceWorker-ServerHeader', 'SetInTheServer'))
|
||||
headers.append((b'X-ServiceWorker-ServerHeader', b'SetInTheServer'))
|
||||
|
||||
if "ACAOrigin" in request.GET:
|
||||
for item in request.GET["ACAOrigin"].split(","):
|
||||
headers.append(("Access-Control-Allow-Origin", item))
|
||||
if b"ACAOrigin" in request.GET:
|
||||
for item in request.GET[b"ACAOrigin"].split(b","):
|
||||
headers.append((b"Access-Control-Allow-Origin", item))
|
||||
|
||||
for suffix in ["Headers", "Methods", "Credentials"]:
|
||||
query = "ACA%s" % suffix
|
||||
header = "Access-Control-Allow-%s" % suffix
|
||||
for suffix in [b"Headers", b"Methods", b"Credentials"]:
|
||||
query = b"ACA%s" % suffix
|
||||
header = b"Access-Control-Allow-%s" % suffix
|
||||
if query in request.GET:
|
||||
headers.append((header, request.GET[query]))
|
||||
|
||||
if "ACEHeaders" in request.GET:
|
||||
headers.append(("Access-Control-Expose-Headers", request.GET["ACEHeaders"]))
|
||||
if b"ACEHeaders" in request.GET:
|
||||
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
|
||||
headers.append(('WWW-Authenticate', 'Basic realm="Restricted"'))
|
||||
body = 'Authentication canceled'
|
||||
headers.append((b'WWW-Authenticate', b'Basic realm="Restricted"'))
|
||||
body = b'Authentication canceled'
|
||||
return status, headers, body
|
||||
|
||||
if "PNGIMAGE" in request.GET:
|
||||
headers.append(("Content-Type", "image/png"))
|
||||
body = base64.decodestring("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1B"
|
||||
"AACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/KfgQLABKXJBqMG"
|
||||
"jBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=")
|
||||
if b"PNGIMAGE" in request.GET:
|
||||
headers.append((b"Content-Type", b"image/png"))
|
||||
body = base64.decodestring(b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1B"
|
||||
b"AACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/KfgQLABKXJBqMG"
|
||||
b"jBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=")
|
||||
return headers, body
|
||||
|
||||
if "VIDEO" in request.GET:
|
||||
headers.append(("Content-Type", "video/webm"))
|
||||
body = open(os.path.join(request.doc_root, "media", "movie_5.ogv"), "rb").read()
|
||||
if b"VIDEO" in request.GET:
|
||||
headers.append((b"Content-Type", b"video/webm"))
|
||||
body = open(os.path.join(request.doc_root, u"media", u"movie_5.ogv"), "rb").read()
|
||||
length = len(body)
|
||||
# If "PartialContent" is specified, the requestor wants to test range
|
||||
# requests. For the initial request, respond with "206 Partial Content"
|
||||
# and don't send the entire content. Then expect subsequent requests to
|
||||
# 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:
|
||||
return 500, headers, "file is too small for range requests"
|
||||
return 500, headers, b"file is too small for range requests"
|
||||
start = 0
|
||||
end = length - 1
|
||||
if "Range" in request.headers:
|
||||
range_header = request.headers["Range"]
|
||||
prefix = "bytes="
|
||||
split_header = range_header[len(prefix):].split("-")
|
||||
if b"Range" in request.headers:
|
||||
range_header = request.headers[b"Range"]
|
||||
prefix = b"bytes="
|
||||
split_header = range_header[len(prefix):].split(b"-")
|
||||
# The first request might be "bytes=0-". We want to force a range
|
||||
# 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
|
||||
# Otherwise, it is a range request. Respect the values sent.
|
||||
if split_header[0] != "":
|
||||
if split_header[0] != b"":
|
||||
start = int(split_header[0])
|
||||
if split_header[1] != "":
|
||||
if split_header[1] != b"":
|
||||
end = int(split_header[1])
|
||||
else:
|
||||
# The request doesn't have a range. Force a range request by
|
||||
# returning the first byte.
|
||||
end = start
|
||||
|
||||
headers.append(("Accept-Ranges", "bytes"))
|
||||
headers.append(("Content-Length", str(end -start + 1)))
|
||||
headers.append(("Content-Range", "bytes %d-%d/%d" % (start, end, length)))
|
||||
headers.append((b"Accept-Ranges", b"bytes"))
|
||||
headers.append((b"Content-Length", isomorphic_encode(str(end -start + 1))))
|
||||
headers.append((b"Content-Range", b"bytes %d-%d/%d" % (start, end, length)))
|
||||
chunk = body[start:(end + 1)]
|
||||
return 206, headers, chunk
|
||||
return headers, body
|
||||
|
||||
username = request.auth.username if request.auth.username else "undefined"
|
||||
password = request.auth.password if request.auth.username else "undefined"
|
||||
cookie = request.cookies['cookie'].value if 'cookie' in request.cookies else "undefined"
|
||||
username = request.auth.username if request.auth.username else b"undefined"
|
||||
password = request.auth.password if request.auth.username else b"undefined"
|
||||
cookie = request.cookies[b'cookie'].value if b'cookie' in request.cookies else b"undefined"
|
||||
|
||||
files = []
|
||||
for key, values in request.POST.iteritems():
|
||||
for key, values in request.POST.items():
|
||||
assert len(values) == 1
|
||||
value = values[0]
|
||||
if not hasattr(value, "file"):
|
||||
if not hasattr(value, u"file"):
|
||||
continue
|
||||
data = value.file.read()
|
||||
files.append({"key": key,
|
||||
"name": value.file.name,
|
||||
"type": value.type,
|
||||
"error": 0, #TODO,
|
||||
"size": len(data),
|
||||
"content": data})
|
||||
files.append({u"key": isomorphic_decode(key),
|
||||
u"name": value.file.name,
|
||||
u"type": value.type,
|
||||
u"error": 0, #TODO,
|
||||
u"size": len(data),
|
||||
u"content": data})
|
||||
|
||||
get_data = {key:request.GET[key] for key,value in request.GET.iteritems()}
|
||||
post_data = {key:request.POST[key] for key,value in request.POST.iteritems()
|
||||
if not hasattr(request.POST[key], "file")}
|
||||
headers_data = {key:request.headers[key] for key,value in request.headers.iteritems()}
|
||||
get_data = {isomorphic_decode(key):isomorphic_decode(request.GET[key]) for key, value in request.GET.items()}
|
||||
post_data = {isomorphic_decode(key):isomorphic_decode(request.POST[key]) for key, value in request.POST.items()
|
||||
if not hasattr(request.POST[key], u"file")}
|
||||
headers_data = {isomorphic_decode(key):isomorphic_decode(request.headers[key]) for key, value in request.headers.items()}
|
||||
|
||||
data = {"jsonpResult": "success",
|
||||
"method": request.method,
|
||||
"headers": headers_data,
|
||||
"body": request.body,
|
||||
"files": files,
|
||||
"GET": get_data,
|
||||
"POST": post_data,
|
||||
"username": username,
|
||||
"password": password,
|
||||
"cookie": cookie}
|
||||
data = {u"jsonpResult": u"success",
|
||||
u"method": request.method,
|
||||
u"headers": headers_data,
|
||||
u"body": isomorphic_decode(request.body),
|
||||
u"files": files,
|
||||
u"GET": get_data,
|
||||
u"POST": post_data,
|
||||
u"username": isomorphic_decode(username),
|
||||
u"password": isomorphic_decode(password),
|
||||
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):
|
||||
headers = []
|
||||
# Sets an ETag header to check the cache revalidation behavior.
|
||||
headers.append(("ETag", "abc123"))
|
||||
headers.append(("Content-Type", "text/javascript"))
|
||||
return headers, "/* empty script */"
|
||||
headers.append((b"ETag", b"abc123"))
|
||||
headers.append((b"Content-Type", b"text/javascript"))
|
||||
return headers, b"/* empty script */"
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
def main(request, response):
|
||||
if 'mime' in request.GET:
|
||||
if b'mime' in request.GET:
|
||||
return (
|
||||
[('Content-Type', 'application/javascript')],
|
||||
"importScripts('./mime-type-worker.py?mime={0}');".format(request.GET['mime'])
|
||||
[(b'Content-Type', b'application/javascript')],
|
||||
b"importScripts('./mime-type-worker.py?mime=%s');" % request.GET[b'mime']
|
||||
)
|
||||
return (
|
||||
[('Content-Type', 'application/javascript')],
|
||||
"importScripts('./mime-type-worker.py');"
|
||||
[(b'Content-Type', b'application/javascript')],
|
||||
b"importScripts('./mime-type-worker.py');"
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
def main(req, res):
|
||||
return ([
|
||||
('Cache-Control', 'no-cache, must-revalidate'),
|
||||
('Pragma', 'no-cache'),
|
||||
('Content-Type', 'application/javascript')],
|
||||
'echo_output = "%s";\n' % req.GET['msg'])
|
||||
(b'Cache-Control', b'no-cache, must-revalidate'),
|
||||
(b'Pragma', b'no-cache'),
|
||||
(b'Content-Type', b'application/javascript')],
|
||||
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`);
|
||||
}
|
||||
|
||||
test(() => {
|
||||
assert_equals(ReadableStream.prototype[Symbol.asyncIterator], ReadableStream.prototype.values);
|
||||
}, '@@asyncIterator() method is === to values() method');
|
||||
|
||||
test(() => {
|
||||
const s = new ReadableStream();
|
||||
const it = s.values();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue