summaryrefslogtreecommitdiffstats
path: root/browser/components/originattributes/test/browser/worker_blobify.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/originattributes/test/browser/worker_blobify.js')
-rw-r--r--browser/components/originattributes/test/browser/worker_blobify.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/browser/components/originattributes/test/browser/worker_blobify.js b/browser/components/originattributes/test/browser/worker_blobify.js
new file mode 100644
index 0000000000..20a1d8f2a0
--- /dev/null
+++ b/browser/components/originattributes/test/browser/worker_blobify.js
@@ -0,0 +1,49 @@
+// Wait for a string to be posted to this worker.
+// Create a blob containing this string, and then
+// post back a blob URL pointing to the blob.
+
+/* eslint-env worker */
+
+var postStringInBlob = function (blobObject) {
+ var fileReader = new FileReaderSync();
+ var result = fileReader.readAsText(blobObject);
+ postMessage(result);
+};
+
+self.addEventListener("message", e => {
+ if (e.data.what === "blobify") {
+ try {
+ let blobURL = URL.createObjectURL(new Blob([e.data.message]));
+ postMessage({ blobURL });
+ } catch (ex) {
+ postMessage({ error: ex.message });
+ }
+ return;
+ }
+
+ if (e.data.what === "deblobify") {
+ if ("error" in e.data.message) {
+ postMessage(e.data.message);
+ return;
+ }
+ let blobURL = e.data.message.blobURL,
+ xhr = new XMLHttpRequest();
+ try {
+ xhr.open("GET", blobURL, true);
+ xhr.onload = function () {
+ postStringInBlob(xhr.response);
+ };
+ xhr.onerror = function () {
+ postMessage({ error: "xhr error" });
+ };
+ xhr.responseType = "blob";
+ xhr.send();
+ } catch (ex) {
+ postMessage({ error: ex.message });
+ }
+
+ return;
+ }
+
+ postMessage("Invalid operation!");
+});