Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
const PREF_FREC_DECAY_RATE_DEF = 0.975;
/**
* Promises that the pages-rank-changed event has been seen.
*
* @returns {Promise} A promise which is resolved when the notification is seen.
*/
function promiseRankingChanged() {
return PlacesTestUtils.waitForNotification("pages-rank-changed");
}
add_task(async function setup() {
Services.prefs.setCharPref(
"places.frecency.decayRate",
PREF_FREC_DECAY_RATE_DEF
);
});
add_task(async function test_isFrecencyDecaying() {
let db = await PlacesUtils.promiseDBConnection();
async function queryFrecencyDecaying() {
return (
await db.executeCached(`SELECT is_frecency_decaying()`)
)[0].getResultByIndex(0);
}
PlacesUtils.history.isFrecencyDecaying = true;
Assert.equal(PlacesUtils.history.isFrecencyDecaying, true);
Assert.equal(await queryFrecencyDecaying(), true);
PlacesUtils.history.isFrecencyDecaying = false;
Assert.equal(PlacesUtils.history.isFrecencyDecaying, false);
Assert.equal(await queryFrecencyDecaying(), false);
});
add_task(async function test_frecency_decay() {
let unvisitedBookmarkFrecency = Services.prefs.getIntPref(
"places.frecency.unvisitedBookmarkBonus"
);
// Add a bookmark and check its frecency.
let url = "http://example.com/b";
let promiseOne = promiseRankingChanged();
await PlacesUtils.bookmarks.insert({
url,
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
});
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
await promiseOne;
let histogram = TelemetryTestUtils.getAndClearHistogram(
"PLACES_IDLE_FRECENCY_DECAY_TIME_MS"
);
info("Trigger frecency decay.");
Assert.equal(PlacesUtils.history.isFrecencyDecaying, false);
let promiseRanking = promiseRankingChanged();
PlacesFrecencyRecalculator.observe(null, "idle-daily", "");
Assert.equal(PlacesUtils.history.isFrecencyDecaying, true);
info("Wait for completion.");
await PlacesFrecencyRecalculator.pendingFrecencyDecayPromise;
await promiseRanking;
Assert.equal(PlacesUtils.history.isFrecencyDecaying, false);
// Now check the new frecency is correct.
let newFrecency = await PlacesTestUtils.getDatabaseValue(
"moz_places",
"frecency",
{ url }
);
Assert.equal(
newFrecency,
Math.round(unvisitedBookmarkFrecency * PREF_FREC_DECAY_RATE_DEF),
"Frecencies should match"
);
let snapshot = histogram.snapshot();
Assert.greater(Object.values(snapshot.values).length, 0);
});