82 lines
2.5 KiB
JavaScript
82 lines
2.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
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);
|
|
});
|