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:
Andrey Lushnikov
2017-08-15 13:55:48 -07:00
committed by GitHub
parent 1d2ae60e0d
commit 96309a207c
2 changed files with 67 additions and 3 deletions

View File

@@ -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() {