Index: third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js |
index 2001eb2936f9424d3b3c932ba5effabb8408f2c6..5f26a5cfac156496a01c2ae9911db693842b3503 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js |
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js |
@@ -29,6 +29,9 @@ Network.NetworkLogViewColumns = class { |
/** @type {!Array.<!Network.NetworkLogViewColumns.Descriptor>} */ |
this._columns = []; |
+ /** @type {!Map<string, ?Network.NetworkColumnExtensionInterface>} */ |
+ this._columnExtensions = new Map(); |
+ |
this._waterfallRequestsAreStale = false; |
this._waterfallScrollerWidthIsStale = true; |
@@ -80,12 +83,13 @@ Network.NetworkLogViewColumns = class { |
this._columns = /** @type {!Array<!Network.NetworkLogViewColumns.Descriptor>} */ ([]); |
for (var currentConfigColumn of defaultColumns) { |
var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} */ ( |
- Object.assign(/** @type {!Object} */ ({}), defaultColumnConfig, currentConfigColumn)); |
+ Object.assign({}, defaultColumnConfig, currentConfigColumn)); |
columnConfig.id = columnConfig.id; |
if (columnConfig.subtitle) |
columnConfig.titleDOMFragment = this._makeHeaderFragment(columnConfig.title, columnConfig.subtitle); |
this._columns.push(columnConfig); |
} |
+ this._loadColumnExtensions(); |
this._loadCustomColumnsAndSettings(); |
this._popoverHelper = new UI.PopoverHelper(this._networkLogView.element); |
@@ -327,6 +331,13 @@ Network.NetworkLogViewColumns = class { |
} |
/** |
+ * @return {!Map<string, ?Network.NetworkColumnExtensionInterface>} |
+ */ |
+ columnExtensions() { |
+ return this._columnExtensions; |
+ } |
+ |
+ /** |
* @param {!Network.NetworkLogViewColumns.Descriptor} columnConfig |
*/ |
_toggleColumnVisibility(columnConfig) { |
@@ -344,6 +355,43 @@ Network.NetworkLogViewColumns = class { |
this._persistantSettings.set(saveableSettings); |
} |
+ _loadColumnExtensions() { |
+ var extensions = self.runtime.extensions(Network.NetworkColumnExtensionInterface); |
+ for (var i = 0; i < extensions.length; i++) { |
+ var extension = extensions[i]; |
+ var title = extension.title(); |
+ var columnId = title.toLowerCase() + '-extension'; |
+ |
+ this._columnExtensions.set(columnId, null); |
+ extension.instance().then(extensionInstanceResolved.bind(this, columnId)); |
+ |
+ var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} */ ( |
+ Object.assign({}, Network.NetworkLogViewColumns._defaultColumnConfig, { |
+ id: columnId, |
+ title: title, |
+ isResponseHeader: false, |
+ isCustomHeader: false, |
+ visible: true, |
+ sortingFunction: |
+ Network.NetworkRequestNode.ExtensionColumnComparator.bind(null, this._columnExtensions, columnId) |
+ })); |
+ const columnIndex = i + 1; |
+ this._columns.splice(columnIndex, 0, columnConfig); |
+ if (this._dataGrid) |
+ this._dataGrid.addColumn(Network.NetworkLogViewColumns._convertToDataGridDescriptor(columnConfig), columnIndex); |
+ } |
+ |
+ /** |
+ * @param {string} columnId |
+ * @param {!Network.NetworkColumnExtensionInterface} instance |
+ * @this {Network.NetworkLogViewColumns} |
+ */ |
+ function extensionInstanceResolved(columnId, instance) { |
+ this._columnExtensions.set(columnId, instance); |
+ this._networkLogView.columnExtensionResolved(); |
+ } |
+ } |
+ |
_loadCustomColumnsAndSettings() { |
var savedSettings = this._persistantSettings.get(); |
var columnIds = Object.keys(savedSettings); |
@@ -483,7 +531,7 @@ Network.NetworkLogViewColumns = class { |
return null; |
var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} */ ( |
- Object.assign(/** @type {!Object} */ ({}), Network.NetworkLogViewColumns._defaultColumnConfig, { |
+ Object.assign({}, Network.NetworkLogViewColumns._defaultColumnConfig, { |
id: headerId, |
title: headerTitle, |
isResponseHeader: true, |
@@ -814,3 +862,23 @@ Network.NetworkLogViewColumns.WaterfallSortIds = { |
Duration: 'duration', |
Latency: 'latency' |
}; |
+ |
+/** |
+ * @interface |
+ */ |
+Network.NetworkColumnExtensionInterface = function() {}; |
+ |
+Network.NetworkColumnExtensionInterface.prototype = { |
+ /** |
+ * @param {!SDK.NetworkRequest} request |
+ * @return {string} |
+ */ |
+ lookupColumnValue(request) {}, |
+ |
+ /** |
+ * @param {!SDK.NetworkRequest} aRequest |
+ * @param {!SDK.NetworkRequest} bRequest |
+ * @return {number} |
+ */ |
+ requestComparator(aRequest, bRequest) {} |
+}; |