const { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); function setCookie(name, url) { let value = `${name}=${Math.random()}; Path=/; Max-Age=1000; sameSite=none; Secure`; info(`Setting cookie ${value} for ${url.spec}`); let channel = NetUtil.newChannel({ uri: url, loadUsingSystemPrincipal: true, contentPolicyType: Ci.nsIContentPolicy.TYPE_DOCUMENT, }); Services.cookies.setCookieStringFromHttp(url, value, channel); } async function sleep() { await new Promise(resolve => do_timeout(1000, resolve)); } function checkSorting(cookies) { for (let i = 1; i < cookies.length; ++i) { Assert.greater( cookies[i].creationTime, cookies[i - 1].creationTime, "Cookie " + cookies[i].name ); } } add_task(async function () { Services.prefs.setBoolPref( "network.cookieJarSettings.unblocked_for_testing", true ); await setCookie("A", Services.io.newURI("https://example.com/A/")); await sleep(); await setCookie("B", Services.io.newURI("https://foo.bar/B/")); await sleep(); await setCookie("C", Services.io.newURI("https://example.org/C/")); await sleep(); await setCookie("D", Services.io.newURI("https://example.com/D/")); await sleep(); Assert.equal(Services.cookies.cookies.length, 4, "Cookie check"); const cookies = Services.cookies.getCookiesSince(0); Assert.equal(cookies.length, 4, "We retrieve all the 4 cookies"); checkSorting(cookies); let someCookies = Services.cookies.getCookiesSince( cookies[0].creationTime + 1 ); Assert.equal(someCookies.length, 3, "We retrieve some cookies"); checkSorting(someCookies); someCookies = Services.cookies.getCookiesSince(cookies[1].creationTime + 1); Assert.equal(someCookies.length, 2, "We retrieve some cookies"); checkSorting(someCookies); someCookies = Services.cookies.getCookiesSince(cookies[2].creationTime + 1); Assert.equal(someCookies.length, 1, "We retrieve some cookies"); checkSorting(someCookies); someCookies = Services.cookies.getCookiesSince(cookies[3].creationTime + 1); Assert.equal(someCookies.length, 0, "We retrieve some cookies"); });