2020-08-27 18:40:47 +03:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const DIRPATH = getRootDirectory(gTestPath).replace(
|
|
|
|
"chrome://mochitests/content/",
|
|
|
|
""
|
|
|
|
);
|
|
|
|
const PATH = DIRPATH + "file_empty.html";
|
|
|
|
|
2020-11-30 11:56:42 +03:00
|
|
|
const ORIGIN1 = "https://example.com";
|
|
|
|
const ORIGIN2 = "https://example.org";
|
2020-08-27 18:40:47 +03:00
|
|
|
const URL1 = `${ORIGIN1}/${PATH}`;
|
|
|
|
const URL2 = `${ORIGIN2}/${PATH}`;
|
2020-11-30 11:56:42 +03:00
|
|
|
const URL1_WITH_COOP_COEP = `${ORIGIN1}/${DIRPATH}file_coop_coep.html`;
|
2020-08-27 18:40:47 +03:00
|
|
|
|
|
|
|
add_task(async function() {
|
|
|
|
await BrowserTestUtils.withNewTab(URL1, async function(browser) {
|
|
|
|
const key = "key";
|
|
|
|
const value = "value";
|
|
|
|
|
|
|
|
info(
|
|
|
|
`Verifying sessionStorage is preserved after navigating to a ` +
|
|
|
|
`cross-origin site and then navigating back`
|
|
|
|
);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL1);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN1, key, value],
|
|
|
|
async (ORIGIN, key, value) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
null,
|
2020-11-30 11:56:42 +03:00
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is null ` +
|
|
|
|
`since it's the first visit`
|
2020-08-27 18:40:47 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
content.window.sessionStorage.setItem(key, value);
|
|
|
|
|
|
|
|
let value2 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value2,
|
|
|
|
value,
|
2020-11-30 11:56:42 +03:00
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is set ` +
|
|
|
|
`correctly`
|
2020-08-27 18:40:47 +03:00
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL2);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN2, key, value],
|
|
|
|
async (ORIGIN, key, value) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
null,
|
2020-11-30 11:56:42 +03:00
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is null ` +
|
2020-08-27 18:40:47 +03:00
|
|
|
`since it's the first visit`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL1);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN1, key, value],
|
|
|
|
async (ORIGIN, key, value) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
value,
|
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is preserved`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
info(`Verifying sessionStorage is preserved for ${URL1} after navigating`);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL2);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN2, ORIGIN1, URL1, key, value],
|
|
|
|
async (ORIGIN, iframeORIGIN, iframeURL, key, value) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
|
|
|
|
let iframe = content.document.createElement("iframe");
|
|
|
|
iframe.src = iframeURL;
|
|
|
|
content.document.body.appendChild(iframe);
|
|
|
|
await ContentTaskUtils.waitForEvent(iframe, "load");
|
|
|
|
|
|
|
|
await content.SpecialPowers.spawn(
|
|
|
|
iframe,
|
|
|
|
[iframeORIGIN, key, value],
|
|
|
|
async function(ORIGIN, key, value) {
|
|
|
|
is(
|
|
|
|
content.window.origin,
|
|
|
|
ORIGIN,
|
|
|
|
`Navigate to ${ORIGIN} as expected`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
value,
|
2020-11-30 11:56:42 +03:00
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is ` +
|
|
|
|
`preserved`
|
2020-08-27 18:40:47 +03:00
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
2020-10-14 03:19:33 +03:00
|
|
|
|
|
|
|
info(`Verifying SSCache is loaded to the content process only once`);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL1);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN1, URL1, key, value],
|
|
|
|
async (ORIGIN, iframeURL, key, value) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
|
|
|
|
let iframe = content.document.createElement("iframe");
|
|
|
|
iframe.src = iframeURL;
|
|
|
|
content.document.body.appendChild(iframe);
|
|
|
|
await ContentTaskUtils.waitForEvent(iframe, "load");
|
|
|
|
|
|
|
|
await content.SpecialPowers.spawn(
|
|
|
|
iframe,
|
|
|
|
[ORIGIN, key, value],
|
|
|
|
async function(ORIGIN, key, value) {
|
|
|
|
is(
|
|
|
|
content.window.origin,
|
|
|
|
ORIGIN,
|
|
|
|
`Load an iframe to ${ORIGIN} as expected`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
value,
|
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is ` +
|
|
|
|
`preserved.`
|
|
|
|
);
|
|
|
|
|
|
|
|
// When we are here, it means we didn't hit the assertion for
|
|
|
|
// ensuring a SSCache can only be loaded on the content process
|
|
|
|
// once.
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
2020-11-30 11:56:42 +03:00
|
|
|
|
|
|
|
info(
|
|
|
|
`Verifying the sessionStorage for a tab shares between ` +
|
|
|
|
`cross-origin-isolated and non cross-origin-isolated environments`
|
|
|
|
);
|
|
|
|
const anotherKey = `anotherKey`;
|
|
|
|
const anotherValue = `anotherValue;`;
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL1_WITH_COOP_COEP);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN1, key, value, anotherKey, anotherValue],
|
|
|
|
async (ORIGIN, key, value, anotherKey, anotherValue) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
ok(
|
|
|
|
content.window.crossOriginIsolated,
|
|
|
|
`The window is cross-origin-isolated.`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
value,
|
|
|
|
`SessionStorage for ${key} in ${content.window.origin} was ` +
|
|
|
|
`propagated to COOP+COEP process correctly.`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value2 = content.window.sessionStorage.getItem(anotherKey);
|
|
|
|
is(
|
|
|
|
value2,
|
|
|
|
null,
|
|
|
|
`SessionStorage for ${anotherKey} in ${content.window.origin} ` +
|
|
|
|
`hasn't been set yet.`
|
|
|
|
);
|
|
|
|
|
|
|
|
content.window.sessionStorage.setItem(anotherKey, anotherValue);
|
|
|
|
|
|
|
|
let value3 = content.window.sessionStorage.getItem(anotherKey);
|
|
|
|
is(
|
|
|
|
value3,
|
|
|
|
anotherValue,
|
|
|
|
`SessionStorage for ${anotherKey} in ${content.window.origin} ` +
|
|
|
|
`was set as expected.`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
BrowserTestUtils.loadURI(browser, URL1);
|
|
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
|
|
|
|
await SpecialPowers.spawn(
|
|
|
|
browser,
|
|
|
|
[ORIGIN1, key, value, anotherKey, anotherValue],
|
|
|
|
async (ORIGIN, key, value, anotherKey, anotherValue) => {
|
|
|
|
is(content.window.origin, ORIGIN, `Navigate to ${ORIGIN} as expected`);
|
|
|
|
ok(
|
|
|
|
!content.window.crossOriginIsolated,
|
|
|
|
`The window is not cross-origin-isolated.`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value1 = content.window.sessionStorage.getItem(key);
|
|
|
|
is(
|
|
|
|
value1,
|
|
|
|
value,
|
|
|
|
`SessionStorage for ${key} in ${content.window.origin} is ` +
|
|
|
|
`preserved.`
|
|
|
|
);
|
|
|
|
|
|
|
|
let value2 = content.window.sessionStorage.getItem(anotherKey);
|
|
|
|
is(
|
|
|
|
value2,
|
|
|
|
anotherValue,
|
|
|
|
`SessionStorage for ${anotherKey} in ${content.window.origin} was ` +
|
|
|
|
`propagated to non-COOP+COEP process correctly.`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
2020-08-27 18:40:47 +03:00
|
|
|
});
|
|
|
|
});
|