summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/navigator_worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/navigator_worker.js')
-rw-r--r--dom/workers/test/navigator_worker.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/dom/workers/test/navigator_worker.js b/dom/workers/test/navigator_worker.js
new file mode 100644
index 000000000..63853aef1
--- /dev/null
+++ b/dom/workers/test/navigator_worker.js
@@ -0,0 +1,79 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// IMPORTANT: Do not change the list below without review from a DOM peer!
+var supportedProps = [
+ "appCodeName",
+ "appName",
+ "appVersion",
+ "platform",
+ "product",
+ "userAgent",
+ "onLine",
+ "language",
+ "languages",
+ "hardwareConcurrency",
+ { name: "storage", nightly: true },
+];
+
+self.onmessage = function(event) {
+ if (!event || !event.data) {
+ return;
+ }
+
+ startTest(event.data);
+};
+
+function startTest(channelData) {
+ // Prepare the interface map showing if a propery should exist in this build.
+ // For example, if interfaceMap[foo] = true means navigator.foo should exist.
+ var interfaceMap = {};
+
+ for (var prop of supportedProps) {
+ if (typeof(prop) === "string") {
+ interfaceMap[prop] = true;
+ continue;
+ }
+
+ if (prop.nightly === !channelData.isNightly ||
+ prop.release === !channelData.isRelease) {
+ interfaceMap[prop.name] = false;
+ continue;
+ }
+
+ interfaceMap[prop.name] = true;
+ }
+
+ for (var prop in navigator) {
+ // Make sure the list is current!
+ if (!interfaceMap[prop]) {
+ throw "Navigator has the '" + prop + "' property that isn't in the list!";
+ }
+ }
+
+ var obj;
+
+ for (var prop in interfaceMap) {
+ // Skip the property that is not supposed to exist in this build.
+ if (!interfaceMap[prop]) {
+ continue;
+ }
+
+ if (typeof navigator[prop] == "undefined") {
+ throw "Navigator has no '" + prop + "' property!";
+ }
+
+ obj = { name: prop };
+ obj.value = navigator[prop];
+
+ postMessage(JSON.stringify(obj));
+ }
+
+ obj = {
+ name: "testFinished"
+ };
+
+ postMessage(JSON.stringify(obj));
+}