browser(firefox): make sure response is sent when context is closed (#3553)
This commit is contained in:
parent
db2e66aa76
commit
5ba0254c99
|
|
@ -1,2 +1,2 @@
|
||||||
1164
|
1165
|
||||||
Changed: yurys@chromium.org Thu Aug 20 10:30:04 PDT 2020
|
Changed: yurys@chromium.org Thu Aug 20 13:05:37 PDT 2020
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,8 @@ class TargetRegistry {
|
||||||
if (!target)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
target.emit('crashed');
|
target.emit('crashed');
|
||||||
this._destroyTarget(target).catch(e => dump(`Failed to destroy target: ${e}`));
|
if (target)
|
||||||
|
target.dispose().catch(e => dump(`Failed to destroy target: ${e}`));
|
||||||
}
|
}
|
||||||
}, 'oop-frameloader-crashed');
|
}, 'oop-frameloader-crashed');
|
||||||
|
|
||||||
|
|
@ -202,7 +203,8 @@ class TargetRegistry {
|
||||||
const tab = event.target;
|
const tab = event.target;
|
||||||
const linkedBrowser = tab.linkedBrowser;
|
const linkedBrowser = tab.linkedBrowser;
|
||||||
const target = this._browserToTarget.get(linkedBrowser);
|
const target = this._browserToTarget.get(linkedBrowser);
|
||||||
this._destroyTarget(target).catch(e => dump(`Failed to destroy target: ${e}`));
|
if (target)
|
||||||
|
target.dispose().catch(e => dump(`Failed to destroy target: ${e}`));
|
||||||
};
|
};
|
||||||
|
|
||||||
Services.wm.addListener({
|
Services.wm.addListener({
|
||||||
|
|
@ -240,16 +242,6 @@ class TargetRegistry {
|
||||||
extHelperAppSvc.setDownloadInterceptor(new DownloadInterceptor(this));
|
extHelperAppSvc.setDownloadInterceptor(new DownloadInterceptor(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
async _destroyTarget(target) {
|
|
||||||
if (!target)
|
|
||||||
return;
|
|
||||||
const event = { pendingActivity: [], target };
|
|
||||||
this.emit(TargetRegistry.Events.TargetWillBeDestroyed, event);
|
|
||||||
await Promise.all(event.pendingActivity);
|
|
||||||
target.dispose();
|
|
||||||
this.emit(TargetRegistry.Events.TargetDestroyed, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
setBrowserProxy(proxy) {
|
setBrowserProxy(proxy) {
|
||||||
this._browserProxy = proxy;
|
this._browserProxy = proxy;
|
||||||
}
|
}
|
||||||
|
|
@ -468,12 +460,18 @@ class PageTarget {
|
||||||
return await this._channel.connect('').send('hasFailedToOverrideTimezone').catch(e => true);
|
return await this._channel.connect('').send('hasFailedToOverrideTimezone').catch(e => true);
|
||||||
}
|
}
|
||||||
|
|
||||||
dispose() {
|
async dispose() {
|
||||||
this._disposed = true;
|
this._disposed = true;
|
||||||
this._browserContext.pages.delete(this);
|
|
||||||
this._registry._browserToTarget.delete(this._linkedBrowser);
|
this._registry._browserToTarget.delete(this._linkedBrowser);
|
||||||
this._registry._browserBrowsingContextToTarget.delete(this._linkedBrowser.browsingContext);
|
this._registry._browserBrowsingContextToTarget.delete(this._linkedBrowser.browsingContext);
|
||||||
helper.removeListeners(this._eventListeners);
|
helper.removeListeners(this._eventListeners);
|
||||||
|
|
||||||
|
const event = { pendingActivity: [], target: this };
|
||||||
|
this._registry.emit(TargetRegistry.Events.TargetWillBeDestroyed, event);
|
||||||
|
await Promise.all(event.pendingActivity);
|
||||||
|
|
||||||
|
this._browserContext.pages.delete(this);
|
||||||
|
this._registry.emit(TargetRegistry.Events.TargetDestroyed, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue