Title: [284958] trunk/Source/WebInspectorUI
Revision
284958
Author
[email protected]
Date
2021-10-27 14:23:40 -0700 (Wed, 27 Oct 2021)

Log Message

Web Inspector: extension iframes leak when disabling an extension
https://bugs.webkit.org/show_bug.cgi?id=232049

Reviewed by Timothy Hatcher.

Since shouldNotRemoveFromDOMWhenHidden() is true, the <iframe> will not
be detached and unload its document in the normal tab-closing code path.
Add a `dispose()` method for cleaning up the tab when its extension is
unregistered.

* UserInterface/Controllers/WebInspectorExtensionController.js:
(WI.WebInspectorExtensionController.prototype.unregisterExtension):
* UserInterface/Views/WebInspectorExtensionTabContentView.js:
(WI.WebInspectorExtensionTabContentView.prototype.dispose):

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (284957 => 284958)


--- trunk/Source/WebInspectorUI/ChangeLog	2021-10-27 21:06:24 UTC (rev 284957)
+++ trunk/Source/WebInspectorUI/ChangeLog	2021-10-27 21:23:40 UTC (rev 284958)
@@ -1,3 +1,20 @@
+2021-10-27  BJ Burg  <[email protected]>
+
+        Web Inspector: extension iframes leak when disabling an extension
+        https://bugs.webkit.org/show_bug.cgi?id=232049
+
+        Reviewed by Timothy Hatcher.
+
+        Since shouldNotRemoveFromDOMWhenHidden() is true, the <iframe> will not
+        be detached and unload its document in the normal tab-closing code path.
+        Add a `dispose()` method for cleaning up the tab when its extension is
+        unregistered.
+
+        * UserInterface/Controllers/WebInspectorExtensionController.js:
+        (WI.WebInspectorExtensionController.prototype.unregisterExtension):
+        * UserInterface/Views/WebInspectorExtensionTabContentView.js:
+        (WI.WebInspectorExtensionTabContentView.prototype.dispose):
+
 2021-10-21  Devin Rousso  <[email protected]>
 
         [css-values-4] Support small (sv*), large (lv*) and dynamic (dv*) viewport units

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js (284957 => 284958)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js	2021-10-27 21:06:24 UTC (rev 284957)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/WebInspectorExtensionController.js	2021-10-27 21:23:40 UTC (rev 284958)
@@ -68,7 +68,10 @@
         let extensionTabIDsToRemove = this._tabIDsForExtensionIDMap.take(extensionID) || [];
         for (let extensionTabID of extensionTabIDsToRemove) {
             let tabContentView = this._extensionTabContentViewForExtensionTabIDMap.take(extensionTabID);
+
+            // Ensure that the iframe is actually detached and does not leak.
             WI.tabBrowser.closeTabForContentView(tabContentView, {suppressAnimations: true});
+            tabContentView.dispose();
         }
 
         this.dispatchEventToListeners(WI.WebInspectorExtensionController.Event.ExtensionRemoved, {extension});

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/WebInspectorExtensionTabContentView.js (284957 => 284958)


--- trunk/Source/WebInspectorUI/UserInterface/Views/WebInspectorExtensionTabContentView.js	2021-10-27 21:06:24 UTC (rev 284957)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/WebInspectorExtensionTabContentView.js	2021-10-27 21:23:40 UTC (rev 284958)
@@ -87,6 +87,11 @@
         super.detached();
     }
 
+    dispose()
+    {
+        this.element?.remove();
+    }
+
     tabInfo()
     {
         return this._tabInfo;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to