blob: e2f19b0aaf7a3b09c95619e1f284d545dfedea77 [file] [log] [blame]
(async function(testRunner) {
const {page, session, dp} = await testRunner.startBlank(
`Tests Page.loadNetworkResource for different frames with cookies`);
await session.protocol.Network.clearBrowserCache();
await session.protocol.Network.setCacheDisabled({cacheDisabled: true});
await dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: true, flatten: true});
let loadCount = 5;
let loadCallback;
const loadPromise = new Promise(fulfill => loadCallback = fulfill);
const allTargets = [];
async function initalizeTarget(dp) {
allTargets.push(dp);
await dp.Page.enable();
await dp.Network.enable();
dp.Page.onFrameStoppedLoading(e => {
if (!--loadCount)
loadCallback();
});
await dp.Runtime.runIfWaitingForDebugger();
}
dp.Target.onAttachedToTarget(async e => {
const child = session.createChild(e.params.sessionId);
const targetProtocol = child.protocol;
await initalizeTarget(targetProtocol);
});
await initalizeTarget(dp);
await dp.Page.navigate({url: 'https://127.0.0.1:8443/inspector-protocol/resources/iframe-navigation-secure.html'});
const frames = new Map();
function getFrameIds(dp, frameTree) {
frames.set(frameTree.frame.securityOrigin, {frameId: frameTree.frame.id, dp});
(frameTree.childFrames || []).forEach(getFrameIds.bind(null, dp));
}
await loadPromise;
const frameTargetList = [];
for (const dp of allTargets) {
const {result} = await dp.Page.getFrameTree();
frameTargetList.push({dp, frameTree: result.frameTree});
}
frameTargetList.sort((a,b) => a.frameTree.frame.url.localeCompare(b.frameTree.frame.url));
frameTargetList.forEach(({dp, frameTree}) => getFrameIds(dp, frameTree));
testRunner.log(`Number of frames in page: ${frames.size}`);
async function requestSourceMap(dp, frameId, testExplanation, url, options) {
const response = await dp.Network.loadNetworkResource({frameId, url, options: {disableCache: false, ...options}});
testRunner.log(response.result, testExplanation, ["headers", "stream"]);
if (response.result.resource.success) {
let result = await dp.IO.read({handle: response.result.resource.stream, size: 1000*1000});
testRunner.log(`Steam content:`)
testRunner.log(result.result.data);
await dp.IO.close({handle: response.result.resource.stream});
}
testRunner.log(``);
}
for (const {frameId, dp} of frames.values()) {
const url = `https://localhost:8443/inspector-protocol/network/resources/source.map.php`;
await requestSourceMap(dp, frameId, `Response for fetch: `, url, {includeCredentials: true});
}
// Now test cookie behavior.
const setCookieUrl = 'https://devtools.oopif-a.test:8443/inspector-protocol/network/resources/set-cookie.php?cookie='
+ encodeURIComponent('name=value; SameSite=None; Secure');
await session.evaluate(`fetch('${setCookieUrl}', {method: 'POST', credentials: 'include'})`);
const setCookieUrl2 = 'https://devtools.oopif-a.test:8443/inspector-protocol/network/resources/set-cookie.php?cookie='
+ encodeURIComponent('nameStrict=value2; SameSite=Strict; Secure');
await session.evaluate(`fetch('${setCookieUrl2}', {method: 'POST', credentials: 'include'})`);
const setCookieUrl3 = 'https://devtools.oopif-a.test:8443/inspector-protocol/network/resources/set-cookie.php?cookie='
+ encodeURIComponent('nameOther=value3; SameSite=Lax; Secure');
await session.evaluate(`fetch('${setCookieUrl3}', {method: 'POST', credentials: 'include'})`);
for (const [frameUrl, {dp, frameId}] of frames.entries()) {
const parsedURL = new URL(frameUrl);
const url = `${parsedURL.protocol}//${parsedURL.host}/inspector-protocol/network/resources/echo-headers.php?headers=HTTP_COOKIE`;
for (const includeCredentials of [true, false]) {
await requestSourceMap(dp, frameId, `Response for fetching\n${url}\n from\n${frameUrl}\nafter setting cookie ${includeCredentials?"including":"including only samesite"} credentials: `, url, {includeCredentials});
}
}
testRunner.completeTest();
})