/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const PREF_LAST_EPOCH = "network.cookie.validation.lastEpoch"; const PREF_EPOCH = "network.cookie.validation.epoch"; function promise_cookies_validated() { return new _promise_observer("cookies-validated"); } function promise_idle() { return new Promise(resolve => executeSoon(resolve)); } registerCleanupFunction(() => { Services.prefs.clearUserPref(PREF_LAST_EPOCH); Services.prefs.clearUserPref(PREF_EPOCH); }); // When lastEpoch is behind the current epoch, validation should run and // lastEpoch should be updated. add_task(async function test_validation_runs_on_new_epoch() { do_get_profile(); Services.prefs.setIntPref(PREF_LAST_EPOCH, 0); Services.prefs.setIntPref(PREF_EPOCH, 1); let validatedPromise = promise_cookies_validated(); // Start the cookieservice, to force creation of a database. Services.cookies.sessionCookies; await validatedPromise; Assert.equal( Services.prefs.getIntPref(PREF_LAST_EPOCH), 1, "lastEpoch should be updated to the current epoch after validation" ); await promise_close_profile(); }); // When lastEpoch equals the current epoch, validation should be skipped. add_task(async function test_validation_skipped_on_current_epoch() { do_get_profile(); const currentEpoch = Services.prefs.getIntPref(PREF_EPOCH); Services.prefs.setIntPref(PREF_LAST_EPOCH, currentEpoch); let validated = false; let observer = { observe() { validated = true; }, }; Services.obs.addObserver(observer, "cookies-validated"); await promise_load_profile(); await promise_idle(); Services.obs.removeObserver(observer, "cookies-validated"); Assert.ok( !validated, "cookies-validated should not fire when epoch is current" ); Assert.equal( Services.prefs.getIntPref(PREF_LAST_EPOCH), currentEpoch, "lastEpoch should not change when validation is skipped" ); await promise_close_profile(); });