/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ add_setup(function test_setup() { // FOG needs a profile directory to put its data in. do_get_profile(); // FOG needs to be initialized in order for data to flow. Services.fog.initializeFOG(); }); add_task(async function test_purge_counting() { let profile = do_get_profile(); let dbFile = do_get_cookie_file(profile); Assert.ok(!dbFile.exists()); let schema12db = new CookieDatabaseConnection(dbFile, 12); let now = Date.now() * 1000; // date in microseconds let pastExpiry = Math.round(now / 1e6 - 1000); let futureExpiry = Math.round(now / 1e6 + 1000); let manyHosts = 50; let manyCookies = 140; let totalCookies = manyHosts * manyCookies; // add many expired cookies for each host for (let hostNum = 0; hostNum < manyHosts; hostNum++) { let host = "cookie-host" + hostNum + ".com"; for (let i = 0; i < manyCookies; i++) { let cookie = new Cookie( "cookie-name" + i, "cookie-value" + i, host, "/", // path pastExpiry, pastExpiry, // needed to get the cookie by the db init now, false, false, false ); schema12db.insertCookie(cookie); } } let validCookies = Services.cookies.cookies.length; // includes expired cookies Assert.equal(validCookies, totalCookies); // add a valid cookie - this triggers the purge Services.cookies.add( "cookie-host0.com", // any host "/", // path "cookie-name-x", "cookie-value-x", false, // secure true, // http-only true, // isSession futureExpiry, {}, // OA Ci.nsICookie.SAMESITE_NONE, // SameSite Ci.nsICookie.SCHEME_HTTPS ); // check that we purge all the expired cookies and not the unexpired validCookies = Services.cookies.cookies.length; Assert.equal(validCookies, 1); // check that the telemetry fired let cpm = await Glean.networking.cookiePurgeMax.testGetValue(); Assert.equal(cpm.sum, totalCookies, "Purge the expected number of cookies"); schema12db.close(); });