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:
bors-servo 2020-07-03 11:17:27 -04:00 committed by GitHub
commit 745eb88e32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
85 changed files with 1490 additions and 309 deletions

View 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

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript; charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -1,4 +0,0 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -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

View file

@ -171,6 +171,3 @@
[XHTML img usemap="#hash-id"]
expected: FAIL
[HTML (standards) IMG usemap="no-hash-name"]
expected: FAIL

View file

@ -0,0 +1,2 @@
[event_timeupdate.html]
expected: CRASH

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -11,3 +11,6 @@
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
expected: FAIL
[XRView interface: attribute isFirstPersonObserver]
expected: FAIL

View file

@ -1,5 +1,4 @@
[003.html]
expected: ERROR
[shared]
expected: FAIL

View 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

View file

@ -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,
{

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript; charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -1,4 +0,0 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -11,3 +11,6 @@
[XRSession interface: xrSession must inherit property "interactionMode" with the proper type]
expected: FAIL
[XRView interface: attribute isFirstPersonObserver]
expected: FAIL

View file

@ -1,6 +1,5 @@
[003.html]
type: testharness
expected: ERROR
[shared]
expected: FAIL

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -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>

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -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;

View file

@ -0,0 +1 @@
Content-Type: application/manifest+json; charset=utf-8

View file

@ -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() {

View file

@ -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";

View file

@ -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)

View file

@ -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

View file

@ -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/')

View file

@ -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>

View file

@ -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>

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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="&#x586f" 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>

View file

@ -23,3 +23,7 @@ partial interface XRSession {
// Attributes
readonly attribute XRInteractionMode interactionMode;
};
partial interface XRView {
readonly attribute boolean isFirstPersonObserver;
};

View file

@ -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>

View file

@ -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>

View file

@ -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)

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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 */"

View file

@ -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');"
)

View file

@ -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'])

View file

@ -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();