mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
Fix request interception corner cases (#261)
This patch: - teaches request interception to ignore data URLs. Currently protocol doesn't send interceptions for data URLs. - teaches request interception to properly process URLs with hashes. Currently `Network.requestIntercepted` sends url with a hash, whereas `Network.requestWillBeSent` doesn't report hashes in its urls. @see crbug.com/755456 - skips one more header that I spotted during debugging interception on the realworld websites. Fixes #258, #259.
This commit is contained in:
46
test/test.js
46
test/test.js
@@ -518,7 +518,7 @@ describe('Page', function() {
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.navigate', function() {
|
||||
describe('Page.goto', function() {
|
||||
it('should navigate to about:blank', SX(async function() {
|
||||
let response = await page.goto('about:blank');
|
||||
expect(response).toBe(null);
|
||||
@@ -690,6 +690,24 @@ describe('Page', function() {
|
||||
process.removeListener('warning', warningHandler);
|
||||
expect(warning).toBe(null);
|
||||
}));
|
||||
it('should navigate to dataURL and fire dataURL requests', SX(async function() {
|
||||
let requests = [];
|
||||
page.on('request', request => requests.push(request));
|
||||
let dataURL = 'data:text/html,<div>yo</div>';
|
||||
let response = await page.goto(dataURL);
|
||||
expect(response.status).toBe(200);
|
||||
expect(requests.length).toBe(1);
|
||||
expect(requests[0].url).toBe(dataURL);
|
||||
}));
|
||||
it('should navigate to URL with hash and fire requests without hash', SX(async function() {
|
||||
let requests = [];
|
||||
page.on('request', request => requests.push(request));
|
||||
let response = await page.goto(EMPTY_PAGE + '#hash');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.url).toBe(EMPTY_PAGE);
|
||||
expect(requests.length).toBe(1);
|
||||
expect(requests[0].url).toBe(EMPTY_PAGE);
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.waitForNavigation', function() {
|
||||
@@ -871,6 +889,32 @@ describe('Page', function() {
|
||||
]));
|
||||
expect(results).toEqual(['11', 'FAILED', '22']);
|
||||
}));
|
||||
it('should navigate to dataURL and fire dataURL requests', SX(async function() {
|
||||
await page.setRequestInterceptionEnabled(true);
|
||||
let requests = [];
|
||||
page.on('request', request => {
|
||||
requests.push(request);
|
||||
request.continue();
|
||||
});
|
||||
let dataURL = 'data:text/html,<div>yo</div>';
|
||||
let response = await page.goto(dataURL);
|
||||
expect(response.status).toBe(200);
|
||||
expect(requests.length).toBe(1);
|
||||
expect(requests[0].url).toBe(dataURL);
|
||||
}));
|
||||
it('should navigate to URL with hash and and fire requests without hash', SX(async function() {
|
||||
await page.setRequestInterceptionEnabled(true);
|
||||
let requests = [];
|
||||
page.on('request', request => {
|
||||
requests.push(request);
|
||||
request.continue();
|
||||
});
|
||||
let response = await page.goto(EMPTY_PAGE + '#hash');
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.url).toBe(EMPTY_PAGE);
|
||||
expect(requests.length).toBe(1);
|
||||
expect(requests[0].url).toBe(EMPTY_PAGE);
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.Events.Dialog', function() {
|
||||
|
||||
Reference in New Issue
Block a user