Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const PREF_SERVICES_SETTINGS_CLOCK_SKEW_SECONDS =
"services.settings.clock_skew_seconds";
const PREF_SERVICES_SETTINGS_LAST_FETCHED =
"services.settings.last_update_seconds";
add_task(async function checkWrongSystemTimeWarning() {
async function setUpPage() {
let browser;
let certErrorLoaded;
await BrowserTestUtils.openNewForegroundTab(
gBrowser,
() => {
gBrowser.selectedTab = BrowserTestUtils.addTab(
gBrowser,
);
browser = gBrowser.selectedBrowser;
certErrorLoaded = BrowserTestUtils.waitForErrorPage(browser);
},
false
);
info("Loading and waiting for the cert error");
await certErrorLoaded;
return SpecialPowers.spawn(browser, [], async function () {
let doc = content.document;
let div = doc.getElementById("errorShortDesc");
let learnMoreLink = doc.getElementById("learnMoreLink");
await ContentTaskUtils.waitForCondition(
() => div.textContent.includes("update your computer clock"),
"Correct error message found"
);
return {
divDisplay: content.getComputedStyle(div).display,
text: div.textContent,
learnMoreLink: learnMoreLink.href,
};
});
}
// Pretend that we recently updated our kinto clock skew pref
Services.prefs.setIntPref(
PREF_SERVICES_SETTINGS_LAST_FETCHED,
Math.floor(Date.now() / 1000)
);
// For this test, we want to trick Firefox into believing that
// the local system time (as returned by Date.now()) is wrong.
// Because we don't want to actually change the local system time,
// we will do the following:
// Take the validity date of our test page (expired.example.com).
let expiredDate = new Date("2010/01/05 12:00");
let localDate = Date.now();
// Compute the difference between the server date and the correct
// local system date.
let skew = Math.floor((localDate - expiredDate) / 1000);
// Make it seem like our reference server agrees that the certificate
// date is correct by recording the difference as clock skew.
Services.prefs.setIntPref(PREF_SERVICES_SETTINGS_CLOCK_SKEW_SECONDS, skew);
let localDateFmt = new Intl.DateTimeFormat("en-US", {
dateStyle: "medium",
}).format(localDate);
info("Loading a bad cert page with a skewed clock");
let message = await setUpPage();
isnot(
message.divDisplay,
"none",
"Wrong time message information is visible"
);
ok(
message.text.includes("update your computer clock"),
"Correct error message found"
);
ok(
message.text.includes("expired.example.com"),
"URL found in error message"
);
ok(message.text.includes(localDateFmt), "Correct local date displayed");
ok(
message.learnMoreLink.includes("time-errors"),
"time-errors in the Learn More URL"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
Services.prefs.clearUserPref(PREF_SERVICES_SETTINGS_LAST_FETCHED);
Services.prefs.clearUserPref(PREF_SERVICES_SETTINGS_CLOCK_SKEW_SECONDS);
});
add_task(async function checkCertError() {
async function setUpPage() {
let browser;
let certErrorLoaded;
gBrowser.selectedTab = BrowserTestUtils.addTab(
gBrowser,
);
browser = gBrowser.selectedBrowser;
certErrorLoaded = BrowserTestUtils.waitForErrorPage(browser);
info("Loading and waiting for the cert error");
await certErrorLoaded;
return SpecialPowers.spawn(browser, [], async function () {
let doc = content.document;
let el = doc.getElementById("errorWhatToDoText");
await ContentTaskUtils.waitForCondition(() => el.textContent);
return el.textContent;
});
}
// The particular error message will be displayed only when clock_skew_seconds is
// less or equal to a day and the difference between date.now() and last_fetched is less than
// or equal to 5 days. Setting the prefs accordingly.
Services.prefs.setIntPref(
PREF_SERVICES_SETTINGS_LAST_FETCHED,
Math.floor(Date.now() / 1000)
);
let skew = 60 * 60 * 24;
Services.prefs.setIntPref(PREF_SERVICES_SETTINGS_CLOCK_SKEW_SECONDS, skew);
info("Loading a bad cert page");
let message = await setUpPage();
ok(
message.includes(
"The issue is most likely with the website, and there is nothing you can do" +
" to resolve it. You can notify the website’s administrator about the problem."
),
"Correct error message found"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
Services.prefs.clearUserPref(PREF_SERVICES_SETTINGS_LAST_FETCHED);
Services.prefs.clearUserPref(PREF_SERVICES_SETTINGS_CLOCK_SKEW_SECONDS);
});