From 07aed8049da4728190b1471266917e126f98190f Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Mon, 4 Nov 2019 15:38:06 +0000 Subject: [PATCH] Bug 1591579 - Test for XHR on sharedWorkers, r=smaug Differential Revision: https://phabricator.services.mozilla.com/D50951 --HG-- extra : moz-landing-system : lando --- dom/xhr/tests/mochitest.ini | 2 + dom/xhr/tests/test_sharedworker_xhr.html | 23 +++++ dom/xhr/tests/xhr_sharedworker.js | 105 +++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 dom/xhr/tests/test_sharedworker_xhr.html create mode 100644 dom/xhr/tests/xhr_sharedworker.js diff --git a/dom/xhr/tests/mochitest.ini b/dom/xhr/tests/mochitest.ini index 43ed1440ec4c..9743669c72bd 100644 --- a/dom/xhr/tests/mochitest.ini +++ b/dom/xhr/tests/mochitest.ini @@ -113,3 +113,5 @@ skip-if = toolkit == "android" && debug && !is_fennec skip-if = (os == "win" && processor == "aarch64") #bug 1535784 [test_worker_xhr_doubleSend.html] support-files = xhr_worker_doubleSend.js +[test_sharedworker_xhr.html] +support-files = xhr_sharedworker.js diff --git a/dom/xhr/tests/test_sharedworker_xhr.html b/dom/xhr/tests/test_sharedworker_xhr.html new file mode 100644 index 000000000000..c0c43bcb26d7 --- /dev/null +++ b/dom/xhr/tests/test_sharedworker_xhr.html @@ -0,0 +1,23 @@ + + + + Test for SharedWorker Threads XHR + + + + + + + diff --git a/dom/xhr/tests/xhr_sharedworker.js b/dom/xhr/tests/xhr_sharedworker.js new file mode 100644 index 000000000000..c8e1c100949f --- /dev/null +++ b/dom/xhr/tests/xhr_sharedworker.js @@ -0,0 +1,105 @@ +/** + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/* eslint-env worker */ +onconnect = e => { + e.ports[0].onmessage = event => { + const url = event.data; + + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(); + + const refText = xhr.responseText; + + function getResponse(type) { + xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + if (type !== undefined) { + xhr.responseType = type; + } + xhr.send(); + return xhr.response; + } + + if (getResponse() != refText) { + throw new Error("unset responseType failed"); + } + + if (getResponse("") != refText) { + throw new Error("'' responseType failed"); + } + + if (getResponse("text") != refText) { + throw new Error("'text' responseType failed"); + } + + var array = new Uint8Array(getResponse("arraybuffer")); + if (String.fromCharCode.apply(String, array) != refText) { + throw new Error("'arraybuffer' responseType failed"); + } + + var blob = getResponse("blob"); + if (new FileReaderSync().readAsText(blob) != refText) { + throw new Error("'blob' responseType failed"); + } + + // Make sure that we get invalid state exceptions when getting the wrong + // property. + + function testResponseTextException(type) { + xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = type; + xhr.send(); + + var exception; + + try { + xhr.responseText; + } catch (ex) { + exception = ex; + } + + if (!exception) { + throw new Error( + `Failed to throw when getting responseText on ${type} type` + ); + } + + if (exception.name != "InvalidStateError") { + throw new Error( + `Unexpected error when getting responseText on ${type} type` + ); + } + + if (exception.code != DOMException.INVALID_STATE_ERR) { + throw new Error( + `Unexpected error code when getting responseText on ${type} type` + ); + } + } + + testResponseTextException("arraybuffer"); + testResponseTextException("blob"); + + // Make sure "document" works, but returns text. + xhr = new XMLHttpRequest(); + + if (xhr.responseType != "") { + throw new Error("Default value for responseType is wrong!"); + } + + xhr.open("GET", url, false); + xhr.responseType = "document"; + xhr.send(); + + if (xhr.responseText != refText) { + throw new Error("'document' type not working correctly"); + } + + e.ports[0].postMessage("done"); + }; +};