Index: LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-response-type-blob.js |
diff --git a/LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-response-type-blob.js b/LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-response-type-blob.js |
index 2a7b33fb64e6fd654f1b6d08c9a48727742067f4..d6e450a133fe85c62f97da5fa47aa8bb9c25b1f1 100644 |
--- a/LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-response-type-blob.js |
+++ b/LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-response-type-blob.js |
@@ -1,25 +1,88 @@ |
var global = window; |
-try { |
+function readBlobAsArrayBuffer(blob) { |
+ return new Promise(function (resolve, reject) { |
+ var reader = new FileReader(); |
+ reader.onload = function (evt) { |
+ resolve(evt.target.result); |
+ }; |
+ reader.onabort = function (evt) { |
+ reject(evt); |
+ }; |
+ reader.onerror = function (evt) { |
+ reject(evt); |
+ }; |
+ reader.readAsText(blob, "utf-8"); |
+ }); |
+} |
+ |
+new Promise(function (resolve, reject) { |
global.req = new XMLHttpRequest; |
req.responseType = "blob"; |
req.open("GET", "resources/get.txt", true); |
- req.onreadystatechange = function() { |
- if (req.readyState == 4) { |
- shouldBe("req.status", "200"); |
- shouldBe("req.response.size", "4"); |
- var reader = new FileReader(); |
- reader.onload = function (evt) { |
- global.buffer = evt.target.result; |
- shouldBeEqualToString("buffer", "PASS"); |
- testPassed("XHR with responseType=\"blob\" succeeded"); |
- finishJSTest(); |
- }; |
- reader.readAsText(req.response, "utf-8"); |
+ req.onreadystatechange = function () { |
+ if (req.readyState != req.DONE) { |
+ return; |
} |
+ |
+ shouldBe("req.status", "200"); |
+ shouldBe("req.response.size", "4"); |
+ readBlobAsArrayBuffer(req.response).then(function (value) { |
+ global.buffer = value; |
+ shouldBeEqualToString("buffer", "PASS"); |
+ testPassed("Set responseType before open(): Successful"); |
+ }).then(resolve, reject); |
}; |
req.send(null); |
-} catch (e) { |
- testFailed("failed to create XMLHttpRequest with exception: " + e.message); |
+}).catch(function (r) { |
+ testFailed("Set responseType before open: Failed: " + r); |
+}).then(function () { |
+ return new Promise(function (resolve, reject) |
+ { |
+ global.req = new XMLHttpRequest; |
+ req.open('GET', 'resources/get.txt', true); |
+ req.onreadystatechange = function () { |
+ if (req.readyState != req.DONE) { |
+ return; |
+ } |
+ |
+ shouldBe("req.status", "200"); |
+ shouldBe("req.response.size", "4"); |
+ readBlobAsArrayBuffer(req.response).then(function (value) { |
+ global.buffer = value; |
+ shouldBeEqualToString("buffer", "PASS"); |
+ testPassed("Set responseType before send(): Successful"); |
+ }).then(resolve, reject); |
+ }; |
+ req.responseType = 'blob'; |
+ req.send(null); |
+ }); |
+}).catch(function (r) { |
+ testFailed("Set responseType before send(): Failed: " + r); |
+}).then(function () { |
+ return new Promise(function (resolve, reject) |
+ { |
+ global.req = new XMLHttpRequest; |
+ req.open('GET', 'resources/get.txt', true); |
+ req.onreadystatechange = function () { |
+ if (req.readyState == req.HEADERS_RECEIVED) { |
+ req.responseType = 'blob'; |
+ return; |
+ } else if (req.readyState != req.DONE) { |
+ return; |
+ } |
+ |
+ shouldBe("req.status", "200"); |
+ shouldBe("req.response.size", "4"); |
+ readBlobAsArrayBuffer(req.response).then(function (value) { |
+ global.buffer = value; |
+ shouldBeEqualToString("buffer", "PASS"); |
+ testPassed("Set responseType in HEADERS_RECEIVED: Successful"); |
+ }).then(finishJSTest, reject); |
+ }; |
+ req.send(null); |
+ }); |
+}).catch(function (r) { |
+ testFailed("Set responseType in HEADERS_RECEIVED: Failed: " + r); |
finishJSTest(); |
-} |
+}); |