blob: f3dfcab21f19feb8c4b70366e80c27daeae3ac1a [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank(
`Tests that requests produced by redirects injected via mocked response are intercepted when followed.`);
await session.protocol.Network.clearBrowserCache();
await session.protocol.Network.setCacheDisabled({cacheDisabled: true});
await session.protocol.Network.enable();
await session.protocol.Page.enable();
await dp.Page.setLifecycleEventsEnabled({enabled: true});
await dp.Network.setRequestInterception({patterns: [{}]});
session.navigate('http://test-url/');
let params = (await dp.Network.onceRequestIntercepted()).params;
testRunner.log(`Intercepted: ${params.request.url}`);
respondWithRedirct(params, 'http://test-url/redirect1');
params = (await dp.Network.onceRequestIntercepted()).params;
testRunner.log(`Intercepted: ${params.request.url}`);
respondWithRedirct(params, 'http://test-url/redirect2');
params = (await dp.Network.onceRequestIntercepted()).params;
testRunner.log(`Intercepted: ${params.request.url}`);
respondWithRedirct(params, 'http://test-url/final');
params = (await dp.Network.onceRequestIntercepted()).params;
testRunner.log(`Intercepted: ${params.request.url}`);
respond(params, ['HTTP/1.1 200 OK', 'Content-Type: text/html'], '<body>Hello, world!</body>');
await dp.Page.onceLifecycleEvent(event => event.params.name === 'load');
const body = await session.evaluate('document.body.textContent');
testRunner.log(`Response body: ${body}`);
testRunner.completeTest();
function respond(params, headers, body) {
const headersText = headers.join("\r\n");
const response = headersText + "\r\n\r\n" + (body || "");
dp.Network.continueInterceptedRequest({interceptionId: params.interceptionId, rawResponse: btoa(response)});
}
function respondWithRedirct(params, url) {
testRunner.log(`Redirecting to ${url}`);
respond(params, ['HTTP/1.1 302 Moved', `Location: ${url}`], null);
}
})