summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js168
1 files changed, 168 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js b/toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js
new file mode 100644
index 0000000000..1c40f2f73f
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_cookies_errors.js
@@ -0,0 +1,168 @@
+"use strict";
+
+add_task(async function setup_cookies() {
+ let extension = ExtensionTestUtils.loadExtension({
+ incognitoOverride: "spanning",
+ async background() {
+ const url = "http://example.com/";
+ const name = "dummyname";
+ await browser.cookies.set({ url, name, value: "from_setup:normal" });
+ await browser.cookies.set({
+ url,
+ name,
+ value: "from_setup:private",
+ storeId: "firefox-private",
+ });
+ await browser.cookies.set({
+ url,
+ name,
+ value: "from_setup:container",
+ storeId: "firefox-container-1",
+ });
+ browser.test.sendMessage("setup_done");
+ },
+ manifest: {
+ permissions: ["cookies", "http://example.com/"],
+ },
+ });
+ await extension.startup();
+ await extension.awaitMessage("setup_done");
+ await extension.unload();
+});
+
+add_task(async function test_error_messages() {
+ async function background() {
+ const url = "http://example.com/";
+ const name = "dummyname";
+ // Shorthands to minimize boilerplate.
+ const set = d => browser.cookies.set({ url, name, value: "x", ...d });
+ const remove = d => browser.cookies.remove({ url, name, ...d });
+ const get = d => browser.cookies.get({ url, name, ...d });
+ const getAll = d => browser.cookies.getAll(d);
+
+ // Host permission permission missing.
+ await browser.test.assertRejects(
+ set({}),
+ /^Permission denied to set cookie \{.*\}$/,
+ "cookies.set without host permissions rejects with error"
+ );
+ browser.test.assertEq(
+ null,
+ await remove({}),
+ "cookies.remove without host permissions does not remove any cookies"
+ );
+ browser.test.assertEq(
+ null,
+ await get({}),
+ "cookies.get without host permissions does not match any cookies"
+ );
+ browser.test.assertEq(
+ "[]",
+ JSON.stringify(await getAll({})),
+ "cookies.getAll without host permissions does not match any cookies"
+ );
+
+ // Private browsing cookies without access to private browsing mode.
+ await browser.test.assertRejects(
+ set({ storeId: "firefox-private" }),
+ "Extension disallowed access to the private cookies storeId.",
+ "cookies.set cannot modify private cookies without permission"
+ );
+ await browser.test.assertRejects(
+ remove({ storeId: "firefox-private" }),
+ "Extension disallowed access to the private cookies storeId.",
+ "cookies.remove cannot modify private cookies without permission"
+ );
+ await browser.test.assertRejects(
+ get({ storeId: "firefox-private" }),
+ "Extension disallowed access to the private cookies storeId.",
+ "cookies.get cannot read private cookies without permission"
+ );
+ await browser.test.assertRejects(
+ getAll({ storeId: "firefox-private" }),
+ "Extension disallowed access to the private cookies storeId.",
+ "cookies.getAll cannot read private cookies without permission"
+ );
+
+ // On Android, any firefox-container-... is treated as valid, so it doesn't
+ // result in an error. However, because the test extension does not have
+ // any host permissions, it will fail with an error any way (but a
+ // different one than expected).
+ // TODO bug 1743616: Fix implementation and this test.
+ const kErrorInvalidContainer = navigator.userAgent.includes("Android")
+ ? /Permission denied to set cookie/
+ : `Invalid cookie store id: "firefox-container-99"`;
+
+ // Invalid storeId.
+ await browser.test.assertRejects(
+ set({ storeId: "firefox-container-99" }),
+ kErrorInvalidContainer,
+ "cookies.set with invalid storeId (non-existent container)"
+ );
+
+ await browser.test.assertRejects(
+ set({ storeId: "0" }),
+ `Invalid cookie store id: "0"`,
+ "cookies.set with invalid storeId (format not recognized)"
+ );
+
+ for (let method of [remove, get, getAll]) {
+ let resultWithInvalidStoreId = method == getAll ? [] : null;
+ browser.test.assertEq(
+ JSON.stringify(await method({ storeId: "firefox-container-99" })),
+ JSON.stringify(resultWithInvalidStoreId),
+ `cookies.${method.name} with invalid storeId (non-existent container)`
+ );
+
+ browser.test.assertEq(
+ JSON.stringify(await method({ storeId: "0" })),
+ JSON.stringify(resultWithInvalidStoreId),
+ `cookies.${method.name} with invalid storeId (format not recognized)`
+ );
+ }
+
+ browser.test.sendMessage("test_done");
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background,
+ manifest: {
+ permissions: ["cookies"],
+ },
+ });
+ await extension.startup();
+ await extension.awaitMessage("test_done");
+ await extension.unload();
+});
+
+add_task(async function expected_cookies_at_end_of_test() {
+ let extension = ExtensionTestUtils.loadExtension({
+ incognitoOverride: "spanning",
+ async background() {
+ async function checkCookie(storeId, value) {
+ let cookies = await browser.cookies.getAll({ storeId });
+ let index = cookies.findIndex(c => c.value === value);
+ browser.test.assertTrue(index !== -1, `Found cookie: ${value}`);
+ if (index >= 0) {
+ cookies.splice(index, 1);
+ }
+ browser.test.assertEq(
+ "[]",
+ JSON.stringify(cookies),
+ `No more cookies left in cookieStoreId=${storeId}`
+ );
+ }
+ // Added in setup.
+ await checkCookie("firefox-default", "from_setup:normal");
+ await checkCookie("firefox-private", "from_setup:private");
+ await checkCookie("firefox-container-1", "from_setup:container");
+ browser.test.sendMessage("final_check_done");
+ },
+ manifest: {
+ permissions: ["cookies", "<all_urls>"],
+ },
+ });
+ await extension.startup();
+ await extension.awaitMessage("final_check_done");
+ await extension.unload();
+});