Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
const CORRUPT_FILE_PATH = PathUtils.join(
PathUtils.profileDir,
"places.sqlite.corrupt"
);
add_setup(async function setup() {
registerCleanupFunction(async function () {
Services.prefs.clearUserPref("places.database.lastMaintenance");
Services.prefs.clearUserPref("storage.vacuum.last.places.sqlite");
await IOUtils.remove(CORRUPT_FILE_PATH);
});
});
add_task(async function test_places_db_stats_table() {
await doTestOnAboutSupportPage(async function (browser) {
const [initialToggleText, toggleTextAfterShow, toggleTextAfterHide] =
await SpecialPowers.spawn(browser, [], async function () {
const toggleButton = content.document.getElementById(
"place-database-stats-toggle"
);
const getToggleText = () =>
content.document.l10n.getAttributes(toggleButton).id;
const toggleTexts = [];
const table = content.document.getElementById(
"place-database-stats-tbody"
);
await ContentTaskUtils.waitForCondition(
() => ContentTaskUtils.isHidden(table),
"Stats table is hidden initially"
);
toggleTexts.push(getToggleText());
toggleButton.click();
await ContentTaskUtils.waitForCondition(
() => ContentTaskUtils.isVisible(table),
"Stats table is shown after first toggle"
);
toggleTexts.push(getToggleText());
toggleButton.click();
await ContentTaskUtils.waitForCondition(
() => ContentTaskUtils.isHidden(table),
"Stats table is hidden after second toggle"
);
toggleTexts.push(getToggleText());
return toggleTexts;
});
Assert.equal(initialToggleText, "place-database-stats-show");
Assert.equal(toggleTextAfterShow, "place-database-stats-hide");
Assert.equal(toggleTextAfterHide, "place-database-stats-show");
});
});
add_task(async function test_lastMaintenanceDate() {
const TEST_DATA = [
{
date: 0,
expected: "Missing",
},
{
date: Math.floor(new Date("2025-11-21T12:16:30").getTime() / 1000),
expected: "11/21/2025, 12:16 PM",
},
];
for (const { date, expected } of TEST_DATA) {
Services.prefs.setIntPref("places.database.lastMaintenance", date);
await doTestOnAboutSupportPage(async function (browser) {
await waitUntilContentLabelUpdated({
browser,
id: "place-database-last-idle-maintenance-data",
expected,
});
Assert.ok(true, "The lastMaintenance is displayed correctly");
});
}
});
add_task(async function test_lastVacuumDate() {
const TEST_DATA = [
{
date: 0,
expected: "Missing",
},
{
date: Math.floor(new Date("2025-11-21T12:16:30").getTime() / 1000),
expected: "11/21/2025, 12:16 PM",
},
];
for (const { date, expected } of TEST_DATA) {
Services.prefs.setIntPref("storage.vacuum.last.places.sqlite", date);
await doTestOnAboutSupportPage(async function (browser) {
await waitUntilContentLabelUpdated({
browser,
id: "place-database-last-vacuum-date",
expected,
});
Assert.ok(true, "The lastVacuumDate is displayed correctly");
});
}
});
add_task(async function test_lastIntegrityCorruptionDate() {
const TEST_DATA = [
{
// No corruption file.
date: 0,
expected: "Missing",
},
{
date: new Date("2025-11-21T12:16:30").getTime(),
expected: "11/21/2025, 12:16 PM",
},
];
for (const { date, expected } of TEST_DATA) {
if (date) {
await IOUtils.writeUTF8(CORRUPT_FILE_PATH, "test");
await IOUtils.setModificationTime(CORRUPT_FILE_PATH, date);
}
await doTestOnAboutSupportPage(async function (browser) {
await waitUntilContentLabelUpdated({
browser,
id: "place-database-last-integrity-corruption-date",
expected,
});
Assert.ok(true, "The lastIntegrityCorruptionDate is displayed correctly");
});
}
});
async function doTestOnAboutSupportPage(func) {
await BrowserTestUtils.withNewTab({ gBrowser, url: "about:support" }, func);
}
async function waitUntilContentLabelUpdated({ browser, id, expected }) {
await SpecialPowers.spawn(browser, [id, expected], async (i, e) => {
const target = content.document.getElementById(i);
await ContentTaskUtils.waitForMutationCondition(
target,
{
characterData: true,
childList: true,
subtree: true,
},
() => target.textContent == e
);
});
}