Commit b1e73056 authored by ma1's avatar ma1 Committed by Pier Angelo Vendrame
Browse files

Bug 1835987 - Change RFP-spoofed TZ to Atlantic/Reykjavik. r=tjr

Atlantic/Reykjavik stays on UTC during all the year, but it is less
likely to be blocked than plan UTC.

Differential Revision: https://phabricator.services.mozilla.com/D212131
parent 80fd1844
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
/**
 * Bug 1330890 - A test case for verifying Date() object of javascript will use
 *               UTC timezone after fingerprinting resistance is enabled.
 *               Atlantic/Reykjavik timezone (GMT and "real" equivalent to UTC)
 *               after fingerprinting resistance is enabled.
 */

async function verifySpoofed() {
@@ -16,13 +17,15 @@ async function verifySpoofed() {
  // Running in content:
  function test() {
    let date = new Date();
    const TZ_NAME = "Atlantic/Reykjavik";
    const TZ_SUFFIX = "Greenwich Mean Time";
    ok(
      date.toString().endsWith("(Coordinated Universal Time)"),
      "The date toString() is in UTC timezone."
      date.toString().endsWith(`(${TZ_SUFFIX})`),
      `The date toString() is in ${TZ_NAME} timezone.`
    );
    ok(
      date.toTimeString().endsWith("(Coordinated Universal Time)"),
      "The date toTimeString() is in UTC timezone."
      date.toTimeString().endsWith(`(${TZ_SUFFIX})`),
      `The date toTimeString() is in ${TZ_NAME} timezone.`
    );
    let dateTimeFormat = Intl.DateTimeFormat("en-US", {
      dateStyle: "full",
@@ -30,12 +33,12 @@ async function verifySpoofed() {
    });
    is(
      dateTimeFormat.resolvedOptions().timeZone,
      "UTC",
      "The Intl.DateTimeFormat is in UTC timezone."
      TZ_NAME,
      `The Intl.DateTimeFormat is in ${TZ_NAME} timezone.`
    );
    ok(
      dateTimeFormat.format(date).endsWith("Coordinated Universal Time"),
      "The Intl.DateTimeFormat is formatting with the UTC timezone."
      dateTimeFormat.format(date).endsWith(TZ_SUFFIX),
      `The Intl.DateTimeFormat is formatting with the ${TZ_NAME} timezone.`
    );
    is(
      date.getFullYear(),
+8 −5
Original line number Diff line number Diff line
@@ -2,7 +2,10 @@

let tzRE = /\(([^\)]+)\)/;

// Make sure we aren't already running with UTC
const SPOOFED_TZ_NAME = "Atlantic/Reykjavik";
const SPOOFED_TZ_GENERIC = "Greenwich Mean Time";

// Make sure we aren't already running with spoofed TZ
let original = new Date(0);
assertEq(tzRE.exec(original.toString())[1], "Pacific Standard Time");

@@ -16,8 +19,8 @@ assertEq(originalDT.resolvedOptions().timeZone, "PST8PDT");
let global = newGlobal({shouldResistFingerprinting: true});

let date = new global.Date();
assertEq(tzRE.exec(date.toString())[1], "Coordinated Universal Time");
assertEq(tzRE.exec(date.toTimeString())[1], "Coordinated Universal Time");
assertEq(tzRE.exec(date.toString())[1], SPOOFED_TZ_GENERIC);
assertEq(tzRE.exec(date.toTimeString())[1], SPOOFED_TZ_GENERIC);
assertEq(date.getFullYear(), date.getUTCFullYear());
assertEq(date.getMonth(), date.getUTCMonth());
assertEq(date.getDate(), date.getUTCDate());
@@ -29,5 +32,5 @@ let dt = global.Intl.DateTimeFormat("en-US", {
  dateStyle: "full",
  timeStyle: "full",
});
assertEq(dt.format(date).endsWith("Coordinated Universal Time"), true);
assertEq(dt.resolvedOptions().timeZone, "UTC");
assertEq(dt.format(date).endsWith(SPOOFED_TZ_GENERIC), true);
assertEq(dt.resolvedOptions().timeZone, SPOOFED_TZ_NAME);
+4 −2
Original line number Diff line number Diff line
@@ -484,10 +484,12 @@ bool js::DateTimeInfo::internalTimeZoneDisplayName(char16_t* buf, size_t buflen,

mozilla::intl::TimeZone* js::DateTimeInfo::timeZone() {
  if (!timeZone_) {
    // For resist finger printing mode we always use the UTC time zone.
    // For resist finger printing mode we always use the Atlantic/Reykjavik time
    // zone as a "real world" UTC equivalent.
    mozilla::Maybe<mozilla::Span<const char16_t>> timeZoneOverride;
    if (shouldResistFingerprinting_) {
      timeZoneOverride = mozilla::Some(mozilla::MakeStringSpan(u"UTC"));
      timeZoneOverride =
          mozilla::Some(mozilla::MakeStringSpan(u"Atlantic/Reykjavik"));
    }

    auto timeZone = mozilla::intl::TimeZone::TryCreate(timeZoneOverride);
+1 −1
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ void nsRFPService::UpdateRFPPref() {
  }

  if (resistFingerprinting) {
    PR_SetEnv("TZ=UTC");
    PR_SetEnv("TZ=Atlantic/Reykjavik");
  } else if (sInitialized) {
    // We will not touch the TZ value if 'privacy.resistFingerprinting' is false
    // during the time of initialization.