summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/bugs/test_navigator_buildID.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/bugs/test_navigator_buildID.html')
-rw-r--r--dom/tests/mochitest/bugs/test_navigator_buildID.html93
1 files changed, 93 insertions, 0 deletions
diff --git a/dom/tests/mochitest/bugs/test_navigator_buildID.html b/dom/tests/mochitest/bugs/test_navigator_buildID.html
new file mode 100644
index 0000000000..231bd99c23
--- /dev/null
+++ b/dom/tests/mochitest/bugs/test_navigator_buildID.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=583181
+-->
+<head>
+ <title>Test for Bug 583181</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/ChromeTask.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body onload="onLoad()">
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=583181">Mozilla Bug 583181</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+
+const LEGACY_BUILD_ID = 20181001000000;
+
+//
+// Access navigator.buildID from unprivileged web content.
+//
+var isOK = false;
+try {
+ var contentBuildID = navigator.buildID;
+ isOK = true;
+} catch (ex) {
+}
+ok(isOK, "navigator.buildID should never throw");
+is(typeof(contentBuildID), "string", "navigator.buildID should be a string");
+is(+contentBuildID, LEGACY_BUILD_ID,
+ "navigator.buildID should be spoofed in content");
+
+async function onLoad() {
+ //
+ // Access navigator.buildID from chrome.
+ //
+ let chromeBuildID = await ChromeTask.spawn(null, () => {
+ const browser = Services.wm.getMostRecentBrowserWindow();
+ return browser.navigator.buildID;
+ });
+
+ ok(+chromeBuildID > LEGACY_BUILD_ID,
+ `navigator.buildID should be exposed in chrome - got "${chromeBuildID}"`);
+
+ //
+ // Access navigator.buildID from mozilla.org.
+ //
+ let mozillaBuildID = await getMozillaBuildID();
+
+ ok(+mozillaBuildID > LEGACY_BUILD_ID,
+ `navigator.buildID should be exposed on mozilla.org ` +
+ `- got "${mozillaBuildID}"`);
+ is(chromeBuildID, mozillaBuildID,
+ "navigator.buildID should be the same in chrome and on mozilla.org");
+
+ //
+ // Access navigator.buildID from mozilla.org when resisting fingerprinting.
+ //
+ await SpecialPowers.pushPrefEnv(
+ {"set": [["privacy.resistFingerprinting", true]]});
+
+ let resistBuildID = await getMozillaBuildID();
+
+ is(+resistBuildID, LEGACY_BUILD_ID,
+ "navigator.buildID should be spoofed on mozilla.org when " +
+ "resisting fingerprinting");
+
+ SimpleTest.finish();
+}
+
+async function getMozillaBuildID() {
+ let iframe = document.getElementById("mozillaIFrame");
+
+ await new Promise(resolve => {
+ iframe.addEventListener("load", resolve, { once: true });
+ SpecialPowers.spawn(iframe, [], () => this.content.location.reload());
+ });
+
+ return SpecialPowers.spawn(
+ iframe, [], () => this.content.wrappedJSObject.navigator.buildID);
+}
+</script>
+</pre>
+<iframe id="mozillaIFrame" src="https://www.mozilla.org/" />
+</body>
+</html>