From 14a96ca21f45c014118db1299d96f5c43f9e66ab Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Fri, 20 Nov 2020 10:48:06 -0800 Subject: [PATCH] browser(firefox): ensure detachedFromTarget is always sent (#4505) browser(firefox): ensure detachedFromTarget is always sent LinkedBrowser can throw when removing listeners in PageTarget.dispose, and that prevents BrowserHandler from sending Browser.detachedFromTarget. Using a try-catch seems good enough. --- browser_patches/firefox/BUILD_NUMBER | 4 ++-- browser_patches/firefox/juggler/TargetRegistry.js | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/browser_patches/firefox/BUILD_NUMBER b/browser_patches/firefox/BUILD_NUMBER index 290db5f51f..f27ca9179b 100644 --- a/browser_patches/firefox/BUILD_NUMBER +++ b/browser_patches/firefox/BUILD_NUMBER @@ -1,2 +1,2 @@ -1212 -Changed: lushnikov@chromium.org Thu 19 Nov 2020 08:08:27 AM PST +1213 +Changed: dgozman@gmail.com Fri Nov 20 07:01:37 PST 2020 diff --git a/browser_patches/firefox/juggler/TargetRegistry.js b/browser_patches/firefox/juggler/TargetRegistry.js index 0912965b4f..ce6ac64f95 100644 --- a/browser_patches/firefox/juggler/TargetRegistry.js +++ b/browser_patches/firefox/juggler/TargetRegistry.js @@ -521,7 +521,14 @@ class PageTarget { this._browserContext.pages.delete(this); this._registry._browserToTarget.delete(this._linkedBrowser); this._registry._browserBrowsingContextToTarget.delete(this._linkedBrowser.browsingContext); - helper.removeListeners(this._eventListeners); + try { + helper.removeListeners(this._eventListeners); + } catch (e) { + // In some cases, removing listeners from this._linkedBrowser fails + // because it is already half-destroyed. + if (e) + dump(e.message + '\n' + e.stack + '\n'); + } this._registry.emit(TargetRegistry.Events.TargetDestroyed, this); } }