Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
ChromeUtils.defineESModuleGetters(this, {
});
const REFERENCE_DATE = Date.now();
async function countEntries(fieldname, message, expected) {
let count = await FormHistory.count({ fieldname });
is(count, expected, message);
}
async function setupFormHistory() {
async function searchFirstEntry(terms, params) {
return (await FormHistory.search(terms, params))[0];
}
// Make sure we've got a clean DB to start with, then add the entries we'll be testing.
await FormHistory.update([
{ op: "remove" },
{
op: "add",
fieldname: "reference",
value: "reference",
},
{
op: "add",
fieldname: "10secondsAgo",
value: "10s",
},
{
op: "add",
fieldname: "10minutesAgo",
value: "10m",
},
]);
// Age the entries to the proper vintage.
let timestamp = PlacesUtils.toPRTime(REFERENCE_DATE);
let result = await searchFirstEntry(["guid"], { fieldname: "reference" });
await FormHistory.update({
op: "update",
firstUsed: timestamp,
guid: result.guid,
});
timestamp = PlacesUtils.toPRTime(REFERENCE_DATE - 10000);
result = await searchFirstEntry(["guid"], { fieldname: "10secondsAgo" });
await FormHistory.update({
op: "update",
firstUsed: timestamp,
guid: result.guid,
});
timestamp = PlacesUtils.toPRTime(REFERENCE_DATE - 10000 * 60);
result = await searchFirstEntry(["guid"], { fieldname: "10minutesAgo" });
await FormHistory.update({
op: "update",
firstUsed: timestamp,
guid: result.guid,
});
// Sanity check.
await countEntries(
"reference",
"Checking for 10minutes form history entry creation",
1
);
await countEntries(
"10secondsAgo",
"Checking for 1hour form history entry creation",
1
);
await countEntries(
"10minutesAgo",
"Checking for 1hour10minutes form history entry creation",
1
);
}
add_task(async function testFormData() {
function background() {
browser.test.onMessage.addListener(async (msg, options) => {
if (msg == "removeFormData") {
await browser.browsingData.removeFormData(options);
} else {
await browser.browsingData.remove(options, { formData: true });
}
browser.test.sendMessage("formDataRemoved");
});
}
let extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
permissions: ["browsingData"],
},
});
async function testRemovalMethod(method) {
// Clear form data with no since value.
await setupFormHistory();
extension.sendMessage(method, {});
await extension.awaitMessage("formDataRemoved");
await countEntries(
"reference",
"reference form entry should be deleted.",
0
);
await countEntries(
"10secondsAgo",
"10secondsAgo form entry should be deleted.",
0
);
await countEntries(
"10minutesAgo",
"10minutesAgo form entry should be deleted.",
0
);
// Clear form data with recent since value.
await setupFormHistory();
extension.sendMessage(method, { since: REFERENCE_DATE });
await extension.awaitMessage("formDataRemoved");
await countEntries(
"reference",
"reference form entry should be deleted.",
0
);
await countEntries(
"10secondsAgo",
"10secondsAgo form entry should still exist.",
1
);
await countEntries(
"10minutesAgo",
"10minutesAgo form entry should still exist.",
1
);
// Clear form data with old since value.
await setupFormHistory();
extension.sendMessage(method, { since: REFERENCE_DATE - 1000000 });
await extension.awaitMessage("formDataRemoved");
await countEntries(
"reference",
"reference form entry should be deleted.",
0
);
await countEntries(
"10secondsAgo",
"10secondsAgo form entry should be deleted.",
0
);
await countEntries(
"10minutesAgo",
"10minutesAgo form entry should be deleted.",
0
);
}
await extension.startup();
await testRemovalMethod("removeFormData");
await testRemovalMethod("remove");
await extension.unload();
});