| OLD | NEW |
| 1 <!doctype html> | 1 <!doctype html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <meta charset="utf-8"> | 4 <meta charset="utf-8"> |
| 5 <title>Request consume empty bodies</title> | 5 <title>Request consume empty bodies</title> |
| 6 <meta name="help" href="https://fetch.spec.whatwg.org/#request"> | 6 <meta name="help" href="https://fetch.spec.whatwg.org/#request"> |
| 7 <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> | 7 <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> |
| 8 <meta name="author" title="Canon Research France" href="https://www.crf.cano
n.fr"> | 8 <meta name="author" title="Canon Research France" href="https://www.crf.cano
n.fr"> |
| 9 <script src="/resources/testharness.js"></script> | 9 <script src="/resources/testharness.js"></script> |
| 10 <script src="/resources/testharnessreport.js"></script> | 10 <script src="/resources/testharnessreport.js"></script> |
| 11 </head> | 11 </head> |
| 12 <body> | 12 <body> |
| 13 <script> | 13 <script> |
| 14 function checkBodyText(request) { | 14 function checkBodyText(test, request) { |
| 15 return request.text().then(function(bodyAsText) { | 15 return request.text().then(function(bodyAsText) { |
| 16 assert_equals(bodyAsText, "", "Resolved value should be empty"); | 16 assert_equals(bodyAsText, "", "Resolved value should be empty"); |
| 17 assert_false(request.bodyUsed); | 17 assert_false(request.bodyUsed); |
| 18 }); | 18 }); |
| 19 } | 19 } |
| 20 | 20 |
| 21 function checkBodyBlob(request) { | 21 function checkBodyBlob(test, request) { |
| 22 return request.blob().then(function(bodyAsBlob) { | 22 return request.blob().then(function(bodyAsBlob) { |
| 23 var promise = new Promise(function(resolve, reject) { | 23 var promise = new Promise(function(resolve, reject) { |
| 24 var reader = new FileReader(); | 24 var reader = new FileReader(); |
| 25 reader.onload = function(evt) { | 25 reader.onload = function(evt) { |
| 26 resolve(reader.result) | 26 resolve(reader.result) |
| 27 }; | 27 }; |
| 28 reader.onerror = function() { | 28 reader.onerror = function() { |
| 29 reject("Blob's reader failed"); | 29 reject("Blob's reader failed"); |
| 30 }; | 30 }; |
| 31 reader.readAsText(bodyAsBlob); | 31 reader.readAsText(bodyAsBlob); |
| 32 }); | 32 }); |
| 33 return promise.then(function(body) { | 33 return promise.then(function(body) { |
| 34 assert_equals(body, "", "Resolved value should be empty"); | 34 assert_equals(body, "", "Resolved value should be empty"); |
| 35 assert_false(request.bodyUsed); | 35 assert_false(request.bodyUsed); |
| 36 }); | 36 }); |
| 37 }); | 37 }); |
| 38 } | 38 } |
| 39 | 39 |
| 40 function checkBodyArrayBuffer(request) { | 40 function checkBodyArrayBuffer(test, request) { |
| 41 return request.arrayBuffer().then(function(bodyAsArrayBuffer) { | 41 return request.arrayBuffer().then(function(bodyAsArrayBuffer) { |
| 42 assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be
empty"); | 42 assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be
empty"); |
| 43 assert_false(request.bodyUsed); | 43 assert_false(request.bodyUsed); |
| 44 }); | 44 }); |
| 45 } | 45 } |
| 46 | 46 |
| 47 function checkBodyJSON(request) { | 47 function checkBodyJSON(test, request) { |
| 48 return request.json().then( | 48 return request.json().then( |
| 49 function(bodyAsJSON) { | 49 function(bodyAsJSON) { |
| 50 assert_unreached("JSON parsing should fail"); | 50 assert_unreached("JSON parsing should fail"); |
| 51 }, | 51 }, |
| 52 function() { | 52 function() { |
| 53 assert_false(request.bodyUsed); | 53 assert_false(request.bodyUsed); |
| 54 }); | 54 }); |
| 55 } | 55 } |
| 56 | 56 |
| 57 function checkBodyFormData(request) { | 57 function checkBodyFormData(test, request) { |
| 58 return request.formData().then(function(bodyAsFormData) { | 58 return request.formData().then(function(bodyAsFormData) { |
| 59 assert_true(bodyAsFormData instanceof FormData, "Should receive a FormDa
ta"); | 59 assert_true(bodyAsFormData instanceof FormData, "Should receive a FormDa
ta"); |
| 60 assert_false(request.bodyUsed); | 60 assert_false(request.bodyUsed); |
| 61 }); | 61 }); |
| 62 } | 62 } |
| 63 | 63 |
| 64 function checkRequestWithNoBody(bodyType, checkFunction) { | 64 function checkBodyFormDataError(test, request) { |
| 65 return promise_rejects(test, new TypeError(), request.formData()).then(fun
ction() { |
| 66 assert_false(request.bodyUsed); |
| 67 }); |
| 68 } |
| 69 |
| 70 function checkRequestWithNoBody(bodyType, checkFunction, headers = []) { |
| 65 promise_test(function(test) { | 71 promise_test(function(test) { |
| 66 var request = new Request("", {"method": "POST"}); | 72 var request = new Request("", {"method": "POST", "headers": headers}); |
| 67 assert_false(request.bodyUsed); | 73 assert_false(request.bodyUsed); |
| 68 return checkFunction(request); | 74 return checkFunction(test, request); |
| 69 }, "Consume request's body as " + bodyType); | 75 }, "Consume request's body as " + bodyType); |
| 70 } | 76 } |
| 71 | 77 |
| 72 var formData = new FormData(); | |
| 73 checkRequestWithNoBody("text", checkBodyText); | 78 checkRequestWithNoBody("text", checkBodyText); |
| 74 checkRequestWithNoBody("blob", checkBodyBlob); | 79 checkRequestWithNoBody("blob", checkBodyBlob); |
| 75 checkRequestWithNoBody("arrayBuffer", checkBodyArrayBuffer); | 80 checkRequestWithNoBody("arrayBuffer", checkBodyArrayBuffer); |
| 76 checkRequestWithNoBody("json", checkBodyJSON); | 81 checkRequestWithNoBody("json (error case)", checkBodyJSON); |
| 77 checkRequestWithNoBody("formData", checkBodyFormData); | 82 checkRequestWithNoBody("formData with correct multipart type (error case)",
checkBodyFormDataError, [["Content-Type", 'multipart/form-data; boundary="bounda
ry"']]); |
| 83 checkRequestWithNoBody("formData with correct urlencoded type", checkBodyFor
mData, [["Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"]]); |
| 84 checkRequestWithNoBody("formData without correct type (error case)", checkBo
dyFormDataError); |
| 78 | 85 |
| 79 function checkRequestWithEmptyBody(bodyType, body, asText) { | 86 function checkRequestWithEmptyBody(bodyType, body, asText) { |
| 80 promise_test(function(test) { | 87 promise_test(function(test) { |
| 81 var request = new Request("", {"method": "POST", "body": body}); | 88 var request = new Request("", {"method": "POST", "body": body}); |
| 82 assert_false(request.bodyUsed, "bodyUsed is false at init"); | 89 assert_false(request.bodyUsed, "bodyUsed is false at init"); |
| 83 if (asText) { | 90 if (asText) { |
| 84 return request.text().then(function(bodyAsString) { | 91 return request.text().then(function(bodyAsString) { |
| 85 assert_equals(bodyAsString.length, 0, "Resolved value should be empt
y"); | 92 assert_equals(bodyAsString.length, 0, "Resolved value should be empt
y"); |
| 86 assert_true(request.bodyUsed, "bodyUsed is true after being consumed
"); | 93 assert_true(request.bodyUsed, "bodyUsed is true after being consumed
"); |
| 87 }); | 94 }); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 98 checkRequestWithEmptyBody("text", "", false); | 105 checkRequestWithEmptyBody("text", "", false); |
| 99 checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), t
rue); | 106 checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), t
rue); |
| 100 checkRequestWithEmptyBody("text", "", true); | 107 checkRequestWithEmptyBody("text", "", true); |
| 101 checkRequestWithEmptyBody("URLSearchParams", new URLSearchParams(""), true); | 108 checkRequestWithEmptyBody("URLSearchParams", new URLSearchParams(""), true); |
| 102 // FIXME: This test assumes that the empty string be returned but it is not
clear whether that is right. See https://github.com/w3c/web-platform-tests/pull/
3950. | 109 // FIXME: This test assumes that the empty string be returned but it is not
clear whether that is right. See https://github.com/w3c/web-platform-tests/pull/
3950. |
| 103 checkRequestWithEmptyBody("FormData", new FormData(), true); | 110 checkRequestWithEmptyBody("FormData", new FormData(), true); |
| 104 checkRequestWithEmptyBody("ArrayBuffer", new ArrayBuffer(), true); | 111 checkRequestWithEmptyBody("ArrayBuffer", new ArrayBuffer(), true); |
| 105 </script> | 112 </script> |
| 106 </body> | 113 </body> |
| 107 </html> | 114 </html> |
| OLD | NEW |