Changeset 109351 in webkit


Ignore:
Timestamp:
Mar 1, 2012 9:30:47 AM (12 years ago)
Author:
podivilov@chromium.org
Message:

Web Inspector: use live location to update console message bubbles.
https://bugs.webkit.org/show_bug.cgi?id=80023

Reviewed by Vsevolod Vlasov.

  • inspector/front-end/DebuggerPresentationModel.js:

(WebInspector.DebuggerPresentationModel):
(WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
(WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
(WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript.updateLocation):
(WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
(WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessage):
(WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessagesToScript):
(WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
(WebInspector.DebuggerPresentationModel.prototype.messagesForUISourceCode):
(WebInspector.DebuggerPresentationModel.prototype._scriptForURLAndLocation):
(WebInspector.DebuggerPresentationModel.prototype._debuggerReset):

  • inspector/front-end/RawSourceCode.js:

(WebInspector.RawSourceCode):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r109349 r109351  
     12012-03-01  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Web Inspector: use live location to update console message bubbles.
     4        https://bugs.webkit.org/show_bug.cgi?id=80023
     5
     6        Reviewed by Vsevolod Vlasov.
     7
     8        * inspector/front-end/DebuggerPresentationModel.js:
     9        (WebInspector.DebuggerPresentationModel):
     10        (WebInspector.DebuggerPresentationModel.prototype._uiSourceCodeListChanged):
     11        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
     12        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript.updateLocation):
     13        (WebInspector.DebuggerPresentationModel.prototype._addConsoleMessageToScript):
     14        (WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessage):
     15        (WebInspector.DebuggerPresentationModel.prototype._addPendingConsoleMessagesToScript):
     16        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
     17        (WebInspector.DebuggerPresentationModel.prototype.messagesForUISourceCode):
     18        (WebInspector.DebuggerPresentationModel.prototype._scriptForURLAndLocation):
     19        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
     20        * inspector/front-end/RawSourceCode.js:
     21        (WebInspector.RawSourceCode):
     22
    1232012-03-01  Vsevolod Vlasov  <vsevik@chromium.org>
    224
  • trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js

    r109328 r109351  
    4545    this._breakpointManager = new WebInspector.BreakpointManager(WebInspector.settings.breakpoints, this._breakpointAdded.bind(this), this._breakpointRemoved.bind(this), WebInspector.debuggerModel);
    4646
     47    this._pendingConsoleMessages = {};
     48    this._consoleMessageLiveLocations = [];
     49    this._presentationConsoleMessages = [];
     50
    4751    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
    4852    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, this._failedToParseScriptSource, this);
     
    150154            this._rawSourceCodeForDocumentURL[script.sourceURL] = rawSourceCode;
    151155
     156        this._addPendingConsoleMessagesToScript(script);
     157
    152158        if (rawSourceCode.uiSourceCodeList().length)
    153159            this._uiSourceCodeListChanged(rawSourceCode, []);
     
    205211
    206212        this._restoreBreakpoints(rawSourceCode);
    207         this._restoreConsoleMessages(rawSourceCode);
    208213        this._restoreExecutionLine(rawSourceCode);
    209214
     
    230235            for (var lineNumber in breakpoints)
    231236                this._breakpointAdded(breakpoints[lineNumber]);
    232         }
    233     },
    234 
    235     /**
    236      * @param {WebInspector.RawSourceCode} rawSourceCode
    237      */
    238     _restoreConsoleMessages: function(rawSourceCode)
    239     {
    240         var messages = rawSourceCode.messages;
    241         for (var i = 0; i < messages.length; ++i) {
    242             var message = messages[i];
    243             var uiLocation = rawSourceCode.rawLocationToUILocation(message.location);
    244             if (uiLocation)
    245                 message._presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
    246237        }
    247238    },
     
    358349            return;
    359350
    360         var rawSourceCode = this._rawSourceCodeForScriptWithURL(message.url);
    361         if (!rawSourceCode)
     351        var script = this._scriptForURLAndLocation(message.url, message.location);
     352        if (script)
     353            this._addConsoleMessageToScript(message, script);
     354        else
     355            this._addPendingConsoleMessage(message);
     356    },
     357
     358    /**
     359     * @param {WebInspector.ConsoleMessage} message
     360     * @param {WebInspector.Script} script
     361     */
     362    _addConsoleMessageToScript: function(message, script)
     363    {
     364        var rawSourceCode = this._rawSourceCodeForScript(script);
     365        function updateLocation(uiLocation)
     366        {
     367            var presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
     368            this._presentationConsoleMessages.push(presentationMessage);
     369            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, presentationMessage);
     370        }
     371        var liveLocation = rawSourceCode.createLiveLocation(message.location, updateLocation.bind(this));
     372        liveLocation.init();
     373        this._consoleMessageLiveLocations.push(liveLocation);
     374    },
     375
     376    /**
     377     * @param {WebInspector.ConsoleMessage} message
     378     */
     379    _addPendingConsoleMessage: function(message)
     380    {
     381        if (!this._pendingConsoleMessages[message.url])
     382            this._pendingConsoleMessages[message.url] = [];
     383        this._pendingConsoleMessages[message.url].push(message);
     384    },
     385
     386    /**
     387     * @param {WebInspector.Script} script
     388     */
     389    _addPendingConsoleMessagesToScript: function(script)
     390    {
     391        var messages = this._pendingConsoleMessages[script.sourceURL];
     392        if (!messages)
    362393            return;
    363394
    364         rawSourceCode.messages.push(message);
    365         var uiLocation = rawSourceCode.rawLocationToUILocation(message.location);
    366         if (uiLocation) {
    367             message._presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
    368             this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, message._presentationMessage);
    369         }
     395        var pendingMessages = [];
     396        for (var i = 0; i < messages.length; i++) {
     397            var message = messages[i];
     398            if (script === this._scriptForURLAndLocation(message.url, message.location))
     399                this._addConsoleMessageToScript(messages, script);
     400            else
     401                pendingMessages.push(message);
     402        }
     403
     404        if (pendingMessages.length)
     405            this._pendingConsoleMessages[script.sourceURL] = pendingMessages;
     406        else
     407            delete this._pendingConsoleMessages[script.sourceURL];
    370408    },
    371409
    372410    _consoleCleared: function()
    373411    {
    374         for (var i = 0; i < this._rawSourceCodes.length; ++i)
    375             this._rawSourceCodes[i].messages = [];
     412        this._pendingConsoleMessages = {};
     413        for (var i = 0; i < this._consoleMessageLiveLocations.length; ++i)
     414            this._consoleMessageLiveLocations[i].dispose();
     415        this._consoleMessageLiveLocations = [];
     416        this._presentationConsoleMessages = [];
    376417        this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessagesCleared);
    377418    },
     
    402443    /**
    403444     * @param {WebInspector.UISourceCode} uiSourceCode
    404      * @return {Array.<WebInspector.ConsoleMessage>}
     445     * @return {Array.<WebInspector.PresentationConsoleMessage>}
    405446     */
    406447    messagesForUISourceCode: function(uiSourceCode)
    407448    {
    408         var rawSourceCode = uiSourceCode.rawSourceCode;
    409449        var messages = [];
    410         for (var i = 0; i < rawSourceCode.messages.length; ++i)
    411             messages.push(rawSourceCode.messages[i]._presentationMessage);
     450        for (var i = 0; i < this._presentationConsoleMessages.length; ++i) {
     451            var message = this._presentationConsoleMessages[i];
     452            if (message.uiSourceCode === uiSourceCode)
     453                messages.push(message);
     454        }
    412455        return messages;
    413456    },
     
    627670    },
    628671
     672    /**
     673     * @param {string} url
     674     * @param {DebuggerAgent.Location} rawLocation
     675     */
     676    _scriptForURLAndLocation: function(url, rawLocation)
     677    {
     678        var scripts = WebInspector.debuggerModel.scriptsForURL(url);
     679        for (var i = 0; i < scripts.length; ++i) {
     680            var script = scripts[i];
     681            if (script.lineOffset > rawLocation.lineNumber || (script.lineOffset === rawLocation.lineNumber && script.columnOffset > rawLocation.columnNumber))
     682                continue;
     683            if (script.endLine < rawLocation.lineNumber || (script.endLine === rawLocation.lineNumber && script.endColumn <= rawLocation.columnNumber))
     684                continue;
     685            return script;
     686        }
     687        return null;
     688    },
     689
    629690    _debuggerReset: function()
    630691    {
     
    643704        this._selectedCallFrame = null;
    644705        this._breakpointManager.debuggerReset();
     706        this._pendingConsoleMessages = {};
     707        this._consoleMessageLiveLocations = [];
     708        this._presentationConsoleMessages = [];
    645709        this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.DebuggerReset);
    646710    }
  • trunk/Source/WebCore/inspector/front-end/RawSourceCode.js

    r109328 r109351  
    5252    this._compilerSourceMapping = compilerSourceMapping;
    5353    this._resource = resource;
    54     this.messages = [];
    5554
    5655    this._useTemporaryContent = !this._compilerSourceMapping && this._resource && !this._resource.finished;
Note: See TracChangeset for help on using the changeset viewer.