feat(webkit): support referrer parameter in Page.navigate (#286)

* add test for reference-policy: no-referrer
This commit is contained in:
Yury Semikhatsky 2019-12-17 18:19:35 -07:00 committed by GitHub
parent f854b09879
commit 83833f61c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 3 deletions

View File

@ -10,7 +10,7 @@
"playwright": { "playwright": {
"chromium_revision": "724623", "chromium_revision": "724623",
"firefox_revision": "1007", "firefox_revision": "1007",
"webkit_revision": "1043" "webkit_revision": "1044"
}, },
"scripts": { "scripts": {
"unit": "node test/test.js", "unit": "node test/test.js",

View File

@ -190,7 +190,7 @@ export class FrameManager implements PageDelegate {
} }
async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> { async navigateFrame(frame: frames.Frame, url: string, referrer: string | undefined): Promise<frames.GotoResult> {
await this._session.send('Page.navigate', { url, frameId: frame._id }); await this._session.send('Page.navigate', { url, frameId: frame._id, referrer });
return {}; // We cannot get loaderId of cross-process navigation in advance. return {}; // We cannot get loaderId of cross-process navigation in advance.
} }

View File

@ -416,7 +416,7 @@ module.exports.addTests = function({testRunner, expect, playwright, FFOX, CHROME
} }
expect(error.message).toContain(url); expect(error.message).toContain(url);
}); });
it.skip(WEBKIT)('should send referer', async({page, server}) => { it('should send referer', async({page, server}) => {
const [request1, request2] = await Promise.all([ const [request1, request2] = await Promise.all([
server.waitForRequest('/grid.html'), server.waitForRequest('/grid.html'),
server.waitForRequest('/digits/1.png'), server.waitForRequest('/digits/1.png'),
@ -429,6 +429,37 @@ module.exports.addTests = function({testRunner, expect, playwright, FFOX, CHROME
expect(request2.headers['referer']).toBe(server.PREFIX + '/grid.html'); expect(request2.headers['referer']).toBe(server.PREFIX + '/grid.html');
expect(page.url()).toBe(server.PREFIX + '/grid.html'); expect(page.url()).toBe(server.PREFIX + '/grid.html');
}); });
it('should use referer option when setExtraHTTPHeaders provides referer', async({page, server}) => {
await page.setExtraHTTPHeaders({ 'referer': 'http://microsoft.com/' });
const [request1, request2] = await Promise.all([
server.waitForRequest('/grid.html'),
server.waitForRequest('/digits/1.png'),
page.goto(server.PREFIX + '/grid.html', {
referer: 'http://google.com/',
}),
]);
expect(request1.headers['referer']).toBe('http://google.com/');
// Make sure subresources use referer specified by setExtraHTTPHeaders.
expect(request2.headers['referer']).toBe('http://microsoft.com/');
expect(page.url()).toBe(server.PREFIX + '/grid.html');
});
it('should override referrer-policy', async({page, server}) => {
server.setRoute('/grid.html', (req, res) => {
res.setHeader('Referrer-Policy', 'no-referrer');
server.serveFile(req, res, '/grid.html');
});
const [request1, request2] = await Promise.all([
server.waitForRequest('/grid.html'),
server.waitForRequest('/digits/1.png'),
page.goto(server.PREFIX + '/grid.html', {
referer: 'http://microsoft.com/',
}),
]);
expect(request1.headers['referer']).toBe('http://microsoft.com/');
// Make sure subresources do not inherit referer.
expect(request2.headers['referer']).toBe(undefined);
expect(page.url()).toBe(server.PREFIX + '/grid.html');
});
}); });
describe('Page.waitForNavigation', function() { describe('Page.waitForNavigation', function() {