Changeset 141593 in webkit


Ignore:
Timestamp:
Feb 1, 2013 7:43:25 AM (11 years ago)
Author:
vsevik@chromium.org
Message:

Web Inspector: Navigator should not create tree elements for uiSourceCodes unless neededm should populate folders on expand only.
https://bugs.webkit.org/show_bug.cgi?id=108601

Reviewed by Pavel Feldman.

Source/WebCore:

Tree elememnts for uiSourceCodes are not created until really needed anymore.
They are now created when parent folder tree elememnts are expanded or when uiSourceCode is revealed in navigator.

  • inspector/front-end/NavigatorView.js:

(WebInspector.NavigatorView):
(WebInspector.NavigatorView.prototype.addUISourceCode):
(WebInspector.NavigatorView.prototype._getOrCreateScriptTreeElement):
(WebInspector.NavigatorView.prototype._getScriptTreeElement):
(WebInspector.NavigatorView.prototype._createScriptTreeElement):
(WebInspector.NavigatorView.prototype._removeScriptTreeElement):
(WebInspector.NavigatorView.prototype._updateScriptTitle):
(WebInspector.NavigatorView.prototype.isScriptSourceAdded):
(WebInspector.NavigatorView.prototype.revealUISourceCode):
(WebInspector.NavigatorView.prototype.removeUISourceCode):
(WebInspector.NavigatorView.prototype.reset):
(WebInspector.NavigatorView.prototype.createFolderTreeElement):
(WebInspector.NavigatorView.prototype._populateFolderTreeElement):
(WebInspector.NavigatorView.prototype._addScriptTreeElement):
(WebInspector.NavigatorView.prototype._adoptUISourceCode):
(WebInspector.NavigatorFolderTreeElement):
(WebInspector.NavigatorFolderTreeElement.prototype.onpopulate):

LayoutTests:

  • http/tests/inspector/debugger-test.js:

(initialize_DebuggerTest.):
(initialize_DebuggerTest):

  • inspector/debugger/scripts-file-selector-expected.txt:
  • inspector/debugger/scripts-file-selector.html:
  • inspector/debugger/scripts-sorting-expected.txt:
  • inspector/debugger/scripts-sorting.html:
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r141592 r141593  
     12013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Web Inspector: Navigator should not create tree elements for uiSourceCodes unless neededm should populate folders on expand only.
     4        https://bugs.webkit.org/show_bug.cgi?id=108601
     5
     6        Reviewed by Pavel Feldman.
     7
     8        * http/tests/inspector/debugger-test.js:
     9        (initialize_DebuggerTest.):
     10        (initialize_DebuggerTest):
     11        * inspector/debugger/scripts-file-selector-expected.txt:
     12        * inspector/debugger/scripts-file-selector.html:
     13        * inspector/debugger/scripts-sorting-expected.txt:
     14        * inspector/debugger/scripts-sorting.html:
     15
    1162013-02-01  Philippe Normand  <pnormand@igalia.com>
    217
  • trunk/LayoutTests/http/tests/inspector/debugger-test.js

    r139859 r141593  
    205205};
    206206
    207 InspectorTest.dumpComboBoxFileSelector = function(comboBoxFileSelector)
    208 {
    209     var rootURL = "http://localhost:8080/LayoutTests/inspector/debugger/";
    210     InspectorTest.addResult("Dumping ComboBoxFileSelector:");
    211     var select = comboBoxFileSelector._filesSelectElement;
    212     for (var i = 0; i < select.length; ++i) {
    213         var option = select[i];
    214         var text = option.text.replace(/.*LayoutTests/, "LayoutTests");
    215         text = text.replace(/\u00a0/g, " ").replace(/\u2026/g, "...");
    216         var tooltip = option.title.replace(rootURL, "<root>/");
    217         InspectorTest.addResult(text + (tooltip ? "(" + tooltip + ")" : ""));
    218     }
    219 };
    220 
    221207InspectorTest.setBreakpoint = function(sourceFrame, lineNumber, condition, enabled)
    222208{
  • trunk/LayoutTests/inspector/debugger/scripts-file-selector-expected.txt

    r113563 r141593  
    11Tests scripts panel file selectors.
    22
     3Dumping ScriptsNavigator 'Scripts' tab:
     4  example.com
     5  localhost
     6    LayoutTests/inspector/debugger/foo/bar
     7    LayoutTests/inspector/debugger/foo/baz
     8  ?a=b
     9  very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_url
     10Dumping ScriptsNavigator 'Content scripts' tab:
     11  localhost
     12    LayoutTests/inspector/debugger/foo/bar
    313Dumping ScriptsNavigator 'Scripts' tab:
    414  example.com
  • trunk/LayoutTests/inspector/debugger/scripts-file-selector.html

    r139859 r141593  
    1111
    1212    WebInspector.showPanel("scripts");
    13     var navigatorFileSelector = new WebInspector.ScriptsNavigator();
     13    var navigator = new WebInspector.ScriptsNavigator();
    1414
     15    var uiSourceCodes = [];
    1516    function addUISourceCode(url, isContentScript)
    1617    {
    1718        var uiSourceCode = new WebInspector.UISourceCode(WebInspector.workspace, url, url, url, WebInspector.resourceTypes.Script, null);
    1819        uiSourceCode.isContentScript = isContentScript;
    19         navigatorFileSelector.addUISourceCode(uiSourceCode);
     20        navigator.addUISourceCode(uiSourceCode);
     21        uiSourceCodes.push(uiSourceCode);
    2022    }
    2123
     
    3234    addUISourceCode("very_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_url", false);
    3335
    34     InspectorTest.dumpScriptsNavigator(navigatorFileSelector);
     36    InspectorTest.dumpScriptsNavigator(navigator);
     37    for (var i = 0; i < uiSourceCodes.length; ++i)
     38        navigator.revealUISourceCode(uiSourceCodes[i]);
     39    InspectorTest.dumpScriptsNavigator(navigator);
    3540
    3641    InspectorTest.completeTest();
  • trunk/LayoutTests/inspector/debugger/scripts-sorting-expected.txt

    r113563 r141593  
    33
    44WebInspector.settings.showScriptFolders = true
     5Dumping ScriptsNavigator 'Scripts' tab:
     6  bar.com
     7    foo/path
     8  foo.com
     9    _js/production
     10    foo/path
     11    i
     12    i/js
     13  *Non*URL*path
     14Dumping ScriptsNavigator 'Content scripts' tab:
     15  extension-name
     16    folder
     17  *Non*URL*path
    518Dumping ScriptsNavigator 'Scripts' tab:
    619  bar.com
     
    5770  bar.com
    5871    foo/path
     72  foo.com
     73    _js/production
     74    foo/path
     75    i
     76    i/js
     77  *Non*URL*path
     78Dumping ScriptsNavigator 'Content scripts' tab:
     79  extension-name
     80    folder
     81  *Non*URL*path
     82Dumping ScriptsNavigator 'Scripts' tab:
     83  bar.com
     84    foo/path
    5985      bar.js?file=bar/zzz.js
    6086      foo.js?file=bar/aaa.js
  • trunk/LayoutTests/inspector/debugger/scripts-sorting.html

    r139859 r141593  
    1111    WebInspector.showPanel("scripts");
    1212
    13     var navigatorFileSelector = new WebInspector.ScriptsNavigator();
     13    var navigator = new WebInspector.ScriptsNavigator();
    1414
     15    var uiSourceCodes = [];
    1516    function addUISourceCode(url, isContentScript)
    1617    {
    1718        var uiSourceCode = new WebInspector.UISourceCode(WebInspector.workspace, url, url, url, WebInspector.resourceTypes.Script, null);
    1819        uiSourceCode.isContentScript = isContentScript;
    19         navigatorFileSelector.addUISourceCode(uiSourceCode);
     20        navigator.addUISourceCode(uiSourceCode);
     21        uiSourceCodes.push(uiSourceCode);
    2022    }
    2123
    22     function dumpScriptsList()
     24    function dumpScriptsList(noReveal)
    2325    {
    2426        InspectorTest.addResult("");
    2527        InspectorTest.addResult("WebInspector.settings.showScriptFolders = " + WebInspector.settings.showScriptFolders.get());
    2628
    27         InspectorTest.dumpScriptsNavigator(navigatorFileSelector);
     29        InspectorTest.dumpScriptsNavigator(navigator);
     30        if (noReveal)
     31            return;
     32        for (var i = 0; i < uiSourceCodes.length; ++i)
     33            navigator.revealUISourceCode(uiSourceCodes[i]);
     34        InspectorTest.dumpScriptsNavigator(navigator);
    2835    }
    2936
     
    6067        dumpScriptsList();
    6168        WebInspector.settings.showScriptFolders.set(false);
    62         dumpScriptsList();
     69        dumpScriptsList(true);
    6370    } finally {
    6471        WebInspector.settings.showScriptFolders.set(true);
  • trunk/Source/WebCore/ChangeLog

    r141589 r141593  
     12013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Web Inspector: Navigator should not create tree elements for uiSourceCodes unless neededm should populate folders on expand only.
     4        https://bugs.webkit.org/show_bug.cgi?id=108601
     5
     6        Reviewed by Pavel Feldman.
     7
     8        Tree elememnts for uiSourceCodes are not created until really needed anymore.
     9        They are now created when parent folder tree elememnts are expanded or when uiSourceCode is revealed in navigator.
     10
     11        * inspector/front-end/NavigatorView.js:
     12        (WebInspector.NavigatorView):
     13        (WebInspector.NavigatorView.prototype.addUISourceCode):
     14        (WebInspector.NavigatorView.prototype._getOrCreateScriptTreeElement):
     15        (WebInspector.NavigatorView.prototype._getScriptTreeElement):
     16        (WebInspector.NavigatorView.prototype._createScriptTreeElement):
     17        (WebInspector.NavigatorView.prototype._removeScriptTreeElement):
     18        (WebInspector.NavigatorView.prototype._updateScriptTitle):
     19        (WebInspector.NavigatorView.prototype.isScriptSourceAdded):
     20        (WebInspector.NavigatorView.prototype.revealUISourceCode):
     21        (WebInspector.NavigatorView.prototype.removeUISourceCode):
     22        (WebInspector.NavigatorView.prototype.reset):
     23        (WebInspector.NavigatorView.prototype.createFolderTreeElement):
     24        (WebInspector.NavigatorView.prototype._populateFolderTreeElement):
     25        (WebInspector.NavigatorView.prototype._addScriptTreeElement):
     26        (WebInspector.NavigatorView.prototype._adoptUISourceCode):
     27        (WebInspector.NavigatorFolderTreeElement):
     28        (WebInspector.NavigatorFolderTreeElement.prototype.onpopulate):
     29
    1302013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>
    231
  • trunk/Source/WebCore/inspector/front-end/NavigatorView.js

    r141563 r141593  
    5353    this.setDefaultFocusedElement(this._scriptsTree.element);
    5454
     55    /** @type {Object.<string, WebInspector.NavigatorFolderTreeElement>} */
    5556    this._folderTreeElements = {};
    56     this._scriptTreeElementsByUISourceCode = new Map();
     57    /** @type {Object.<string, Array.<WebInspector.UISourceCode>>} */
     58    this._folderTreeElementsUISourceCodes = {};
     59    /** @type {Object.<string, WebInspector.UISourceCode>} */
     60    this._uiSourceCodes = {};
     61    /** @type {Object.<string, WebInspector.NavigatorSourceTreeElement>} */
     62    this._scriptTreeElements = {};
    5763
    5864    WebInspector.settings.showScriptFolders.addChangeListener(this._showScriptFoldersSettingChanged.bind(this));
    5965}
    60 
    6166
    6267WebInspector.NavigatorView.Events = {
     
    7176    addUISourceCode: function(uiSourceCode)
    7277    {
    73         if (this._scriptTreeElementsByUISourceCode.get(uiSourceCode))
     78        if (this._uiSourceCodes[uiSourceCode.uri()])
    7479            return;
    75 
     80        this._uiSourceCodes[uiSourceCode.uri()] = uiSourceCode;
     81
     82        var folderTreeElement = this.getOrCreateFolderTreeElement(uiSourceCode);
     83        this._adoptUISourceCode(folderTreeElement, uiSourceCode);
     84    },
     85
     86    _getOrCreateScriptTreeElement: function(uiSourceCode)
     87    {
     88        return this._getScriptTreeElement(uiSourceCode) || this._createScriptTreeElement(uiSourceCode);
     89    },
     90
     91    _getScriptTreeElement: function(uiSourceCode)
     92    {
     93        return this._scriptTreeElements[uiSourceCode.uri()];
     94    },
     95
     96    _createScriptTreeElement: function(uiSourceCode)
     97    {
    7698        var scriptTreeElement = new WebInspector.NavigatorSourceTreeElement(this, uiSourceCode, "");
    77         this._scriptTreeElementsByUISourceCode.put(uiSourceCode, scriptTreeElement);
     99        this._scriptTreeElements[uiSourceCode.uri()] = scriptTreeElement;
    78100        this._updateScriptTitle(uiSourceCode);
    79101        this._addUISourceCodeListeners(uiSourceCode);
    80 
    81         var folderTreeElement = this.getOrCreateFolderTreeElement(uiSourceCode);
    82         folderTreeElement.appendChild(scriptTreeElement);
     102        return scriptTreeElement;
     103    },
     104
     105    _removeScriptTreeElement: function(uiSourceCode)
     106    {
     107        var scriptTreeElement = this._scriptTreeElements[uiSourceCode.uri()];
     108        if (!scriptTreeElement)
     109            return;
     110        if (scriptTreeElement.parent)
     111            scriptTreeElement.parent.removeChild(scriptTreeElement);
     112        delete this._scriptTreeElements[uiSourceCode.uri()];
     113        this._removeUISourceCodeListeners(uiSourceCode);
    83114    },
    84115
     
    113144    _updateScriptTitle: function(uiSourceCode, ignoreIsDirty)
    114145    {
    115         var scriptTreeElement = this._scriptTreeElementsByUISourceCode.get(uiSourceCode);
     146        var scriptTreeElement = this._getScriptTreeElement(uiSourceCode);
    116147        if (!scriptTreeElement)
    117148            return;
     
    137168    isScriptSourceAdded: function(uiSourceCode)
    138169    {
    139         var scriptTreeElement = this._scriptTreeElementsByUISourceCode.get(uiSourceCode);
    140         return !!scriptTreeElement;
     170        return !!this._uiSourceCodes[uiSourceCode.uri()];
    141171    },
    142172
     
    151181        this._lastSelectedUISourceCode = uiSourceCode;
    152182
    153         var scriptTreeElement = this._scriptTreeElementsByUISourceCode.get(uiSourceCode);
     183        var folderTreeElement = this.getOrCreateFolderTreeElement(uiSourceCode);
     184        if (!folderTreeElement._populated && folderTreeElement.parent)
     185            folderTreeElement.onpopulate();
     186        var scriptTreeElement = this._getOrCreateScriptTreeElement(uiSourceCode);
    154187        scriptTreeElement.revealAndSelect(true);
    155188    },
     
    171204    removeUISourceCode: function(uiSourceCode)
    172205    {
    173         var treeElement = this._scriptTreeElementsByUISourceCode.get(uiSourceCode);
     206        this._removeScriptTreeElement(uiSourceCode);
     207        var treeElement = this.getOrCreateFolderTreeElement(uiSourceCode);
    174208        while (treeElement) {
    175209            var parent = treeElement.parent;
    176210            if (parent) {
    177                 if (treeElement instanceof WebInspector.NavigatorFolderTreeElement)
    178                     delete this._folderTreeElements[treeElement.folderIdentifier];
     211                delete this._folderTreeElements[treeElement.folderIdentifier];
     212                delete this._folderTreeElementsUISourceCodes[treeElement.folderIdentifier];
    179213                parent.removeChild(treeElement);
    180214                if (parent.children.length)
     
    183217            treeElement = parent;
    184218        }
    185         this._scriptTreeElementsByUISourceCode.remove(uiSourceCode);
    186         this._removeUISourceCodeListeners(uiSourceCode);
     219        delete this._uiSourceCodes[uiSourceCode.uri()];
    187220    },
    188221
     
    233266    rename: function(uiSourceCode, callback)
    234267    {
    235         var scriptTreeElement = this._scriptTreeElementsByUISourceCode.get(uiSourceCode);
     268        var scriptTreeElement = this._getScriptTreeElement[uiSourceCode.uri()];
    236269        if (!scriptTreeElement)
    237270            return;
     
    279312        this._scriptsTree.removeChildren();
    280313        this._folderTreeElements = {};
    281         this._scriptTreeElementsByUISourceCode.clear();
     314        this._folderTreeElementsUISourceCodes = {};
     315        this._uiSourceCodes = {};
     316        this._scriptTreeElements = {};
    282317    },
    283318
     
    289324    createFolderTreeElement: function(parentFolderElement, folderIdentifier, domain, folderName)
    290325    {
    291         var folderTreeElement = new WebInspector.NavigatorFolderTreeElement(folderIdentifier, domain, folderName);
     326        var folderTreeElement = new WebInspector.NavigatorFolderTreeElement(this, folderIdentifier, domain, folderName);
     327        this._folderTreeElements[folderIdentifier] = folderTreeElement;
     328        this._folderTreeElementsUISourceCodes[folderIdentifier] = [];
    292329        parentFolderElement.appendChild(folderTreeElement);
    293         this._folderTreeElements[folderIdentifier] = folderTreeElement;
    294330        return folderTreeElement;
     331    },
     332
     333    /**
     334     * @param {WebInspector.NavigatorFolderTreeElement} folderTreeElement
     335     */
     336    _populateFolderTreeElement: function(folderTreeElement)
     337    {
     338        if (folderTreeElement._populated)
     339            return;
     340        folderTreeElement._populated = true;
     341        var uiSourceCodes = this._folderTreeElementsUISourceCodes[folderTreeElement.folderIdentifier];
     342        for (var i = 0; i < uiSourceCodes.length; ++i)
     343            this._addScriptTreeElement(folderTreeElement, uiSourceCodes[i]);
     344        delete this._folderTreeElementsUISourceCodes[folderTreeElement.folderIdentifier];
    295345    },
    296346
     
    326376       
    327377        return this.createFolderTreeElement(parentFolderElement, folderIdentifier, domain, folderName);
     378    },
     379
     380    _addScriptTreeElement: function(folderTreeElement, uiSourceCode)
     381    {
     382        var scriptTreeElement = this._getOrCreateScriptTreeElement(uiSourceCode);
     383        folderTreeElement.appendChild(scriptTreeElement);
     384    },
     385
     386    _adoptUISourceCode: function(folderTreeElement, uiSourceCode)
     387    {
     388        if (folderTreeElement._populated || !folderTreeElement.parent) {
     389            this._addScriptTreeElement(folderTreeElement, uiSourceCode);
     390            return;
     391        }
     392        this._folderTreeElementsUISourceCodes[folderTreeElement.folderIdentifier].push(uiSourceCode);
    328393    },
    329394
     
    500565 * @constructor
    501566 * @extends {WebInspector.BaseNavigatorTreeElement}
     567 * @param {WebInspector.NavigatorView} navigatorView
    502568 * @param {string} folderIdentifier
    503569 * @param {string} domain
    504570 * @param {string} folderName
    505571 */
    506 WebInspector.NavigatorFolderTreeElement = function(folderIdentifier, domain, folderName)
     572WebInspector.NavigatorFolderTreeElement = function(navigatorView, folderIdentifier, domain, folderName)
    507573{
     574    this._navigatorView = navigatorView;
    508575    this._folderIdentifier = folderIdentifier;
    509576    this._folderName = folderName;
     
    533600    },
    534601   
     602    onpopulate: function()
     603    {
     604        this._navigatorView._populateFolderTreeElement(this);
     605    },
     606
    535607    onattach: function()
    536608    {
Note: See TracChangeset for help on using the changeset viewer.