Title: [116789] trunk
Revision
116789
Author
[email protected]
Date
2012-05-11 11:31:41 -0700 (Fri, 11 May 2012)

Log Message

Web Inspector: extract PresentationConsoleMessageHelper from DebuggerPresentationModel.
https://bugs.webkit.org/show_bug.cgi?id=86229

Reviewed by Vsevolod Vlasov.

This change also starts tracking messages along with the live location changes.

Tested with script-formatter-console.html.

* inspector/front-end/BreakpointManager.js:
* inspector/front-end/DebuggerPresentationModel.js:
(WebInspector.DebuggerPresentationModel):
(WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
(WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
(WebInspector.PresentationConsoleMessageHelper):
(WebInspector.PresentationConsoleMessageHelper.prototype._addPendingConsoleMessage):
(WebInspector.PresentationConsoleMessageHelper.prototype._parsedScriptSource):
(WebInspector.PresentationConsoleMessageHelper.prototype._debuggerReset):
(WebInspector.PresentationConsoleMessage):
* inspector/front-end/_javascript_SourceFrame.js:
(WebInspector._javascript_SourceFrame.prototype.populateLineGutterContextMenu):
(WebInspector._javascript_SourceFrame.prototype._consoleMessageAdded):
(WebInspector._javascript_SourceFrame.prototype._setBreakpoint):

Modified Paths

Diff

Modified: trunk/LayoutTests/inspector/debugger/script-formatter-console-expected.txt (116788 => 116789)


--- trunk/LayoutTests/inspector/debugger/script-formatter-console-expected.txt	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/LayoutTests/inspector/debugger/script-formatter-console-expected.txt	2012-05-11 18:31:41 UTC (rev 116789)
@@ -5,6 +5,12 @@
 
 Running: testConsoleMessagesForFormattedScripts
 script-formatter-console.html:10
+Pre-format row message list:
+["9"]
+["9"]
 script-formatter-console.html:13
+Post-format row message list:
+["12"]
+["12"]
 Debugger was disabled.
 

Modified: trunk/LayoutTests/inspector/debugger/script-formatter-console.html (116788 => 116789)


--- trunk/LayoutTests/inspector/debugger/script-formatter-console.html	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/LayoutTests/inspector/debugger/script-formatter-console.html	2012-05-11 18:31:41 UTC (rev 116789)
@@ -7,7 +7,7 @@
 
 function f1()
 {
-    console.log("Test message.");
+    console.error("Test message.");
 }
 
 var test = function()
@@ -30,12 +30,18 @@
             function didEvaluate()
             {
                 dumpConsoleMessageURLs();
+                InspectorTest.addResult("Pre-format row message list:");
+                InspectorTest.addResult(JSON.stringify(Object.keys(sourceFrame._rowMessages)));
+                InspectorTest.addResult(JSON.stringify(Object.keys(sourceFrame._messageBubbles)));
                 sourceFrame._uiSourceCode.setFormatted(true, didFormatLinkText);
             }
 
             function didFormatLinkText()
             {
                 dumpConsoleMessageURLs();
+                InspectorTest.addResult("Post-format row message list:");
+                InspectorTest.addResult(JSON.stringify(Object.keys(sourceFrame._rowMessages)));
+                InspectorTest.addResult(JSON.stringify(Object.keys(sourceFrame._messageBubbles)));
                 next();
             }
         }

Modified: trunk/Source/WebCore/ChangeLog (116788 => 116789)


--- trunk/Source/WebCore/ChangeLog	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/ChangeLog	2012-05-11 18:31:41 UTC (rev 116789)
@@ -1,3 +1,29 @@
+2012-05-11  Pavel Feldman  <[email protected]>
+
+        Web Inspector: extract PresentationConsoleMessageHelper from DebuggerPresentationModel.
+        https://bugs.webkit.org/show_bug.cgi?id=86229
+
+        Reviewed by Vsevolod Vlasov.
+
+        This change also starts tracking messages along with the live location changes.
+
+        Tested with script-formatter-console.html.
+
+        * inspector/front-end/BreakpointManager.js:
+        * inspector/front-end/DebuggerPresentationModel.js:
+        (WebInspector.DebuggerPresentationModel):
+        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
+        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
+        (WebInspector.PresentationConsoleMessageHelper):
+        (WebInspector.PresentationConsoleMessageHelper.prototype._addPendingConsoleMessage):
+        (WebInspector.PresentationConsoleMessageHelper.prototype._parsedScriptSource):
+        (WebInspector.PresentationConsoleMessageHelper.prototype._debuggerReset):
+        (WebInspector.PresentationConsoleMessage):
+        * inspector/front-end/_javascript_SourceFrame.js:
+        (WebInspector._javascript_SourceFrame.prototype.populateLineGutterContextMenu):
+        (WebInspector._javascript_SourceFrame.prototype._consoleMessageAdded):
+        (WebInspector._javascript_SourceFrame.prototype._setBreakpoint):
+
 2012-05-11  Emil A Eklund  <[email protected]>
 
         Simplify FloatingObject by removing unnecessary convenience methods.

Modified: trunk/Source/WebCore/inspector/front-end/BreakpointManager.js (116788 => 116789)


--- trunk/Source/WebCore/inspector/front-end/BreakpointManager.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/BreakpointManager.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -498,3 +498,6 @@
     this.condition = breakpoint.condition();
     this.enabled = breakpoint.enabled();
 }
+
+/** @type {WebInspector.BreakpointManager} */
+WebInspector.breakpointManager = null;

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


--- trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -37,17 +37,12 @@
     this._scriptMapping = new WebInspector.MainScriptMapping();
     this._scriptMapping.addEventListener(WebInspector.MainScriptMapping.Events.UISourceCodeListChanged, this._handleUISourceCodeListChanged, this);
 
-    this._pendingConsoleMessages = {};
-    this._consoleMessageLiveLocations = [];
-
     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.FailedToParseScriptSource, this._parsedScriptSource, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
 
-    WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this);
-    WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
-
     new WebInspector.DebuggerPresentationModelResourceBinding(this);
+    new WebInspector.PresentationConsoleMessageHelper();
 }
 
 WebInspector.DebuggerPresentationModel.Events = {
@@ -58,35 +53,15 @@
 
 WebInspector.DebuggerPresentationModel.prototype = {
     /**
-     * @param {DebuggerAgent.Location} rawLocation
-     * @param {function(WebInspector.UILocation):(boolean|undefined)} updateDelegate
-     * @return {WebInspector.LiveLocation}
-     */
-    createLiveLocation: function(rawLocation, updateDelegate)
-    {
-        var script = WebInspector.debuggerModel.scriptForId(rawLocation.scriptId);
-        return script.createLiveLocation(rawLocation, updateDelegate);
-    },
-
-    /**
      * @param {WebInspector.Event} event
      */
     _parsedScriptSource: function(event)
     {
         var script = /** @type {WebInspector.Script} */ event.data;
         this._scriptMapping.addScript(script);
-        this._addPendingConsoleMessagesToScript(script);
     },
 
     /**
-     * @param {WebInspector.Event} event
-     */
-    _failedToParseScriptSource: function(event)
-    {
-        this._parsedScriptSource(event);
-    },
-
-    /**
      * @return {Array.<WebInspector.UISourceCode>}
      */
     uiSourceCodes: function()
@@ -152,6 +127,31 @@
         WebInspector.debuggerModel.setScriptSource(script.scriptId, newSource, didEditScriptSource.bind(this));
     },
 
+    _debuggerReset: function()
+    {
+        this._scriptMapping.reset();
+    }
+}
+
+WebInspector.DebuggerPresentationModel.prototype.__proto__ = WebInspector.Object.prototype;
+
+/**
+ * @constructor
+ */
+WebInspector.PresentationConsoleMessageHelper = function()
+{
+    this._pendingConsoleMessages = {};
+    this._presentationConsoleMessages = [];
+
+    WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this);
+    WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
+
+    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
+    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSource, this);
+    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+}
+
+WebInspector.PresentationConsoleMessageHelper.prototype = {
     /**
      * @param {WebInspector.Event} event
      */
@@ -174,13 +174,7 @@
      */
     _addConsoleMessageToScript: function(message, rawLocation)
     {
-        function updateLocation(uiLocation)
-        {
-            var presentationMessage = new WebInspector.PresentationConsoleMessage(uiLocation.uiSourceCode, uiLocation.lineNumber, message);
-            uiLocation.uiSourceCode.consoleMessageAdded(presentationMessage);
-        }
-        var liveLocation = this.createLiveLocation(rawLocation, updateLocation.bind(this));
-        this._consoleMessageLiveLocations.push(liveLocation);
+        this._presentationConsoleMessages.push(new WebInspector.PresentationConsoleMessage(message, rawLocation));
     },
 
     /**
@@ -194,10 +188,12 @@
     },
 
     /**
-     * @param {WebInspector.Script} script
+     * @param {WebInspector.Event} event
      */
-    _addPendingConsoleMessagesToScript: function(script)
+    _parsedScriptSource: function(event)
     {
+        var script = /** @type {WebInspector.Script} */ event.data;
+
         var messages = this._pendingConsoleMessages[script.sourceURL];
         if (!messages)
             return;
@@ -221,47 +217,55 @@
     _consoleCleared: function()
     {
         this._pendingConsoleMessages = {};
-        for (var i = 0; i < this._consoleMessageLiveLocations.length; ++i)
-            this._consoleMessageLiveLocations[i].dispose();
-        this._consoleMessageLiveLocations = [];
-        var uiSourceCodes = this.uiSourceCodes();
+        for (var i = 0; i < this._presentationConsoleMessages.length; ++i)
+            this._presentationConsoleMessages[i].dispose();
+        this._presentationConsoleMessages = [];
+        var uiSourceCodes = WebInspector.debuggerPresentationModel.uiSourceCodes();
         for (var i = 0; i < uiSourceCodes.length; ++i)
             uiSourceCodes[i].consoleMessagesCleared();
     },
 
-    /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
-     * @param {number} lineNumber
-     */
-    continueToLine: function(uiSourceCode, lineNumber)
-    {
-        var rawLocation = uiSourceCode.uiLocationToRawLocation(lineNumber, 0);
-        WebInspector.debuggerModel.continueToLocation(rawLocation);
-    },
-
     _debuggerReset: function()
     {
-        this._scriptMapping.reset();
         this._pendingConsoleMessages = {};
-        this._consoleMessageLiveLocations = [];
+        this._presentationConsoleMessages = [];
     }
 }
 
-WebInspector.DebuggerPresentationModel.prototype.__proto__ = WebInspector.Object.prototype;
-
 /**
  * @constructor
- * @param {WebInspector.UISourceCode} uiSourceCode
- * @param {number} lineNumber
- * @param {WebInspector.ConsoleMessage} originalMessage
+ * @param {WebInspector.ConsoleMessage} message
+ * @param {DebuggerAgent.Location} rawLocation
  */
-WebInspector.PresentationConsoleMessage = function(uiSourceCode, lineNumber, originalMessage)
+WebInspector.PresentationConsoleMessage = function(message, rawLocation)
 {
-    this.uiSourceCode = uiSourceCode;
-    this.lineNumber = lineNumber;
-    this.originalMessage = originalMessage;
+    this.originalMessage = message;
+    this._liveLocation = WebInspector.debuggerModel.createLiveLocation(rawLocation, this._updateLocation.bind(this));
 }
 
+WebInspector.PresentationConsoleMessage.prototype = {
+    /**
+     * @param {WebInspector.UILocation} uiLocation
+     */
+    _updateLocation: function(uiLocation)
+    {
+        if (this._uiLocation)
+            this._uiLocation.uiSourceCode.consoleMessageRemoved(this);
+        this._uiLocation = uiLocation;
+        this._uiLocation.uiSourceCode.consoleMessageAdded(this);
+    },
+
+    get lineNumber()
+    {
+        return this._uiLocation.lineNumber;
+    },
+
+    dispose: function()
+    {
+        this._liveLocation.dispose();
+    }
+}
+
 /**
  * @constructor
  * @implements {WebInspector.ResourceDomainModelBinding}

Modified: trunk/Source/WebCore/inspector/front-end/_javascript_Source.js (116788 => 116789)


--- trunk/Source/WebCore/inspector/front-end/_javascript_Source.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/_javascript_Source.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -40,10 +40,6 @@
 {
     WebInspector.UISourceCode.call(this, id, url, contentProvider, sourceMapping);
 
-    /**
-     * @type {Array.<WebInspector.PresentationConsoleMessage>}
-     */
-    this._consoleMessages = [];
     this._formatterMapping = new WebInspector.IdentityFormatterSourceMapping();
     // FIXME: postpone breakpoints restore to after the mapping has been established.
     setTimeout(function() {
@@ -54,29 +50,6 @@
 
 WebInspector._javascript_Source.prototype = {
     /**
-     * @return {Array.<WebInspector.PresentationConsoleMessage>}
-     */
-    consoleMessages: function()
-    {
-        return this._consoleMessages;
-    },
-
-    /**
-     * @param {WebInspector.PresentationConsoleMessage} message
-     */
-    consoleMessageAdded: function(message)
-    {
-        this._consoleMessages.push(message);
-        this.dispatchEventToListeners(WebInspector.UISourceCode.Events.ConsoleMessageAdded, message);
-    },
-
-    consoleMessagesCleared: function()
-    {
-        this._consoleMessages = [];
-        this.dispatchEventToListeners(WebInspector.UISourceCode.Events.ConsoleMessagesCleared);
-    },
-
-    /**
      * @param {?string} content
      * @param {boolean} contentEncoded
      * @param {string} mimeType

Modified: trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js (116788 => 116789)


--- trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -59,6 +59,7 @@
 
     this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.ContentChanged, this._onContentChanged, this);
     this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.ConsoleMessageAdded, this._consoleMessageAdded, this);
+    this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.ConsoleMessageRemoved, this._consoleMessageRemoved, this);
     this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.ConsoleMessagesCleared, this._consoleMessagesCleared, this);
 }
 
@@ -142,7 +143,7 @@
             contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add conditional breakpoint…" : "Add Conditional Breakpoint…"), this._editBreakpointCondition.bind(this, lineNumber));
         } else {
             // This row has a breakpoint, we want to show edit and remove breakpoint, and either disable or enable.
-            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove breakpoint" : "Remove Breakpoint"), breakpoint.remove.bind(this));
+            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove breakpoint" : "Remove Breakpoint"), breakpoint.remove.bind(breakpoint));
             contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Edit breakpoint…" : "Edit Breakpoint…"), this._editBreakpointCondition.bind(this, lineNumber, breakpoint));
             if (breakpoint.enabled())
                 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Disable breakpoint" : "Disable Breakpoint"), breakpoint.setEnabled.bind(breakpoint, false));
@@ -520,11 +521,18 @@
 
     _consoleMessageAdded: function(event)
     {
-        var message = event.data;
+        var message = /** @type {WebInspector.PresentationConsoleMessage} */ event.data;
         if (this.loaded)
             this.addMessageToSource(message.lineNumber, message.originalMessage);
     },
 
+    _consoleMessageRemoved: function(event)
+    {
+        var message = /** @type {WebInspector.PresentationConsoleMessage} */ event.data;
+        if (this.loaded)
+            this.removeMessageFromSource(message.lineNumber, message.originalMessage);
+    },
+
     _consoleMessagesCleared: function(event)
     {
         this.clearMessages();
@@ -563,7 +571,8 @@
      */
     _continueToLine: function(lineNumber)
     {
-        this._model.continueToLine(this._uiSourceCode, lineNumber);
+        var rawLocation = this._uiSourceCode.uiLocationToRawLocation(lineNumber, 0);
+        WebInspector.debuggerModel.continueToLocation(rawLocation);
     },
 
     /**

Modified: trunk/Source/WebCore/inspector/front-end/SourceFrame.js (116788 => 116789)


--- trunk/Source/WebCore/inspector/front-end/SourceFrame.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/SourceFrame.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -473,6 +473,33 @@
         rowMessage.repeatCountElement.textContent = WebInspector.UIString(" (repeated %d times)", rowMessage.repeatCount);
     },
 
+    removeMessageFromSource: function(lineNumber, msg)
+    {
+        if (lineNumber >= this._textModel.linesCount)
+            lineNumber = this._textModel.linesCount - 1;
+        if (lineNumber < 0)
+            lineNumber = 0;
+
+        var rowMessages = this._rowMessages[lineNumber];
+        for (var i = 0; rowMessages && i < rowMessages.length; ++i) {
+            var rowMessage = rowMessages[i];
+            if (rowMessage.consoleMessage !== msg)
+                continue;
+
+            var messageLineElement = rowMessage.element;
+            var messageBubbleElement = messageLineElement.parentElement;
+            messageBubbleElement.removeChild(messageLineElement);
+            rowMessages.remove(rowMessage);
+            if (!rowMessages.length)
+                delete this._rowMessages[lineNumber];
+            if (!messageBubbleElement.childElementCount) {
+                this._textViewer.removeDecoration(lineNumber, messageBubbleElement);
+                delete this._messageBubbles[lineNumber];
+            }
+            break;
+        }
+    },
+
     populateLineGutterContextMenu: function(contextMenu, lineNumber)
     {
     },

Modified: trunk/Source/WebCore/inspector/front-end/UISourceCode.js (116788 => 116789)


--- trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2012-05-11 18:21:39 UTC (rev 116788)
+++ trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2012-05-11 18:31:41 UTC (rev 116789)
@@ -51,11 +51,16 @@
      */
     this._requestContentCallbacks = [];
     this._liveLocations = [];
+    /**
+     * @type {Array.<WebInspector.PresentationConsoleMessage>}
+     */
+    this._consoleMessages = [];
 }
 
 WebInspector.UISourceCode.Events = {
     ContentChanged: "ContentChanged",
     ConsoleMessageAdded: "ConsoleMessageAdded",
+    ConsoleMessageRemoved: "ConsoleMessageRemoved",
     ConsoleMessagesCleared: "ConsoleMessagesCleared"
 }
 
@@ -206,7 +211,34 @@
     /**
      * @return {Array.<WebInspector.PresentationConsoleMessage>}
      */
-    consoleMessages: function() {}
+    consoleMessages: function()
+    {
+        return this._consoleMessages;
+    },
+
+    /**
+     * @param {WebInspector.PresentationConsoleMessage} message
+     */
+    consoleMessageAdded: function(message)
+    {
+        this._consoleMessages.push(message);
+        this.dispatchEventToListeners(WebInspector.UISourceCode.Events.ConsoleMessageAdded, message);
+    },
+
+    /**
+     * @param {WebInspector.PresentationConsoleMessage} message
+     */
+    consoleMessageRemoved: function(message)
+    {
+        this._consoleMessages.remove(message);
+        this.dispatchEventToListeners(WebInspector.UISourceCode.Events.ConsoleMessageRemoved, message);
+    },
+
+    consoleMessagesCleared: function()
+    {
+        this._consoleMessages = [];
+        this.dispatchEventToListeners(WebInspector.UISourceCode.Events.ConsoleMessagesCleared);
+    }
 }
 
 WebInspector.UISourceCode.prototype.__proto__ = WebInspector.Object.prototype;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to