diff --git a/package.json b/package.json index 3a68788fd1..bab104e316 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "playwright": { "chromium_revision": "724623", "firefox_revision": "1009", - "webkit_revision": "1055" + "webkit_revision": "1059" }, "scripts": { "unit": "node test/test.js", diff --git a/src/webkit/wkExecutionContext.ts b/src/webkit/wkExecutionContext.ts index ba5b4798f8..1e843cb842 100644 --- a/src/webkit/wkExecutionContext.ts +++ b/src/webkit/wkExecutionContext.ts @@ -30,7 +30,7 @@ export class WKExecutionContext implements js.ExecutionContextDelegate { _contextId: number; private _contextDestroyedCallback: () => void; private _executionContextDestroyedPromise: Promise; - _jsonObjectId: Protocol.Runtime.RemoteObjectId | undefined; + _jsonStringifyObjectId: Protocol.Runtime.RemoteObjectId | undefined; constructor(client: WKTargetSession, contextPayload: Protocol.Runtime.ExecutionContextDescription) { this._session = client; @@ -219,9 +219,9 @@ export class WKExecutionContext implements js.ExecutionContextDelegate { } private _returnObjectByValue(objectId: Protocol.Runtime.RemoteObjectId) { - const serializeFunction = function(JSON: { stringify: (o: any) => string }) { + const serializeFunction = function(stringify: (o: any) => string) { try { - return JSON.stringify(this); + return stringify(this); } catch (e) { if (e instanceof TypeError) return void 0; @@ -232,7 +232,7 @@ export class WKExecutionContext implements js.ExecutionContextDelegate { // Serialize object using standard JSON implementation to correctly pass 'undefined'. functionDeclaration: serializeFunction + '\n' + suffix + '\n', objectId: objectId, - arguments: [ { objectId: this._jsonObjectId } ], + arguments: [ { objectId: this._jsonStringifyObjectId } ], returnByValue: true }).catch(e => { if (isSwappedOutError(e)) diff --git a/src/webkit/wkPage.ts b/src/webkit/wkPage.ts index df8bddbbcd..315aa8eaea 100644 --- a/src/webkit/wkPage.ts +++ b/src/webkit/wkPage.ts @@ -37,7 +37,7 @@ import { PNG } from 'pngjs'; const UTILITY_WORLD_NAME = '__playwright_utility_world__'; const BINDING_CALL_MESSAGE = '__playwright_binding_call__'; const JSON_CALL_MESSAGE = '__playwright_json_call__'; -const JSON_SAVE_SCRIPT = `console.debug('${JSON_CALL_MESSAGE}', JSON)`; +const JSON_SAVE_SCRIPT = `console.debug('${JSON_CALL_MESSAGE}', JSON.stringify.bind(JSON))`; export class WKPage implements PageDelegate { readonly rawMouse: RawMouseImpl; @@ -101,7 +101,7 @@ export class WKPage implements PageDelegate { promises.push(this._setEmulateMedia(session, this._page._state.mediaType, this._page._state.colorScheme)); if (contextOptions.javaScriptEnabled === false) promises.push(session.send('Emulation.setJavaScriptEnabled', { enabled: false })); - if (this._setBootstrapScripts.length && session.isProvisional()) + if (session.isProvisional()) promises.push(this._setBootstrapScripts(session)); if (contextOptions.bypassCSP) promises.push(session.send('Page.setBypassCSP', { enabled: true })); @@ -109,9 +109,8 @@ export class WKPage implements PageDelegate { promises.push(this._setExtraHTTPHeaders(session, this._page._state.extraHTTPHeaders)); if (this._page._state.viewport) promises.push(WKPage._setViewport(session, this._page._state.viewport)); - if (contextOptions.javaScriptEnabled !== false) - promises.push(session.send('Page.setBootstrapScript', { source: JSON_SAVE_SCRIPT })); await Promise.all(promises); + await this._page.evaluate(JSON_SAVE_SCRIPT); } didClose() { @@ -224,7 +223,7 @@ export class WKPage implements PageDelegate { if (level === 'debug' && parameters && parameters[0].value === JSON_CALL_MESSAGE) { const parsedObjectId = JSON.parse(parameters[1].objectId); const context = this._contextIdToContext.get(parsedObjectId.injectedScriptId); - (context._delegate as WKExecutionContext)._jsonObjectId = parameters[1].objectId; + (context._delegate as WKExecutionContext)._jsonStringifyObjectId = parameters[1].objectId; return; } let derivedType: string = type; @@ -308,7 +307,7 @@ export class WKPage implements PageDelegate { throw new Error('Not implemented'); const width = viewport.width; const height = viewport.height; - await session.send('Emulation.setDeviceMetricsOverride', { width, height, deviceScaleFactor: viewport.deviceScaleFactor || 1 }); + await session.send('Emulation.setDeviceMetricsOverride', { width, height, fixedLayout: false, deviceScaleFactor: viewport.deviceScaleFactor || 1 }); } setCacheEnabled(enabled: boolean): Promise { @@ -392,7 +391,7 @@ export class WKPage implements PageDelegate { } async resetViewport(oldSize: types.Size): Promise { - await this._session.send('Emulation.setDeviceMetricsOverride', { ...oldSize, deviceScaleFactor: 0 }); + await this._session.send('Emulation.setDeviceMetricsOverride', { ...oldSize, fixedLayout: false, deviceScaleFactor: 0 }); } async getContentFrame(handle: dom.ElementHandle): Promise {