ma1 pushed to branch base-browser-115.7.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
e9d1e586
by hackademix at 2024-02-06T11:48:03+01:00
4 changed files:
- browser/components/resistfingerprinting/test/browser/browser_timezone.js
- js/src/jit-test/tests/resist-fingerprinting/timezone.js
- js/src/vm/DateTime.cpp
- toolkit/components/resistfingerprinting/nsRFPService.cpp
Changes:
| 1 | 1 | /**
|
| 2 | 2 | * Bug 1330890 - A test case for verifying Date() object of javascript will use
|
| 3 | - * UTC timezone after fingerprinting resistance is enabled.
|
|
| 3 | + * Atlantic/Reykjavik timezone (GMT and "real" equivalent to UTC)
|
|
| 4 | + * after fingerprinting resistance is enabled.
|
|
| 4 | 5 | */
|
| 5 | 6 | |
| 6 | 7 | async function verifySpoofed() {
|
| ... | ... | @@ -16,13 +17,15 @@ async function verifySpoofed() { |
| 16 | 17 | // Running in content:
|
| 17 | 18 | function test() {
|
| 18 | 19 | let date = new Date();
|
| 20 | + const TZ_NAME = "Atlantic/Reykjavik";
|
|
| 21 | + const TZ_SUFFIX = "(Greenwich Mean Time)";
|
|
| 19 | 22 | ok(
|
| 20 | - date.toString().endsWith("(Coordinated Universal Time)"),
|
|
| 21 | - "The date toString() is in UTC timezone."
|
|
| 23 | + date.toString().endsWith(TZ_SUFFIX),
|
|
| 24 | + `The date toString() is in ${TZ_NAME} timezone.`
|
|
| 22 | 25 | );
|
| 23 | 26 | ok(
|
| 24 | - date.toTimeString().endsWith("(Coordinated Universal Time)"),
|
|
| 25 | - "The date toTimeString() is in UTC timezone."
|
|
| 27 | + date.toTimeString().endsWith(TZ_SUFFIX),
|
|
| 28 | + `The date toTimeString() is in ${TZ_NAME} timezone.`
|
|
| 26 | 29 | );
|
| 27 | 30 | let dateTimeFormat = Intl.DateTimeFormat("en-US", {
|
| 28 | 31 | dateStyle: "full",
|
| ... | ... | @@ -30,12 +33,12 @@ async function verifySpoofed() { |
| 30 | 33 | });
|
| 31 | 34 | is(
|
| 32 | 35 | dateTimeFormat.resolvedOptions().timeZone,
|
| 33 | - "UTC",
|
|
| 34 | - "The Intl.DateTimeFormat is in UTC timezone."
|
|
| 36 | + TZ_NAME,
|
|
| 37 | + `The Intl.DateTimeFormat is in ${TZ_NAME} timezone.`
|
|
| 35 | 38 | );
|
| 36 | 39 | ok(
|
| 37 | - dateTimeFormat.format(date).endsWith("Coordinated Universal Time"),
|
|
| 38 | - "The Intl.DateTimeFormat is formatting with the UTC timezone."
|
|
| 40 | + dateTimeFormat.format(date).endsWith(TZ_SUFFIX),
|
|
| 41 | + `The Intl.DateTimeFormat is formatting with the ${TZ_NAME} timezone.`
|
|
| 39 | 42 | );
|
| 40 | 43 | is(
|
| 41 | 44 | date.getFullYear(),
|
| ... | ... | @@ -2,7 +2,10 @@ |
| 2 | 2 | |
| 3 | 3 | let tzRE = /\(([^\)]+)\)/;
|
| 4 | 4 | |
| 5 | -// Make sure we aren't already running with UTC
|
|
| 5 | +const SPOOFED_TZ_NAME = "Atlantic/Reykjavik";
|
|
| 6 | +const SPOOFED_TZ_GENERIC = "Greenwich Mean Time";
|
|
| 7 | + |
|
| 8 | +// Make sure we aren't already running with spoofed TZ
|
|
| 6 | 9 | let original = new Date(0);
|
| 7 | 10 | assertEq(tzRE.exec(original.toString())[1], "Pacific Standard Time");
|
| 8 | 11 | |
| ... | ... | @@ -16,8 +19,8 @@ assertEq(originalDT.resolvedOptions().timeZone, "PST8PDT"); |
| 16 | 19 | let global = newGlobal({shouldResistFingerprinting: true});
|
| 17 | 20 | |
| 18 | 21 | let date = new global.Date();
|
| 19 | -assertEq(tzRE.exec(date.toString())[1], "Coordinated Universal Time");
|
|
| 20 | -assertEq(tzRE.exec(date.toTimeString())[1], "Coordinated Universal Time");
|
|
| 22 | +assertEq(tzRE.exec(date.toString())[1], SPOOFED_TZ_GENERIC);
|
|
| 23 | +assertEq(tzRE.exec(date.toTimeString())[1], SPOOFED_TZ_GENERIC);
|
|
| 21 | 24 | assertEq(date.getFullYear(), date.getUTCFullYear());
|
| 22 | 25 | assertEq(date.getMonth(), date.getUTCMonth());
|
| 23 | 26 | assertEq(date.getDate(), date.getUTCDate());
|
| ... | ... | @@ -29,5 +32,5 @@ let dt = global.Intl.DateTimeFormat("en-US", { |
| 29 | 32 | dateStyle: "full",
|
| 30 | 33 | timeStyle: "full",
|
| 31 | 34 | });
|
| 32 | -assertEq(dt.format(date).endsWith("Coordinated Universal Time"), true);
|
|
| 33 | -assertEq(dt.resolvedOptions().timeZone, "UTC"); |
|
| 35 | +assertEq(dt.format(date).endsWith(SPOOFED_TZ_GENERIC), true);
|
|
| 36 | +assertEq(dt.resolvedOptions().timeZone, SPOOFED_TZ_NAME); |
| ... | ... | @@ -484,10 +484,11 @@ bool js::DateTimeInfo::internalTimeZoneDisplayName(char16_t* buf, size_t buflen, |
| 484 | 484 | |
| 485 | 485 | mozilla::intl::TimeZone* js::DateTimeInfo::timeZone() {
|
| 486 | 486 | if (!timeZone_) {
|
| 487 | - // For resist finger printing mode we always use the UTC time zone.
|
|
| 487 | + // For resist finger printing mode we always use the Atlantic/Reykjavik time zone
|
|
| 488 | + // as a "real world" UTC equivalent.
|
|
| 488 | 489 | mozilla::Maybe<mozilla::Span<const char16_t>> timeZoneOverride;
|
| 489 | 490 | if (shouldResistFingerprinting_) {
|
| 490 | - timeZoneOverride = mozilla::Some(mozilla::MakeStringSpan(u"UTC"));
|
|
| 491 | + timeZoneOverride = mozilla::Some(mozilla::MakeStringSpan(u"Atlantic/Reykjavik"));
|
|
| 491 | 492 | }
|
| 492 | 493 | |
| 493 | 494 | auto timeZone = mozilla::intl::TimeZone::TryCreate(timeZoneOverride);
|
| ... | ... | @@ -227,7 +227,7 @@ void nsRFPService::UpdateRFPPref() { |
| 227 | 227 | }
|
| 228 | 228 | |
| 229 | 229 | if (resistFingerprinting) {
|
| 230 | - PR_SetEnv("TZ=UTC");
|
|
| 230 | + PR_SetEnv("TZ=Atlantic/Reykjavik");
|
|
| 231 | 231 | } else if (sInitialized) {
|
| 232 | 232 | // We will not touch the TZ value if 'privacy.resistFingerprinting' is false
|
| 233 | 233 | // during the time of initialization.
|