Changeset 188679 in webkit


Ignore:
Timestamp:
Aug 19, 2015 9:09:14 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: DOMTree leaks on main resource changes
https://bugs.webkit.org/show_bug.cgi?id=148158

Patch by Joseph Pecoraro <Joseph Pecoraro> on 2015-08-19
Reviewed by Timothy Hatcher.

  • UserInterface/Models/DOMTree.js:

(WebInspector.DOMTree.prototype.disconnect):
Add a way to disconnect the DOMTree and allow it to get garbage collected.

(WebInspector.DOMTree.prototype.invalidate.performInvalidate):
(WebInspector.DOMTree.prototype.invalidate):
(WebInspector.DOMTree.prototype._requestRootDOMNode):
(WebInspector.DOMTree.prototype._framePageExecutionContextChanged):
Remove some uses of the delete operator.

  • UserInterface/Models/Frame.js:

(WebInspector.Frame.prototype.removeChildFrame):
(WebInspector.Frame.prototype.removeAllChildFrames):
(WebInspector.Frame.prototype._detachFromParentFrame):
When a frame gets removed from its parent, disconnect its DOMTree.

Location:
trunk/Source/WebInspectorUI
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r188678 r188679  
     12015-08-19  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        Web Inspector: DOMTree leaks on main resource changes
     4        https://bugs.webkit.org/show_bug.cgi?id=148158
     5
     6        Reviewed by Timothy Hatcher.
     7
     8        * UserInterface/Models/DOMTree.js:
     9        (WebInspector.DOMTree.prototype.disconnect):
     10        Add a way to disconnect the DOMTree and allow it to get garbage collected.
     11
     12        (WebInspector.DOMTree.prototype.invalidate.performInvalidate):
     13        (WebInspector.DOMTree.prototype.invalidate):
     14        (WebInspector.DOMTree.prototype._requestRootDOMNode):
     15        (WebInspector.DOMTree.prototype._framePageExecutionContextChanged):
     16        Remove some uses of the delete operator.
     17
     18        * UserInterface/Models/Frame.js:
     19        (WebInspector.Frame.prototype.removeChildFrame):
     20        (WebInspector.Frame.prototype.removeAllChildFrames):
     21        (WebInspector.Frame.prototype._detachFromParentFrame):
     22        When a frame gets removed from its parent, disconnect its DOMTree.
     23
    1242015-08-19  Devin Rousso  <drousso@apple.com>
    225
  • trunk/Source/WebInspectorUI/UserInterface/Models/DOMTree.js

    r185638 r188679  
    6868    }
    6969
     70    disconnect()
     71    {
     72        WebInspector.domTreeManager.removeEventListener(null, null, this);
     73        this._frame.removeEventListener(null, null, this);
     74    }
     75
    7076    invalidate()
    7177    {
     
    7581        // Clear the pending callbacks. It is the responsibility of the client to listen for
    7682        // the RootDOMNodeInvalidated event and request the root DOM node again.
    77         delete this._pendingRootDOMNodeRequests;
     83        this._pendingRootDOMNodeRequests = null;
    7884
    7985        if (this._invalidateTimeoutIdentifier)
     
    8288        function performInvalidate()
    8389        {
    84             delete this._invalidateTimeoutIdentifier;
     90            this._invalidateTimeoutIdentifier = undefined;
    8591
    8692            this.dispatchEventToListeners(WebInspector.DOMTree.Event.RootDOMNodeInvalidated);
     
    198204            for (var i = 0; i < this._pendingRootDOMNodeRequests.length; ++i)
    199205                this._pendingRootDOMNodeRequests[i](this._rootDOMNode);
    200             delete this._pendingRootDOMNodeRequests;
     206            this._pendingRootDOMNodeRequests = null;
    201207        }
    202208
     
    243249            console.assert(this._pendingRootDOMNodeRequests && this._pendingRootDOMNodeRequests.length);
    244250
    245             delete this._rootDOMNodeRequestWaitingForExecutionContext;
     251            this._rootDOMNodeRequestWaitingForExecutionContext = false;
    246252
    247253            this._requestRootDOMNode();
  • trunk/Source/WebInspectorUI/UserInterface/Models/Frame.js

    r181769 r188679  
    332332        delete this._childFrameIdentifierMap[childFrame._id];
    333333
    334         childFrame._parentFrame = null;
     334        childFrame._detachFromParentFrame();
    335335
    336336        this.dispatchEventToListeners(WebInspector.Frame.Event.ChildFrameWasRemoved, {childFrame});
     
    342342            return;
    343343
    344         for (var i = 0; i < this._childFrames.length; ++i)
    345             this._childFrames[i]._parentFrame = null;
     344        for (let childFrame of this._childFrames)
     345            childFrame._detachFromParentFrame();
    346346
    347347        this._childFrames = [];
     
    446446
    447447    // Private
     448
     449    _detachFromParentFrame()
     450    {
     451        if (this._domTree) {
     452            this._domTree.disconnect();
     453            this._domTree = null;
     454        }
     455
     456        this._parentFrame = null;
     457    }
    448458
    449459    _isProvisionalResource(resource)
Note: See TracChangeset for help on using the changeset viewer.