Index: third_party/WebKit/Source/devtools/front_end/promises/PromisePane.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/promises/PromisePane.js b/third_party/WebKit/Source/devtools/front_end/promises/PromisePane.js |
deleted file mode 100644 |
index 24381fe2a6d5bbd6dbc0a05ca56df1dbed7167c5..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/devtools/front_end/promises/PromisePane.js |
+++ /dev/null |
@@ -1,791 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- * @implements {WebInspector.TargetManager.Observer} |
- */ |
-WebInspector.PromisePane = function() |
-{ |
- WebInspector.VBox.call(this); |
- this.registerRequiredCSS("promises/promisePane.css"); |
- this.element.classList.add("promises"); |
- |
- var toolbar = new WebInspector.Toolbar("", this.element); |
- this._recordButton = new WebInspector.ToolbarToggle("", "record-toolbar-item"); |
- this._recordButton.addEventListener("click", this._recordButtonClicked.bind(this)); |
- toolbar.appendToolbarItem(this._recordButton); |
- |
- var clearButton = new WebInspector.ToolbarButton(WebInspector.UIString("Clear"), "clear-toolbar-item"); |
- clearButton.addEventListener("click", this._clearButtonClicked.bind(this)); |
- toolbar.appendToolbarItem(clearButton); |
- toolbar.appendSeparator(); |
- |
- this._promiseStatusFiltersSetting = WebInspector.settings.createSetting("promiseStatusFilters", {}); |
- this._hideCollectedPromisesSetting = WebInspector.settings.createSetting("hideCollectedPromises", false); |
- |
- this._createFilterBar(); |
- toolbar.appendToolbarItem(this._filterBar.filterButton()); |
- |
- var garbageCollectButton = new WebInspector.ToolbarButton(WebInspector.UIString("Collect garbage"), "garbage-collect-toolbar-item"); |
- garbageCollectButton.addEventListener("click", this._garbageCollectButtonClicked, this); |
- toolbar.appendToolbarItem(garbageCollectButton); |
- |
- toolbar.appendSeparator(); |
- var asyncCheckbox = new WebInspector.ToolbarCheckbox(WebInspector.UIString("Async"), WebInspector.UIString("Capture async stack traces"), WebInspector.moduleSetting("enableAsyncStackTraces")); |
- toolbar.appendToolbarItem(asyncCheckbox); |
- |
- this._filterBar.show(this.element); |
- |
- this._hiddenByFilterCount = 0; |
- this._filterStatusMessageElement = this.element.createChild("div", "promises-filter-status hidden"); |
- this._filterStatusTextElement = this._filterStatusMessageElement.createChild("span"); |
- this._filterStatusMessageElement.createTextChild(" "); |
- var resetFiltersLink = this._filterStatusMessageElement.createChild("span", "link"); |
- resetFiltersLink.textContent = WebInspector.UIString("Show all promises."); |
- resetFiltersLink.addEventListener("click", this._resetFilters.bind(this), true); |
- |
- // FIXME: Make "status" column width fixed to ~16px. |
- var columns = [ |
- { id: "status", weight: 1 }, |
- { id: "function", title: WebInspector.UIString("Function"), disclosure: true, weight: 10 }, |
- { id: "created", title: WebInspector.UIString("Created"), weight: 10 }, |
- { id: "settled", title: WebInspector.UIString("Settled"), weight: 10 }, |
- { id: "tts", title: WebInspector.UIString("Time to settle"), weight: 10 } |
- ]; |
- this._dataGrid = new WebInspector.ViewportDataGrid(columns, undefined, undefined, undefined, this._onContextMenu.bind(this)); |
- this._dataGrid.setStickToBottom(true); |
- this._dataGrid.asWidget().show(this.element); |
- |
- this._linkifier = new WebInspector.Linkifier(); |
- |
- /** @type {!Map.<!WebInspector.DebuggerModel, !Map.<number, !WebInspector.PromiseDetails>>} */ |
- this._promiseDetailsByDebuggerModel = new Map(); |
- /** @type {!Map.<number, !WebInspector.DataGridNode>} */ |
- this._promiseIdToNode = new Map(); |
- |
- this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this)); |
- this._popoverHelper.setTimeout(250, 250); |
- |
- this.element.addEventListener("click", this._hidePopover.bind(this), true); |
- |
- WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.PromiseUpdated, this._onPromiseUpdated, this); |
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this); |
- WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._targetChanged, this); |
- |
- WebInspector.targetManager.observeTargets(this); |
-} |
- |
-WebInspector.PromisePane._maxPromiseCount = 10000; |
- |
- |
-/** |
- * @constructor |
- * @param {!DebuggerAgent.PromiseDetails} details |
- */ |
-WebInspector.PromiseDetails = function(details) |
-{ |
- this.id = details.id; |
- this.isGarbageCollected = false; |
- this.update(details); |
-} |
- |
-WebInspector.PromiseDetails.prototype = { |
- /** |
- * @param {!DebuggerAgent.PromiseDetails} details |
- */ |
- update: function(details) |
- { |
- if (this.id !== details.id) |
- throw new Error("Invalid id, expected " + this.id + " was " + details.id); |
- if (details.status) |
- this.status = details.status; |
- if (details.parentId) |
- this.parentId = details.parentId; |
- if (details.creationTime) |
- this.creationTime = details.creationTime; |
- if (details.settlementTime) |
- this.settlementTime = details.settlementTime; |
- if (details.creationStack) { |
- this.creationStack = details.creationStack; |
- if (this.creationStack.callFrames.length) |
- this.callFrame = this.creationStack.callFrames[0]; |
- } |
- if (details.asyncCreationStack) |
- this.asyncCreationStack = details.asyncCreationStack; |
- if (details.settlementStack) |
- this.settlementStack = details.settlementStack; |
- if (details.asyncSettlementStack) |
- this.asyncSettlementStack = details.asyncSettlementStack; |
- } |
-} |
- |
- |
-WebInspector.PromisePane.prototype = { |
- _createFilterBar: function() |
- { |
- this._filterBar = new WebInspector.FilterBar("promisePane"); |
- |
- this._textFilterUI = new WebInspector.TextFilterUI(true); |
- this._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._onFilterChanged, this); |
- this._filterBar.addFilter(this._textFilterUI); |
- |
- var statuses = [ |
- { name: "pending", label: WebInspector.UIString("Pending") }, |
- { name: "resolved", label: WebInspector.UIString("Fulfilled") }, |
- { name: "rejected", label: WebInspector.UIString("Rejected") } |
- ]; |
- this._statusFilterUI = new WebInspector.NamedBitSetFilterUI(statuses, this._promiseStatusFiltersSetting); |
- this._statusFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._onFilterChanged, this); |
- this._filterBar.addFilter(this._statusFilterUI); |
- |
- var hideCollectedCheckbox = new WebInspector.CheckboxFilterUI("hide-collected-promises", WebInspector.UIString("Hide collected promises"), true, this._hideCollectedPromisesSetting); |
- hideCollectedCheckbox.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._onFilterChanged, this); |
- this._filterBar.addFilter(hideCollectedCheckbox); |
- }, |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} details |
- * @param {!WebInspector.DataGridNode} node |
- * @return {boolean} |
- */ |
- _shouldBeVisible: function(details, node) |
- { |
- if (!this._statusFilterUI.accept(details.status)) |
- return false; |
- |
- if (this._hideCollectedPromisesSetting.get() && details.isGarbageCollected) |
- return false; |
- |
- var regex = this._textFilterUI.regex(); |
- if (!regex) |
- return true; |
- |
- var text = node.dataTextForSearch(); |
- regex.lastIndex = 0; |
- return regex.test(text); |
- }, |
- |
- _onFilterChanged: function() |
- { |
- if (this._filterChangedTimeout) |
- clearTimeout(this._filterChangedTimeout); |
- this._filterChangedTimeout = setTimeout(onTimerFired.bind(this), 100); |
- |
- /** |
- * @this {WebInspector.PromisePane} |
- */ |
- function onTimerFired() |
- { |
- delete this._filterChangedTimeout; |
- this._refresh(); |
- } |
- }, |
- |
- /** |
- * @override |
- * @return {!Array.<!Element>} |
- */ |
- elementsToRestoreScrollPositionsFor: function() |
- { |
- return [this._dataGrid.scrollContainer]; |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (debuggerModel && this._enabled) |
- this._enablePromiseTracker(debuggerModel); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (!debuggerModel) |
- return; |
- this._promiseDetailsByDebuggerModel.delete(debuggerModel); |
- if (this._debuggerModel === debuggerModel) { |
- this._clear(); |
- delete this._debuggerModel; |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _targetChanged: function(event) |
- { |
- if (!this._enabled) |
- return; |
- var target = /** @type {!WebInspector.Target} */ (event.data); |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (!debuggerModel || this._debuggerModel === debuggerModel) |
- return; |
- this._debuggerModel = debuggerModel; |
- this._refresh(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _mainFrameNavigated: function(event) |
- { |
- var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data); |
- var target = frame.target(); |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (!debuggerModel) |
- return; |
- this._promiseDetailsByDebuggerModel.delete(debuggerModel); |
- if (this._debuggerModel === debuggerModel) |
- this._clear(); |
- }, |
- |
- /** @override */ |
- wasShown: function() |
- { |
- // Auto enable upon the very first show. |
- if (typeof this._enabled === "undefined") { |
- var target = WebInspector.context.flavor(WebInspector.Target); |
- this._debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- this._updateRecordingState(true); |
- } |
- if (this._refreshIsNeeded) |
- this._refresh(); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel} debuggerModel |
- */ |
- _enablePromiseTracker: function(debuggerModel) |
- { |
- debuggerModel.enablePromiseTracker(true); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel} debuggerModel |
- */ |
- _disablePromiseTracker: function(debuggerModel) |
- { |
- debuggerModel.disablePromiseTracker(); |
- }, |
- |
- /** @override */ |
- willHide: function() |
- { |
- this._hidePopover(); |
- }, |
- |
- _hidePopover: function() |
- { |
- this._popoverHelper.hidePopover(); |
- }, |
- |
- _recordButtonClicked: function() |
- { |
- this._updateRecordingState(!this._recordButton.toggled()); |
- }, |
- |
- /** |
- * @param {boolean} enabled |
- */ |
- _updateRecordingState: function(enabled) |
- { |
- this._enabled = enabled; |
- this._recordButton.setToggled(this._enabled); |
- this._recordButton.setTitle(this._enabled ? WebInspector.UIString("Stop Recording Promises Log") : WebInspector.UIString("Record Promises Log")); |
- WebInspector.DebuggerModel.instances().forEach(this._enabled ? this._enablePromiseTracker : this._disablePromiseTracker, this); |
- }, |
- |
- _clearButtonClicked: function() |
- { |
- this._clear(); |
- if (this._debuggerModel) |
- this._promiseDetailsByDebuggerModel.delete(this._debuggerModel); |
- }, |
- |
- _resetFilters: function() |
- { |
- this._hideCollectedPromisesSetting.set(false); |
- this._promiseStatusFiltersSetting.set({}); |
- this._textFilterUI.setValue(""); |
- }, |
- |
- _updateFilterStatus: function() |
- { |
- this._filterStatusTextElement.textContent = WebInspector.UIString(this._hiddenByFilterCount === 1 ? "%d promise is hidden by filters." : "%d promises are hidden by filters.", this._hiddenByFilterCount); |
- this._filterStatusMessageElement.classList.toggle("hidden", !this._hiddenByFilterCount); |
- }, |
- |
- _garbageCollectButtonClicked: function() |
- { |
- var targets = WebInspector.targetManager.targets(); |
- for (var i = 0; i < targets.length; ++i) |
- targets[i].heapProfilerAgent().collectGarbage(); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel} debuggerModel |
- * @return {boolean} |
- */ |
- _truncateLogIfNeeded: function(debuggerModel) |
- { |
- var promiseIdToDetails = this._promiseDetailsByDebuggerModel.get(debuggerModel); |
- if (!promiseIdToDetails || promiseIdToDetails.size <= WebInspector.PromisePane._maxPromiseCount) |
- return false; |
- |
- var elementsToTruncate = WebInspector.PromisePane._maxPromiseCount / 10; |
- var sortedDetails = promiseIdToDetails.valuesArray().sort(compare); |
- for (var i = 0; i < elementsToTruncate; ++i) |
- promiseIdToDetails.delete(sortedDetails[i].id); |
- return true; |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} x |
- * @param {!WebInspector.PromiseDetails} y |
- * @return {number} |
- */ |
- function compare(x, y) |
- { |
- var t1 = x.creationTime || 0; |
- var t2 = y.creationTime || 0; |
- return t1 - t2 || x.id - y.id; |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onPromiseUpdated: function(event) |
- { |
- var debuggerModel = /** @type {!WebInspector.DebuggerModel} */ (event.target); |
- var eventType = /** @type {string} */ (event.data.eventType); |
- var protocolDetails = /** @type {!DebuggerAgent.PromiseDetails} */ (event.data.promise); |
- |
- var promiseIdToDetails = this._promiseDetailsByDebuggerModel.get(debuggerModel); |
- if (!promiseIdToDetails) { |
- promiseIdToDetails = new Map(); |
- this._promiseDetailsByDebuggerModel.set(debuggerModel, promiseIdToDetails); |
- } |
- |
- var details = promiseIdToDetails.get(protocolDetails.id); |
- if (!details && eventType === "gc") |
- return; |
- |
- var truncated = this._truncateLogIfNeeded(debuggerModel); |
- if (details) |
- details.update(protocolDetails) |
- else |
- details = new WebInspector.PromiseDetails(protocolDetails); |
- promiseIdToDetails.set(details.id, details); |
- |
- if (eventType === "gc") |
- details.isGarbageCollected = true; |
- |
- if (debuggerModel === this._debuggerModel) { |
- if (!this.isShowing()) { |
- this._refreshIsNeeded = true; |
- return; |
- } |
- if (truncated || this._refreshIsNeeded) { |
- this._refresh(); |
- return; |
- } |
- |
- var node = /** @type {!WebInspector.DataGridNode} */ (this._promiseIdToNode.get(details.id)); |
- var wasVisible = !node || !node._isPromiseHidden; |
- |
- // Check for the fast path on GC events. |
- if (eventType === "gc" && node && node.parent && !this._hideCollectedPromisesSetting.get()) |
- node.update(details); |
- else |
- this._attachDataGridNode(details); |
- |
- var isVisible = this._shouldBeVisible(details, /** @type {!WebInspector.DataGridNode} */(this._promiseIdToNode.get(details.id))); |
- if (wasVisible !== isVisible) { |
- this._hiddenByFilterCount += wasVisible ? 1 : -1; |
- this._updateFilterStatus(); |
- } |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} details |
- */ |
- _attachDataGridNode: function(details) |
- { |
- var node = this._createDataGridNode(details); |
- var parentNode = this._findVisibleParentNodeDetails(details); |
- if (parentNode !== node.parent) |
- parentNode.appendChild(node); |
- if (this._shouldBeVisible(details, node)) |
- parentNode.expanded = true; |
- else |
- node.remove(); |
- }, |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} details |
- * @return {!WebInspector.DataGridNode} |
- */ |
- _findVisibleParentNodeDetails: function(details) |
- { |
- var promiseIdToDetails = /** @type {!Map.<number, !WebInspector.PromiseDetails>} */ (this._promiseDetailsByDebuggerModel.get(this._debuggerModel)); |
- var currentDetails = details; |
- while (currentDetails) { |
- var parentId = currentDetails.parentId; |
- if (typeof parentId !== "number") |
- break; |
- currentDetails = promiseIdToDetails.get(parentId); |
- if (!currentDetails) |
- break; |
- var node = this._promiseIdToNode.get(currentDetails.id); |
- if (node && this._shouldBeVisible(currentDetails, node)) |
- return node; |
- } |
- return this._dataGrid.rootNode(); |
- }, |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} details |
- * @return {!WebInspector.DataGridNode} |
- */ |
- _createDataGridNode: function(details) |
- { |
- var node = this._promiseIdToNode.get(details.id); |
- if (!node) { |
- node = new WebInspector.PromiseDataGridNode(details, this._debuggerModel, this._linkifier, this._dataGrid); |
- this._promiseIdToNode.set(details.id, node); |
- } else { |
- node.update(details); |
- } |
- return node; |
- }, |
- |
- _refresh: function() |
- { |
- delete this._refreshIsNeeded; |
- this._clear(); |
- if (!this._debuggerModel) |
- return; |
- if (!this._promiseDetailsByDebuggerModel.has(this._debuggerModel)) |
- return; |
- |
- var rootNode = this._dataGrid.rootNode(); |
- var promiseIdToDetails = /** @type {!Map.<number, !WebInspector.PromiseDetails>} */ (this._promiseDetailsByDebuggerModel.get(this._debuggerModel)); |
- |
- var nodesToInsert = { __proto__: null }; |
- // The for..of loop iterates in insertion order. |
- for (var pair of promiseIdToDetails) { |
- var id = /** @type {number} */ (pair[0]); |
- var details = /** @type {!WebInspector.PromiseDetails} */ (pair[1]); |
- var node = this._createDataGridNode(details); |
- node._isPromiseHidden = !this._shouldBeVisible(details, node); |
- if (node._isPromiseHidden) { |
- ++this._hiddenByFilterCount; |
- continue; |
- } |
- nodesToInsert[id] = { details: details, node: node }; |
- } |
- |
- for (var id in nodesToInsert) { |
- var node = nodesToInsert[id].node; |
- var details = nodesToInsert[id].details; |
- this._findVisibleParentNodeDetails(details).appendChild(node); |
- } |
- |
- for (var id in nodesToInsert) { |
- var node = nodesToInsert[id].node; |
- var details = nodesToInsert[id].details; |
- node.expanded = true; |
- } |
- |
- this._updateFilterStatus(); |
- }, |
- |
- _clear: function() |
- { |
- this._hiddenByFilterCount = 0; |
- this._updateFilterStatus(); |
- this._promiseIdToNode.clear(); |
- this._hidePopover(); |
- this._dataGrid.rootNode().removeChildren(); |
- this._linkifier.reset(); |
- }, |
- |
- /** |
- * @param {!WebInspector.ContextMenu} contextMenu |
- * @param {!WebInspector.DataGridNode} node |
- */ |
- _onContextMenu: function(contextMenu, node) |
- { |
- var debuggerModel = this._debuggerModel; |
- if (!debuggerModel) |
- return; |
- |
- var promiseId = node.promiseId(); |
- if (this._promiseDetailsByDebuggerModel.has(debuggerModel)) { |
- var details = this._promiseDetailsByDebuggerModel.get(debuggerModel).get(promiseId); |
- if (details.isGarbageCollected) |
- return; |
- } |
- |
- contextMenu.appendItem(WebInspector.UIString.capitalize("Show in ^console"), showPromiseInConsole); |
- contextMenu.show(); |
- |
- function showPromiseInConsole() |
- { |
- debuggerModel.getPromiseById(promiseId, "console", didGetPromiseById); |
- } |
- |
- /** |
- * @param {?RuntimeAgent.RemoteObject} promise |
- */ |
- function didGetPromiseById(promise) |
- { |
- if (!promise) |
- return; |
- var object = debuggerModel.target().runtimeModel.createRemoteObject(promise); |
- object.callFunction(dumpIntoConsole); |
- object.release(); |
- /** |
- * @suppressReceiverCheck |
- * @this {Object} |
- */ |
- function dumpIntoConsole() |
- { |
- console.log(this); |
- } |
- WebInspector.console.show(); |
- } |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {!Event} event |
- * @return {!Element|!AnchorBox|undefined} |
- */ |
- _getPopoverAnchor: function(element, event) |
- { |
- if (!this._debuggerModel || !this._promiseDetailsByDebuggerModel.has(this._debuggerModel)) |
- return undefined; |
- var node = this._dataGrid.dataGridNodeFromNode(element); |
- if (!node) |
- return undefined; |
- var details = this._promiseDetailsByDebuggerModel.get(this._debuggerModel).get(node.promiseId()); |
- if (!details) |
- return undefined; |
- var anchor = element.enclosingNodeOrSelfWithClass("created-column"); |
- if (anchor) |
- return details.creationStack ? anchor : undefined; |
- anchor = element.enclosingNodeOrSelfWithClass("settled-column"); |
- return (anchor && details.settlementStack) ? anchor : undefined; |
- }, |
- |
- /** |
- * @param {!Element} anchor |
- * @param {!WebInspector.Popover} popover |
- */ |
- _showPopover: function(anchor, popover) |
- { |
- var node = this._dataGrid.dataGridNodeFromNode(anchor); |
- var details = this._promiseDetailsByDebuggerModel.get(this._debuggerModel).get(node.promiseId()); |
- |
- var stackTrace; |
- if (anchor.classList.contains("created-column")) |
- stackTrace = details.creationStack; |
- else |
- stackTrace = details.settlementStack; |
- |
- var content = WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(this._debuggerModel.target(), this._linkifier, stackTrace); |
- popover.setCanShrink(true); |
- popover.showForAnchor(content, anchor); |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
-} |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.ViewportDataGridNode} |
- * @param {!WebInspector.PromiseDetails} details |
- * @param {!WebInspector.DebuggerModel} debuggerModel |
- * @param {!WebInspector.Linkifier} linkifier |
- * @param {!WebInspector.ViewportDataGrid} dataGrid |
- */ |
-WebInspector.PromiseDataGridNode = function(details, debuggerModel, linkifier, dataGrid) |
-{ |
- WebInspector.ViewportDataGridNode.call(this, {}); |
- this._details = details; |
- this._debuggerModel = debuggerModel; |
- this._linkifier = linkifier; |
- /** @type {!Array.<!Element>} */ |
- this._linkifiedAnchors = []; |
- this.dataGrid = dataGrid; |
-} |
- |
-WebInspector.PromiseDataGridNode.prototype = { |
- _disposeAnchors: function() |
- { |
- for (var i = 0; i < this._linkifiedAnchors.length; ++i) |
- this._linkifier.disposeAnchor(this._debuggerModel.target(), this._linkifiedAnchors[i]); |
- this._linkifiedAnchors = []; |
- }, |
- |
- /** |
- * @param {!WebInspector.PromiseDetails} details |
- */ |
- update: function(details) |
- { |
- this._disposeAnchors(); |
- this._details = details; |
- this.refresh(); |
- }, |
- |
- /** |
- * @override |
- */ |
- wasDetached: function() |
- { |
- this._disposeAnchors(); |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- nodeSelfHeight: function() |
- { |
- return 24; |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- promiseId: function() |
- { |
- return this._details.id; |
- }, |
- |
- /** |
- * @override |
- */ |
- createCells: function() |
- { |
- this._element.classList.toggle("promise-gc", !!this._details.isGarbageCollected); |
- WebInspector.ViewportDataGridNode.prototype.createCells.call(this); |
- }, |
- |
- /** |
- * @param {!Element} cell |
- * @param {?RuntimeAgent.CallFrame=} callFrame |
- */ |
- _appendCallFrameAnchor: function(cell, callFrame) |
- { |
- if (!callFrame) |
- return; |
- var anchor = this._linkifier.linkifyConsoleCallFrame(this._debuggerModel.target(), callFrame); |
- this._linkifiedAnchors.push(anchor); |
- cell.appendChild(anchor); |
- }, |
- |
- /** |
- * @override |
- * @param {string} columnIdentifier |
- * @return {!Element} |
- */ |
- createCell: function(columnIdentifier) |
- { |
- var cell = this.createTD(columnIdentifier); |
- var details = this._details; |
- |
- switch (columnIdentifier) { |
- case "status": |
- var title = ""; |
- switch (details.status) { |
- case "pending": |
- title = WebInspector.UIString("Pending"); |
- break; |
- case "resolved": |
- title = WebInspector.UIString("Fulfilled"); |
- break; |
- case "rejected": |
- title = WebInspector.UIString("Rejected"); |
- break; |
- } |
- if (details.isGarbageCollected) |
- title += " " + WebInspector.UIString("(garbage collected)"); |
- cell.createChild("div", "status " + details.status).title = title; |
- break; |
- |
- case "function": |
- cell.createTextChild(WebInspector.beautifyFunctionName(details.callFrame ? details.callFrame.functionName : "")); |
- break; |
- |
- case "created": |
- this._appendCallFrameAnchor(cell, details.callFrame); |
- break; |
- |
- case "settled": |
- this._appendCallFrameAnchor(cell, details.settlementStack && details.settlementStack.callFrames.length ? details.settlementStack.callFrames[0] : null); |
- break; |
- |
- case "tts": |
- cell.createTextChild(this._ttsCellText()); |
- break; |
- } |
- |
- return cell; |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- _ttsCellText: function() |
- { |
- var details = this._details; |
- if (details.creationTime && details.settlementTime && details.settlementTime >= details.creationTime) |
- return Number.millisToString(details.settlementTime - details.creationTime); |
- return ""; |
- }, |
- |
- /** |
- * @param {?RuntimeAgent.CallFrame=} callFrame |
- * @return {string} |
- */ |
- _callFrameAnchorTextForSearch: function(callFrame) |
- { |
- if (!callFrame) |
- return ""; |
- var script = callFrame.scriptId && this._debuggerModel ? this._debuggerModel.scriptForId(callFrame.scriptId) : null; |
- var sourceURL = script ? script.sourceURL : callFrame.url; |
- var lineNumber = callFrame.lineNumber || 0; |
- return WebInspector.displayNameForURL(sourceURL) + ":" + lineNumber; |
- }, |
- |
- /** |
- * @return {string} |
- */ |
- dataTextForSearch: function() |
- { |
- var details = this._details; |
- var texts = [ |
- WebInspector.beautifyFunctionName(details.callFrame ? details.callFrame.functionName : ""), |
- this._callFrameAnchorTextForSearch(details.callFrame), |
- this._callFrameAnchorTextForSearch(details.settlementStack && details.settlementStack.callFrames.length ? details.settlementStack.callFrames[0] : null), |
- this._ttsCellText().replace(/\u2009/g, " ") // \u2009 is a thin space. |
- ]; |
- return texts.join(" "); |
- }, |
- |
- __proto__: WebInspector.ViewportDataGridNode.prototype |
-} |