Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
// "Normal" cookie
const COOKIE_NORMAL = {
host: "example.com",
name: "test_cookie",
path: "/",
originAttributes: {},
};
// Private browsing cookie
const COOKIE_PRIVATE = {
host: "example.net",
name: "test_cookie",
path: "/",
originAttributes: {
privateBrowsingId: 1,
},
};
// "firefox-container-1" cookie
const COOKIE_CONTAINER = {
host: "example.org",
name: "test_cookie",
path: "/",
originAttributes: {
userContextId: 1,
},
};
function cookieExists(cookie) {
return Services.cookies.cookieExists(
cookie.host,
cookie.path,
cookie.name,
cookie.originAttributes
);
}
function addCookie(cookie) {
const THE_FUTURE = Date.now() + 5 * 60;
Services.cookies.add(
cookie.host,
cookie.path,
cookie.name,
"test",
false,
false,
false,
THE_FUTURE,
cookie.originAttributes,
Ci.nsICookie.SAMESITE_NONE,
Ci.nsICookie.SCHEME_HTTPS
);
ok(cookieExists(cookie), `Cookie ${cookie.name} was created.`);
}
async function setUpCookies() {
Services.cookies.removeAll();
addCookie(COOKIE_NORMAL);
addCookie(COOKIE_PRIVATE);
addCookie(COOKIE_CONTAINER);
}
add_task(async function testCookies() {
Services.prefs.setBoolPref("privacy.userContext.enabled", true);
function background() {
browser.test.onMessage.addListener(async (msg, options) => {
if (msg == "removeCookies") {
await browser.browsingData.removeCookies(options);
} else {
await browser.browsingData.remove(options, { cookies: true });
}
browser.test.sendMessage("cookiesRemoved");
});
}
let extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
permissions: ["browsingData"],
},
});
async function testRemovalMethod(method) {
// Clear only "normal"/default cookies.
await setUpCookies();
extension.sendMessage(method, { cookieStoreId: "firefox-default" });
await extension.awaitMessage("cookiesRemoved");
ok(!cookieExists(COOKIE_NORMAL), "Normal cookie was removed");
ok(cookieExists(COOKIE_PRIVATE), "Private cookie was not removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
// Clear container cookie
await setUpCookies();
extension.sendMessage(method, { cookieStoreId: "firefox-container-1" });
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(cookieExists(COOKIE_PRIVATE), "Private cookie was not removed");
ok(!cookieExists(COOKIE_CONTAINER), "Container cookie was removed");
// Clear private cookie
await setUpCookies();
extension.sendMessage(method, { cookieStoreId: "firefox-private" });
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(!cookieExists(COOKIE_PRIVATE), "Private cookie was removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
// Clear container cookie with correct hostname
await setUpCookies();
extension.sendMessage(method, {
cookieStoreId: "firefox-container-1",
hostnames: ["example.org"],
});
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(cookieExists(COOKIE_PRIVATE), "Private cookie was not removed");
ok(!cookieExists(COOKIE_CONTAINER), "Container cookie was removed");
// Clear container cookie with incorrect hostname; nothing is removed
await setUpCookies();
extension.sendMessage(method, {
cookieStoreId: "firefox-container-1",
hostnames: ["example.com"],
});
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(cookieExists(COOKIE_PRIVATE), "Private cookie was not removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
// Clear private cookie with correct hostname
await setUpCookies();
extension.sendMessage(method, {
cookieStoreId: "firefox-private",
hostnames: ["example.net"],
});
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(!cookieExists(COOKIE_PRIVATE), "Private cookie was removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
// Clear private cookie with incorrect hostname; nothing is removed
await setUpCookies();
extension.sendMessage(method, {
cookieStoreId: "firefox-private",
hostnames: ["example.com"],
});
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(cookieExists(COOKIE_PRIVATE), "Private cookie was not removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
// Clear private cookie by hostname
await setUpCookies();
extension.sendMessage(method, {
hostnames: ["example.net"],
});
await extension.awaitMessage("cookiesRemoved");
ok(cookieExists(COOKIE_NORMAL), "Normal cookie was not removed");
ok(!cookieExists(COOKIE_PRIVATE), "Private cookie was removed");
ok(cookieExists(COOKIE_CONTAINER), "Container cookie was not removed");
}
await extension.startup();
await testRemovalMethod("removeCookies");
await testRemovalMethod("remove");
await extension.unload();
});