From 7bedbb2d7868604edfae10d2558e7d9ff0e6a085 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 28 Oct 2020 13:46:05 -0700 Subject: [PATCH] feat(browser): roll WebKit to r1370 (#4257) --- browsers.json | 2 +- src/server/chromium/crNetworkManager.ts | 2 +- src/server/network.ts | 2 +- src/server/webkit/protocol.ts | 28 +++++++++++++++---------- src/server/webkit/wkPage.ts | 4 +++- src/trace/harTracer.ts | 4 +--- test/har.spec.ts | 12 +++++------ test/network-request.spec.ts | 8 +++---- 8 files changed, 33 insertions(+), 29 deletions(-) diff --git a/browsers.json b/browsers.json index ff85231b8d..3dd33fc996 100644 --- a/browsers.json +++ b/browsers.json @@ -13,7 +13,7 @@ }, { "name": "webkit", - "revision": "1364", + "revision": "1370", "download": true } ] diff --git a/src/server/chromium/crNetworkManager.ts b/src/server/chromium/crNetworkManager.ts index c729aad15a..12035b8ae5 100644 --- a/src/server/chromium/crNetworkManager.ts +++ b/src/server/chromium/crNetworkManager.ts @@ -136,7 +136,7 @@ export class CRNetworkManager { _onRequestWillBeSentExtraInfo(event: Protocol.Network.requestWillBeSentExtraInfoPayload) { const request = this._requestIdToRequest.get(event.requestId); if (request) { - request.request._updateWithRawHeaders(headersObjectToArray(event.headers)); + request.request.updateWithRawHeaders(headersObjectToArray(event.headers)); this._requestIdToExtraInfo.delete(event.requestId); } else { this._requestIdToExtraInfo.set(event.requestId, event); diff --git a/src/server/network.ts b/src/server/network.ts index c61407489e..fa4fc486b6 100644 --- a/src/server/network.ts +++ b/src/server/network.ts @@ -178,7 +178,7 @@ export class Request { return new Route(this, this._routeDelegate); } - _updateWithRawHeaders(headers: types.HeadersArray) { + updateWithRawHeaders(headers: types.HeadersArray) { this._headers = headers; this._headersMap.clear(); for (const { name, value } of this._headers) diff --git a/src/server/webkit/protocol.ts b/src/server/webkit/protocol.ts index 7176471b07..377870cc8e 100644 --- a/src/server/webkit/protocol.ts +++ b/src/server/webkit/protocol.ts @@ -6564,6 +6564,21 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the */ data: string; } + /** + * Overrides screen size exposed to DOM and used in media queries for testing with provided values. + */ + export type setScreenSizeOverrideParameters = { + /** + * Screen width + */ + width?: number; + /** + * Screen height + */ + height?: number; + } + export type setScreenSizeOverrideReturnValue = { + } /** * Insert text into the current selection of the page. */ @@ -6641,15 +6656,6 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the } export type crashReturnValue = { } - /** - * Overrides screen size with provided values. - */ - export type setScreenSizeOverrideParameters = { - width: number; - height: number; - } - export type setScreenSizeOverrideReturnValue = { - } /** * Overrides window.orientation with provided value. */ @@ -8682,6 +8688,7 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the "Page.snapshotNode": Page.snapshotNodeParameters; "Page.snapshotRect": Page.snapshotRectParameters; "Page.archive": Page.archiveParameters; + "Page.setScreenSizeOverride": Page.setScreenSizeOverrideParameters; "Page.insertText": Page.insertTextParameters; "Page.accessibilitySnapshot": Page.accessibilitySnapshotParameters; "Page.setInterceptFileChooserDialog": Page.setInterceptFileChooserDialogParameters; @@ -8689,7 +8696,6 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the "Page.createUserWorld": Page.createUserWorldParameters; "Page.setBypassCSP": Page.setBypassCSPParameters; "Page.crash": Page.crashParameters; - "Page.setScreenSizeOverride": Page.setScreenSizeOverrideParameters; "Page.setOrientationOverride": Page.setOrientationOverrideParameters; "Playwright.enable": Playwright.enableParameters; "Playwright.disable": Playwright.disableParameters; @@ -8966,6 +8972,7 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the "Page.snapshotNode": Page.snapshotNodeReturnValue; "Page.snapshotRect": Page.snapshotRectReturnValue; "Page.archive": Page.archiveReturnValue; + "Page.setScreenSizeOverride": Page.setScreenSizeOverrideReturnValue; "Page.insertText": Page.insertTextReturnValue; "Page.accessibilitySnapshot": Page.accessibilitySnapshotReturnValue; "Page.setInterceptFileChooserDialog": Page.setInterceptFileChooserDialogReturnValue; @@ -8973,7 +8980,6 @@ the top of the viewport and Y increases as it proceeds towards the bottom of the "Page.createUserWorld": Page.createUserWorldReturnValue; "Page.setBypassCSP": Page.setBypassCSPReturnValue; "Page.crash": Page.crashReturnValue; - "Page.setScreenSizeOverride": Page.setScreenSizeOverrideReturnValue; "Page.setOrientationOverride": Page.setOrientationOverrideReturnValue; "Playwright.enable": Playwright.enableReturnValue; "Playwright.disable": Playwright.disableReturnValue; diff --git a/src/server/webkit/wkPage.ts b/src/server/webkit/wkPage.ts index c48d2ad3a5..d508dadf08 100644 --- a/src/server/webkit/wkPage.ts +++ b/src/server/webkit/wkPage.ts @@ -18,7 +18,7 @@ import * as jpeg from 'jpeg-js'; import * as path from 'path'; import * as png from 'pngjs'; -import { assert, createGuid, debugAssert, headersArrayToObject } from '../../utils/utils'; +import { assert, createGuid, debugAssert, headersArrayToObject, headersObjectToArray } from '../../utils/utils'; import * as accessibility from '../accessibility'; import * as dialog from '../dialog'; import * as dom from '../dom'; @@ -927,6 +927,8 @@ export class WKPage implements PageDelegate { if (!request) return; const response = request.createResponse(event.response); + if (event.response.requestHeaders && Object.keys(event.response.requestHeaders).length) + request.request.updateWithRawHeaders(headersObjectToArray(event.response.requestHeaders)); this._page._frameManager.requestReceivedResponse(response); if (response.status() === 204) { diff --git a/src/trace/harTracer.ts b/src/trace/harTracer.ts index 4b11d405ab..113e8df493 100644 --- a/src/trace/harTracer.ts +++ b/src/trace/harTracer.ts @@ -62,7 +62,6 @@ type HarOptions = { class HarContextTracer { private _options: HarOptions; - private _browserName: string; private _log: har.Log; private _pageEntries = new Map(); private _entries = new Map(); @@ -70,7 +69,6 @@ class HarContextTracer { private _barrierPromises = new Map, Page>(); constructor(context: BrowserContext, options: HarOptions) { - this._browserName = context._browser._options.name; this._options = options; this._log = { version: '1.2', @@ -204,7 +202,7 @@ class HarContextTracer { status: response.status(), statusText: response.statusText(), httpVersion: 'HTTP/1.1', - cookies: cookiesForHar(response.headerValue('set-cookie'), this._browserName === 'webkit' ? ',' : '\n'), + cookies: cookiesForHar(response.headerValue('set-cookie'), '\n'), headers: response.headers().map(header => ({ name: header.name, value: header.value })), content: { size: -1, diff --git a/test/har.spec.ts b/test/har.spec.ts index 31e644e855..51da994c38 100644 --- a/test/har.spec.ts +++ b/test/har.spec.ts @@ -164,9 +164,7 @@ it('should include form params', async ({ pageWithHar, server }) => { }); }); -it('should include cookies', (test, { browserName }) => { - test.fail(browserName === 'webkit', 'WebKit is lacking raw headers w/ cookies on WebCore side'); -}, async ({ pageWithHar, server }) => { +it('should include cookies', async ({ pageWithHar, server }) => { const { page, context } = pageWithHar; await context.addCookies([ { name: 'name1', value: '"value1"', domain: 'localhost', path: '/', httpOnly: true }, @@ -184,7 +182,9 @@ it('should include cookies', (test, { browserName }) => { ]); }); -it('should include set-cookies', async ({ pageWithHar, server }) => { +it('should include set-cookies', (test, { browserName, platform }) => { + test.fail(browserName === 'webkit' && platform === 'darwin', 'Does not work yet'); +}, async ({ pageWithHar, server }) => { const { page } = pageWithHar; server.setRoute('/empty.html', (req, res) => { res.setHeader('Set-Cookie', [ @@ -202,9 +202,7 @@ it('should include set-cookies', async ({ pageWithHar, server }) => { expect(new Date(cookies[2].expires).valueOf()).toBeGreaterThan(Date.now()); }); -it('should include set-cookies with comma', (test, { browserName }) => { - test.fail(browserName === 'webkit', 'WebKit concatenates headers poorly'); -}, async ({ pageWithHar, server }) => { +it('should include set-cookies with comma', async ({ pageWithHar, server }) => { const { page } = pageWithHar; server.setRoute('/empty.html', (req, res) => { res.setHeader('Set-Cookie', [ diff --git a/test/network-request.spec.ts b/test/network-request.spec.ts index 526656c5c7..2fd8ec6904 100644 --- a/test/network-request.spec.ts +++ b/test/network-request.spec.ts @@ -81,8 +81,8 @@ it('should return headers', async ({page, server, isChromium, isFirefox, isWebKi expect(response.request().headers()['user-agent']).toContain('WebKit'); }); -it('should get the same headers as the server', (test, { browserName }) => { - test.fail(browserName === 'webkit', 'Provisional headers differ from those in network stack'); +it('should get the same headers as the server', (test, { browserName, platform }) => { + test.fail(browserName === 'webkit' && platform !== 'darwin', 'Provisional headers differ from those in network stack'); }, async ({ page, server }) => { let serverRequest; server.setRoute('/empty.html', (request, response) => { @@ -93,8 +93,8 @@ it('should get the same headers as the server', (test, { browserName }) => { expect(response.request().headers()).toEqual(serverRequest.headers); }); -it('should get the same headers as the server CORP', (test, { browserName }) => { - test.fail(browserName === 'webkit', 'Provisional headers differ from those in network stack'); +it('should get the same headers as the server CORP', (test, { browserName, platform }) => { + test.fail(browserName === 'webkit' && platform !== 'darwin', 'Provisional headers differ from those in network stack'); }, async ({page, server}) => { await page.goto(server.PREFIX + '/empty.html'); let serverRequest;