Index: Source/devtools/front_end/bindings/PresentationConsoleMessageHelper.js |
diff --git a/Source/devtools/front_end/bindings/PresentationConsoleMessageHelper.js b/Source/devtools/front_end/bindings/PresentationConsoleMessageHelper.js |
index cb4e509a28fdde460c882c6aea37a6864c3177a7..5cbb1b412f7517ecd54430dc6024a2e52aa964eb 100644 |
--- a/Source/devtools/front_end/bindings/PresentationConsoleMessageHelper.js |
+++ b/Source/devtools/front_end/bindings/PresentationConsoleMessageHelper.js |
@@ -34,12 +34,19 @@ |
*/ |
WebInspector.PresentationConsoleMessageHelper = function(workspace) |
{ |
- /** |
- * @type {!Object.<string, !Array.<!WebInspector.ConsoleMessage>>} |
- */ |
+ this._workspace = workspace; |
+ |
+ /** @type {!Object.<string, !Array.<!WebInspector.ConsoleMessage>>} */ |
this._pendingConsoleMessages = {}; |
+ |
+ /** @type {!Array.<!WebInspector.PresentationConsoleMessage>} */ |
this._presentationConsoleMessages = []; |
- this._workspace = workspace; |
+ |
+ /** @type {!Map.<!WebInspector.UISourceCode, !Array.<!WebInspector.PresentationConsoleMessage>>} */ |
+ this._uiSourceCodeToMessages = new Map(); |
+ |
+ /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.Object>} */ |
+ this._uiSourceCodeToEventTarget = new Map(); |
apavlov
2014/08/17 21:32:05
This thing is never cleared.
vsevik
2014/08/18 05:53:07
It should be!
|
WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this); |
WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, this._onConsoleMessageAdded, this); |
@@ -49,8 +56,69 @@ WebInspector.PresentationConsoleMessageHelper = function(workspace) |
WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this); |
} |
+/** |
+ * @enum {string} |
+ */ |
+WebInspector.PresentationConsoleMessageHelper.Events = { |
+ ConsoleMessageAdded: "ConsoleMessageAdded", |
+ ConsoleMessageRemoved: "ConsoleMessageRemoved", |
+ ConsoleMessagesCleared: "ConsoleMessagesCleared", |
+} |
+ |
WebInspector.PresentationConsoleMessageHelper.prototype = { |
/** |
+ * @param {!WebInspector.PresentationConsoleMessageHelper.Events} eventType |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @param {function(!WebInspector.Event)} listener |
+ * @param {!Object=} thisObject |
+ */ |
+ addConsoleMessageEventListener: function(eventType, uiSourceCode, listener, thisObject) |
+ { |
+ var target = this._uiSourceCodeToEventTarget.get(uiSourceCode); |
+ if (!target) { |
+ target = new WebInspector.Object(); |
+ this._uiSourceCodeToEventTarget.put(uiSourceCode, target); |
+ } |
+ target.addEventListener(eventType, listener, thisObject); |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.PresentationConsoleMessageHelper.Events} eventType |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @param {function(!WebInspector.Event)} listener |
+ * @param {!Object=} thisObject |
+ */ |
+ removeConsoleMessageEventListener: function(eventType, uiSourceCode, listener, thisObject) |
+ { |
+ var target = this._uiSourceCodeToEventTarget.get(uiSourceCode); |
+ if (!target) |
+ return; |
+ target.removeEventListener(eventType, listener, thisObject); |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @return {!Array.<!WebInspector.PresentationConsoleMessage>} |
+ */ |
+ consoleMessages: function(uiSourceCode) |
+ { |
+ return this._uiSourceCodeToMessages.get(uiSourceCode) || []; |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.PresentationConsoleMessageHelper.Events} eventType |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ * @param {!WebInspector.PresentationConsoleMessage=} message |
+ */ |
+ _dispatchConsoleEvent: function(eventType, uiSourceCode, message) |
+ { |
+ var target = this._uiSourceCodeToEventTarget.get(uiSourceCode); |
+ if (!target) |
+ return; |
+ target.dispatchEventToListeners(eventType, message); |
+ }, |
+ |
+ /** |
* @param {!WebInspector.Event} event |
*/ |
_onConsoleMessageAdded: function(event) |
@@ -134,15 +202,44 @@ WebInspector.PresentationConsoleMessageHelper.prototype = { |
delete this._pendingConsoleMessages[script.sourceURL]; |
}, |
+ /** |
+ * @param {!WebInspector.PresentationConsoleMessage} message |
+ */ |
+ _presentationConsoleMessageAdded: function(message) |
+ { |
+ var uiSourceCode = message._uiLocation.uiSourceCode; |
+ var messages = this._uiSourceCodeToMessages.get(uiSourceCode); |
+ if (!messages) { |
+ messages = []; |
+ this._uiSourceCodeToMessages.put(uiSourceCode, messages); |
+ } |
+ messages.push(message); |
+ this._dispatchConsoleEvent(WebInspector.PresentationConsoleMessageHelper.Events.ConsoleMessageAdded, uiSourceCode, message); |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.PresentationConsoleMessage} message |
+ */ |
+ _presentationConsoleMessageRemoved: function(message) |
+ { |
+ var uiSourceCode = message._uiLocation.uiSourceCode; |
+ var messages = this._uiSourceCodeToMessages.get(uiSourceCode); |
+ if (!messages) |
+ return; |
+ messages.remove(message); |
+ this._dispatchConsoleEvent(WebInspector.PresentationConsoleMessageHelper.Events.ConsoleMessageRemoved, uiSourceCode, message); |
+ }, |
+ |
_consoleCleared: function() |
{ |
this._pendingConsoleMessages = {}; |
for (var i = 0; i < this._presentationConsoleMessages.length; ++i) |
this._presentationConsoleMessages[i].dispose(); |
this._presentationConsoleMessages = []; |
- var uiSourceCodes = this._workspace.uiSourceCodes(); |
- for (var i = 0; i < uiSourceCodes.length; ++i) |
- uiSourceCodes[i].consoleMessagesCleared(); |
+ var targets = this._uiSourceCodeToEventTarget.values(); |
+ for (var i = 0; i < targets.length; ++i) |
+ targets[i].dispatchEventToListeners(WebInspector.PresentationConsoleMessageHelper.Events.ConsoleMessagesCleared); |
+ this._uiSourceCodeToMessages.clear(); |
}, |
_debuggerReset: function() |
@@ -154,7 +251,6 @@ WebInspector.PresentationConsoleMessageHelper.prototype = { |
/** |
* @constructor |
- * @implements {WebInspector.PresentationMessage} |
* @param {!WebInspector.ConsoleMessage} message |
* @param {!WebInspector.DebuggerModel.Location} rawLocation |
*/ |
@@ -171,9 +267,9 @@ WebInspector.PresentationConsoleMessage.prototype = { |
_updateLocation: function(uiLocation) |
{ |
if (this._uiLocation) |
- this._uiLocation.uiSourceCode.consoleMessageRemoved(this); |
+ WebInspector.presentationConsoleMessageHelper._presentationConsoleMessageRemoved(this); |
this._uiLocation = uiLocation; |
- this._uiLocation.uiSourceCode.consoleMessageAdded(this); |
+ WebInspector.presentationConsoleMessageHelper._presentationConsoleMessageAdded(this); |
}, |
get lineNumber() |
@@ -186,3 +282,6 @@ WebInspector.PresentationConsoleMessage.prototype = { |
this._liveLocation.dispose(); |
} |
} |
+ |
+/** @type {!WebInspector.PresentationConsoleMessageHelper} */ |
+WebInspector.presentationConsoleMessageHelper; |