Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

const TOP_LEVEL_URL =
getRootDirectory(gTestPath).replace(
) + "open_credentialless_document.sjs";
const SAME_ORIGIN = "https://example.com";
const CROSS_ORIGIN = "https://test1.example.com";
const RESOURCE_URL =
getRootDirectory(gTestPath).replace(
) + "credentialless_resource.sjs";
async function store(storer, url, requestCredentialMode) {
await SpecialPowers.spawn(
storer.linkedBrowser,
[url, requestCredentialMode],
async function (url, requestCredentialMode) {
const cache = await content.caches.open("v1");
const fetchRequest = new content.Request(url, {
mode: "no-cors",
credentials: requestCredentialMode,
});
const fetchResponse = await content.fetch(fetchRequest);
content.wrappedJSObject.console.log(fetchResponse.headers);
await cache.put(fetchRequest, fetchResponse);
}
);
}
async function retrieve(retriever, resourceURL) {
return await SpecialPowers.spawn(
retriever.linkedBrowser,
[resourceURL],
async function (url) {
const cache = await content.caches.open("v1");
try {
await cache.match(url);
return "retrieved";
} catch (error) {
return "error";
}
}
);
}
async function testCache(
storer,
storeRequestCredentialMode,
resourceCOEP,
retriever,
expectation
) {
const resourceURL = RESOURCE_URL + "?" + resourceCOEP;
await store(storer, resourceURL, storeRequestCredentialMode);
const result = await retrieve(retriever, resourceURL);
is(result, expectation);
}
add_task(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["browser.tabs.remote.coep.credentialless", false],
["dom.origin-trials.enabled", true],
["dom.origin-trials.test-key.enabled", true],
],
});
const noneTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
TOP_LEVEL_URL
);
const requireCorpTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
TOP_LEVEL_URL + "?requirecorp"
);
const credentiallessTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
TOP_LEVEL_URL + "?credentialless"
);
await testCache(noneTab, "include", "", noneTab, "retrieved");
await testCache(noneTab, "include", "", credentiallessTab, "error");
await testCache(noneTab, "omit", "", credentiallessTab, "retrieved");
await testCache(
noneTab,
"include",
"corp_cross_origin",
credentiallessTab,
"retrieved"
);
await testCache(noneTab, "include", "", requireCorpTab, "error");
await testCache(
noneTab,
"include",
"corp_cross_origin",
requireCorpTab,
"retrieved"
);
await testCache(credentiallessTab, "include", "", noneTab, "retrieved");
await testCache(
credentiallessTab,
"include",
"",
credentiallessTab,
"retrieved"
);
await testCache(credentiallessTab, "include", "", requireCorpTab, "error");
await testCache(
requireCorpTab,
"include",
"corp_cross_origin",
noneTab,
"retrieved"
);
await testCache(
requireCorpTab,
"include",
"corp_cross_origin",
credentiallessTab,
"retrieved"
);
await testCache(
requireCorpTab,
"include",
"corp_cross_origin",
requireCorpTab,
"retrieved"
);
await BrowserTestUtils.removeTab(noneTab);
await BrowserTestUtils.removeTab(requireCorpTab);
await BrowserTestUtils.removeTab(credentiallessTab);
});