feat(webkit): roll webkit to r1060, support target crash (#364)

This commit is contained in:
Pavel Feldman 2020-01-03 11:10:10 -08:00 committed by Dmitry Gozman
parent 6c1289626b
commit fcd62b9611
8 changed files with 23 additions and 11 deletions

View file

@ -10,7 +10,7 @@
"playwright": { "playwright": {
"chromium_revision": "724623", "chromium_revision": "724623",
"firefox_revision": "1009", "firefox_revision": "1009",
"webkit_revision": "1059" "webkit_revision": "1060"
}, },
"scripts": { "scripts": {
"unit": "node test/test.js", "unit": "node test/test.js",

View file

@ -268,7 +268,7 @@ export class CRPage implements PageDelegate {
} }
_onTargetCrashed() { _onTargetCrashed() {
this._page.emit('error', new Error('Page crashed!')); this._page._didCrash();
} }
_onLogEntryAdded(event: Protocol.Log.entryAddedPayload) { _onLogEntryAdded(event: Protocol.Log.entryAddedPayload) {

View file

@ -131,6 +131,12 @@ export class Page extends EventEmitter {
this._closedCallback(); this._closedCallback();
} }
_didCrash() {
const error = new Error('Page crashed!');
error.stack = '';
this.emit('error', error);
}
_didDisconnect() { _didDisconnect() {
assert(!this._disconnected, 'Page disconnected twice'); assert(!this._disconnected, 'Page disconnected twice');
this._disconnected = true; this._disconnected = true;

View file

@ -135,10 +135,10 @@ export class WKBrowser extends browser.Browser {
this._connection.send('Target.resume', { targetId: targetInfo.targetId }).catch(debugError); this._connection.send('Target.resume', { targetId: targetInfo.targetId }).catch(debugError);
} }
_onTargetDestroyed({targetId}) { _onTargetDestroyed({targetId, crashed}) {
const target = this._targets.get(targetId); const target = this._targets.get(targetId);
this._targets.delete(targetId); this._targets.delete(targetId);
target._didClose(); target._didClose(crashed);
} }
_closePage(targetId: string, runBeforeUnload: boolean) { _closePage(targetId: string, runBeforeUnload: boolean) {

View file

@ -96,7 +96,7 @@ export class WKConnection extends EventEmitter {
session._onClosed(); session._onClosed();
this._sessions.delete(object.params.targetId); this._sessions.delete(object.params.targetId);
} }
Promise.resolve().then(() => this.emit(WKConnectionEvents.TargetDestroyed, { targetId: object.params.targetId })); Promise.resolve().then(() => this.emit(WKConnectionEvents.TargetDestroyed, { targetId: object.params.targetId, crashed: object.params.crashed }));
} else if (object.method === 'Target.dispatchMessageFromTarget') { } else if (object.method === 'Target.dispatchMessageFromTarget') {
const {targetId, message} = object.params as Protocol.Target.dispatchMessageFromTargetPayload; const {targetId, message} = object.params as Protocol.Target.dispatchMessageFromTargetPayload;
const session = this._sessions.get(targetId); const session = this._sessions.get(targetId);

View file

@ -113,11 +113,14 @@ export class WKPage implements PageDelegate {
await this._page.evaluate(JSON_SAVE_SCRIPT); await this._page.evaluate(JSON_SAVE_SCRIPT);
} }
didClose() { didClose(crashed: boolean) {
helper.removeEventListeners(this._sessionListeners); helper.removeEventListeners(this._sessionListeners);
this._networkManager.dispose(); this._networkManager.dispose();
this.disconnectFromTarget(); this.disconnectFromTarget();
this._page._didClose(); if (crashed)
this._page._didCrash();
else
this._page._didClose();
} }
_addSessionListeners() { _addSessionListeners() {

View file

@ -42,9 +42,9 @@ export class WKTarget {
this._pagePromise = null; this._pagePromise = null;
} }
_didClose() { _didClose(crashed: boolean) {
if (this._wkPage) if (this._wkPage)
this._wkPage.didClose(); this._wkPage.didClose(crashed);
} }
async _initializeSession(session: WKTargetSession) { async _initializeSession(session: WKTargetSession) {

View file

@ -109,11 +109,14 @@ module.exports.describe = function({testRunner, expect, headless, playwright, FF
}); });
}); });
describe.skip(FFOX || WEBKIT)('Page.Events.error', function() { describe.skip(FFOX)('Page.Events.error', function() {
it('should throw when page crashes', async({page}) => { it('should throw when page crashes', async({page}) => {
let error = null; let error = null;
page.on('error', err => error = err); page.on('error', err => error = err);
page.goto('chrome://crash').catch(e => {}); if (CHROME)
page.goto('chrome://crash').catch(e => {});
else if (WEBKIT)
page._delegate._session.send('Page.crash', {}).catch(e => {});
await waitEvent(page, 'error'); await waitEvent(page, 'error');
expect(error.message).toBe('Page crashed!'); expect(error.message).toBe('Page crashed!');
}); });