diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /browser/components/resistfingerprinting/test/browser/browser_timezone.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/resistfingerprinting/test/browser/browser_timezone.js')
-rw-r--r-- | browser/components/resistfingerprinting/test/browser/browser_timezone.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/browser/components/resistfingerprinting/test/browser/browser_timezone.js b/browser/components/resistfingerprinting/test/browser/browser_timezone.js new file mode 100644 index 0000000000..66647ac787 --- /dev/null +++ b/browser/components/resistfingerprinting/test/browser/browser_timezone.js @@ -0,0 +1,154 @@ +/** + * Bug 1330890 - A test case for verifying Date() object of javascript will use + * UTC timezone after fingerprinting resistance is enabled. + */ + +async function verifySpoofed() { + ok(true, "Running on " + content.location.origin); + + SpecialPowers.Cu.getJSTestingFunctions().setTimeZone("PST8PDT"); + is( + Intl.DateTimeFormat("en-US").resolvedOptions().timeZone, + "PST8PDT", + "Default time zone should have changed" + ); + + // Running in content: + function test() { + let date = new Date(); + ok( + date.toString().endsWith("(Coordinated Universal Time)"), + "The date toString() is in UTC timezone." + ); + ok( + date.toTimeString().endsWith("(Coordinated Universal Time)"), + "The date toTimeString() is in UTC timezone." + ); + let dateTimeFormat = Intl.DateTimeFormat("en-US", { + dateStyle: "full", + timeStyle: "full", + }); + is( + dateTimeFormat.resolvedOptions().timeZone, + "UTC", + "The Intl.DateTimeFormat is in UTC timezone." + ); + ok( + dateTimeFormat.format(date).endsWith("Coordinated Universal Time"), + "The Intl.DateTimeFormat is formatting with the UTC timezone." + ); + is( + date.getFullYear(), + date.getUTCFullYear(), + "The full year reports in UTC timezone." + ); + is( + date.getMonth(), + date.getUTCMonth(), + "The month reports in UTC timezone." + ); + is(date.getDate(), date.getUTCDate(), "The month reports in UTC timezone."); + is(date.getDay(), date.getUTCDay(), "The day reports in UTC timezone."); + is( + date.getHours(), + date.getUTCHours(), + "The hours reports in UTC timezone." + ); + is(date.getTimezoneOffset(), 0, "The difference with UTC timezone is 0."); + } + + // Run test in the context of the page. + Cu.exportFunction(is, content, { defineAs: "is" }); + Cu.exportFunction(ok, content, { defineAs: "ok" }); + content.eval(`(${test})()`); +} + +add_task(async function test_timezone() { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.resistFingerprinting", true]], + }); + + // Load a page and verify the timezone. + let tab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: TEST_PATH + "file_dummy.html", + forceNewProcess: true, + }); + + await SpecialPowers.spawn(tab.linkedBrowser, [], verifySpoofed); + + BrowserTestUtils.removeTab(tab); + + await SpecialPowers.popPrefEnv(); +}); + +// Verify that exempted domain is not spoofed. +add_task(async function test_timezone_exempt() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["privacy.resistFingerprinting.exemptedDomains", "example.net"], + ["privacy.resistFingerprinting", true], + ], + }); + + let tab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: TEST_PATH + "file_dummy.html", + forceNewProcess: true, + }); + + await SpecialPowers.spawn(tab.linkedBrowser, [], async function () { + SpecialPowers.Cu.getJSTestingFunctions().setTimeZone("PST8PDT"); + is( + Intl.DateTimeFormat("en-US").resolvedOptions().timeZone, + "PST8PDT", + "Default time zone should have changed" + ); + + function test() { + let date = new Date(0); + ok( + date.toString().endsWith("(Pacific Standard Time)"), + "The date toString() is in PT timezone" + ); + + is( + Intl.DateTimeFormat("en-US").resolvedOptions().timeZone, + "PST8PDT", + "Content should use default time zone" + ); + } + + // Run test in the context of the page. + Cu.exportFunction(is, content, { defineAs: "is" }); + Cu.exportFunction(ok, content, { defineAs: "ok" }); + content.eval(`(${test})()`); + }); + + BrowserTestUtils.removeTab(tab); + + await SpecialPowers.popPrefEnv(); +}); + +// Verify that we are still spoofing for domains not `exemptedDomains` list. +add_task(async function test_timezone_exempt_wrong_domain() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["privacy.resistFingerprinting.exemptedDomains", "example.net"], + ["privacy.resistFingerprinting", true], + ], + }); + + let tab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: + TEST_PATH.replace("example.net", "example.org") + "file_dummy.html", + forceNewProcess: true, + }); + + await SpecialPowers.spawn(tab.linkedBrowser, [], verifySpoofed); + + BrowserTestUtils.removeTab(tab); + + await SpecialPowers.popPrefEnv(); +}); |