Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: Source/devtools/front_end/sdk/PresentationConsoleMessageHelper.js

Issue 471433004: DevTools: Split out the "workspace" and "bindings" modules from "sdk" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove marker interfaces and WI.SourceMapping Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 /**
32 * @constructor
33 * @param {!WebInspector.Workspace} workspace
34 */
35 WebInspector.PresentationConsoleMessageHelper = function(workspace)
36 {
37 /**
38 * @type {!Object.<string, !Array.<!WebInspector.ConsoleMessage>>}
39 */
40 this._pendingConsoleMessages = {};
41 this._presentationConsoleMessages = [];
42 this._workspace = workspace;
43
44 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleMo del.Events.ConsoleCleared, this._consoleCleared, this);
45 WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleMo del.Events.MessageAdded, this._onConsoleMessageAdded, this);
46 WebInspector.multitargetConsoleModel.messages().forEach(this._consoleMessage Added, this);
47 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this );
48 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSourc e, this);
49 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
50 }
51
52 WebInspector.PresentationConsoleMessageHelper.prototype = {
53 /**
54 * @param {!WebInspector.Event} event
55 */
56 _onConsoleMessageAdded: function(event)
57 {
58 var message = /** @type {!WebInspector.ConsoleMessage} */ (event.data);
59 this._consoleMessageAdded(message)
60 },
61
62 /**
63 * @param {!WebInspector.ConsoleMessage} message
64 */
65 _consoleMessageAdded: function(message)
66 {
67 if (!message.url || !message.isErrorOrWarning())
68 return;
69
70 var rawLocation = this._rawLocation(message);
71 if (rawLocation)
72 this._addConsoleMessageToScript(message, rawLocation);
73 else
74 this._addPendingConsoleMessage(message);
75 },
76
77 /**
78 * @param {!WebInspector.ConsoleMessage} message
79 * @return {?WebInspector.DebuggerModel.Location}
80 */
81 _rawLocation: function(message)
82 {
83 // FIXME(62725): stack trace line/column numbers are one-based.
84 var lineNumber = message.stackTrace ? message.stackTrace[0].lineNumber - 1 : message.line - 1;
85 var columnNumber = message.stackTrace && message.stackTrace[0].columnNum ber ? message.stackTrace[0].columnNumber - 1 : 0;
86 return message.target().debuggerModel.createRawLocationByURL(message.url || "", lineNumber, columnNumber);
87 },
88
89 /**
90 * @param {!WebInspector.ConsoleMessage} message
91 * @param {!WebInspector.DebuggerModel.Location} rawLocation
92 */
93 _addConsoleMessageToScript: function(message, rawLocation)
94 {
95 this._presentationConsoleMessages.push(new WebInspector.PresentationCons oleMessage(message, rawLocation));
96 },
97
98 /**
99 * @param {!WebInspector.ConsoleMessage} message
100 */
101 _addPendingConsoleMessage: function(message)
102 {
103 if (!message.url)
104 return;
105 if (!this._pendingConsoleMessages[message.url])
106 this._pendingConsoleMessages[message.url] = [];
107 this._pendingConsoleMessages[message.url].push(message);
108 },
109
110 /**
111 * @param {!WebInspector.Event} event
112 */
113 _parsedScriptSource: function(event)
114 {
115 var script = /** @type {!WebInspector.Script} */ (event.data);
116
117 var messages = this._pendingConsoleMessages[script.sourceURL];
118 if (!messages)
119 return;
120
121 var pendingMessages = [];
122 for (var i = 0; i < messages.length; i++) {
123 var message = messages[i];
124 var rawLocation = this._rawLocation(message);
125 if (script.target() === message.target() && script.scriptId === rawL ocation.scriptId)
126 this._addConsoleMessageToScript(message, rawLocation);
127 else
128 pendingMessages.push(message);
129 }
130
131 if (pendingMessages.length)
132 this._pendingConsoleMessages[script.sourceURL] = pendingMessages;
133 else
134 delete this._pendingConsoleMessages[script.sourceURL];
135 },
136
137 _consoleCleared: function()
138 {
139 this._pendingConsoleMessages = {};
140 for (var i = 0; i < this._presentationConsoleMessages.length; ++i)
141 this._presentationConsoleMessages[i].dispose();
142 this._presentationConsoleMessages = [];
143 var uiSourceCodes = this._workspace.uiSourceCodes();
144 for (var i = 0; i < uiSourceCodes.length; ++i)
145 uiSourceCodes[i].consoleMessagesCleared();
146 },
147
148 _debuggerReset: function()
149 {
150 this._pendingConsoleMessages = {};
151 this._presentationConsoleMessages = [];
152 }
153 }
154
155 /**
156 * @constructor
157 * @param {!WebInspector.ConsoleMessage} message
158 * @param {!WebInspector.DebuggerModel.Location} rawLocation
159 */
160 WebInspector.PresentationConsoleMessage = function(message, rawLocation)
161 {
162 this.originalMessage = message;
163 this._liveLocation = WebInspector.debuggerWorkspaceBinding.createLiveLocatio n(rawLocation, this._updateLocation.bind(this));
164 }
165
166 WebInspector.PresentationConsoleMessage.prototype = {
167 /**
168 * @param {!WebInspector.UILocation} uiLocation
169 */
170 _updateLocation: function(uiLocation)
171 {
172 if (this._uiLocation)
173 this._uiLocation.uiSourceCode.consoleMessageRemoved(this);
174 this._uiLocation = uiLocation;
175 this._uiLocation.uiSourceCode.consoleMessageAdded(this);
176 },
177
178 get lineNumber()
179 {
180 return this._uiLocation.lineNumber;
181 },
182
183 dispose: function()
184 {
185 this._liveLocation.dispose();
186 }
187 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/sdk/NetworkWorkspaceBinding.js ('k') | Source/devtools/front_end/sdk/Resource.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698