Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { assertUpdate, createSessionDataUpdate, getUpdates } =
SessionDataUpdateHelpers;
// Test session data update scenarios using the UserContext ContextDescriptor type.
add_task(async function test_session_data_update_user_contexts() {
info("Open a new tab");
const tab = await addTab(TEST_PAGE);
const browsingContext = tab.linkedBrowser.browsingContext;
const root = createRootMessageHandler("session-data-update-user-contexts");
info("Add three items: one globally, one in a context one in a user context");
await root.updateSessionData([
createSessionDataUpdate(["global"], "add", "category1"),
createSessionDataUpdate(["browsing context"], "add", "category1", {
type: ContextDescriptorType.TopBrowsingContext,
id: browsingContext.browserId,
}),
createSessionDataUpdate(["user context"], "add", "category1", {
type: ContextDescriptorType.UserContext,
id: browsingContext.originAttributes.userContextId,
}),
]);
let processedUpdates = await getUpdates(root, browsingContext);
is(processedUpdates.length, 1);
assertUpdate(
processedUpdates.at(-1),
["global", "browsing context", "user context"],
"category1"
);
info("Open a new tab on the same test URL");
const tab2 = await addTab(TEST_PAGE);
const browsingContext2 = tab2.linkedBrowser.browsingContext;
// Make sure that this browsing context has only 2 items
processedUpdates = await getUpdates(root, browsingContext2);
is(processedUpdates.length, 1);
assertUpdate(
processedUpdates.at(-1),
["global", "user context"],
"category1"
);
root.destroy();
});
add_task(async function test_session_data_update_with_two_user_contexts() {
info("Open a new tab in the default user context");
const tab1 = await addTab(TEST_PAGE);
const browsingContext1 = tab1.linkedBrowser.browsingContext;
info("Create a non-default user context");
const userContext = ContextualIdentityService.create("test");
const userContextId = userContext.userContextId;
info("Open a new tab in the non-default user context");
const tab2 = BrowserTestUtils.addTab(gBrowser, TEST_PAGE, {
userContextId,
});
const browsingContext2 = tab2.linkedBrowser.browsingContext;
const root = createRootMessageHandler(
"session-data-update-two-user-contexts"
);
info("Add an item in the non-default user context");
await root.updateSessionData([
createSessionDataUpdate(["non-default user context"], "add", "category1", {
type: ContextDescriptorType.UserContext,
id: userContextId,
}),
]);
let processedUpdates = await getUpdates(root, browsingContext1);
is(processedUpdates.length, 0);
processedUpdates = await getUpdates(root, browsingContext2);
is(processedUpdates.length, 1);
assertUpdate(
processedUpdates.at(-1),
["non-default user context"],
"category1"
);
info("Open a new tab in the non-default user context");
const tab3 = BrowserTestUtils.addTab(gBrowser, TEST_PAGE, {
userContextId,
});
await BrowserTestUtils.browserLoaded(tab3.linkedBrowser);
const browsingContext3 = tab3.linkedBrowser.browsingContext;
// Make sure that this browsing context also has the session data item
processedUpdates = await getUpdates(root, browsingContext3);
is(processedUpdates.length, 1);
assertUpdate(
processedUpdates.at(-1),
["non-default user context"],
"category1"
);
root.destroy();
BrowserTestUtils.removeTab(tab2);
BrowserTestUtils.removeTab(tab3);
});