summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/extensions')
-rw-r--r--dom/workers/test/extensions/bootstrap/bootstrap.js141
-rw-r--r--dom/workers/test/extensions/bootstrap/install.rdf31
-rw-r--r--dom/workers/test/extensions/bootstrap/jar.mn3
-rw-r--r--dom/workers/test/extensions/bootstrap/moz.build20
-rw-r--r--dom/workers/test/extensions/bootstrap/worker.js7
-rw-r--r--dom/workers/test/extensions/bootstrap/workerbootstrap-test@mozilla.org.xpibin0 -> 7202 bytes
-rw-r--r--dom/workers/test/extensions/moz.build7
-rw-r--r--dom/workers/test/extensions/traditional/WorkerTest.js122
-rw-r--r--dom/workers/test/extensions/traditional/WorkerTest.manifest3
-rw-r--r--dom/workers/test/extensions/traditional/install.rdf30
-rw-r--r--dom/workers/test/extensions/traditional/jar.mn3
-rw-r--r--dom/workers/test/extensions/traditional/moz.build30
-rw-r--r--dom/workers/test/extensions/traditional/nsIWorkerTest.idl23
-rw-r--r--dom/workers/test/extensions/traditional/worker-test@mozilla.org.xpibin0 -> 8333 bytes
-rw-r--r--dom/workers/test/extensions/traditional/worker.js7
15 files changed, 427 insertions, 0 deletions
diff --git a/dom/workers/test/extensions/bootstrap/bootstrap.js b/dom/workers/test/extensions/bootstrap/bootstrap.js
new file mode 100644
index 000000000..acb0a204b
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/bootstrap.js
@@ -0,0 +1,141 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var Ci = Components.interfaces;
+var Cu = Components.utils;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function testForExpectedSymbols(stage, data) {
+ const expectedSymbols = [ "Worker", "ChromeWorker" ];
+ for (var symbol of expectedSymbols) {
+ Services.prefs.setBoolPref("workertest.bootstrap." + stage + "." + symbol,
+ symbol in this);
+ }
+}
+
+var gWorkerAndCallback = {
+ _ensureStarted: function() {
+ if (!this._worker) {
+ throw new Error("Not yet started!");
+ }
+ },
+
+ start: function(data) {
+ if (!this._worker) {
+ this._worker = new Worker("chrome://workerbootstrap/content/worker.js");
+ this._worker.onerror = function(event) {
+ Cu.reportError(event.message);
+ event.preventDefault();
+ };
+ }
+ },
+
+ stop: function() {
+ if (this._worker) {
+ this._worker.terminate();
+ delete this._worker;
+ }
+ },
+
+ set callback(val) {
+ this._ensureStarted();
+ var callback = val.QueryInterface(Ci.nsIObserver);
+ if (this._callback != callback) {
+ if (callback) {
+ this._worker.onmessage = function(event) {
+ callback.observe(this, event.type, event.data);
+ };
+ this._worker.onerror = function(event) {
+ callback.observe(this, event.type, event.message);
+ event.preventDefault();
+ };
+ }
+ else {
+ this._worker.onmessage = null;
+ this._worker.onerror = null;
+ }
+ this._callback = callback;
+ }
+ },
+
+ get callback() {
+ return this._callback;
+ },
+
+ postMessage: function(data) {
+ this._ensureStarted();
+ this._worker.postMessage(data);
+ },
+
+ terminate: function() {
+ this._ensureStarted();
+ this._worker.terminate();
+ delete this._callback;
+ }
+};
+
+function WorkerTestBootstrap() {
+}
+WorkerTestBootstrap.prototype = {
+ observe: function(subject, topic, data) {
+
+ gWorkerAndCallback.callback = subject;
+
+ switch (topic) {
+ case "postMessage":
+ gWorkerAndCallback.postMessage(data);
+ break;
+
+ case "terminate":
+ gWorkerAndCallback.terminate();
+ break;
+
+ default:
+ throw new Error("Unknown worker command");
+ }
+ },
+
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver])
+};
+
+var gFactory = {
+ register: function() {
+ var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+
+ var classID = Components.ID("{36b5df0b-8dcf-4aa2-9c45-c51d871295f9}");
+ var description = "WorkerTestBootstrap";
+ var contractID = "@mozilla.org/test/workertestbootstrap;1";
+ var factory = XPCOMUtils._getFactory(WorkerTestBootstrap);
+
+ registrar.registerFactory(classID, description, contractID, factory);
+
+ this.unregister = function() {
+ registrar.unregisterFactory(classID, factory);
+ delete this.unregister;
+ };
+ }
+};
+
+function install(data, reason) {
+ testForExpectedSymbols("install");
+}
+
+function startup(data, reason) {
+ testForExpectedSymbols("startup");
+ gFactory.register();
+ gWorkerAndCallback.start(data);
+}
+
+function shutdown(data, reason) {
+ testForExpectedSymbols("shutdown");
+ gWorkerAndCallback.stop();
+ gFactory.unregister();
+}
+
+function uninstall(data, reason) {
+ testForExpectedSymbols("uninstall");
+}
diff --git a/dom/workers/test/extensions/bootstrap/install.rdf b/dom/workers/test/extensions/bootstrap/install.rdf
new file mode 100644
index 000000000..fdd9638cd
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/install.rdf
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+ <Description about="urn:mozilla:install-manifest">
+ <em:name>WorkerTestBootstrap</em:name>
+ <em:description>Worker functions for use in testing.</em:description>
+ <em:creator>Mozilla</em:creator>
+ <em:version>2016.03.09</em:version>
+ <em:id>workerbootstrap-test@mozilla.org</em:id>
+ <em:type>2</em:type>
+ <em:bootstrap>true</em:bootstrap>
+ <em:targetApplication>
+ <Description>
+ <!-- Firefox -->
+ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+ <em:minVersion>45.0</em:minVersion>
+ <em:maxVersion>*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ <em:targetApplication>
+ <Description>
+ <!-- Fennec -->
+ <em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id>
+ <em:minVersion>45.0</em:minVersion>
+ <em:maxVersion>*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ </Description>
+</RDF>
diff --git a/dom/workers/test/extensions/bootstrap/jar.mn b/dom/workers/test/extensions/bootstrap/jar.mn
new file mode 100644
index 000000000..a9c625103
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/jar.mn
@@ -0,0 +1,3 @@
+workerbootstrap.jar:
+% content workerbootstrap %content/
+ content/worker.js (worker.js)
diff --git a/dom/workers/test/extensions/bootstrap/moz.build b/dom/workers/test/extensions/bootstrap/moz.build
new file mode 100644
index 000000000..aec5c249c
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/moz.build
@@ -0,0 +1,20 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+XPI_NAME = 'workerbootstrap'
+
+JAR_MANIFESTS += ['jar.mn']
+USE_EXTENSION_MANIFEST = True
+NO_JS_MANIFEST = True
+
+FINAL_TARGET_FILES += [
+ 'bootstrap.js',
+ 'install.rdf',
+]
+
+TEST_HARNESS_FILES.testing.mochitest.extensions += [
+ 'workerbootstrap-test@mozilla.org.xpi',
+]
diff --git a/dom/workers/test/extensions/bootstrap/worker.js b/dom/workers/test/extensions/bootstrap/worker.js
new file mode 100644
index 000000000..7346fc142
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/worker.js
@@ -0,0 +1,7 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+onmessage = function(event) {
+ postMessage(event.data);
+}
diff --git a/dom/workers/test/extensions/bootstrap/workerbootstrap-test@mozilla.org.xpi b/dom/workers/test/extensions/bootstrap/workerbootstrap-test@mozilla.org.xpi
new file mode 100644
index 000000000..2dab975db
--- /dev/null
+++ b/dom/workers/test/extensions/bootstrap/workerbootstrap-test@mozilla.org.xpi
Binary files differ
diff --git a/dom/workers/test/extensions/moz.build b/dom/workers/test/extensions/moz.build
new file mode 100644
index 000000000..51cf80fa2
--- /dev/null
+++ b/dom/workers/test/extensions/moz.build
@@ -0,0 +1,7 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DIRS += ['bootstrap', 'traditional']
diff --git a/dom/workers/test/extensions/traditional/WorkerTest.js b/dom/workers/test/extensions/traditional/WorkerTest.js
new file mode 100644
index 000000000..5890c0d4c
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/WorkerTest.js
@@ -0,0 +1,122 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+var gWorkerAndCallback = {
+ _worker: null,
+ _callback: null,
+
+ _ensureStarted: function() {
+ if (!this._worker) {
+ throw new Error("Not yet started!");
+ }
+ },
+
+ start: function() {
+ if (!this._worker) {
+ var worker = new Worker("chrome://worker/content/worker.js");
+ worker.onerror = function(event) {
+ Cu.reportError(event.message);
+ event.preventDefault();
+ };
+
+ this._worker = worker;
+ }
+ },
+
+ stop: function() {
+ if (this._worker) {
+ try {
+ this.terminate();
+ }
+ catch(e) {
+ Cu.reportError(e);
+ }
+ this._worker = null;
+ }
+ },
+
+ set callback(val) {
+ this._ensureStarted();
+ if (val) {
+ var callback = val.QueryInterface(Ci.nsIWorkerTestCallback);
+ if (this.callback != callback) {
+ this._worker.onmessage = function(event) {
+ callback.onmessage(event.data);
+ };
+ this._worker.onerror = function(event) {
+ callback.onerror(event.message);
+ event.preventDefault();
+ };
+ this._callback = callback;
+ }
+ }
+ else {
+ this._worker.onmessage = null;
+ this._worker.onerror = null;
+ this._callback = null;
+ }
+ },
+
+ get callback() {
+ return this._callback;
+ },
+
+ postMessage: function(data) {
+ this._ensureStarted();
+ this._worker.postMessage(data);
+ },
+
+ terminate: function() {
+ this._ensureStarted();
+ this._worker.terminate();
+ this.callback = null;
+ }
+};
+
+function WorkerTest() {
+}
+WorkerTest.prototype = {
+ observe: function(subject, topic, data) {
+ switch(topic) {
+ case "profile-after-change":
+ gWorkerAndCallback.start();
+ Services.obs.addObserver(this, "profile-before-change", false);
+ break;
+ case "profile-before-change":
+ gWorkerAndCallback.stop();
+ break;
+ default:
+ Cu.reportError("Unknown topic: " + topic);
+ }
+ },
+
+ set callback(val) {
+ gWorkerAndCallback.callback = val;
+ },
+
+ get callback() {
+ return gWorkerAndCallback.callback;
+ },
+
+ postMessage: function(message) {
+ gWorkerAndCallback.postMessage(message);
+ },
+
+ terminate: function() {
+ gWorkerAndCallback.terminate();
+ },
+
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsIWorkerTest]),
+ classID: Components.ID("{3b52b935-551f-4606-ba4c-decc18b67bfd}")
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([WorkerTest]);
diff --git a/dom/workers/test/extensions/traditional/WorkerTest.manifest b/dom/workers/test/extensions/traditional/WorkerTest.manifest
new file mode 100644
index 000000000..a5a32fb06
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/WorkerTest.manifest
@@ -0,0 +1,3 @@
+component {3b52b935-551f-4606-ba4c-decc18b67bfd} WorkerTest.js
+contract @mozilla.org/test/workertest;1 {3b52b935-551f-4606-ba4c-decc18b67bfd}
+category profile-after-change WorkerTest @mozilla.org/test/workertest;1
diff --git a/dom/workers/test/extensions/traditional/install.rdf b/dom/workers/test/extensions/traditional/install.rdf
new file mode 100644
index 000000000..00fc0f441
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/install.rdf
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+ <Description about="urn:mozilla:install-manifest">
+ <em:name>WorkerTest</em:name>
+ <em:description>Worker functions for use in testing.</em:description>
+ <em:creator>Mozilla</em:creator>
+ <em:version>2016.03.09</em:version>
+ <em:id>worker-test@mozilla.org</em:id>
+ <em:type>2</em:type>
+ <em:targetApplication>
+ <Description>
+ <!-- Firefox -->
+ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+ <em:minVersion>45.0</em:minVersion>
+ <em:maxVersion>*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ <em:targetApplication>
+ <Description>
+ <!-- Fennec -->
+ <em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id>
+ <em:minVersion>45.0</em:minVersion>
+ <em:maxVersion>*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ </Description>
+</RDF>
diff --git a/dom/workers/test/extensions/traditional/jar.mn b/dom/workers/test/extensions/traditional/jar.mn
new file mode 100644
index 000000000..421ee55a0
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/jar.mn
@@ -0,0 +1,3 @@
+worker.jar:
+% content worker %content/
+ content/worker.js (worker.js)
diff --git a/dom/workers/test/extensions/traditional/moz.build b/dom/workers/test/extensions/traditional/moz.build
new file mode 100644
index 000000000..d0920420d
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/moz.build
@@ -0,0 +1,30 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+XPIDL_SOURCES += [
+ 'nsIWorkerTest.idl',
+]
+
+XPIDL_MODULE = 'WorkerTest'
+
+EXTRA_COMPONENTS += [
+ 'WorkerTest.js',
+ 'WorkerTest.manifest',
+]
+
+XPI_NAME = 'worker'
+
+JAR_MANIFESTS += ['jar.mn']
+USE_EXTENSION_MANIFEST = True
+NO_JS_MANIFEST = True
+
+FINAL_TARGET_FILES += [
+ 'install.rdf',
+]
+
+TEST_HARNESS_FILES.testing.mochitest.extensions += [
+ 'worker-test@mozilla.org.xpi',
+]
diff --git a/dom/workers/test/extensions/traditional/nsIWorkerTest.idl b/dom/workers/test/extensions/traditional/nsIWorkerTest.idl
new file mode 100644
index 000000000..32a952038
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/nsIWorkerTest.idl
@@ -0,0 +1,23 @@
+/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
+/* vim: set ts=2 et sw=2 tw=40: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+
+[scriptable, uuid(10f8ebdf-1373-4640-9c34-53dee99f526f)]
+interface nsIWorkerTestCallback : nsISupports
+{
+ void onmessage(in DOMString data);
+ void onerror(in DOMString data);
+};
+
+[scriptable, uuid(887a0614-a0f0-4c0e-80e0-cf31e6d4e286)]
+interface nsIWorkerTest : nsISupports
+{
+ void postMessage(in DOMString data);
+ void terminate();
+
+ attribute nsIWorkerTestCallback callback;
+};
diff --git a/dom/workers/test/extensions/traditional/worker-test@mozilla.org.xpi b/dom/workers/test/extensions/traditional/worker-test@mozilla.org.xpi
new file mode 100644
index 000000000..8d2386894
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/worker-test@mozilla.org.xpi
Binary files differ
diff --git a/dom/workers/test/extensions/traditional/worker.js b/dom/workers/test/extensions/traditional/worker.js
new file mode 100644
index 000000000..7346fc142
--- /dev/null
+++ b/dom/workers/test/extensions/traditional/worker.js
@@ -0,0 +1,7 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+onmessage = function(event) {
+ postMessage(event.data);
+}