Title: [109351] trunk/Source/WebCore
Revision
109351
Author
podivi...@chromium.org
Date
2012-03-01 09:30:47 -0800 (Thu, 01 Mar 2012)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (109350 => 109351)


--- trunk/Source/WebCore/ChangeLog	2012-03-01 17:15:03 UTC (rev 109350)
+++ trunk/Source/WebCore/ChangeLog	2012-03-01 17:30:47 UTC (rev 109351)
@@ -1,3 +1,25 @@
+2012-03-01  Pavel Podivilov  <podivi...@chromium.org>
+
+        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):
+
 2012-03-01  Vsevolod Vlasov  <vse...@chromium.org>
 
         Web Inspector: [InspectorIndexedDB] Show tooltips with IndexedDB objects meta information

Modified: trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js (109350 => 109351)


--- trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js	2012-03-01 17:15:03 UTC (rev 109350)
+++ trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js	2012-03-01 17:30:47 UTC (rev 109351)
@@ -44,6 +44,10 @@
 
     this._breakpointManager = new WebInspector.BreakpointManager(WebInspector.settings.breakpoints, this._breakpointAdded.bind(this), this._breakpointRemoved.bind(this), WebInspector.debuggerModel);
 
+    this._pendingConsoleMessages = {};
+    this._consoleMessageLiveLocations = [];
+    this._presentationConsoleMessages = [];
+
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, this._failedToParseScriptSource, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
@@ -149,6 +153,8 @@
         if (isInlineScript)
             this._rawSourceCodeForDocumentURL[script.sourceURL] = rawSourceCode;
 
+        this._addPendingConsoleMessagesToScript(script);
+
         if (rawSourceCode.uiSourceCodeList().length)
             this._uiSourceCodeListChanged(rawSourceCode, []);
         rawSourceCode.addEventListener(WebInspector.RawSourceCode.Events.UISourceCodeListChanged, this._handleUISourceCodeListChanged, this);
@@ -204,7 +210,6 @@
         }
 
         this._restoreBreakpoints(rawSourceCode);
-        this._restoreConsoleMessages(rawSourceCode);
         this._restoreExecutionLine(rawSourceCode);
 
         var uiSourceCodeList = rawSourceCode.uiSourceCodeList();
@@ -235,20 +240,6 @@
     /**
      * @param {WebInspector.RawSourceCode} rawSourceCode
      */
-    _restoreConsoleMessages: function(rawSourceCode)
-    {
-        var messages = rawSourceCode.messages;
-        for (var i = 0; i < messages.length; ++i) {
-            var message = messages[i];
-            var uiLocation = rawSourceCode.rawLocationToUILocation(message.location);
-            if (uiLocation)
-                message._presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
-        }
-    },
-
-    /**
-     * @param {WebInspector.RawSourceCode} rawSourceCode
-     */
     _restoreExecutionLine: function(rawSourceCode)
     {
         if (!this._selectedCallFrame || this._selectedCallFrame.rawSourceCode !== rawSourceCode)
@@ -357,22 +348,72 @@
         if (!message.url || !message.isErrorOrWarning())
             return;
 
-        var rawSourceCode = this._rawSourceCodeForScriptWithURL(message.url);
-        if (!rawSourceCode)
+        var script = this._scriptForURLAndLocation(message.url, message.location);
+        if (script)
+            this._addConsoleMessageToScript(message, script);
+        else
+            this._addPendingConsoleMessage(message);
+    },
+
+    /**
+     * @param {WebInspector.ConsoleMessage} message
+     * @param {WebInspector.Script} script
+     */
+    _addConsoleMessageToScript: function(message, script)
+    {
+        var rawSourceCode = this._rawSourceCodeForScript(script);
+        function updateLocation(uiLocation)
+        {
+            var presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
+            this._presentationConsoleMessages.push(presentationMessage);
+            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, presentationMessage);
+        }
+        var liveLocation = rawSourceCode.createLiveLocation(message.location, updateLocation.bind(this));
+        liveLocation.init();
+        this._consoleMessageLiveLocations.push(liveLocation);
+    },
+
+    /**
+     * @param {WebInspector.ConsoleMessage} message
+     */
+    _addPendingConsoleMessage: function(message)
+    {
+        if (!this._pendingConsoleMessages[message.url])
+            this._pendingConsoleMessages[message.url] = [];
+        this._pendingConsoleMessages[message.url].push(message);
+    },
+
+    /**
+     * @param {WebInspector.Script} script
+     */
+    _addPendingConsoleMessagesToScript: function(script)
+    {
+        var messages = this._pendingConsoleMessages[script.sourceURL];
+        if (!messages)
             return;
 
-        rawSourceCode.messages.push(message);
-        var uiLocation = rawSourceCode.rawLocationToUILocation(message.location);
-        if (uiLocation) {
-            message._presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
-            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, message._presentationMessage);
+        var pendingMessages = [];
+        for (var i = 0; i < messages.length; i++) {
+            var message = messages[i];
+            if (script === this._scriptForURLAndLocation(message.url, message.location))
+                this._addConsoleMessageToScript(messages, script);
+            else
+                pendingMessages.push(message);
         }
+
+        if (pendingMessages.length)
+            this._pendingConsoleMessages[script.sourceURL] = pendingMessages;
+        else
+            delete this._pendingConsoleMessages[script.sourceURL];
     },
 
     _consoleCleared: function()
     {
-        for (var i = 0; i < this._rawSourceCodes.length; ++i)
-            this._rawSourceCodes[i].messages = [];
+        this._pendingConsoleMessages = {};
+        for (var i = 0; i < this._consoleMessageLiveLocations.length; ++i)
+            this._consoleMessageLiveLocations[i].dispose();
+        this._consoleMessageLiveLocations = [];
+        this._presentationConsoleMessages = [];
         this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessagesCleared);
     },
 
@@ -401,14 +442,16 @@
 
     /**
      * @param {WebInspector.UISourceCode} uiSourceCode
-     * @return {Array.<WebInspector.ConsoleMessage>}
+     * @return {Array.<WebInspector.PresentationConsoleMessage>}
      */
     messagesForUISourceCode: function(uiSourceCode)
     {
-        var rawSourceCode = uiSourceCode.rawSourceCode;
         var messages = [];
-        for (var i = 0; i < rawSourceCode.messages.length; ++i)
-            messages.push(rawSourceCode.messages[i]._presentationMessage);
+        for (var i = 0; i < this._presentationConsoleMessages.length; ++i) {
+            var message = this._presentationConsoleMessages[i];
+            if (message.uiSourceCode === uiSourceCode)
+                messages.push(message);
+        }
         return messages;
     },
 
@@ -626,6 +669,24 @@
         return WebInspector.debuggerModel.queryScripts(filter.bind(this))[0];
     },
 
+    /**
+     * @param {string} url
+     * @param {DebuggerAgent.Location} rawLocation
+     */
+    _scriptForURLAndLocation: function(url, rawLocation)
+    {
+        var scripts = WebInspector.debuggerModel.scriptsForURL(url);
+        for (var i = 0; i < scripts.length; ++i) {
+            var script = scripts[i];
+            if (script.lineOffset > rawLocation.lineNumber || (script.lineOffset === rawLocation.lineNumber && script.columnOffset > rawLocation.columnNumber))
+                continue;
+            if (script.endLine < rawLocation.lineNumber || (script.endLine === rawLocation.lineNumber && script.endColumn <= rawLocation.columnNumber))
+                continue;
+            return script;
+        }
+        return null;
+    },
+
     _debuggerReset: function()
     {
         for (var i = 0; i < this._rawSourceCodes.length; ++i) {
@@ -642,6 +703,9 @@
         this._presentationCallFrames = [];
         this._selectedCallFrame = null;
         this._breakpointManager.debuggerReset();
+        this._pendingConsoleMessages = {};
+        this._consoleMessageLiveLocations = [];
+        this._presentationConsoleMessages = [];
         this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.DebuggerReset);
     }
 }

Modified: trunk/Source/WebCore/inspector/front-end/RawSourceCode.js (109350 => 109351)


--- trunk/Source/WebCore/inspector/front-end/RawSourceCode.js	2012-03-01 17:15:03 UTC (rev 109350)
+++ trunk/Source/WebCore/inspector/front-end/RawSourceCode.js	2012-03-01 17:30:47 UTC (rev 109351)
@@ -51,7 +51,6 @@
     this._formatted = formatted;
     this._compilerSourceMapping = compilerSourceMapping;
     this._resource = resource;
-    this.messages = [];
 
     this._useTemporaryContent = !this._compilerSourceMapping && this._resource && !this._resource.finished;
     this._hasNewScripts = true;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to