summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js')
-rw-r--r--chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js1089
1 files changed, 0 insertions, 1089 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js b/chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js
deleted file mode 100644
index 755c2e5d34b..00000000000
--- a/chromium/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js
+++ /dev/null
@@ -1,1089 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Joseph Pecoraro
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.ConsoleMessage}
- *
- * @param {string} source
- * @param {string} level
- * @param {string} message
- * @param {!WebInspector.Linkifier} linkifier
- * @param {string=} type
- * @param {string=} url
- * @param {number=} line
- * @param {number=} column
- * @param {number=} repeatCount
- * @param {!Array.<!RuntimeAgent.RemoteObject>=} parameters
- * @param {!ConsoleAgent.StackTrace=} stackTrace
- * @param {!NetworkAgent.RequestId=} requestId
- * @param {boolean=} isOutdated
- */
-WebInspector.ConsoleMessageImpl = function(source, level, message, linkifier, type, url, line, column, repeatCount, parameters, stackTrace, requestId, isOutdated)
-{
- WebInspector.ConsoleMessage.call(this, source, level, url, line, column, repeatCount);
-
- this._linkifier = linkifier;
- this.type = type || WebInspector.ConsoleMessage.MessageType.Log;
- this._messageText = message;
- this._parameters = parameters;
- this._stackTrace = stackTrace;
- this._request = requestId ? WebInspector.networkLog.requestForId(requestId) : null;
- this._isOutdated = isOutdated;
- /** @type {!Array.<!WebInspector.DataGrid>} */
- this._dataGrids = [];
- /** @type {!Map.<!WebInspector.DataGrid, ?Element>} */
- this._dataGridParents = new Map();
-
- this._customFormatters = {
- "object": this._formatParameterAsObject,
- "array": this._formatParameterAsArray,
- "node": this._formatParameterAsNode,
- "string": this._formatParameterAsString
- };
-}
-
-WebInspector.ConsoleMessageImpl.prototype = {
- wasShown: function()
- {
- for (var i = 0; this._dataGrids && i < this._dataGrids.length; ++i) {
- var dataGrid = this._dataGrids[i];
- var parentElement = this._dataGridParents.get(dataGrid) || null;
- dataGrid.show(parentElement);
- dataGrid.updateWidths();
- }
- },
-
- willHide: function()
- {
- for (var i = 0; this._dataGrids && i < this._dataGrids.length; ++i) {
- var dataGrid = this._dataGrids[i];
- this._dataGridParents.put(dataGrid, dataGrid.element.parentElement);
- dataGrid.detach();
- }
- },
-
- _formatMessage: function()
- {
- this._formattedMessage = document.createElement("span");
- this._formattedMessage.className = "console-message-text source-code";
-
- if (this.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
- switch (this.type) {
- case WebInspector.ConsoleMessage.MessageType.Trace:
- this._messageElement = this._format(this._parameters || ["console.trace()"]);
- break;
- case WebInspector.ConsoleMessage.MessageType.Clear:
- this._messageElement = document.createTextNode(WebInspector.UIString("Console was cleared"));
- this._formattedMessage.classList.add("console-info");
- break;
- case WebInspector.ConsoleMessage.MessageType.Assert:
- var args = [WebInspector.UIString("Assertion failed:")];
- if (this._parameters)
- args = args.concat(this._parameters);
- this._messageElement = this._format(args);
- break;
- case WebInspector.ConsoleMessage.MessageType.Dir:
- var obj = this._parameters ? this._parameters[0] : undefined;
- var args = ["%O", obj];
- this._messageElement = this._format(args);
- break;
- case WebInspector.ConsoleMessage.MessageType.Profile:
- this._messageElement = document.createTextNode(WebInspector.UIString("Profile '%s' started.", this._messageText));
- break;
- case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
- var hashIndex = this._messageText.lastIndexOf("#");
- var title = this._messageText.substring(0, hashIndex);
- var uid = this._messageText.substring(hashIndex + 1);
- var format = WebInspector.UIString("Profile '%s' finished.", "%_");
- var link = WebInspector.linkifyURLAsNode("webkit-profile://CPU/" + uid, title);
- this._messageElement = document.createElement("span");
- this._formatWithSubstitutionString(format, [link], this._messageElement);
- break;
- default:
- var args = this._parameters || [this._messageText];
- this._messageElement = this._format(args);
- }
- } else if (this.source === WebInspector.ConsoleMessage.MessageSource.Network) {
- if (this._request) {
- this._stackTrace = this._request.initiator.stackTrace;
- if (this._request.initiator && this._request.initiator.url) {
- this.url = this._request.initiator.url;
- this.line = this._request.initiator.lineNumber;
- }
- this._messageElement = document.createElement("span");
- if (this.level === WebInspector.ConsoleMessage.MessageLevel.Error) {
- this._messageElement.appendChild(document.createTextNode(this._request.requestMethod + " "));
- this._messageElement.appendChild(WebInspector.linkifyRequestAsNode(this._request));
- if (this._request.failed)
- this._messageElement.appendChild(document.createTextNode(" " + this._request.localizedFailDescription));
- else
- this._messageElement.appendChild(document.createTextNode(" " + this._request.statusCode + " (" + this._request.statusText + ")"));
- } else {
- var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier(this._messageText, WebInspector.linkifyRequestAsNode.bind(null, this._request));
- this._messageElement.appendChild(fragment);
- }
- } else {
- if (this.url) {
- var isExternal = !WebInspector.resourceForURL(this.url) && !WebInspector.workspace.uiSourceCodeForURL(this.url);
- this._anchorElement = WebInspector.linkifyURLAsNode(this.url, this.url, "console-message-url", isExternal);
- }
- this._messageElement = this._format([this._messageText]);
- }
- } else {
- var args = this._parameters || [this._messageText];
- this._messageElement = this._format(args);
- }
-
- if (this.source !== WebInspector.ConsoleMessage.MessageSource.Network || this._request) {
- if (this._stackTrace && this._stackTrace.length && this._stackTrace[0].scriptId) {
- this._anchorElement = this._linkifyCallFrame(this._stackTrace[0]);
- } else if (this.url && this.url !== "undefined") {
- this._anchorElement = this._linkifyLocation(this.url, this.line, this.column);
- }
- }
-
- this._formattedMessage.appendChild(this._messageElement);
- if (this._anchorElement) {
- this._formattedMessage.appendChild(document.createTextNode(" "));
- this._formattedMessage.appendChild(this._anchorElement);
- }
-
- var dumpStackTrace = !!this._stackTrace && this._stackTrace.length && (this.source === WebInspector.ConsoleMessage.MessageSource.Network || this.level === WebInspector.ConsoleMessage.MessageLevel.Error || this.type === WebInspector.ConsoleMessage.MessageType.Trace);
- if (dumpStackTrace) {
- var ol = document.createElement("ol");
- ol.className = "outline-disclosure";
- var treeOutline = new TreeOutline(ol);
-
- var content = this._formattedMessage;
- var root = new TreeElement(content, null, true);
- content.treeElementForTest = root;
- treeOutline.appendChild(root);
- if (this.type === WebInspector.ConsoleMessage.MessageType.Trace)
- root.expand();
-
- this._populateStackTraceTreeElement(root);
- this._formattedMessage = ol;
- }
-
- // This is used for inline message bubbles in SourceFrames, or other plain-text representations.
- this._message = this._messageElement.textContent;
- },
-
- /**
- * @return {string}
- */
- get message()
- {
- // force message formatting
- var formattedMessage = this.formattedMessage;
- return this._message;
- },
-
- /**
- * @return {!Element}
- */
- get formattedMessage()
- {
- if (!this._formattedMessage)
- this._formatMessage();
- return this._formattedMessage;
- },
-
- /**
- * @return {?WebInspector.NetworkRequest}
- */
- request: function()
- {
- return this._request;
- },
-
- /**
- * @param {string} url
- * @param {number} lineNumber
- * @param {number} columnNumber
- * @return {?Element}
- */
- _linkifyLocation: function(url, lineNumber, columnNumber)
- {
- // FIXME(62725): stack trace line/column numbers are one-based.
- lineNumber = lineNumber ? lineNumber - 1 : 0;
- columnNumber = columnNumber ? columnNumber - 1 : 0;
- if (this.source === WebInspector.ConsoleMessage.MessageSource.CSS) {
- var headerIds = WebInspector.cssModel.styleSheetIdsForURL(url);
- var cssLocation = new WebInspector.CSSLocation(url, lineNumber, columnNumber);
- return this._linkifier.linkifyCSSLocation(headerIds[0] || null, cssLocation, "console-message-url");
- }
-
- return this._linkifier.linkifyLocation(url, lineNumber, columnNumber, "console-message-url");
- },
-
- /**
- * @param {!ConsoleAgent.CallFrame} callFrame
- * @return {?Element}
- */
- _linkifyCallFrame: function(callFrame)
- {
- // FIXME(62725): stack trace line/column numbers are one-based.
- var lineNumber = callFrame.lineNumber ? callFrame.lineNumber - 1 : 0;
- var columnNumber = callFrame.columnNumber ? callFrame.columnNumber - 1 : 0;
- var rawLocation = new WebInspector.DebuggerModel.Location(callFrame.scriptId, lineNumber, columnNumber);
- return this._linkifier.linkifyRawLocation(rawLocation, "console-message-url");
- },
-
- /**
- * @return {boolean}
- */
- isErrorOrWarning: function()
- {
- return (this.level === WebInspector.ConsoleMessage.MessageLevel.Warning || this.level === WebInspector.ConsoleMessage.MessageLevel.Error);
- },
-
- _format: function(parameters)
- {
- // This node is used like a Builder. Values are continually appended onto it.
- var formattedResult = document.createElement("span");
- if (!parameters.length)
- return formattedResult;
-
- // Formatting code below assumes that parameters are all wrappers whereas frontend console
- // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here.
- for (var i = 0; i < parameters.length; ++i) {
- // FIXME: Only pass runtime wrappers here.
- if (parameters[i] instanceof WebInspector.RemoteObject)
- continue;
-
- if (typeof parameters[i] === "object")
- parameters[i] = WebInspector.RemoteObject.fromPayload(parameters[i]);
- else
- parameters[i] = WebInspector.RemoteObject.fromPrimitiveValue(parameters[i]);
- }
-
- // There can be string log and string eval result. We distinguish between them based on message type.
- var shouldFormatMessage = WebInspector.RemoteObject.type(parameters[0]) === "string" && this.type !== WebInspector.ConsoleMessage.MessageType.Result;
-
- // Multiple parameters with the first being a format string. Save unused substitutions.
- if (shouldFormatMessage) {
- // Multiple parameters with the first being a format string. Save unused substitutions.
- var result = this._formatWithSubstitutionString(parameters[0].description, parameters.slice(1), formattedResult);
- parameters = result.unusedSubstitutions;
- if (parameters.length)
- formattedResult.appendChild(document.createTextNode(" "));
- }
-
- if (this.type === WebInspector.ConsoleMessage.MessageType.Table) {
- formattedResult.appendChild(this._formatParameterAsTable(parameters));
- return formattedResult;
- }
-
- // Single parameter, or unused substitutions from above.
- for (var i = 0; i < parameters.length; ++i) {
- // Inline strings when formatting.
- if (shouldFormatMessage && parameters[i].type === "string")
- formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description));
- else
- formattedResult.appendChild(this._formatParameter(parameters[i], false, true));
- if (i < parameters.length - 1)
- formattedResult.appendChild(document.createTextNode(" "));
- }
- return formattedResult;
- },
-
- /**
- * @param {?Object} output
- * @param {boolean=} forceObjectFormat
- * @param {boolean=} includePreview
- * @return {!Element}
- */
- _formatParameter: function(output, forceObjectFormat, includePreview)
- {
- var type;
- if (forceObjectFormat)
- type = "object";
- else if (output instanceof WebInspector.RemoteObject)
- type = output.subtype || output.type;
- else
- type = typeof output;
-
- var formatter = this._customFormatters[type];
- if (!formatter) {
- formatter = this._formatParameterAsValue;
- output = output.description;
- }
-
- var span = document.createElement("span");
- span.className = "console-formatted-" + type + " source-code";
- formatter.call(this, output, span, includePreview);
- return span;
- },
-
- _formatParameterAsValue: function(val, elem)
- {
- elem.appendChild(document.createTextNode(val));
- },
-
- /**
- * @param {!WebInspector.RemoteObject} obj
- * @param {!Element} elem
- * @param {boolean} includePreview
- */
- _formatParameterAsObject: function(obj, elem, includePreview)
- {
- this._formatParameterAsArrayOrObject(obj, obj.description || "", elem, includePreview);
- },
-
- /**
- * @param {!WebInspector.RemoteObject} obj
- * @param {string} description
- * @param {!Element} elem
- * @param {boolean} includePreview
- */
- _formatParameterAsArrayOrObject: function(obj, description, elem, includePreview)
- {
- var titleElement = document.createElement("span");
- if (description)
- titleElement.createTextChild(description);
- if (includePreview && obj.preview) {
- titleElement.classList.add("console-object-preview");
- var lossless = this._appendObjectPreview(obj, description, titleElement);
- if (lossless) {
- elem.appendChild(titleElement);
- return;
- }
- }
- var section = new WebInspector.ObjectPropertiesSection(obj, titleElement);
- section.enableContextMenu();
- elem.appendChild(section.element);
-
- var note = section.titleElement.createChild("span", "object-info-state-note");
- note.title = WebInspector.UIString("Object state below is captured upon first expansion");
- },
-
- /**
- * @param {!WebInspector.RemoteObject} obj
- * @param {string} description
- * @param {!Element} titleElement
- * @return {boolean} true iff preview captured all information.
- */
- _appendObjectPreview: function(obj, description, titleElement)
- {
- var preview = obj.preview;
- var isArray = obj.subtype === "array";
-
- if (description)
- titleElement.createTextChild(" ");
- titleElement.createTextChild(isArray ? "[" : "{");
- for (var i = 0; i < preview.properties.length; ++i) {
- if (i > 0)
- titleElement.createTextChild(", ");
-
- var property = preview.properties[i];
- var name = property.name;
- if (!isArray || name != i) {
- if (/^\s|\s$|^$|\n/.test(name))
- name = "\"" + name.replace(/\n/g, "\u21B5") + "\"";
- titleElement.createChild("span", "name").textContent = name;
- titleElement.createTextChild(": ");
- }
-
- titleElement.appendChild(this._renderPropertyPreviewOrAccessor(obj, [property]));
- }
- if (preview.overflow)
- titleElement.createChild("span").textContent = "\u2026";
- titleElement.createTextChild(isArray ? "]" : "}");
- return preview.lossless;
- },
-
- /**
- * @param {!WebInspector.RemoteObject} object
- * @param {!Array.<!RuntimeAgent.PropertyPreview>} propertyPath
- * @return {!Element}
- */
- _renderPropertyPreviewOrAccessor: function(object, propertyPath)
- {
- var property = propertyPath.peekLast();
- if (property.type === "accessor")
- return this._formatAsAccessorProperty(object, propertyPath.select("name"), false);
- return this._renderPropertyPreview(property.type, /** @type {string} */ (property.subtype), property.value);
- },
-
- /**
- * @param {string} type
- * @param {string=} subtype
- * @param {string=} description
- * @return {!Element}
- */
- _renderPropertyPreview: function(type, subtype, description)
- {
- var span = document.createElement("span");
- span.className = "console-formatted-" + type;
-
- if (type === "function") {
- span.textContent = "function";
- return span;
- }
-
- if (type === "object" && subtype === "regexp") {
- span.classList.add("console-formatted-string");
- span.textContent = description;
- return span;
- }
-
- if (type === "object" && subtype === "node" && description) {
- span.classList.add("console-formatted-preview-node");
- WebInspector.DOMPresentationUtils.createSpansForNodeTitle(span, description);
- return span;
- }
-
- if (type === "string") {
- span.textContent = "\"" + description.replace(/\n/g, "\u21B5") + "\"";
- return span;
- }
-
- span.textContent = description;
- return span;
- },
-
- _formatParameterAsNode: function(object, elem)
- {
- /**
- * @param {!DOMAgent.NodeId} nodeId
- * @this {WebInspector.ConsoleMessageImpl}
- */
- function printNode(nodeId)
- {
- if (!nodeId) {
- // Sometimes DOM is loaded after the sync message is being formatted, so we get no
- // nodeId here. So we fall back to object formatting here.
- this._formatParameterAsObject(object, elem, false);
- return;
- }
- var treeOutline = new WebInspector.ElementsTreeOutline(false, false);
- treeOutline.setVisible(true);
- treeOutline.rootDOMNode = WebInspector.domAgent.nodeForId(nodeId);
- treeOutline.element.classList.add("outline-disclosure");
- if (!treeOutline.children[0].hasChildren)
- treeOutline.element.classList.add("single-node");
- elem.appendChild(treeOutline.element);
- treeOutline.element.treeElementForTest = treeOutline.children[0];
- }
- object.pushNodeToFrontend(printNode.bind(this));
- },
-
- /**
- * @param {!WebInspector.RemoteObject} array
- * @return {boolean}
- */
- useArrayPreviewInFormatter: function(array)
- {
- return this.type !== WebInspector.ConsoleMessage.MessageType.DirXML && !!array.preview;
- },
-
- /**
- * @param {!WebInspector.RemoteObject} array
- * @param {!Element} elem
- */
- _formatParameterAsArray: function(array, elem)
- {
- if (this.useArrayPreviewInFormatter(array)) {
- this._formatParameterAsArrayOrObject(array, "", elem, true);
- return;
- }
-
- const maxFlatArrayLength = 100;
- if (this._isOutdated || array.arrayLength() > maxFlatArrayLength)
- this._formatParameterAsObject(array, elem, false);
- else
- array.getOwnProperties(this._printArray.bind(this, array, elem));
- },
-
- /**
- * @param {!Array.<!WebInspector.RemoteObject>} parameters
- * @return {!Element}
- */
- _formatParameterAsTable: function(parameters)
- {
- var element = document.createElement("span");
- var table = parameters[0];
- if (!table || !table.preview)
- return element;
-
- var columnNames = [];
- var preview = table.preview;
- var rows = [];
- for (var i = 0; i < preview.properties.length; ++i) {
- var rowProperty = preview.properties[i];
- var rowPreview = rowProperty.valuePreview;
- if (!rowPreview)
- continue;
-
- var rowValue = {};
- const maxColumnsToRender = 20;
- for (var j = 0; j < rowPreview.properties.length; ++j) {
- var cellProperty = rowPreview.properties[j];
- var columnRendered = columnNames.indexOf(cellProperty.name) != -1;
- if (!columnRendered) {
- if (columnNames.length === maxColumnsToRender)
- continue;
- columnRendered = true;
- columnNames.push(cellProperty.name);
- }
-
- if (columnRendered) {
- var cellElement = this._renderPropertyPreviewOrAccessor(table, [rowProperty, cellProperty]);
- cellElement.classList.add("nowrap-below");
- rowValue[cellProperty.name] = cellElement;
- }
- }
- rows.push([rowProperty.name, rowValue]);
- }
-
- var flatValues = [];
- for (var i = 0; i < rows.length; ++i) {
- var rowName = rows[i][0];
- var rowValue = rows[i][1];
- flatValues.push(rowName);
- for (var j = 0; j < columnNames.length; ++j)
- flatValues.push(rowValue[columnNames[j]]);
- }
-
- if (!flatValues.length)
- return element;
- columnNames.unshift(WebInspector.UIString("(index)"));
- var dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, flatValues);
- dataGrid.renderInline();
- this._dataGrids.push(dataGrid);
- this._dataGridParents.put(dataGrid, element);
- return element;
- },
-
- _formatParameterAsString: function(output, elem)
- {
- var span = document.createElement("span");
- span.className = "console-formatted-string source-code";
- span.appendChild(WebInspector.linkifyStringAsFragment(output.description));
-
- // Make black quotes.
- elem.classList.remove("console-formatted-string");
- elem.appendChild(document.createTextNode("\""));
- elem.appendChild(span);
- elem.appendChild(document.createTextNode("\""));
- },
-
- /**
- * @param {!WebInspector.RemoteObject} array
- * @param {!Element} elem
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
- */
- _printArray: function(array, elem, properties)
- {
- if (!properties)
- return;
-
- var elements = [];
- for (var i = 0; i < properties.length; ++i) {
- var property = properties[i];
- var name = property.name;
- if (isNaN(name))
- continue;
- if (property.getter)
- elements[name] = this._formatAsAccessorProperty(array, [name], true);
- else if (property.value)
- elements[name] = this._formatAsArrayEntry(property.value);
- }
-
- elem.appendChild(document.createTextNode("["));
- var lastNonEmptyIndex = -1;
-
- function appendUndefined(elem, index)
- {
- if (index - lastNonEmptyIndex <= 1)
- return;
- var span = elem.createChild("span", "console-formatted-undefined");
- span.textContent = WebInspector.UIString("undefined × %d", index - lastNonEmptyIndex - 1);
- }
-
- var length = array.arrayLength();
- for (var i = 0; i < length; ++i) {
- var element = elements[i];
- if (!element)
- continue;
-
- if (i - lastNonEmptyIndex > 1) {
- appendUndefined(elem, i);
- elem.appendChild(document.createTextNode(", "));
- }
-
- elem.appendChild(element);
- lastNonEmptyIndex = i;
- if (i < length - 1)
- elem.appendChild(document.createTextNode(", "));
- }
- appendUndefined(elem, length);
-
- elem.appendChild(document.createTextNode("]"));
- },
-
- /**
- * @param {!WebInspector.RemoteObject} output
- * @return {!Element}
- */
- _formatAsArrayEntry: function(output)
- {
- // Prevent infinite expansion of cross-referencing arrays.
- return this._formatParameter(output, output.subtype === "array", false);
- },
-
- /**
- * @param {!WebInspector.RemoteObject} object
- * @param {!Array.<string>} propertyPath
- * @param {boolean} isArrayEntry
- * @return {!Element}
- */
- _formatAsAccessorProperty: function(object, propertyPath, isArrayEntry)
- {
- var rootElement = WebInspector.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan(object, propertyPath, onInvokeGetterClick.bind(this));
-
- /**
- * @param {?WebInspector.RemoteObject} result
- * @param {boolean=} wasThrown
- * @this {WebInspector.ConsoleMessageImpl}
- */
- function onInvokeGetterClick(result, wasThrown)
- {
- if (!result)
- return;
- rootElement.removeChildren();
- if (wasThrown) {
- var element = rootElement.createChild("span", "error-message");
- element.textContent = WebInspector.UIString("<exception>");
- element.title = result.description;
- } else if (isArrayEntry) {
- rootElement.appendChild(this._formatAsArrayEntry(result));
- } else {
- // Make a PropertyPreview from the RemoteObject similar to the backend logic.
- const maxLength = 100;
- var type = result.type;
- var subtype = result.subtype;
- var description = "";
- if (type !== "function" && result.description) {
- if (type === "string" || subtype === "regexp")
- description = result.description.trimMiddle(maxLength);
- else
- description = result.description.trimEnd(maxLength);
- }
- rootElement.appendChild(this._renderPropertyPreview(type, subtype, description));
- }
- }
-
- return rootElement;
- },
-
- /**
- * @param {string} format
- * @param {!Array.<string>} parameters
- * @param {!Element} formattedResult
- * @this {WebInspector.ConsoleMessageImpl}
- */
- _formatWithSubstitutionString: function(format, parameters, formattedResult)
- {
- var formatters = {};
-
- /**
- * @param {boolean} force
- * @param {!Object} obj
- * @return {!Element}
- * @this {WebInspector.ConsoleMessageImpl}
- */
- function parameterFormatter(force, obj)
- {
- return this._formatParameter(obj, force, false);
- }
-
- function stringFormatter(obj)
- {
- return obj.description;
- }
-
- function floatFormatter(obj)
- {
- if (typeof obj.value !== "number")
- return "NaN";
- return obj.value;
- }
-
- function integerFormatter(obj)
- {
- if (typeof obj.value !== "number")
- return "NaN";
- return Math.floor(obj.value);
- }
-
- function bypassFormatter(obj)
- {
- return (obj instanceof Node) ? obj : "";
- }
-
- var currentStyle = null;
- function styleFormatter(obj)
- {
- currentStyle = {};
- var buffer = document.createElement("span");
- buffer.setAttribute("style", obj.description);
- for (var i = 0; i < buffer.style.length; i++) {
- var property = buffer.style[i];
- if (isWhitelistedProperty(property))
- currentStyle[property] = buffer.style[property];
- }
- }
-
- function isWhitelistedProperty(property)
- {
- var prefixes = ["background", "border", "color", "font", "line", "margin", "padding", "text", "-webkit-background", "-webkit-border", "-webkit-font", "-webkit-margin", "-webkit-padding", "-webkit-text"];
- for (var i = 0; i < prefixes.length; i++) {
- if (property.startsWith(prefixes[i]))
- return true;
- }
- return false;
- }
-
- // Firebug uses %o for formatting objects.
- formatters.o = parameterFormatter.bind(this, false);
- formatters.s = stringFormatter;
- formatters.f = floatFormatter;
- // Firebug allows both %i and %d for formatting integers.
- formatters.i = integerFormatter;
- formatters.d = integerFormatter;
-
- // Firebug uses %c for styling the message.
- formatters.c = styleFormatter;
-
- // Support %O to force object formatting, instead of the type-based %o formatting.
- formatters.O = parameterFormatter.bind(this, true);
-
- formatters._ = bypassFormatter;
-
- function append(a, b)
- {
- if (b instanceof Node)
- a.appendChild(b);
- else if (typeof b !== "undefined") {
- var toAppend = WebInspector.linkifyStringAsFragment(String(b));
- if (currentStyle) {
- var wrapper = document.createElement('span');
- for (var key in currentStyle)
- wrapper.style[key] = currentStyle[key];
- wrapper.appendChild(toAppend);
- toAppend = wrapper;
- }
- a.appendChild(toAppend);
- }
- return a;
- }
-
- // String.format does treat formattedResult like a Builder, result is an object.
- return String.format(format, parameters, formatters, formattedResult, append);
- },
-
- clearHighlight: function()
- {
- if (!this._formattedMessage)
- return;
-
- var highlightedMessage = this._formattedMessage;
- delete this._formattedMessage;
- delete this._anchorElement;
- delete this._messageElement;
- this._formatMessage();
- this._element.replaceChild(this._formattedMessage, highlightedMessage);
- },
-
- highlightSearchResults: function(regexObject)
- {
- if (!this._formattedMessage)
- return;
-
- this._highlightSearchResultsInElement(regexObject, this._messageElement);
- if (this._anchorElement)
- this._highlightSearchResultsInElement(regexObject, this._anchorElement);
-
- this._element.scrollIntoViewIfNeeded();
- },
-
- _highlightSearchResultsInElement: function(regexObject, element)
- {
- regexObject.lastIndex = 0;
- var text = element.textContent;
- var match = regexObject.exec(text);
- var matchRanges = [];
- while (match) {
- matchRanges.push(new WebInspector.SourceRange(match.index, match[0].length));
- match = regexObject.exec(text);
- }
- WebInspector.highlightSearchResults(element, matchRanges);
- },
-
- matchesRegex: function(regexObject)
- {
- regexObject.lastIndex = 0;
- return regexObject.test(this.message) || (this._anchorElement && regexObject.test(this._anchorElement.textContent));
- },
-
- toMessageElement: function()
- {
- if (this._element)
- return this._element;
-
- var element = document.createElement("div");
- element.message = this;
- element.className = "console-message";
-
- this._element = element;
-
- switch (this.level) {
- case WebInspector.ConsoleMessage.MessageLevel.Log:
- element.classList.add("console-log-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Debug:
- element.classList.add("console-debug-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Warning:
- element.classList.add("console-warning-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Error:
- element.classList.add("console-error-level");
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Info:
- element.classList.add("console-info-level");
- break;
- }
-
- if (this.type === WebInspector.ConsoleMessage.MessageType.StartGroup || this.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed)
- element.classList.add("console-group-title");
-
- element.appendChild(this.formattedMessage);
-
- if (this.repeatCount > 1)
- this.updateRepeatCount();
-
- return element;
- },
-
- _populateStackTraceTreeElement: function(parentTreeElement)
- {
- for (var i = 0; i < this._stackTrace.length; i++) {
- var frame = this._stackTrace[i];
-
- var content = document.createElementWithClass("div", "stacktrace-entry");
- var messageTextElement = document.createElement("span");
- messageTextElement.className = "console-message-text source-code";
- var functionName = frame.functionName || WebInspector.UIString("(anonymous function)");
- messageTextElement.appendChild(document.createTextNode(functionName));
- content.appendChild(messageTextElement);
-
- if (frame.scriptId) {
- content.appendChild(document.createTextNode(" "));
- var urlElement = this._linkifyCallFrame(frame);
- if (!urlElement)
- continue;
- content.appendChild(urlElement);
- }
-
- var treeElement = new TreeElement(content);
- parentTreeElement.appendChild(treeElement);
- }
- },
-
- updateRepeatCount: function() {
- if (!this._element)
- return;
-
- if (!this.repeatCountElement) {
- this.repeatCountElement = document.createElement("span");
- this.repeatCountElement.className = "bubble";
-
- this._element.insertBefore(this.repeatCountElement, this._element.firstChild);
- this._element.classList.add("repeated-message");
- }
- this.repeatCountElement.textContent = this.repeatCount;
- },
-
- toString: function()
- {
- var sourceString;
- switch (this.source) {
- case WebInspector.ConsoleMessage.MessageSource.XML:
- sourceString = "XML";
- break;
- case WebInspector.ConsoleMessage.MessageSource.JS:
- sourceString = "JS";
- break;
- case WebInspector.ConsoleMessage.MessageSource.Network:
- sourceString = "Network";
- break;
- case WebInspector.ConsoleMessage.MessageSource.ConsoleAPI:
- sourceString = "ConsoleAPI";
- break;
- case WebInspector.ConsoleMessage.MessageSource.Storage:
- sourceString = "Storage";
- break;
- case WebInspector.ConsoleMessage.MessageSource.AppCache:
- sourceString = "AppCache";
- break;
- case WebInspector.ConsoleMessage.MessageSource.Rendering:
- sourceString = "Rendering";
- break;
- case WebInspector.ConsoleMessage.MessageSource.CSS:
- sourceString = "CSS";
- break;
- case WebInspector.ConsoleMessage.MessageSource.Security:
- sourceString = "Security";
- break;
- case WebInspector.ConsoleMessage.MessageSource.Other:
- sourceString = "Other";
- break;
- }
-
- var typeString;
- switch (this.type) {
- case WebInspector.ConsoleMessage.MessageType.Log:
- typeString = "Log";
- break;
- case WebInspector.ConsoleMessage.MessageType.Dir:
- typeString = "Dir";
- break;
- case WebInspector.ConsoleMessage.MessageType.DirXML:
- typeString = "Dir XML";
- break;
- case WebInspector.ConsoleMessage.MessageType.Trace:
- typeString = "Trace";
- break;
- case WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed:
- case WebInspector.ConsoleMessage.MessageType.StartGroup:
- typeString = "Start Group";
- break;
- case WebInspector.ConsoleMessage.MessageType.EndGroup:
- typeString = "End Group";
- break;
- case WebInspector.ConsoleMessage.MessageType.Assert:
- typeString = "Assert";
- break;
- case WebInspector.ConsoleMessage.MessageType.Result:
- typeString = "Result";
- break;
- case WebInspector.ConsoleMessage.MessageType.Profile:
- case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
- typeString = "Profiling";
- break;
- }
-
- var levelString;
- switch (this.level) {
- case WebInspector.ConsoleMessage.MessageLevel.Log:
- levelString = "Log";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Warning:
- levelString = "Warning";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Debug:
- levelString = "Debug";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Error:
- levelString = "Error";
- break;
- case WebInspector.ConsoleMessage.MessageLevel.Info:
- levelString = "Info";
- break;
- }
-
- return sourceString + " " + typeString + " " + levelString + ": " + this.formattedMessage.textContent + "\n" + this.url + " line " + this.line;
- },
-
- get text()
- {
- return this._messageText;
- },
-
- /**
- * @return {?WebInspector.DebuggerModel.Location}
- */
- location: function()
- {
- // FIXME(62725): stack trace line/column numbers are one-based.
- var lineNumber = this.stackTrace ? this.stackTrace[0].lineNumber - 1 : this.line - 1;
- var columnNumber = this.stackTrace && this.stackTrace[0].columnNumber ? this.stackTrace[0].columnNumber - 1 : 0;
- return WebInspector.debuggerModel.createRawLocationByURL(this.url, lineNumber, columnNumber);
- },
-
- isEqual: function(msg)
- {
- if (!msg)
- return false;
-
- if (this._stackTrace) {
- if (!msg._stackTrace)
- return false;
- var l = this._stackTrace;
- var r = msg._stackTrace;
- if (l.length !== r.length)
- return false;
- for (var i = 0; i < l.length; i++) {
- if (l[i].url !== r[i].url ||
- l[i].functionName !== r[i].functionName ||
- l[i].lineNumber !== r[i].lineNumber ||
- l[i].columnNumber !== r[i].columnNumber)
- return false;
- }
- }
-
- return (this.source === msg.source)
- && (this.type === msg.type)
- && (this.level === msg.level)
- && (this.line === msg.line)
- && (this.url === msg.url)
- && (this.message === msg.message)
- && (this._request === msg._request);
- },
-
- get stackTrace()
- {
- return this._stackTrace;
- },
-
- /**
- * @return {!WebInspector.ConsoleMessage}
- */
- clone: function()
- {
- return WebInspector.ConsoleMessage.create(this.source, this.level, this._messageText, this.type, this.url, this.line, this.column, this.repeatCount, this._parameters, this._stackTrace, this._request ? this._request.requestId : undefined, this._isOutdated);
- },
-
- __proto__: WebInspector.ConsoleMessage.prototype
-}