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;