Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

const { NetUtil } = ChromeUtils.importESModule(
);
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");
});