134 lines
5 KiB
JavaScript
134 lines
5 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
|
});
|
|
|
|
function promiseExpiration() {
|
|
let promise = TestUtils.topicObserved(
|
|
"satchel-storage-changed",
|
|
(subject, data) => {
|
|
return data == "formhistory-expireoldentries";
|
|
}
|
|
);
|
|
|
|
// We can't easily fake a "daily idle" event, so for testing purposes form
|
|
// history listens for another notification to trigger an immediate
|
|
// expiration.
|
|
Services.obs.notifyObservers(null, "formhistory-expire-now");
|
|
|
|
return promise;
|
|
}
|
|
|
|
add_task(async function () {
|
|
// ===== test init =====
|
|
let testfile = do_get_file("asyncformhistory_expire.sqlite");
|
|
let profileDir = do_get_profile();
|
|
|
|
// Cleanup from any previous tests or failures.
|
|
let dbFile = profileDir.clone();
|
|
dbFile.append("formhistory.sqlite");
|
|
if (dbFile.exists()) {
|
|
dbFile.remove(false);
|
|
}
|
|
|
|
testfile.copyTo(profileDir, "formhistory.sqlite");
|
|
Assert.ok(dbFile.exists());
|
|
|
|
// We're going to clear this at the end, so it better have the default value now.
|
|
Assert.ok(!Services.prefs.prefHasUserValue("browser.formfill.expire_days"));
|
|
|
|
// Sanity check initial state
|
|
Assert.equal(508, await promiseCountEntries(null, null));
|
|
Assert.ok((await promiseCountEntries("name-A", "value-A")) > 0); // lastUsed == distant past
|
|
Assert.ok((await promiseCountEntries("name-B", "value-B")) > 0); // lastUsed == distant future
|
|
|
|
Assert.equal(CURRENT_SCHEMA, await getDBVersion(dbFile));
|
|
|
|
// Add a new entry
|
|
Assert.equal(0, await promiseCountEntries("name-C", "value-C"));
|
|
await promiseAddEntry("name-C", "value-C");
|
|
Assert.equal(1, await promiseCountEntries("name-C", "value-C"));
|
|
|
|
// Update some existing entries to have ages relative to when the test runs.
|
|
let now = 1000 * Date.now();
|
|
let updateLastUsed = (results, age) => {
|
|
let lastUsed = now - age * 24 * PR_HOURS;
|
|
|
|
let changes = [];
|
|
for (let result of results) {
|
|
changes.push({ op: "update", lastUsed, guid: result.guid });
|
|
}
|
|
|
|
return changes;
|
|
};
|
|
|
|
let results = await FormHistory.search(["guid"], { lastUsed: 181 });
|
|
await promiseUpdate(updateLastUsed(results, 181));
|
|
|
|
results = await FormHistory.search(["guid"], { lastUsed: 179 });
|
|
await promiseUpdate(updateLastUsed(results, 179));
|
|
|
|
results = await FormHistory.search(["guid"], { lastUsed: 31 });
|
|
await promiseUpdate(updateLastUsed(results, 31));
|
|
|
|
results = await FormHistory.search(["guid"], { lastUsed: 29 });
|
|
await promiseUpdate(updateLastUsed(results, 29));
|
|
|
|
results = await FormHistory.search(["guid"], { lastUsed: 9999 });
|
|
await promiseUpdate(updateLastUsed(results, 11));
|
|
|
|
results = await FormHistory.search(["guid"], { lastUsed: 9 });
|
|
await promiseUpdate(updateLastUsed(results, 9));
|
|
|
|
Assert.ok((await promiseCountEntries("name-A", "value-A")) > 0);
|
|
Assert.ok((await promiseCountEntries("181DaysOld", "foo")) > 0);
|
|
Assert.ok((await promiseCountEntries("179DaysOld", "foo")) > 0);
|
|
Assert.equal(509, await promiseCountEntries(null, null));
|
|
|
|
// 2 entries are expected to expire.
|
|
await promiseExpiration();
|
|
|
|
Assert.equal(0, await promiseCountEntries("name-A", "value-A"));
|
|
Assert.equal(0, await promiseCountEntries("181DaysOld", "foo"));
|
|
Assert.ok((await promiseCountEntries("179DaysOld", "foo")) > 0);
|
|
Assert.equal(507, await promiseCountEntries(null, null));
|
|
|
|
// And again. No change expected.
|
|
await promiseExpiration();
|
|
|
|
Assert.equal(507, await promiseCountEntries(null, null));
|
|
|
|
// Set formfill pref to 30 days.
|
|
Services.prefs.setIntPref("browser.formfill.expire_days", 30);
|
|
|
|
Assert.ok((await promiseCountEntries("179DaysOld", "foo")) > 0);
|
|
Assert.ok((await promiseCountEntries("bar", "31days")) > 0);
|
|
Assert.ok((await promiseCountEntries("bar", "29days")) > 0);
|
|
Assert.equal(507, await promiseCountEntries(null, null));
|
|
|
|
await promiseExpiration();
|
|
|
|
Assert.equal(0, await promiseCountEntries("179DaysOld", "foo"));
|
|
Assert.equal(0, await promiseCountEntries("bar", "31days"));
|
|
Assert.ok((await promiseCountEntries("bar", "29days")) > 0);
|
|
Assert.equal(505, await promiseCountEntries(null, null));
|
|
|
|
// Set override pref to 10 days and expire. This expires a large batch of
|
|
// entries, and should trigger a VACCUM to reduce file size.
|
|
Services.prefs.setIntPref("browser.formfill.expire_days", 10);
|
|
|
|
Assert.ok((await promiseCountEntries("bar", "29days")) > 0);
|
|
Assert.ok((await promiseCountEntries("9DaysOld", "foo")) > 0);
|
|
Assert.equal(505, await promiseCountEntries(null, null));
|
|
|
|
await promiseExpiration();
|
|
|
|
Assert.equal(0, await promiseCountEntries("bar", "29days"));
|
|
Assert.ok((await promiseCountEntries("9DaysOld", "foo")) > 0);
|
|
Assert.ok((await promiseCountEntries("name-B", "value-B")) > 0);
|
|
Assert.ok((await promiseCountEntries("name-C", "value-C")) > 0);
|
|
Assert.equal(3, await promiseCountEntries(null, null));
|
|
});
|