Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
add_setup(async () => {
await ExtensionTestUtils.startAddonManager();
});
add_task(async function test_contextualIdentity_move() {
async function background() {
async function listCookieStoreIds() {
const contextualIds = await browser.contextualIdentities.query({});
return contextualIds.map(ctxId => ctxId.cookieStoreId);
}
const containerIds = await listCookieStoreIds();
browser.test.assertEq(containerIds.length, 4, "We start from 4 containers");
await browser.test.assertRejects(
browser.contextualIdentities.move("foobar", 2),
"Invalid contextual identity: foobar",
"API should reject for moving unknown containers"
);
await browser.test.assertRejects(
browser.contextualIdentities.move("firefox-container-123456", 2),
"Invalid contextual identity: firefox-container-123456",
"API should reject for moving unknown containers"
);
const [id0, id1, id2, id3] = containerIds;
await browser.test.assertRejects(
browser.contextualIdentities.move([id0, id0], 2),
`Duplicate contextual identity: ${id0}`,
"API should reject moves with duplicate identities containers"
);
await browser.test.assertRejects(
browser.contextualIdentities.move([id0], 4),
`Moving to invalid position 4`,
"API should reject moves with invalid destinations"
);
await browser.test.assertRejects(
browser.contextualIdentities.move([id0, id1, id2, id3], 1),
`Moving to invalid position 1`,
"API should reject moves with invalid destinations"
);
await browser.test.assertDeepEq(
[id0, id1, id2, id3],
await listCookieStoreIds(),
"Rejected calls should not have modified the list"
);
await browser.contextualIdentities.move(id0, -1);
await browser.test.assertDeepEq(
[id1, id2, id3, id0],
await listCookieStoreIds(),
"Moving single value to last position works"
);
await browser.test.assertRejects(
browser.contextualIdentities.move([id0], -2),
`Moving to invalid position -2`,
"API should reject moves with invalid destinations"
);
await browser.contextualIdentities.move([id1, id3], 1);
await browser.test.assertDeepEq(
[id2, id1, id3, id0],
await listCookieStoreIds(),
"Moving bulk values to specified position works"
);
await browser.contextualIdentities.move([], 2);
await browser.test.assertDeepEq(
[id2, id1, id3, id0],
await listCookieStoreIds(),
"Moving an empty list of values has no effect"
);
await browser.contextualIdentities.move([id0, id3, id1, id2], -1);
await browser.test.assertDeepEq(
[id2, id1, id3, id0],
await listCookieStoreIds(),
"Moving all values to the end has no effect"
);
browser.test.notifyPass("contextualIdentities_move");
}
function makeExtension(id) {
return ExtensionTestUtils.loadExtension({
useAddonManager: "temporary",
background,
manifest: {
browser_specific_settings: {
gecko: { id },
},
permissions: ["contextualIdentities"],
},
});
}
let extension = makeExtension("containers-test@mozilla.org");
await extension.startup();
await extension.awaitFinish("contextualIdentities_move");
await extension.unload();
});