blob: 52aa5afb841f53da9a0b9a8bfbf95921ff23d68f [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank(
`Tests to ensure iframe can change to data url while intercepting response.`);
session.protocol.Network.onRequestIntercepted(async event => {
var urlPart = event.params.request.url.split('/').pop();
testRunner.log('Request Intercepted: ' + urlPart);
// This will cause browser to cancel the request.
if (!urlPart.startsWith('data:,')) {
testRunner.log('Setting iframe to data url from renderer');
await session.evaluate(`iframe.src ='data:,Dummy data';`);
}
testRunner.log('Continuing request unchanged');
session.protocol.Network.continueInterceptedRequest({interceptionId: event.params.interceptionId});
testRunner.log('');
});
await session.protocol.Network.clearBrowserCookies();
await session.protocol.Network.clearBrowserCache();
await session.protocol.Network.setCacheDisabled({cacheDisabled: true});
session.protocol.Network.enable();
testRunner.log('Network agent enabled');
await session.protocol.Network.setRequestInterception({patterns: [{urlPattern: "http://*", interceptionStage: 'HeadersReceived'}]});
var requestId = '';
session.protocol.Network.onRequestWillBeSent(event => {
if (!event.params.documentURL.startsWith('data:'))
return;
if (requestId)
throw "requestId already set";
requestId = event.params.requestId;
});
await new Promise(resolve => {
session.protocol.Network.onLoadingFinished(resolve);
session.evaluate(`
iframe = document.createElement('iframe');
// Script wait sends headers then waits 10 seconds to send body.
iframe.src = '/devtools/network/resources/resource.php?send=10000&chunked=1&size=1000&nosniff=1';
document.body.appendChild(iframe);
`);
});
var result = await session.protocol.Network.getResponseBody({requestId: requestId});
testRunner.log('Body content received by renderer:');
testRunner.log(result.result.base64Encoded ? atob(result.result.body) : result.result.body);
testRunner.completeTest();
})