| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>Request consume empty bodies</title> | |
| <meta name="help" href="https://fetch.spec.whatwg.org/#request"> | |
| <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> | |
| <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| function checkBodyText(request) { | |
| return request.text().then(function(bodyAsText) { | |
| assert_equals(bodyAsText, "", "Resolved value should be empty"); | |
| assert_false(request.bodyUsed); | |
| }); | |
| } | |
| function checkBodyBlob(request) { | |
| return request.blob().then(function(bodyAsBlob) { | |
| var promise = new Promise(function(resolve, reject) { | |
| var reader = new FileReader(); | |
| reader.onload = function(evt) { | |
| resolve(reader.result) | |
| }; | |
| reader.onerror = function() { | |
| reject("Blob's reader failed"); | |
| }; | |
| reader.readAsText(bodyAsBlob); | |
| }); | |
| return promise.then(function(body) { | |
| assert_equals(body, "", "Resolved value should be empty"); | |
| assert_false(request.bodyUsed); | |
| }); | |
| }); | |
| } | |
| function checkBodyArrayBuffer(request) { | |
| return request.arrayBuffer().then(function(bodyAsArrayBuffer) { | |
| assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty"); | |
| assert_false(request.bodyUsed); | |
| }); | |
| } | |
| function checkBodyJSON(request) { | |
| return request.json().then( | |
| function(bodyAsJSON) { | |
| assert_unreached("JSON parsing should fail"); | |
| }, | |
| function() { | |
| assert_false(request.bodyUsed); | |
| }); | |
| } | |
| function checkBodyFormData(request) { | |
| return request.formData().then(function(bodyAsFormData) { | |
| assert_true(bodyAsFormData instanceof FormData, "Should receive a FormData"); | |
| assert_false(request.bodyUsed); | |
| }); | |
| } | |
| function checkRequestWithNoBody(bodyType, checkFunction) { | |
| promise_test(function(test) { | |
| var request = new Request("", {"method": "POST"}); | |
| assert_false(request.bodyUsed); | |
| return checkFunction(request); | |
| }, "Consume request's body as " + bodyType); | |
| } | |
| /* Cobalt doesn't support FormData request body | |
| var formData = new FormData(); | |
| */ | |
| checkRequestWithNoBody("text", checkBodyText); | |
| /* Cobalt doesn't support Blob request body | |
| checkRequestWithNoBody("blob", checkBodyBlob); | |
| */ | |
| checkRequestWithNoBody("arrayBuffer", checkBodyArrayBuffer); | |
| checkRequestWithNoBody("json", checkBodyJSON); | |
| /* Cobalt doesn't support FormData request body | |
| checkRequestWithNoBody("formData", checkBodyFormData); | |
| */ | |
| function checkRequestWithEmptyBody(bodyType, body, asText) { | |
| promise_test(function(test) { | |
| var request = new Request("", {"method": "POST", "body": body}); | |
| assert_false(request.bodyUsed, "bodyUsed is false at init"); | |
| if (asText) { | |
| return request.text().then(function(bodyAsString) { | |
| assert_equals(bodyAsString.length, 0, "Resolved value should be empty"); | |
| assert_true(request.bodyUsed, "bodyUsed is true after being consumed"); | |
| }); | |
| } | |
| return request.arrayBuffer().then(function(bodyAsArrayBuffer) { | |
| assert_equals(bodyAsArrayBuffer.byteLength, 0, "Resolved value should be empty"); | |
| assert_true(request.bodyUsed, "bodyUsed is true after being consumed"); | |
| }); | |
| }, "Consume empty " + bodyType + " request body as " + (asText ? "text" : "arrayBuffer")); | |
| } | |
| // FIXME: Add BufferSource, FormData and URLSearchParams. | |
| checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), false); | |
| checkRequestWithEmptyBody("text", "", false); | |
| checkRequestWithEmptyBody("blob", new Blob([], { "type" : "text/plain" }), true); | |
| checkRequestWithEmptyBody("text", "", true); | |
| /* Cobalt doesn't support URLSearchParams and FormData request body | |
| checkRequestWithEmptyBody("URLSearchParams", new URLSearchParams(""), true); | |
| // 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. | |
| checkRequestWithEmptyBody("FormData", new FormData(), true); | |
| */ | |
| checkRequestWithEmptyBody("ArrayBuffer", new ArrayBuffer(), true); | |
| </script> | |
| </body> | |
| </html> |