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();
-}
+});