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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js

Issue 2383293002: DevTools: ConsoleViewMessage rewrite signatures to isolate formatting functions (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 28 matching lines...) Expand all
39 { 39 {
40 this._message = consoleMessage; 40 this._message = consoleMessage;
41 this._linkifier = linkifier; 41 this._linkifier = linkifier;
42 this._repeatCount = 1; 42 this._repeatCount = 1;
43 this._closeGroupDecorationCount = 0; 43 this._closeGroupDecorationCount = 0;
44 this._nestingLevel = nestingLevel; 44 this._nestingLevel = nestingLevel;
45 45
46 /** @type {?WebInspector.DataGrid} */ 46 /** @type {?WebInspector.DataGrid} */
47 this._dataGrid = null; 47 this._dataGrid = null;
48 48
49 /** @type {!Object.<string, function(!WebInspector.RemoteObject, !Element, b oolean=)>} */ 49 /** @type {!Object.<string, function(!WebInspector.ConsoleViewMessage.Format terOptions)>} */
50 this._customFormatters = { 50 this._customFormatters = {
51 "array": this._formatParameterAsArray, 51 "array": this._formatParameterAsArray,
52 "typedarray": this._formatParameterAsArray, 52 "typedarray": this._formatParameterAsArray,
53 "error": this._formatParameterAsError, 53 "error": this._formatParameterAsError,
54 "function": this._formatParameterAsFunction, 54 "function": this._formatParameterAsFunction,
55 "generator": this._formatParameterAsObject, 55 "generator": this._formatParameterAsObject,
56 "iterator": this._formatParameterAsObject, 56 "iterator": this._formatParameterAsObject,
57 "map": this._formatParameterAsObject, 57 "map": this._formatParameterAsObject,
58 "node": this._formatParameterAsNode, 58 "node": this._formatParameterAsNode,
59 "object": this._formatParameterAsObject, 59 "object": this._formatParameterAsObject,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 * @param {!WebInspector.ConsoleMessage} consoleMessage 141 * @param {!WebInspector.ConsoleMessage} consoleMessage
142 * @return {!Element} 142 * @return {!Element}
143 */ 143 */
144 _formatMessageAsTable: function(consoleMessage) 144 _formatMessageAsTable: function(consoleMessage)
145 { 145 {
146 var formattedResult = createElement("span"); 146 var formattedResult = createElement("span");
147 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null; 147 var table = consoleMessage.parameters && consoleMessage.parameters.lengt h ? consoleMessage.parameters[0] : null;
148 if (table) 148 if (table)
149 table = this._parameterToRemoteObject(table, this._target()); 149 table = this._parameterToRemoteObject(table, this._target());
150 if (!table || !table.preview) 150 if (!table || !table.preview)
151 return this._buildMessageAnchor(formattedResult, consoleMessage); 151 return this._buildMessageAnchor(formattedResult, consoleMessage, thi s._linkifier);
152 152
153 var columnNames = []; 153 var columnNames = [];
154 var preview = table.preview; 154 var preview = table.preview;
155 var rows = []; 155 var rows = [];
156 for (var i = 0; i < preview.properties.length; ++i) { 156 for (var i = 0; i < preview.properties.length; ++i) {
157 var rowProperty = preview.properties[i]; 157 var rowProperty = preview.properties[i];
158 var rowPreview = rowProperty.valuePreview; 158 var rowPreview = rowProperty.valuePreview;
159 if (!rowPreview) 159 if (!rowPreview)
160 continue; 160 continue;
161 161
(...skipping 26 matching lines...) Expand all
188 for (var j = 0; j < columnNames.length; ++j) 188 for (var j = 0; j < columnNames.length; ++j)
189 flatValues.push(rowValue[columnNames[j]]); 189 flatValues.push(rowValue[columnNames[j]]);
190 } 190 }
191 columnNames.unshift(WebInspector.UIString("(index)")); 191 columnNames.unshift(WebInspector.UIString("(index)"));
192 192
193 if (flatValues.length) { 193 if (flatValues.length) {
194 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues); 194 this._dataGrid = WebInspector.SortableDataGrid.create(columnNames, f latValues);
195 195
196 var tableElement = formattedResult.createChild("div", "console-messa ge-formatted-table"); 196 var tableElement = formattedResult.createChild("div", "console-messa ge-formatted-table");
197 var dataGridContainer = tableElement.createChild("span"); 197 var dataGridContainer = tableElement.createChild("span");
198 tableElement.appendChild(this._formatParameter(table, true, false)); 198 tableElement.appendChild(this._formatParameter(consoleMessage, this. _linkifier, table, true, false));
199 this._dataGrid.renderInline(); 199 this._dataGrid.renderInline();
200 dataGridContainer.appendChild(this._dataGrid.element); 200 dataGridContainer.appendChild(this._dataGrid.element);
201 return this._buildMessageAnchor(formattedResult, consoleMessage); 201 return this._buildMessageAnchor(formattedResult, consoleMessage, thi s._linkifier);
202 } 202 }
203 return this._buildMessageAnchor(formattedResult, consoleMessage); 203 return this._buildMessageAnchor(formattedResult, consoleMessage, this._l inkifier);
204 }, 204 },
205 205
206 /** 206 /**
207 * @param {!WebInspector.ConsoleMessage} consoleMessage 207 * @param {!WebInspector.ConsoleMessage} consoleMessage
208 * @param {!WebInspector.Linkifier} linkifier
208 * @return {!Element} 209 * @return {!Element}
209 */ 210 */
210 _buildMessage: function(consoleMessage) 211 _buildMessage: function(consoleMessage, linkifier)
211 { 212 {
212 var messageElement; 213 var messageElement;
213 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) { 214 if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource. ConsoleAPI) {
214 switch (consoleMessage.type) { 215 switch (consoleMessage.type) {
215 case WebInspector.ConsoleMessage.MessageType.Trace: 216 case WebInspector.ConsoleMessage.MessageType.Trace:
216 messageElement = this._format(consoleMessage.parameters || ["con sole.trace"]); 217 messageElement = this._format(consoleMessage, linkifier, console Message.parameters || ["console.trace"]);
217 break; 218 break;
218 case WebInspector.ConsoleMessage.MessageType.Clear: 219 case WebInspector.ConsoleMessage.MessageType.Clear:
219 messageElement = createElementWithClass("span", "console-info"); 220 messageElement = createElementWithClass("span", "console-info");
220 messageElement.textContent = WebInspector.UIString("Console was cleared"); 221 messageElement.textContent = WebInspector.UIString("Console was cleared");
221 break; 222 break;
222 case WebInspector.ConsoleMessage.MessageType.Assert: 223 case WebInspector.ConsoleMessage.MessageType.Assert:
223 var args = [WebInspector.UIString("Assertion failed:")]; 224 var args = [WebInspector.UIString("Assertion failed:")];
224 if (consoleMessage.parameters) 225 if (consoleMessage.parameters)
225 args = args.concat(consoleMessage.parameters); 226 args = args.concat(consoleMessage.parameters);
226 messageElement = this._format(args); 227 messageElement = this._format(consoleMessage, linkifier, args);
227 break; 228 break;
228 case WebInspector.ConsoleMessage.MessageType.Dir: 229 case WebInspector.ConsoleMessage.MessageType.Dir:
229 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined; 230 var obj = consoleMessage.parameters ? consoleMessage.parameters[ 0] : undefined;
230 var args = ["%O", obj]; 231 var args = ["%O", obj];
231 messageElement = this._format(args); 232 messageElement = this._format(consoleMessage, linkifier, args);
232 break; 233 break;
233 case WebInspector.ConsoleMessage.MessageType.Profile: 234 case WebInspector.ConsoleMessage.MessageType.Profile:
234 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: 235 case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
235 messageElement = this._format([consoleMessage.messageText]); 236 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]);
236 break; 237 break;
237 default: 238 default:
238 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string") 239 if (consoleMessage.parameters && consoleMessage.parameters.lengt h === 1 && consoleMessage.parameters[0].type === "string")
239 messageElement = this._tryFormatAsError(/** @type {string} * /(consoleMessage.parameters[0].value)); 240 messageElement = this._tryFormatAsError(consoleMessage.targe t(), linkifier, /** @type {string} */(consoleMessage.parameters[0].value));
240 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; 241 var args = consoleMessage.parameters || [consoleMessage.messageT ext];
241 messageElement = messageElement || this._format(args); 242 messageElement = messageElement || this._format(consoleMessage, linkifier, args);
242 } 243 }
243 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) { 244 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Message Source.Network) {
244 if (consoleMessage.request) { 245 if (consoleMessage.request) {
245 messageElement = createElement("span"); 246 messageElement = createElement("span");
246 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) { 247 if (consoleMessage.level === WebInspector.ConsoleMessage.Message Level.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel .RevokedError) {
247 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " "); 248 messageElement.createTextChildren(consoleMessage.request.req uestMethod, " ");
248 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url)); 249 messageElement.appendChild(WebInspector.Linkifier.linkifyUsi ngRevealer(consoleMessage.request, consoleMessage.request.url, consoleMessage.re quest.url));
249 if (consoleMessage.request.failed) 250 if (consoleMessage.request.failed)
250 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription); 251 messageElement.createTextChildren(" ", consoleMessage.re quest.localizedFailDescription);
251 else 252 else
252 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")"); 253 messageElement.createTextChildren(" ", String(consoleMes sage.request.statusCode), " (", consoleMessage.request.statusText, ")");
253 } else { 254 } else {
254 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage)); 255 var fragment = WebInspector.linkifyStringAsFragmentWithCusto mLinkifier(consoleMessage.messageText, linkifyRequest.bind(consoleMessage));
255 messageElement.appendChild(fragment); 256 messageElement.appendChild(fragment);
256 } 257 }
257 } else { 258 } else {
258 messageElement = this._format([consoleMessage.messageText]); 259 messageElement = this._format(consoleMessage, linkifier, [consol eMessage.messageText]);
259 } 260 }
260 } else { 261 } else {
261 var args = consoleMessage.parameters || [consoleMessage.messageText] ; 262 var args = consoleMessage.parameters || [consoleMessage.messageText] ;
262 messageElement = this._format(args); 263 messageElement = this._format(consoleMessage, linkifier, args);
263 } 264 }
264 265
265 var formattedMessage = this._buildMessageAnchor(messageElement, consoleM essage); 266 var formattedMessage = this._buildMessageAnchor(messageElement, consoleM essage, linkifier);
266 if (!!consoleMessage.stackTrace && (consoleMessage.source === WebInspect or.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector .ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.Cons oleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.Con soleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMe ssage.MessageLevel.Warning)) 267 if (!!consoleMessage.stackTrace && (consoleMessage.source === WebInspect or.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector .ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.Cons oleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.Con soleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMe ssage.MessageLevel.Warning))
267 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, this._linkifier); 268 formattedMessage = this._buildMessageStackTrace(formattedMessage, co nsoleMessage, linkifier);
268 return formattedMessage; 269 return formattedMessage;
269 270
270 /** 271 /**
271 * @param {string} title 272 * @param {string} title
272 * @return {!Element} 273 * @return {!Element}
273 * @this {WebInspector.ConsoleMessage} 274 * @this {WebInspector.ConsoleMessage}
274 */ 275 */
275 function linkifyRequest(title) 276 function linkifyRequest(title)
276 { 277 {
277 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url); 278 return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebIn spector.NetworkRequest} */ (this.request), title, this.request.url);
278 } 279 }
279 }, 280 },
280 281
281 /** 282 /**
282 * @param {!Element} contents 283 * @param {!Element} contents
283 * @param {!WebInspector.ConsoleMessage} consoleMessage 284 * @param {!WebInspector.ConsoleMessage} consoleMessage
285 * @param {!WebInspector.Linkifier} linkifier
284 * @return {!Element} 286 * @return {!Element}
285 */ 287 */
286 _buildMessageAnchor: function(contents, consoleMessage) 288 _buildMessageAnchor: function(contents, consoleMessage, linkifier)
287 { 289 {
288 var anchorElement = null; 290 var anchorElement = null;
289 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { 291 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) {
290 if (consoleMessage.scriptId) { 292 if (consoleMessage.scriptId)
291 anchorElement = this._linkifyScriptId(consoleMessage.scriptId, c onsoleMessage.url || "", consoleMessage.line, consoleMessage.column); 293 anchorElement = this._linkifyScriptId(linkifier, consoleMessage) ;
292 } else { 294 else if (consoleMessage.stackTrace && consoleMessage.stackTrace.call Frames.length)
293 if (consoleMessage.stackTrace && consoleMessage.stackTrace.callF rames.length) 295 anchorElement = this._linkifyStackTraceTopFrame(linkifier, conso leMessage);
294 anchorElement = this._linkifyStackTraceTopFrame(consoleMessa ge.stackTrace); 296 else if (consoleMessage.url && consoleMessage.url !== "undefined")
295 else if (consoleMessage.url && consoleMessage.url !== "undefined ") 297 anchorElement = this._linkifyLocation(linkifier, consoleMessage) ;
296 anchorElement = this._linkifyLocation(consoleMessage.url, co nsoleMessage.line, consoleMessage.column);
297 }
298 } else if (consoleMessage.url) { 298 } else if (consoleMessage.url) {
299 var url = consoleMessage.url; 299 var url = consoleMessage.url;
300 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url); 300 var isExternal = !WebInspector.resourceForURL(url) && !WebInspector. networkMapping.uiSourceCodeForURLForAnyTarget(url);
301 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal); 301 anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-mes sage-url", isExternal);
302 } 302 }
303 303
304 var formattedMessage = createElement("span"); 304 var formattedMessage = createElement("span");
305 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ; 305 WebInspector.appendStyle(formattedMessage, "components/objectValue.css") ;
306 formattedMessage.className = "console-message-text source-code"; 306 formattedMessage.className = "console-message-text source-code";
307 307
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 clickableElement.addEventListener("click", toggleStackTrace, false); 360 clickableElement.addEventListener("click", toggleStackTrace, false);
361 triangleElement.addEventListener("click", toggleStackTrace, false); 361 triangleElement.addEventListener("click", toggleStackTrace, false);
362 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e) 362 if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trac e)
363 expandStackTrace(true); 363 expandStackTrace(true);
364 364
365 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e); 365 toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, tru e);
366 return toggleElement; 366 return toggleElement;
367 }, 367 },
368 368
369 /** 369 /**
370 * @param {string} url 370 * @param {!WebInspector.Linkifier} linkifier
371 * @param {number} lineNumber 371 * @param {!WebInspector.ConsoleMessage} consoleMessage
372 * @param {number} columnNumber
373 * @return {?Element} 372 * @return {?Element}
374 */ 373 */
375 _linkifyLocation: function(url, lineNumber, columnNumber) 374 _linkifyLocation: function(linkifier, consoleMessage)
376 { 375 {
377 var target = this._target(); 376 var target = consoleMessage.target();
378 if (!target) 377 if (!target)
379 return null; 378 return null;
380 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url"); 379 return linkifier.linkifyScriptLocation(target, null, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-message-url");
381 }, 380 },
382 381
383 /** 382 /**
384 * @param {!RuntimeAgent.StackTrace} stackTrace 383 * @param {!WebInspector.Linkifier} linkifier
384 * @param {!WebInspector.ConsoleMessage} consoleMessage
385 * @return {?Element} 385 * @return {?Element}
386 */ 386 */
387 _linkifyStackTraceTopFrame: function(stackTrace) 387 _linkifyStackTraceTopFrame: function(linkifier, consoleMessage)
388 { 388 {
389 var target = this._target(); 389 var target = consoleMessage.target();
390 if (!target) 390 if (!target)
391 return null; 391 return null;
392 return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, "co nsole-message-url"); 392 return linkifier.linkifyStackTraceTopFrame(target, /** @type {!RuntimeAg ent.StackTrace} **/ (consoleMessage.stackTrace), "console-message-url");
393 }, 393 },
394 394
395 /** 395 /**
396 * @param {string} scriptId 396 * @param {!WebInspector.Linkifier} linkifier
397 * @param {string} url 397 * @param {!WebInspector.ConsoleMessage} consoleMessage
398 * @param {number} lineNumber
399 * @param {number} columnNumber
400 * @return {?Element} 398 * @return {?Element}
401 */ 399 */
402 _linkifyScriptId: function(scriptId, url, lineNumber, columnNumber) 400 _linkifyScriptId: function(linkifier, consoleMessage)
403 { 401 {
404 var target = this._target(); 402 var target = consoleMessage.target();
405 if (!target) 403 if (!target)
406 return null; 404 return null;
407 return this._linkifier.linkifyScriptLocation(target, scriptId, url, line Number, columnNumber, "console-message-url"); 405 return linkifier.linkifyScriptLocation(target, consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-m essage-url");
408 }, 406 },
409 407
410 /** 408 /**
411 * @param {!WebInspector.RemoteObject|!Object|string} parameter 409 * @param {!WebInspector.RemoteObject|!Object|string} parameter
412 * @param {?WebInspector.Target} target 410 * @param {?WebInspector.Target} target
413 * @return {!WebInspector.RemoteObject} 411 * @return {!WebInspector.RemoteObject}
414 */ 412 */
415 _parameterToRemoteObject: function(parameter, target) 413 _parameterToRemoteObject: function(parameter, target)
416 { 414 {
417 if (parameter instanceof WebInspector.RemoteObject) 415 if (parameter instanceof WebInspector.RemoteObject)
418 return parameter; 416 return parameter;
419 if (!target) 417 if (!target)
420 return WebInspector.RemoteObject.fromLocalObject(parameter); 418 return WebInspector.RemoteObject.fromLocalObject(parameter);
421 if (typeof parameter === "object") 419 if (typeof parameter === "object")
422 return target.runtimeModel.createRemoteObject(parameter); 420 return target.runtimeModel.createRemoteObject(parameter);
423 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r); 421 return target.runtimeModel.createRemoteObjectFromPrimitiveValue(paramete r);
424 }, 422 },
425 423
426 /** 424 /**
425 * @param {!WebInspector.ConsoleMessage} consoleMessage
426 * @param {!WebInspector.Linkifier} linkifier
427 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters 427 * @param {!Array.<!WebInspector.RemoteObject|string>} parameters
428 * @return {!Element} 428 * @return {!Element}
429 */ 429 */
430 _format: function(parameters) 430 _format: function(consoleMessage, linkifier, parameters)
431 { 431 {
432 // This node is used like a Builder. Values are continually appended ont o it. 432 // This node is used like a Builder. Values are continually appended ont o it.
433 var formattedResult = createElement("span"); 433 var formattedResult = createElement("span");
434 if (!parameters.length) 434 if (!parameters.length)
435 return formattedResult; 435 return formattedResult;
436 436
437 // Formatting code below assumes that parameters are all wrappers wherea s frontend console 437 // Formatting code below assumes that parameters are all wrappers wherea s frontend console
438 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. 438 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here.
439 // FIXME: Only pass runtime wrappers here. 439 // FIXME: Only pass runtime wrappers here.
440 for (var i = 0; i < parameters.length; ++i) 440 for (var i = 0; i < parameters.length; ++i)
441 parameters[i] = this._parameterToRemoteObject(parameters[i], this._t arget()); 441 parameters[i] = this._parameterToRemoteObject(parameters[i], console Message.target());
442 442
443 // There can be string log and string eval result. We distinguish betwee n them based on message type. 443 // There can be string log and string eval result. We distinguish betwee n them based on message type.
444 var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Ar ray.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (this._m essage.type !== WebInspector.ConsoleMessage.MessageType.Result || this._message. level === WebInspector.ConsoleMessage.MessageLevel.Error || this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError); 444 var messageType = consoleMessage.type;
445 var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Ar ray.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (message Type !== WebInspector.ConsoleMessage.MessageType.Result || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === W ebInspector.ConsoleMessage.MessageLevel.RevokedError);
445 446
446 // Multiple parameters with the first being a format string. Save unused substitutions. 447 // Multiple parameters with the first being a format string. Save unused substitutions.
447 if (shouldFormatMessage) { 448 if (shouldFormatMessage) {
448 var result = this._formatWithSubstitutionString(/** @type {string} * */ (parameters[0].description), parameters.slice(1), formattedResult); 449 var result = this._formatWithSubstitutionString(consoleMessage, link ifier, /** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult);
449 parameters = result.unusedSubstitutions; 450 parameters = result.unusedSubstitutions;
450 if (parameters.length) 451 if (parameters.length)
451 formattedResult.createTextChild(" "); 452 formattedResult.createTextChild(" ");
452 } 453 }
453 454
454 // Single parameter, or unused substitutions from above. 455 // Single parameter, or unused substitutions from above.
455 for (var i = 0; i < parameters.length; ++i) { 456 for (var i = 0; i < parameters.length; ++i) {
456 // Inline strings when formatting. 457 // Inline strings when formatting.
457 if (shouldFormatMessage && parameters[i].type === "string") 458 if (shouldFormatMessage && parameters[i].type === "string")
458 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description)); 459 formattedResult.appendChild(WebInspector.linkifyStringAsFragment (parameters[i].description));
459 else 460 else
460 formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); 461 formattedResult.appendChild(this._formatParameter(consoleMessage , linkifier, parameters[i], false, true));
461 if (i < parameters.length - 1) 462 if (i < parameters.length - 1)
462 formattedResult.createTextChild(" "); 463 formattedResult.createTextChild(" ");
463 } 464 }
464 return formattedResult; 465 return formattedResult;
465 }, 466 },
466 467
467 /** 468 /**
469 * @param {!WebInspector.ConsoleMessage} consoleMessage
470 * @param {!WebInspector.Linkifier} linkifier
468 * @param {!WebInspector.RemoteObject} output 471 * @param {!WebInspector.RemoteObject} output
469 * @param {boolean=} forceObjectFormat 472 * @param {boolean=} forceObjectFormat
470 * @param {boolean=} includePreview 473 * @param {boolean=} includePreview
471 * @return {!Element} 474 * @return {!Element}
472 */ 475 */
473 _formatParameter: function(output, forceObjectFormat, includePreview) 476 _formatParameter: function(consoleMessage, linkifier, output, forceObjectFor mat, includePreview)
474 { 477 {
475 if (output.customPreview()) { 478 if (output.customPreview())
476 return (new WebInspector.CustomPreviewComponent(output)).element; 479 return (new WebInspector.CustomPreviewComponent(output)).element;
477 }
478 480
479 var type = forceObjectFormat ? "object" : (output.subtype || output.type ); 481 var type = forceObjectFormat ? "object" : (output.subtype || output.type );
480 var formatter = this._customFormatters[type] || this._formatParameterAsV alue; 482 var formatter = this._customFormatters[type] || this._formatParameterAsV alue;
481 var span = createElement("span"); 483 var span = createElement("span");
482 span.className = "object-value-" + type + " source-code"; 484 span.className = "object-value-" + type + " source-code";
483 formatter.call(this, output, span, includePreview); 485 formatter.call(this, {
486 object: output,
487 element: span,
488 includePreview: includePreview,
489 linkifier: linkifier,
490 consoleMessage: consoleMessage
491 });
484 return span; 492 return span;
485 }, 493 },
486 494
487 /** 495 /**
488 * @param {!WebInspector.RemoteObject} obj 496 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
489 * @param {!Element} elem
490 */ 497 */
491 _formatParameterAsValue: function(obj, elem) 498 _formatParameterAsValue: function(options)
492 { 499 {
500 var elem = options.element;
501 var obj = options.object;
493 elem.createTextChild(obj.description || ""); 502 elem.createTextChild(obj.description || "");
494 if (obj.objectId) 503 if (obj.objectId)
495 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false); 504 elem.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this, obj), false);
496 }, 505 },
497 506
498 /** 507 /**
499 * @param {!WebInspector.RemoteObject} obj 508 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
500 * @param {!Element} elem
501 * @param {boolean=} includePreview
502 */ 509 */
503 _formatParameterAsObject: function(obj, elem, includePreview) 510 _formatParameterAsObject: function(options)
504 { 511 {
505 this._formatParameterAsArrayOrObject(obj, elem, includePreview); 512 var obj = options.object;
506 }, 513 var elem = options.element;
507
508 /**
509 * @param {!WebInspector.RemoteObject} obj
510 * @param {!Element} elem
511 * @param {boolean=} includePreview
512 */
513 _formatParameterAsArrayOrObject: function(obj, elem, includePreview)
514 {
515 var titleElement = createElement("span"); 514 var titleElement = createElement("span");
516 if (includePreview && obj.preview) { 515 if (options.includePreview && obj.preview) {
517 titleElement.classList.add("console-object-preview"); 516 titleElement.classList.add("console-object-preview");
518 this._previewFormatter.appendObjectPreview(titleElement, obj.preview ); 517 this._previewFormatter.appendObjectPreview(titleElement, obj.preview );
519 } else { 518 } else {
520 if (obj.type === "function") { 519 if (obj.type === "function") {
521 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false); 520 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(obj, titleElement, false);
522 titleElement.classList.add("object-value-function"); 521 titleElement.classList.add("object-value-function");
523 } else { 522 } else {
524 titleElement.createTextChild(obj.description || ""); 523 titleElement.createTextChild(obj.description || "");
525 } 524 }
526 } 525 }
527 526
528 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , this._linkifier); 527 var section = new WebInspector.ObjectPropertiesSection(obj, titleElement , options.linkifier);
529 section.element.classList.add("console-view-object-properties-section"); 528 section.element.classList.add("console-view-object-properties-section");
530 section.enableContextMenu(); 529 section.enableContextMenu();
531 elem.appendChild(section.element); 530 elem.appendChild(section.element);
532 }, 531 },
533 532
534 /** 533 /**
535 * @param {!WebInspector.RemoteObject} func 534 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
536 * @param {!Element} element
537 * @param {boolean=} includePreview
538 */ 535 */
539 _formatParameterAsFunction: function(func, element, includePreview) 536 _formatParameterAsFunction: function(options)
540 { 537 {
538 var func = options.object;
539 var element = options.element;
540 var includePreview = options.includePreview;
541 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this)); 541 WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then (formatTargetFunction.bind(this));
542 542
543 /** 543 /**
544 * @param {!WebInspector.RemoteObject} targetFunction 544 * @param {!WebInspector.RemoteObject} targetFunction
545 * @this {WebInspector.ConsoleViewMessage} 545 * @this {WebInspector.ConsoleViewMessage}
546 */ 546 */
547 function formatTargetFunction(targetFunction) 547 function formatTargetFunction(targetFunction)
548 { 548 {
549 var functionElement = createElement("span"); 549 var functionElement = createElement("span");
550 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview); 550 WebInspector.ObjectPropertiesSection.formatObjectAsFunction(targetFu nction, functionElement, true, includePreview);
(...skipping 24 matching lines...) Expand all
575 */ 575 */
576 _renderPropertyPreviewOrAccessor: function(object, propertyPath) 576 _renderPropertyPreviewOrAccessor: function(object, propertyPath)
577 { 577 {
578 var property = propertyPath.peekLast(); 578 var property = propertyPath.peekLast();
579 if (property.type === "accessor") 579 if (property.type === "accessor")
580 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false); 580 return this._formatAsAccessorProperty(object, propertyPath.map(prope rty => property.name), false);
581 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value); 581 return this._previewFormatter.renderPropertyPreview(property.type, /** @ type {string} */ (property.subtype), property.value);
582 }, 582 },
583 583
584 /** 584 /**
585 * @param {!WebInspector.RemoteObject} object 585 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
586 * @param {!Element} elem
587 */ 586 */
588 _formatParameterAsNode: function(object, elem) 587 _formatParameterAsNode: function(options)
589 { 588 {
589 var object = options.object;
590 var elem = options.element;
591 var linkifier = options.linkifier;
590 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(thi s), failedToRender.bind(this)); 592 WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(thi s), failedToRender.bind(this));
591 /** 593 /**
592 * @param {!Element} rendererElement 594 * @param {!Element} rendererElement
593 * @this {WebInspector.ConsoleViewMessage} 595 * @this {WebInspector.ConsoleViewMessage}
594 */ 596 */
595 function appendRenderer(rendererElement) 597 function appendRenderer(rendererElement)
596 { 598 {
597 elem.appendChild(rendererElement); 599 elem.appendChild(rendererElement);
598 this._formattedParameterAsNodeForTest(); 600 this._formattedParameterAsNodeForTest();
599 } 601 }
600 602
601 /** 603 /**
602 * @this {WebInspector.ConsoleViewMessage} 604 * @this {WebInspector.ConsoleViewMessage}
603 */ 605 */
604 function failedToRender() 606 function failedToRender()
605 { 607 {
606 this._formatParameterAsObject(object, elem, false); 608 this._formatParameterAsObject({
609 object: object,
610 element: elem,
611 includePreview: false,
612 linkifier: linkifier
613 });
607 } 614 }
608 }, 615 },
609 616
610 _formattedParameterAsNodeForTest: function() 617 _formattedParameterAsNodeForTest: function()
611 { 618 {
612 }, 619 },
613 620
614 /** 621 /**
615 * @return {boolean} 622 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
616 */ 623 */
617 _usePrintedArrayFormatter: function() 624 _formatParameterAsArray: function(options)
618 { 625 {
619 return this._message.type !== WebInspector.ConsoleMessage.MessageType.Di rXML && this._message.type !== WebInspector.ConsoleMessage.MessageType.Result; 626 var array = options.object;
627 var elem = options.element;
628 var linkifier = options.linkifier;
629 var messageType = options.consoleMessage.type;
630 var usePrintedArrayFormat = messageType !== WebInspector.ConsoleMessage. MessageType.DirXML && messageType !== WebInspector.ConsoleMessage.MessageType.Re sult;
631 var maxFlatArrayLength = 100;
632 if (usePrintedArrayFormat || array.arrayLength() > maxFlatArrayLength)
633 this._formatParameterAsObject({
634 object: array,
635 element: elem,
636 includePreview: usePrintedArrayFormat || array.arrayLength() <= maxFlatArrayLength,
637 linkifier: linkifier
638 });
639 else
640 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem, linkifier));
620 }, 641 },
621 642
622 /** 643 /**
623 * @param {!WebInspector.RemoteObject} array 644 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
624 * @param {!Element} elem
625 */ 645 */
626 _formatParameterAsArray: function(array, elem) 646 _formatParameterAsString: function(options)
627 {
628 var maxFlatArrayLength = 100;
629 if (this._usePrintedArrayFormatter() || array.arrayLength() > maxFlatArr ayLength)
630 this._formatParameterAsArrayOrObject(array, elem, this._usePrintedAr rayFormatter() || array.arrayLength() <= maxFlatArrayLength);
631 else
632 array.getAllProperties(false, this._printArrayResult.bind(this, arra y, elem));
633 },
634
635 /**
636 * @param {!WebInspector.RemoteObject} output
637 * @param {!Element} elem
638 */
639 _formatParameterAsString: function(output, elem)
640 { 647 {
641 var span = createElement("span"); 648 var span = createElement("span");
642 span.className = "object-value-string source-code"; 649 span.className = "object-value-string source-code";
643 span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); 650 span.appendChild(WebInspector.linkifyStringAsFragment(options.object.des cription || ""));
644 651
645 // Make black quotes. 652 // Make black quotes.
653 var elem = options.element;
646 elem.classList.remove("object-value-string"); 654 elem.classList.remove("object-value-string");
647 elem.createTextChild("\""); 655 elem.createTextChild("\"");
648 elem.appendChild(span); 656 elem.appendChild(span);
649 elem.createTextChild("\""); 657 elem.createTextChild("\"");
650 }, 658 },
651 659
652 /** 660 /**
653 * @param {!WebInspector.RemoteObject} output 661 * @param {!WebInspector.ConsoleViewMessage.FormatterOptions} options
654 * @param {!Element} elem
655 */ 662 */
656 _formatParameterAsError: function(output, elem) 663 _formatParameterAsError: function(options)
657 { 664 {
658 var span = elem.createChild("span", "object-value-error source-code"); 665 var obj = options.object;
659 var errorSpan = this._tryFormatAsError(output.description || ""); 666 var span = options.element.createChild("span", "object-value-error sourc e-code");
660 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(output.description || "")); 667 var errorSpan = this._tryFormatAsError(options.consoleMessage.target(), options.linkifier, obj.description || "");
668 span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFra gment(obj.description || ""));
661 }, 669 },
662 670
663 /** 671 /**
664 * @param {!WebInspector.RemoteObject} array 672 * @param {!WebInspector.RemoteObject} array
665 * @param {!Element} elem 673 * @param {!Element} elem
674 * @param {!WebInspector.Linkifier} linkifier
666 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties 675 * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
667 */ 676 */
668 _printArrayResult: function(array, elem, properties) 677 _printArrayResult: function(array, elem, linkifier, properties)
669 { 678 {
670 if (!properties) { 679 if (!properties) {
671 this._formatParameterAsObject(array, elem, false); 680 this._formatParameterAsObject({
681 object: array,
682 element: elem,
683 includePreview: false,
684 linkifier: linkifier
685 });
672 return; 686 return;
673 } 687 }
674 688
675 var titleElement = createElement("span"); 689 var titleElement = createElement("span");
676 var elements = {}; 690 var elements = {};
677 for (var i = 0; i < properties.length; ++i) { 691 for (var i = 0; i < properties.length; ++i) {
678 var property = properties[i]; 692 var property = properties[i];
679 var name = property.name; 693 var name = property.name;
680 if (isNaN(name)) 694 if (isNaN(name))
681 continue; 695 continue;
(...skipping 27 matching lines...) Expand all
709 723
710 titleElement.appendChild(element); 724 titleElement.appendChild(element);
711 lastNonEmptyIndex = i; 725 lastNonEmptyIndex = i;
712 if (i < length - 1) 726 if (i < length - 1)
713 titleElement.createTextChild(", "); 727 titleElement.createTextChild(", ");
714 } 728 }
715 appendUndefined(titleElement, length); 729 appendUndefined(titleElement, length);
716 730
717 titleElement.createTextChild("]"); 731 titleElement.createTextChild("]");
718 732
719 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, this._linkifier); 733 var section = new WebInspector.ObjectPropertiesSection(array, titleEleme nt, linkifier);
720 section.element.classList.add("console-view-object-properties-section"); 734 section.element.classList.add("console-view-object-properties-section");
721 section.enableContextMenu(); 735 section.enableContextMenu();
722 elem.appendChild(section.element); 736 elem.appendChild(section.element);
723 }, 737 },
724 738
725 /** 739 /**
726 * @param {!WebInspector.RemoteObject} output 740 * @param {!WebInspector.RemoteObject} output
727 * @return {!Element} 741 * @return {!Element}
728 */ 742 */
729 _formatAsArrayEntry: function(output) 743 _formatAsArrayEntry: function(output)
730 { 744 {
731 if (this._message.type === WebInspector.ConsoleMessage.MessageType.DirXM L) { 745 // // TODO(luoe): This condition won't be here after rebase with master VV
732 // Prevent infinite expansion of cross-referencing arrays. 746 // if (this._message.type === WebInspector.ConsoleMessage.MessageType.Di rXML) {
733 return this._formatParameter(output, output.subtype === "array" || o utput.subtype === "typedarray", false); 747 // // Prevent infinite expansion of cross-referencing arrays.
734 } 748 // return this._formatParameter(output, output.subtype === "array" | | output.subtype === "typedarray", false);
749 // }
735 return this._previewFormatter.renderPropertyPreview(output.type, output. subtype, output.description); 750 return this._previewFormatter.renderPropertyPreview(output.type, output. subtype, output.description);
736 }, 751 },
737 752
738 /** 753 /**
739 * @param {?WebInspector.RemoteObject} object 754 * @param {?WebInspector.RemoteObject} object
740 * @param {!Array.<string>} propertyPath 755 * @param {!Array.<string>} propertyPath
741 * @param {boolean} isArrayEntry 756 * @param {boolean} isArrayEntry
742 * @return {!Element} 757 * @return {!Element}
743 */ 758 */
744 _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry) 759 _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry)
(...skipping 29 matching lines...) Expand all
774 description = result.description.trimEnd(maxLength); 789 description = result.description.trimEnd(maxLength);
775 } 790 }
776 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description)); 791 rootElement.appendChild(this._previewFormatter.renderPropertyPre view(type, subtype, description));
777 } 792 }
778 } 793 }
779 794
780 return rootElement; 795 return rootElement;
781 }, 796 },
782 797
783 /** 798 /**
799 * @param {!WebInspector.ConsoleMessage} consoleMessage
800 * @param {!WebInspector.Linkifier} linkifier
784 * @param {string} format 801 * @param {string} format
785 * @param {!Array.<!WebInspector.RemoteObject>} parameters 802 * @param {!Array.<!WebInspector.RemoteObject>} parameters
786 * @param {!Element} formattedResult 803 * @param {!Element} formattedResult
787 */ 804 */
788 _formatWithSubstitutionString: function(format, parameters, formattedResult) 805 _formatWithSubstitutionString: function(consoleMessage, linkifier, format, p arameters, formattedResult)
789 { 806 {
790 var formatters = {}; 807 var formatters = {};
791 808
792 /** 809 /**
810 * @param {!WebInspector.RemoteObject} obj
793 * @param {boolean} force 811 * @param {boolean} force
794 * @param {!WebInspector.RemoteObject} obj
795 * @return {!Element} 812 * @return {!Element}
796 * @this {WebInspector.ConsoleViewMessage} 813 * @this {WebInspector.ConsoleViewMessage}
797 */ 814 */
798 function parameterFormatter(force, obj) 815 function parameterFormatter(force, obj)
799 { 816 {
800 return this._formatParameter(obj, force, false); 817 return this._formatParameter(consoleMessage, linkifier, obj, force, false);
801 } 818 }
802 819
803 function stringFormatter(obj) 820 function stringFormatter(obj)
804 { 821 {
805 return obj.description; 822 return obj.description;
806 } 823 }
807 824
808 function floatFormatter(obj) 825 function floatFormatter(obj)
809 { 826 {
810 if (typeof obj.value !== "number") 827 if (typeof obj.value !== "number")
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 985
969 var contentElement = createElementWithClass("div", "console-message"); 986 var contentElement = createElementWithClass("div", "console-message");
970 this._contentElement = contentElement; 987 this._contentElement = contentElement;
971 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed) 988 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Start Group || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGro upCollapsed)
972 contentElement.classList.add("console-group-title"); 989 contentElement.classList.add("console-group-title");
973 990
974 var formattedMessage; 991 var formattedMessage;
975 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table ) 992 if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table )
976 formattedMessage = this._formatMessageAsTable(this._message); 993 formattedMessage = this._formatMessageAsTable(this._message);
977 else 994 else
978 formattedMessage = this._buildMessage(this._message); 995 formattedMessage = this._buildMessage(this._message, this._linkifier );
979 contentElement.appendChild(formattedMessage); 996 contentElement.appendChild(formattedMessage);
980 997
981 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get()); 998 this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnable d").get());
982 return this._contentElement; 999 return this._contentElement;
983 }, 1000 },
984 1001
985 /** 1002 /**
986 * @return {!Element} 1003 * @return {!Element}
987 */ 1004 */
988 toMessageElement: function() 1005 toMessageElement: function()
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 1149
1133 /** 1150 /**
1134 * @return {!Element} 1151 * @return {!Element}
1135 */ 1152 */
1136 searchHighlightNode: function(index) 1153 searchHighlightNode: function(index)
1137 { 1154 {
1138 return this._searchHighlightNodes[index]; 1155 return this._searchHighlightNodes[index];
1139 }, 1156 },
1140 1157
1141 /** 1158 /**
1159 * @param {?WebInspector.Target} target
1160 * @param {!WebInspector.Linkifier} linkifier
1142 * @param {string} string 1161 * @param {string} string
1143 * @return {?Element} 1162 * @return {?Element}
1144 */ 1163 */
1145 _tryFormatAsError: function(string) 1164 _tryFormatAsError: function(target, linkifier, string)
1146 { 1165 {
1147 /** 1166 /**
1148 * @param {string} prefix 1167 * @param {string} prefix
1149 */ 1168 */
1150 function startsWith(prefix) 1169 function startsWith(prefix)
1151 { 1170 {
1152 return string.startsWith(prefix); 1171 return string.startsWith(prefix);
1153 } 1172 }
1154 1173
1155 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"]; 1174 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"];
1156 var target = this._target();
1157 if (!target || !errorPrefixes.some(startsWith)) 1175 if (!target || !errorPrefixes.some(startsWith))
1158 return null; 1176 return null;
1159 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); 1177 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target);
1160 if (!debuggerModel) 1178 if (!debuggerModel)
1161 return null; 1179 return null;
1162 1180
1163 var lines = string.split("\n"); 1181 var lines = string.split("\n");
1164 var links = []; 1182 var links = [];
1165 var position = 0; 1183 var position = 0;
1166 for (var i = 0; i < lines.length; ++i) { 1184 for (var i = 0; i < lines.length; ++i) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult. columnNumber}); 1219 links.push({url: url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult. columnNumber});
1202 } 1220 }
1203 1221
1204 if (!links.length) 1222 if (!links.length)
1205 return null; 1223 return null;
1206 1224
1207 var formattedResult = createElement("span"); 1225 var formattedResult = createElement("span");
1208 var start = 0; 1226 var start = 0;
1209 for (var i = 0; i < links.length; ++i) { 1227 for (var i = 0; i < links.length; ++i) {
1210 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start, links[i].positionLeft))); 1228 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start, links[i].positionLeft)));
1211 formattedResult.appendChild(this._linkifier.linkifyScriptLocation(ta rget, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); 1229 formattedResult.appendChild(linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber));
1212 start = links[i].positionRight; 1230 start = links[i].positionRight;
1213 } 1231 }
1214 1232
1215 if (start !== string.length) 1233 if (start !== string.length)
1216 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start))); 1234 formattedResult.appendChild(WebInspector.linkifyStringAsFragment(str ing.substring(start)));
1217 1235
1218 return formattedResult; 1236 return formattedResult;
1219 } 1237 }
1220 } 1238 }
1221 1239
1222 /** 1240 /**
1241 * @typedef {{
1242 * object: (!WebInspector.RemoteObject),
1243 * element: (!Element),
1244 * linkifier: (!WebInspector.Linkifier),
1245 * includePreview: (boolean|undefined),
1246 * consoleMessage: (!WebInspector.ConsoleMessage|undefined)
1247 * }}
1248 **/
lushnikov 2016/09/30 21:56:46 let's not create an options object; instead, let's
luoe 2016/10/01 01:10:52 Done.
1249 WebInspector.ConsoleViewMessage.FormatterOptions;
1250
1251 /**
1223 * @constructor 1252 * @constructor
1224 * @extends {WebInspector.ConsoleViewMessage} 1253 * @extends {WebInspector.ConsoleViewMessage}
1225 * @param {!WebInspector.ConsoleMessage} consoleMessage 1254 * @param {!WebInspector.ConsoleMessage} consoleMessage
1226 * @param {!WebInspector.Linkifier} linkifier 1255 * @param {!WebInspector.Linkifier} linkifier
1227 * @param {number} nestingLevel 1256 * @param {number} nestingLevel
1228 */ 1257 */
1229 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel) 1258 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel)
1230 { 1259 {
1231 console.assert(consoleMessage.isGroupStartMessage()); 1260 console.assert(consoleMessage.isGroupStartMessage());
1232 WebInspector.ConsoleViewMessage.call(this, consoleMessage, linkifier, nestin gLevel); 1261 WebInspector.ConsoleViewMessage.call(this, consoleMessage, linkifier, nestin gLevel);
(...skipping 27 matching lines...) Expand all
1260 { 1289 {
1261 if (!this._element) { 1290 if (!this._element) {
1262 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); 1291 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this );
1263 this._element.classList.toggle("collapsed", this._collapsed); 1292 this._element.classList.toggle("collapsed", this._collapsed);
1264 } 1293 }
1265 return this._element; 1294 return this._element;
1266 }, 1295 },
1267 1296
1268 __proto__: WebInspector.ConsoleViewMessage.prototype 1297 __proto__: WebInspector.ConsoleViewMessage.prototype
1269 } 1298 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698