/* 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 // add some non-partitioned cookies for key let cookieNum1 = 1; let hostNonPartitioned = "cookie-host-non-partitioned.com"; for (let i = 0; i < cookieNum1; i++) { let cookie = new Cookie( "cookie-name" + i, "cookie-value" + i, hostNonPartitioned, "/", // path now, // expiry now, // needed to get the cookie by the db init now, // creation time false, // session false, // secure false, // http-only false, // inBrowserElement {} // OA ); schema12db.insertCookie(cookie); } // add some non-partitioned cookies different key let cookieNum2 = 10; for (let i = 0; i < cookieNum2; i++) { let cookie = new Cookie( "cookie-name" + i, "cookie-value" + i, hostNonPartitioned, "/", // path now, // expiry now, // needed to get the cookie by the db init now, // creation time false, // session false, // secure false, // http-only false, // inBrowserElement { userContextId: 8 } // OA ); schema12db.insertCookie(cookie); } // add some partitioned cookies let hostPartitioned = "host-partitioned.com"; let cookieNum3 = 3; for (let i = 0; i < cookieNum3; i++) { let cookie = new Cookie( "cookie-name" + i, "cookie-value" + i, hostPartitioned, "/", // path now, // expiry now, // needed to get the cookie by the db init now, // creation time false, // session false, // secure false, // http-only false, // inBrowserElement { partitionKey: "(https,example.com)" } ); schema12db.insertCookie(cookie); } // add some partitioned with different OA let cookieNum4 = 35; for (let i = 0; i < cookieNum4; i++) { let cookie = new Cookie( "cookie-name" + i, "cookie-value" + i, hostPartitioned, "/", // path now, // expiry now, // needed to get the cookie by the db init now, // creation time false, // session false, // secure false, // http-only false, // inBrowserElement { partitionKey: "(https,example.com)", userContextId: 7 } ); schema12db.insertCookie(cookie); } let allCookieCount = cookieNum1 + cookieNum2 + cookieNum3 + cookieNum4; Assert.equal(do_count_cookies_in_db(schema12db.db), allCookieCount); // startup the cookie service and check the cookie counts let cookieCountNonPart = Services.cookies.countCookiesFromHost(hostNonPartitioned); // includes expired cookies Assert.equal(cookieCountNonPart, cookieNum1); let cookieCountNonPartOA = Services.cookies.getCookiesFromHost( hostNonPartitioned, { userContextId: 8 } ).length; // includes expired cookies Assert.equal(cookieCountNonPartOA, cookieNum2); let cookieCountPart = Services.cookies.getCookiesFromHost(hostPartitioned, { partitionKey: "(https,example.com)", }).length; // includes expired cookies Assert.equal(cookieCountPart, cookieNum3); let cookieCountPartOA = Services.cookies.getCookiesFromHost(hostPartitioned, { partitionKey: "(https,example.com)", userContextId: 7, }).length; // includes expired cookies Assert.equal(cookieCountPartOA, cookieNum4); // trigger the collection Services.obs.notifyObservers(null, "idle-daily"); // check telem fired for all cookie count let cct = await Glean.networking.cookieCountTotal.testGetValue(); Assert.equal(cct.sum, allCookieCount, "All cookies telem"); // check telem for all un/partitioned counts let ccp = await Glean.networking.cookieCountPartitioned.testGetValue(); Assert.equal( ccp.sum, cookieNum3 + cookieNum4, "All partitioned cookies telem" ); let ccu = await Glean.networking.cookieCountUnpartitioned.testGetValue(); Assert.equal( ccu.sum, cookieNum1 + cookieNum2, "All unpartitioned cookies telem" ); // check telem for part by key (host+OA) // Note: With the decided histogram layout we see the buckets // (used for indexing the histogram's buckets) let histPartByKey = await Glean.networking.cookieCountPartByKey.testGetValue(); Assert.equal(histPartByKey.values[2], 1, "Partitioned bucket 2 has 1 value"); Assert.equal( histPartByKey.values[31], 1, "Partitioned bucket 31 has 1 value" ); Assert.equal( histPartByKey.sum, cookieNum3 + cookieNum4, "Partitioned bucket sums correctly" ); // check telem for unpart by key (host+OA) let histUnpartByKey = await Glean.networking.cookieCountUnpartByKey.testGetValue(); Assert.equal( histUnpartByKey.values[1], 1, "Unpartitioned bucket 1 has 1 value" ); Assert.equal( histUnpartByKey.values[8], 1, "Unpartitioned bucket 8 has 1 value" ); Assert.equal( histUnpartByKey.sum, cookieNum1 + cookieNum2, "Unpartitioned bucket sums correctly" ); schema12db.close(); });