blob: 9b10b2a8f28c1e81a318e837e9e388569d0c6351 [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank(
`Tests that 'BlockedByClient' network interception is executed with blockedReason set to 'inspector' (=devtools).`);
await dp.Network.enable();
await dp.Page.enable();
await dp.Network.setRequestInterception({
patterns: [{ urlPattern: '*' }]
});
const messagesByURL = new Map();
function addMessage(url, message) {
let messages = messagesByURL.get(url);
if (!messages) {
messages = [];
messagesByURL.set(url, messages);
}
messages.push(message);
}
dp.Network.onRequestIntercepted(event => {
const url = event.params.request.url;
if (url.endsWith('page-with-subresource.html')) {
addMessage(url, '2 - continuing to load');
dp.Network.continueInterceptedRequest({
interceptionId: event.params.interceptionId,
});
} else {
addMessage(url, '2 - blocking');
dp.Network.continueInterceptedRequest({
interceptionId: event.params.interceptionId,
errorReason: 'BlockedByClient'
});
}
});
// We map the requestIds to URLs since these are stable within this test.
// Also this shows both the requests that we're blocking and the ones that
// continue.
const urlByRequestId = new Map();
dp.Network.onRequestWillBeSent(event => {
const url = event.params.request.url;
addMessage(url, '1 - request will be sent');
urlByRequestId.set(event.params.requestId, url);
});
// Log the requests that are blocked, with the blockedReason indicating
// that they were blocked via the devtools protocol (inspector).
dp.Network.onLoadingFailed(event => {
const url = urlByRequestId.get(event.params.requestId);
const blockedReason = event.params.blockedReason;
addMessage(url, `3 - loading failed, blockedReason = ${blockedReason}`);
});
await dp.Runtime.enable();
// Test blocking a page. This page doesn't exist so it would 404 but that's
// OK because the interception / blocking happens before any network fetch
// would take place anyway.
await page.navigate('./resources/to-be-blocked.html');
// This page will not be blocked so it just passes through in the interception.
// The resource exists, and references to-be-blocked.jpg, a subresource.
await page.navigate('./resources/page-with-subresource.html');
for (const url of Array.from(messagesByURL.keys()).sort()) {
testRunner.log(url);
for (const message of messagesByURL.get(url).sort())
testRunner.log(` ${message}`);
}
testRunner.completeTest();
})