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": {
"chromium_revision": "724623",
"firefox_revision": "1009",
"webkit_revision": "1059"
"webkit_revision": "1060"
},
"scripts": {
"unit": "node test/test.js",

View file

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

View file

@ -131,6 +131,12 @@ export class Page extends EventEmitter {
this._closedCallback();
}
_didCrash() {
const error = new Error('Page crashed!');
error.stack = '';
this.emit('error', error);
}
_didDisconnect() {
assert(!this._disconnected, 'Page disconnected twice');
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);
}
_onTargetDestroyed({targetId}) {
_onTargetDestroyed({targetId, crashed}) {
const target = this._targets.get(targetId);
this._targets.delete(targetId);
target._didClose();
target._didClose(crashed);
}
_closePage(targetId: string, runBeforeUnload: boolean) {

View file

@ -96,7 +96,7 @@ export class WKConnection extends EventEmitter {
session._onClosed();
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') {
const {targetId, message} = object.params as Protocol.Target.dispatchMessageFromTargetPayload;
const session = this._sessions.get(targetId);

View file

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

View file

@ -42,9 +42,9 @@ export class WKTarget {
this._pagePromise = null;
}
_didClose() {
_didClose(crashed: boolean) {
if (this._wkPage)
this._wkPage.didClose();
this._wkPage.didClose(crashed);
}
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}) => {
let error = null;
page.on('error', err => error = err);
if (CHROME)
page.goto('chrome://crash').catch(e => {});
else if (WEBKIT)
page._delegate._session.send('Page.crash', {}).catch(e => {});
await waitEvent(page, 'error');
expect(error.message).toBe('Page crashed!');
});