--- a/browser/components/resistfingerprinting/test/browser/browser_navigator.js
+++ b/browser/components/resistfingerprinting/test/browser/browser_navigator.js
@@ -1,24 +1,53 @@
/**
* Bug 1333651 - A test case for making sure the navigator object has been
* spoofed/disabled correctly.
*/
const { classes: Cc, Constructor: CC, interfaces: Ci, utils: Cu } = Components;
+XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
+ "resource://gre/modules/AppConstants.jsm");
+
const TEST_PATH = "http://example.net/browser/browser/" +
"components/resistfingerprinting/test/browser/";
var spoofedUserAgent;
-const SPOOFED_APPNAME = "Netscape";
-const SPOOFED_APPVERSION = "5.0 (Windows)";
-const SPOOFED_PLATFORM = "Win64";
-const SPOOFED_OSCPU = "Windows NT 6.1; Win64; x64";
+const SPOOFED_APPNAME = "Netscape";
+
+const SPOOFED_APPVERSION = {
+ linux: "5.0 (X11)",
+ win: "5.0 (Windows)",
+ macosx: "5.0 (Macintosh)",
+ android: "5.0 (Android 6.0)",
+ other: "5.0 (X11)",
+};
+const SPOOFED_PLATFORM = {
+ linux: "Linux x86_64",
+ win: "Win64",
+ macosx: "MacIntel",
+ android: "Linux armv7l",
+ other: "Linux x86_64",
+};
+const SPOOFED_OSCPU = {
+ linux: "Linux x86_64",
+ win: "Windows NT 6.1; Win64; x64",
+ macosx: "Intel Mac OS X 10.13",
+ android: "Linux armv7l",
+ other: "Linux x86_64",
+};
+const SPOOFED_UA_OS = {
+ linux: "X11; Linux x86_64",
+ win: "Windows NT 6.1; Win64; x64",
+ macosx: "Macintosh; Intel Mac OS X 10.13",
+ android: "Android 6.0; Mobile",
+ other: "X11; Linux x86_64",
+};
const SPOOFED_BUILDID = "20100101";
const SPOOFED_HW_CONCURRENCY = 2;
const CONST_APPCODENAME = "Mozilla";
const CONST_PRODUCT = "Gecko";
const CONST_PRODUCTSUB = "20100101";
const CONST_VENDOR = "";
const CONST_VENDORSUB = "";
@@ -30,22 +59,22 @@ async function testNavigator() {
let result = await ContentTask.spawn(tab.linkedBrowser, null, function() {
return content.document.getElementById("result").innerHTML;
});
result = JSON.parse(result);
is(result.appName, SPOOFED_APPNAME, "Navigator.appName is correctly spoofed.");
- is(result.appVersion, SPOOFED_APPVERSION, "Navigator.appVersion is correctly spoofed.");
- is(result.platform, SPOOFED_PLATFORM, "Navigator.platform is correctly spoofed.");
+ is(result.appVersion, SPOOFED_APPVERSION[AppConstants.platform], "Navigator.appVersion is correctly spoofed.");
+ is(result.platform, SPOOFED_PLATFORM[AppConstants.platform], "Navigator.platform is correctly spoofed.");
is(result.userAgent, spoofedUserAgent, "Navigator.userAgent is correctly spoofed.");
is(result.mimeTypesLength, 0, "Navigator.mimeTypes has a length of 0.");
is(result.pluginsLength, 0, "Navigator.plugins has a length of 0.");
- is(result.oscpu, SPOOFED_OSCPU, "Navigator.oscpu is correctly spoofed.");
+ is(result.oscpu, SPOOFED_OSCPU[AppConstants.platform], "Navigator.oscpu is correctly spoofed.");
is(result.buildID, SPOOFED_BUILDID, "Navigator.buildID is correctly spoofed.");
is(result.hardwareConcurrency, SPOOFED_HW_CONCURRENCY, "Navigator.hardwareConcurrency is correctly spoofed.");
is(result.appCodeName, CONST_APPCODENAME, "Navigator.appCodeName reports correct constant value.");
is(result.product, CONST_PRODUCT, "Navigator.product reports correct constant value.");
is(result.productSub, CONST_PRODUCTSUB, "Navigator.productSub reports correct constant value.");
is(result.vendor, CONST_VENDOR, "Navigator.vendor reports correct constant value.");
is(result.vendorSub, CONST_VENDORSUB, "Navigator.vendorSub reports correct constant value.");
@@ -68,35 +97,35 @@ async function testWorkerNavigator() {
});
return res;
});
result = JSON.parse(result);
is(result.appName, SPOOFED_APPNAME, "Navigator.appName is correctly spoofed.");
- is(result.appVersion, SPOOFED_APPVERSION, "Navigator.appVersion is correctly spoofed.");
- is(result.platform, SPOOFED_PLATFORM, "Navigator.platform is correctly spoofed.");
+ is(result.appVersion, SPOOFED_APPVERSION[AppConstants.platform], "Navigator.appVersion is correctly spoofed.");
+ is(result.platform, SPOOFED_PLATFORM[AppConstants.platform], "Navigator.platform is correctly spoofed.");
is(result.userAgent, spoofedUserAgent, "Navigator.userAgent is correctly spoofed.");
is(result.hardwareConcurrency, SPOOFED_HW_CONCURRENCY, "Navigator.hardwareConcurrency is correctly spoofed.");
is(result.appCodeName, CONST_APPCODENAME, "Navigator.appCodeName reports correct constant value.");
is(result.product, CONST_PRODUCT, "Navigator.product reports correct constant value.");
await BrowserTestUtils.removeTab(tab);
}
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({"set":
[["privacy.resistFingerprinting", true]]
});
let appVersion = parseInt(Services.appinfo.version);
let spoofedVersion = appVersion - ((appVersion - 3) % 7);
- spoofedUserAgent = `Mozilla/5.0 (${SPOOFED_OSCPU}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
+ spoofedUserAgent = `Mozilla/5.0 (${SPOOFED_UA_OS[AppConstants.platform]}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
});
add_task(async function runNavigatorTest() {
await testNavigator();
});
add_task(async function runWorkerNavigatorTest() {
await testWorkerNavigator();
--- a/toolkit/components/resistfingerprinting/nsRFPService.cpp
+++ b/toolkit/components/resistfingerprinting/nsRFPService.cpp
@@ -208,17 +208,17 @@ nsRFPService::GetSpoofedUserAgent(nsACSt
if (updateChannel.EqualsLiteral("esr")) {
MOZ_ASSERT(((firefoxVersion % 7) == 3),
"Please udpate ESR version formula in nsRFPService.cpp");
}
uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7);
userAgent.Assign(nsPrintfCString(
"Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
- SPOOFED_OSCPU, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
+ SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
return rv;
}
nsresult
nsRFPService::Init()
{
MOZ_ASSERT(NS_IsMainThread());