Changeset 145533 in webkit


Ignore:
Timestamp:
Mar 12, 2013 5:29:03 AM (11 years ago)
Author:
vsevik@chromium.org
Message:

Web Inspector: SourceFrames are leaking on reload.
https://bugs.webkit.org/show_bug.cgi?id=111961

Reviewed by Alexander Pavlov.

Source/WebCore:

Added dispose method on UISourceCodeFrame.
Scripts panel now calls dispose when SourceFrame is removed and JavaScriptSourceFrame
could remove breakpoint manager listeners in it.
TabbedEditorContainer does not call viewForFile other than in appendFileTab methods to
avoid recreating SourceFrame for uiSourceCode when it was already removed.

Test: inspector/debugger/breakpoint-manager-listeners-count.html

  • inspector/front-end/JavaScriptSourceFrame.js:

(WebInspector.JavaScriptSourceFrame.prototype.dispose):

  • inspector/front-end/ScriptsPanel.js:
  • inspector/front-end/TabbedEditorContainer.js:

(WebInspector.TabbedEditorContainer.prototype._addScrollAndSelectionListeners):
(WebInspector.TabbedEditorContainer.prototype._removeScrollAndSelectionListeners):
(WebInspector.TabbedEditorContainer.prototype._tabClosed):

  • inspector/front-end/UISourceCodeFrame.js:

(WebInspector.UISourceCodeFrame.prototype.dispose):

LayoutTests:

  • inspector/debugger/breakpoint-manager-listeners-count-expected.txt: Added.
  • inspector/debugger/breakpoint-manager-listeners-count.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r145522 r145533  
     12013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Web Inspector: SourceFrames are leaking on reload.
     4        https://bugs.webkit.org/show_bug.cgi?id=111961
     5
     6        Reviewed by Alexander Pavlov.
     7
     8        * inspector/debugger/breakpoint-manager-listeners-count-expected.txt: Added.
     9        * inspector/debugger/breakpoint-manager-listeners-count.html: Added.
     10
    1112013-03-12  Krzysztof Czech  <k.czech@samsung.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r145531 r145533  
     12013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Web Inspector: SourceFrames are leaking on reload.
     4        https://bugs.webkit.org/show_bug.cgi?id=111961
     5
     6        Reviewed by Alexander Pavlov.
     7
     8        Added dispose method on UISourceCodeFrame.
     9        Scripts panel now calls dispose when SourceFrame is removed and JavaScriptSourceFrame
     10        could remove breakpoint manager listeners in it.
     11        TabbedEditorContainer does not call viewForFile other than in appendFileTab methods to
     12        avoid recreating SourceFrame for uiSourceCode when it was already removed.
     13
     14        Test: inspector/debugger/breakpoint-manager-listeners-count.html
     15
     16        * inspector/front-end/JavaScriptSourceFrame.js:
     17        (WebInspector.JavaScriptSourceFrame.prototype.dispose):
     18        * inspector/front-end/ScriptsPanel.js:
     19        * inspector/front-end/TabbedEditorContainer.js:
     20        (WebInspector.TabbedEditorContainer.prototype._addScrollAndSelectionListeners):
     21        (WebInspector.TabbedEditorContainer.prototype._removeScrollAndSelectionListeners):
     22        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
     23        * inspector/front-end/UISourceCodeFrame.js:
     24        (WebInspector.UISourceCodeFrame.prototype.dispose):
     25
    1262013-03-12  Alexander Pavlov  <apavlov@chromium.org>
    227
  • trunk/Source/WebCore/inspector/front-end/JavaScriptSourceFrame.js

    r144598 r145533  
    587587    },
    588588
     589    dispose: function()
     590    {
     591        this._breakpointManager.removeEventListener(WebInspector.BreakpointManager.Events.BreakpointAdded, this._breakpointAdded, this);
     592        this._breakpointManager.removeEventListener(WebInspector.BreakpointManager.Events.BreakpointRemoved, this._breakpointRemoved, this);
     593        WebInspector.UISourceCodeFrame.prototype.dispose.call(this);
     594    },
     595
    589596    __proto__: WebInspector.UISourceCodeFrame.prototype
    590597}
  • trunk/Source/WebCore/inspector/front-end/ScriptsPanel.js

    r145220 r145533  
    494494            return;
    495495        this._sourceFramesByUISourceCode.remove(uiSourceCode);
    496         sourceFrame.detach();
     496        sourceFrame.dispose();
    497497    },
    498498
  • trunk/Source/WebCore/inspector/front-end/TabbedEditorContainer.js

    r145220 r145533  
    111111    _addScrollAndSelectionListeners: function()
    112112    {
    113         console.assert(this._currentFile);
    114         var sourceFrame = this._delegate.viewForFile(this._currentFile);
    115         sourceFrame.addEventListener(WebInspector.SourceFrame.Events.ScrollChanged, this._scrollChanged, this);
    116         sourceFrame.addEventListener(WebInspector.SourceFrame.Events.SelectionChanged, this._selectionChanged, this);
     113        if (!this._currentView)
     114            return;
     115        this._currentView.addEventListener(WebInspector.SourceFrame.Events.ScrollChanged, this._scrollChanged, this);
     116        this._currentView.addEventListener(WebInspector.SourceFrame.Events.SelectionChanged, this._selectionChanged, this);
    117117    },
    118118
    119119    _removeScrollAndSelectionListeners: function()
    120120    {
    121         if (!this._currentFile)
    122             return;
    123         var sourceFrame = this._delegate.viewForFile(this._currentFile);
    124         sourceFrame.removeEventListener(WebInspector.SourceFrame.Events.ScrollChanged, this._scrollChanged, this);
    125         sourceFrame.removeEventListener(WebInspector.SourceFrame.Events.SelectionChanged, this._selectionChanged, this);
     121        if (!this._currentView)
     122            return;
     123        this._currentView.removeEventListener(WebInspector.SourceFrame.Events.ScrollChanged, this._scrollChanged, this);
     124        this._currentView.removeEventListener(WebInspector.SourceFrame.Events.SelectionChanged, this._selectionChanged, this);
    126125    },
    127126
     
    157156            this._editorSelectedByUserAction();
    158157       
     158        this._currentView = this.visibleView;
    159159        this._addScrollAndSelectionListeners();
    160160       
     
    309309        if (this._currentFile === uiSourceCode) {
    310310            this._removeScrollAndSelectionListeners();
     311            delete this._currentView;
    311312            delete this._currentFile;
    312313        }
  • trunk/Source/WebCore/inspector/front-end/UISourceCodeFrame.js

    r144598 r145533  
    157157    },
    158158
     159    dispose: function()
     160    {
     161        this.detach();
     162    },
     163
    159164    __proto__: WebInspector.SourceFrame.prototype
    160165}
Note: See TracChangeset for help on using the changeset viewer.