summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/extensions/bootstrap
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/extensions/bootstrap')
-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
6 files changed, 202 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