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

Unified Diff: third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js

Issue 2150713002: [Devtools] Refactor NetworkLogViewColumns to be dynamic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changes Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9a3f4deae33dd2dff40834a2079ef2f9beed3b96..0ef91bd2c9ace77f17b8507f7ff5eed61510c1c5 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogViewColumns.js
@@ -11,15 +11,11 @@ WebInspector.NetworkLogViewColumns = function(networkLogView, networkLogLargeRow
{
this._networkLogView = networkLogView;
- var defaultColumnsVisibility = WebInspector.NetworkLogViewColumns._defaultColumnsVisibility;
/** @type {!WebInspector.Setting} */
- this._columnsVisibilitySetting = WebInspector.settings.createSetting("networkLogColumnsVisibility", defaultColumnsVisibility);
- var savedColumnsVisibility = this._columnsVisibilitySetting.get();
- /** @type {!Object.<boolean>} */
- var columnsVisibility = {};
- for (var columnId in defaultColumnsVisibility)
- columnsVisibility[columnId] = savedColumnsVisibility.hasOwnProperty(columnId) ? savedColumnsVisibility[columnId] : defaultColumnsVisibility[columnId];
- this._columnsVisibilitySetting.set(columnsVisibility);
+ this._persistantSettings = WebInspector.settings.createSetting("networkLogColumns", {});
+
+ /** @type {!Array<!Element>} */
+ this._dropDownColumnSelectors = [];
this._networkLogLargeRowsSetting = networkLogLargeRowsSetting;
this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize, this);
@@ -31,14 +27,8 @@ WebInspector.NetworkLogViewColumns = function(networkLogView, networkLogLargeRow
/** @type {?WebInspector.DataGrid} */
this._dataGrid = null;
- /** @type {!Array.<!WebInspector.ColumnConfig>} */
+ /** @type {!Array.<!WebInspector.NetworkLogViewColumns.Descriptor>} */
this._columns = [];
- /** @type {!Object.<string, function(!WebInspector.NetworkDataGridNode, !WebInspector.NetworkDataGridNode) : number>} */
- this._sortingFunctions = {};
- /** @type {!Object.<string, !WebInspector.NetworkTimeCalculator>} */
- this._calculators = {};
- /** @type {?Element} */
- this._timelineSortSelector = null;
/** @type {?WebInspector.TimelineGrid} */
this._timelineGrid = null;
@@ -46,57 +36,305 @@ WebInspector.NetworkLogViewColumns = function(networkLogView, networkLogLargeRow
/** @type {!WebInspector.Linkifier} */
this._popupLinkifier = new WebInspector.Linkifier();
}
+WebInspector.NetworkLogViewColumns._initialSortColumn = "timeline";
-WebInspector.NetworkLogViewColumns._responseHeaderColumns = ["Cache-Control", "Connection", "Content-Encoding", "Content-Length", "ETag", "Keep-Alive", "Last-Modified", "Server", "Vary"];
-WebInspector.NetworkLogViewColumns._defaultColumnsVisibility = {
- method: false, status: true, protocol: false, scheme: false, domain: false, remoteAddress: false, type: true, initiator: true, cookies: false, setCookies: false, size: true, time: true, priority: false, connectionId: false,
- "Cache-Control": false, "Connection": false, "Content-Encoding": false, "Content-Length": false, "ETag": false, "Keep-Alive": false, "Last-Modified": false, "Server": false, "Vary": false
-};
+/**
+ * @typedef {{
+ * id: string,
+ * title: string,
+ * subtitle: (string|null),
+ * visible: boolean,
+ * weight: number,
+ * hideable: boolean,
+ * nonSelectable: boolean,
+ * sortable: boolean,
+ * align: (?WebInspector.DataGrid.Align|undefined),
+ * isResponseHeader: boolean,
+ * sortConfig: !WebInspector.NetworkLogViewColumns.SortConfig
+ * }}
+ */
+WebInspector.NetworkLogViewColumns.Descriptor;
/**
* @typedef {{
- * id: string,
- * title: string,
- * titleDOMFragment: !DocumentFragment,
- * sortable: boolean,
- * weight: number,
- * sort: (?WebInspector.DataGrid.Order|undefined),
- * align: (?WebInspector.DataGrid.Align|undefined),
+ * sortingFunction: (!function(!WebInspector.NetworkDataGridNode, !WebInspector.NetworkDataGridNode):number|undefined),
+ * entries: (!Array.<!WebInspector.DataGrid.ColumnDescriptor>|undefined)
* }}
*/
-WebInspector.ColumnConfig;
-
-/** @type {!Object.<string, string>} */
-WebInspector.NetworkLogViewColumns._columnTitles = {
- "name": WebInspector.UIString("Name"),
- "method": WebInspector.UIString("Method"),
- "status": WebInspector.UIString("Status"),
- "protocol": WebInspector.UIString("Protocol"),
- "scheme": WebInspector.UIString("Scheme"),
- "domain": WebInspector.UIString("Domain"),
- "remoteAddress": WebInspector.UIString("Remote Address"),
- "type": WebInspector.UIString("Type"),
- "initiator": WebInspector.UIString("Initiator"),
- "cookies": WebInspector.UIString("Cookies"),
- "setCookies": WebInspector.UIString("Set-Cookies"),
- "size": WebInspector.UIString("Size"),
- "time": WebInspector.UIString("Time"),
- "connectionId": WebInspector.UIString("Connection Id"),
- "priority": WebInspector.UIString("Priority"),
- "timeline": WebInspector.UIString("Timeline"),
-
- // Response header columns
- "Cache-Control": WebInspector.UIString("Cache-Control"),
- "Connection": WebInspector.UIString("Connection"),
- "Content-Encoding": WebInspector.UIString("Content-Encoding"),
- "Content-Length": WebInspector.UIString("Content-Length"),
- "ETag": WebInspector.UIString("ETag"),
- "Keep-Alive": WebInspector.UIString("Keep-Alive"),
- "Last-Modified": WebInspector.UIString("Last-Modified"),
- "Server": WebInspector.UIString("Server"),
- "Vary": WebInspector.UIString("Vary")
+WebInspector.NetworkLogViewColumns.SortConfig;
+
+/** @enum {string} */
+WebInspector.NetworkLogViewColumns._calculatorTypes = {
+ Duration: "Duration",
+ Time: "Time"
+};
+
+/**
+ * @type {!Object} column
+ */
+WebInspector.NetworkLogViewColumns._defaultColumnConfig = {
+ subtitle: null,
+ visible: false,
+ weight: 6,
+ sortable: true,
+ hideable: true,
+ nonSelectable: true,
+ isResponseHeader: false,
+ alwaysVisible: false
};
+/**
+ * @type {!Array.<!WebInspector.NetworkLogViewColumns.Descriptor>} column
+ */
+WebInspector.NetworkLogViewColumns._defaultColumns = [
+ {
+ id: "name",
+ title: WebInspector.UIString("Name"),
+ subtitle: WebInspector.UIString("Path"),
+ visible: true,
+ weight: 20,
+ hideable: false,
+ nonSelectable: false,
+ alwaysVisible: true,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.NameComparator
+ }
+ },
+ {
+ id: "method",
+ title: WebInspector.UIString("Method"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "requestMethod")
+ }
+ },
+ {
+ id: "status",
+ title: WebInspector.UIString("Status"),
+ visible: true,
+ subtitle: WebInspector.UIString("Text"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "statusCode")
+ }
+ },
+ {
+ id: "protocol",
+ title: WebInspector.UIString("Protocol"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "protocol")
+ }
+ },
+ {
+ id: "scheme",
+ title: WebInspector.UIString("Scheme"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "scheme")
+ }
+ },
+ {
+ id: "domain",
+ title: WebInspector.UIString("Domain"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "domain")
+ }
+ },
+ {
+ id: "remoteaddress",
+ title: WebInspector.UIString("Remote Address"),
+ weight: 10,
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RemoteAddressComparator
+ }
+ },
+ {
+ id: "type",
+ title: WebInspector.UIString("Type"),
+ visible: true,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.TypeComparator
+ }
+ },
+ {
+ id: "initiator",
+ title: WebInspector.UIString("Initiator"),
+ visible: true,
+ weight: 10,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.InitiatorComparator
+ }
+ },
+ {
+ id: "cookies",
+ title: WebInspector.UIString("Cookies"),
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestCookiesCountComparator
+ }
+ },
+ {
+ id: "setcookies",
+ title: WebInspector.UIString("Set Cookies"),
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseCookiesCountComparator
+ }
+ },
+ {
+ id: "size",
+ title: WebInspector.UIString("Size"),
+ visible: true,
+ subtitle: WebInspector.UIString("Content"),
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.SizeComparator
+ }
+ },
+ {
+ id: "time",
+ title: WebInspector.UIString("Time"),
+ visible: true,
+ subtitle: WebInspector.UIString("Latency"),
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration")
+ }
+ },
+ {
+ id: "priority",
+ title: WebInspector.UIString("Priority"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.InitialPriorityComparator
+ }
+ },
+ {
+ id: "connectionid",
+ title: WebInspector.UIString("Connection ID"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "connectionId")
+ }
+ },
+ {
+ id: "cache-control",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Cache-Control"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "cache-control")
+ }
+ },
+ {
+ id: "connection",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Connection"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "connection")
+ }
+ },
+ {
+ id: "content-encoding",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Content-Encoding"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "content-encoding")
+ }
+ },
+ {
+ id: "content-length",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Content-Length"),
+ align: WebInspector.DataGrid.Align.Right,
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderNumberComparator.bind(null, "content-length")
+ }
+ },
+ {
+ id: "etag",
+ isResponseHeader: true,
+ title: WebInspector.UIString("ETag"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "etag")
+ }
+ },
+ {
+ id: "keep-alive",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Keep-Alive"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "keep-alive")
+ }
+ },
+ {
+ id: "last-modified",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Last-Modified"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderDateComparator.bind(null, "last-modified")
+ }
+ },
+ {
+ id: "server",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Server"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "server")
+ }
+ },
+ {
+ id: "vary",
+ isResponseHeader: true,
+ title: WebInspector.UIString("Vary"),
+ sortConfig: {
+ sortingFunction: WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "vary")
+ }
+ },
+ {
+ id: "timeline",
+ title: WebInspector.UIString("Timeline"),
+ visible: true,
+ weight: 40,
+ sortable: false,
+ hideable: false,
+ sortConfig: {
+ entries: [
+ {
+ id: "starttime",
+ title: WebInspector.UIString("Timeline \u2013 Start Time"),
+ sort: WebInspector.DataGrid.Order.Ascending,
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "startTime"),
+ calculator: WebInspector.NetworkLogViewColumns._calculatorTypes.Time
+ },
+ {
+ id: "responsetime",
+ title: WebInspector.UIString("Timeline \u2013 Response Time"),
+ sort: WebInspector.DataGrid.Order.Ascending,
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "responseReceivedTime"),
+ calculator: WebInspector.NetworkLogViewColumns._calculatorTypes.Time
+ },
+ {
+ id: "endtime",
+ title: WebInspector.UIString("Timeline \u2013 End Time"),
+ sort: WebInspector.DataGrid.Order.Ascending,
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "endTime"),
+ calculator: WebInspector.NetworkLogViewColumns._calculatorTypes.Time
+ },
+ {
+ id: "duration",
+ title: WebInspector.UIString("Timeline \u2013 Total Duration"),
+ sort: WebInspector.DataGrid.Order.Descending,
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration"),
+ calculator: WebInspector.NetworkLogViewColumns._calculatorTypes.Duration
+ },
+ {
+ id: "latency",
+ title: WebInspector.UIString("Timeline \u2013 Latency"),
+ sort: WebInspector.DataGrid.Order.Descending,
+ sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "latency"),
+ calculator: WebInspector.NetworkLogViewColumns._calculatorTypes.Duration
+ }
+ ]
+ }
+ },
+];
+
WebInspector.NetworkLogViewColumns.prototype = {
willHide: function()
{
@@ -118,301 +356,146 @@ WebInspector.NetworkLogViewColumns.prototype = {
*/
createGrid: function(timeCalculator, durationCalculator)
{
- this._createSortingFunctions();
- this._popoverHelper = new WebInspector.PopoverHelper(this._networkLogView.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover.bind(this));
-
- this._calculators.timeline = timeCalculator;
- this._calculators.startTime = timeCalculator;
- this._calculators.endTime = timeCalculator;
- this._calculators.responseTime = timeCalculator;
- this._calculators.duration = durationCalculator;
- this._calculators.latency = durationCalculator;
-
- var columns = [];
- columns.push({
- id: "name",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Name"), WebInspector.UIString("Path")),
- title: WebInspector.NetworkLogViewColumns._columnTitles["name"],
- weight: 20
- });
-
- columns.push({
- id: "method",
- title: WebInspector.NetworkLogViewColumns._columnTitles["method"],
- weight: 6
- });
-
- columns.push({
- id: "status",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Status"), WebInspector.UIString("Text")),
- title: WebInspector.NetworkLogViewColumns._columnTitles["status"],
- weight: 6
- });
-
- columns.push({
- id: "protocol",
- title: WebInspector.NetworkLogViewColumns._columnTitles["protocol"],
- weight: 6
- });
-
- columns.push({
- id: "scheme",
- title: WebInspector.NetworkLogViewColumns._columnTitles["scheme"],
- weight: 6
- });
-
- columns.push({
- id: "domain",
- title: WebInspector.NetworkLogViewColumns._columnTitles["domain"],
- weight: 6
- });
-
- columns.push({
- id: "remoteAddress",
- title: WebInspector.NetworkLogViewColumns._columnTitles["remoteAddress"],
- weight: 10,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "type",
- title: WebInspector.NetworkLogViewColumns._columnTitles["type"],
- weight: 6
- });
-
- columns.push({
- id: "initiator",
- title: WebInspector.NetworkLogViewColumns._columnTitles["initiator"],
- weight: 10
- });
-
- columns.push({
- id: "cookies",
- title: WebInspector.NetworkLogViewColumns._columnTitles["cookies"],
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "setCookies",
- title: WebInspector.NetworkLogViewColumns._columnTitles["setCookies"],
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "size",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Size"), WebInspector.UIString("Content")),
- title: WebInspector.NetworkLogViewColumns._columnTitles["size"],
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "time",
- titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Time"), WebInspector.UIString("Latency")),
- title: WebInspector.NetworkLogViewColumns._columnTitles["time"],
- weight: 6,
- align: WebInspector.DataGrid.Align.Right
- });
-
- columns.push({
- id: "priority",
- title: WebInspector.NetworkLogViewColumns._columnTitles["priority"],
- weight: 6
- });
-
- columns.push({
- id: "connectionId",
- title: WebInspector.NetworkLogViewColumns._columnTitles["connectionId"],
- weight: 6
- });
-
- var responseHeaderColumns = WebInspector.NetworkLogViewColumns._responseHeaderColumns;
- for (var i = 0; i < responseHeaderColumns.length; ++i) {
- var headerName = responseHeaderColumns[i];
- var descriptor = {
- id: headerName,
- title: WebInspector.NetworkLogViewColumns._columnTitles[headerName],
- weight: 6
- };
- if (headerName === "Content-Length")
- descriptor.align = WebInspector.DataGrid.Align.Right;
- columns.push(descriptor);
+ var defaultColumns = WebInspector.NetworkLogViewColumns._defaultColumns;
+ var defaultColumnConfig = WebInspector.NetworkLogViewColumns._defaultColumnConfig;
+
+ this._columns = /** @type {!Array<!WebInspector.NetworkLogViewColumns.Descriptor>} */ ([]);
+ for (var currentConfigColumn of defaultColumns) {
+ var columnConfig = /** @type {!WebInspector.NetworkLogViewColumns.Descriptor} */ (Object.assign(/** @type {!Object} */ ({}), defaultColumnConfig, currentConfigColumn));
+ columnConfig.id = columnConfig.id;
+ if (columnConfig.subtitle)
+ columnConfig.titleDOMFragment = this._makeHeaderFragment(columnConfig.title, columnConfig.subtitle);
+ this._columns.push(columnConfig);
}
+ this._loadColumns();
- columns.push({
- id: "timeline",
- title: WebInspector.NetworkLogViewColumns._columnTitles["timeline"],
- sortable: false,
- weight: 40,
- sort: WebInspector.DataGrid.Order.Ascending
- });
+ /** @type {!Map<string, !WebInspector.NetworkTimeCalculator>} */
+ this._calculatorsMap = new Map();
+ this._calculatorsMap.set(WebInspector.NetworkLogViewColumns._calculatorTypes.Time, timeCalculator);
+ this._calculatorsMap.set(WebInspector.NetworkLogViewColumns._calculatorTypes.Duration, durationCalculator);
- for (var column of columns) {
- column.sortable = column.id !== "timeline";
- column.nonSelectable = column.id !== "name";
- }
- this._columns = columns;
-
- this._networkLogView.switchViewMode(true);
+ this._popoverHelper = new WebInspector.PopoverHelper(this._networkLogView.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover.bind(this));
- this._dataGrid = new WebInspector.SortableDataGrid(this._columns);
+ this._dataGrid = new WebInspector.SortableDataGrid(convertToDataGridDescriptor(this._columns));
this._dataGrid.asWidget().show(this._networkLogView.element);
+ this._updateColumns();
+ this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this._sortHandler, this);
+ this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResized, this.updateDividersIfNeeded, this);
+
this._timelineGrid = new WebInspector.TimelineGrid();
this._timelineGrid.element.classList.add("network-timeline-grid");
this._dataGrid.element.appendChild(this._timelineGrid.element);
+ this._setupDropdownColumns();
- this._updateColumns();
- this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this._sortItems, this);
- this._dataGrid.sortNodes(this._sortingFunctions.startTime, false);
- this._patchTimelineHeader();
-
- this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResized, this.updateDividersIfNeeded, this);
+ this._dataGrid.markColumnAsSortedBy(WebInspector.NetworkLogViewColumns._initialSortColumn, WebInspector.DataGrid.Order.Ascending);
this._updateRowsSize();
return this._dataGrid;
+
+ /**
+ * @param {!Array<!WebInspector.NetworkLogViewColumns.Descriptor>} columns
+ * @return {!Array<!WebInspector.DataGrid.ColumnDescriptor>}
+ */
+ function convertToDataGridDescriptor(columns)
+ {
+ var dataGridColumns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([]);
+ for (var columnConfig of columns) {
+ dataGridColumns.push({
+ id: columnConfig.id,
+ title: columnConfig.title,
+ sortable: columnConfig.sortable,
+ align: columnConfig.align,
+ nonSelectable: columnConfig.nonSelectable,
+ weight: columnConfig.weight
+ });
+ }
+ return dataGridColumns;
+ }
+
},
- _createSortingFunctions: function()
- {
- this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameComparator;
- this._sortingFunctions.method = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "requestMethod");
- this._sortingFunctions.status = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "statusCode");
- this._sortingFunctions.protocol = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "protocol");
- this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "scheme");
- this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "domain");
- this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode.RemoteAddressComparator;
- this._sortingFunctions.type = WebInspector.NetworkDataGridNode.TypeComparator;
- this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.InitiatorComparator;
- this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.RequestCookiesCountComparator;
- this._sortingFunctions.setCookies = WebInspector.NetworkDataGridNode.ResponseCookiesCountComparator;
- this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeComparator;
- this._sortingFunctions.time = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration");
- this._sortingFunctions.connectionId = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "connectionId");
- this._sortingFunctions.priority = WebInspector.NetworkDataGridNode.InitialPriorityComparator;
- this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "startTime");
- this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "startTime");
- this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "endTime");
- this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "responseReceivedTime");
- this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "duration");
- this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "latency");
-
- this._sortingFunctions["Cache-Control"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Cache-Control");
- this._sortingFunctions["Connection"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Connection");
- this._sortingFunctions["Content-Encoding"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Content-Encoding");
- this._sortingFunctions["Content-Length"] = WebInspector.NetworkDataGridNode.ResponseHeaderNumberComparator.bind(null, "Content-Length");
- this._sortingFunctions["ETag"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "ETag");
- this._sortingFunctions["Keep-Alive"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Keep-Alive");
- this._sortingFunctions["Last-Modified"] = WebInspector.NetworkDataGridNode.ResponseHeaderDateComparator.bind(null, "Last-Modified");
- this._sortingFunctions["Server"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Server");
- this._sortingFunctions["Vary"] = WebInspector.NetworkDataGridNode.ResponseHeaderStringComparator.bind(null, "Vary");
- },
-
- _sortItems: function()
+ _setupDropdownColumns: function()
+ {
+ for (var columnConfig of this._columns) {
+ if (!columnConfig.sortConfig || !columnConfig.sortConfig.entries)
+ continue;
+ var select = createElement("select");
+ var placeHolderOption = select.createChild("option");
+ placeHolderOption.classList.add("hidden");
+ for (var entry of columnConfig.sortConfig.entries) {
+ var option = select.createChild("option");
+ option.value = entry.id;
+ option.label = entry.title;
+ select.appendChild(option);
+ }
+ var header = this._dataGrid.headerTableHeader(columnConfig.id);
+ header.replaceChild(select, header.firstChild);
+ header.createChild("div", "sort-order-icon-container").createChild("div", "sort-order-icon");
+ columnConfig.selectBox = select;
+ select.addEventListener("change", this._sortByDropdownItem.bind(this, columnConfig), false);
+ this._dropDownColumnSelectors.push(select);
+ }
+ },
+
+ sortByCurrentColumn: function()
+ {
+ this._sortHandler();
+ },
+
+ _sortHandler: function()
{
- this._networkLogView.removeAllNodeHighlights();
var columnIdentifier = this._dataGrid.sortColumnIdentifier();
- if (!columnIdentifier)
+ var columnConfig = this._columns.find(columnConfig => columnConfig.id === columnIdentifier);
+ if (!columnConfig)
return;
- if (columnIdentifier === "timeline") {
- this._sortByTimeline();
+ if (columnConfig.sortConfig && columnConfig.sortConfig.entries) {
+ this._sortByDropdownItem(columnConfig);
return;
}
- var sortingFunction = this._sortingFunctions[columnIdentifier];
- if (!sortingFunction)
+ if (!columnConfig.sortConfig.sortingFunction)
return;
- this._dataGrid.sortNodes(sortingFunction, !this._dataGrid.isSortOrderAscending());
- this._timelineSortSelector.selectedIndex = 0;
+ this._networkLogView.removeAllNodeHighlights();
+ this._dataGrid.sortNodes(columnConfig.sortConfig.sortingFunction, !this._dataGrid.isSortOrderAscending());
this._networkLogView.dataGridSorted();
},
- _sortByTimeline: function()
+ /**
+ * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig
+ */
+ _sortByDropdownItem: function(columnConfig)
{
this._networkLogView.removeAllNodeHighlights();
- var selectedIndex = this._timelineSortSelector.selectedIndex;
+ var selectedIndex = columnConfig.selectBox.selectedIndex;
if (!selectedIndex)
- selectedIndex = 1; // Sort by start time by default.
- var selectedOption = this._timelineSortSelector[selectedIndex];
+ selectedIndex = 1; // Sort by first item by default.
+ var selectedItemConfig = columnConfig.sortConfig.entries[selectedIndex - 1]; // -1 because of placeholder.
+ var selectedOption = columnConfig.selectBox[selectedIndex];
var value = selectedOption.value;
- this._networkLogView.setCalculator(this._calculators[value]);
- var sortingFunction = this._sortingFunctions[value];
- this._dataGrid.sortNodes(sortingFunction);
-
+ this._dataGrid.sortNodes(selectedItemConfig.sortingFunction);
+ this._dataGrid.markColumnAsSortedBy(columnConfig.id, /** @type {!WebInspector.DataGrid.Order} */ (selectedItemConfig.sort));
+ if (selectedItemConfig.calculator)
+ this._networkLogView.setCalculator(this._calculatorsMap.get(selectedItemConfig.calculator));
+ columnConfig.selectBox.options[0].label = selectedItemConfig.title;
+ columnConfig.selectBox.selectedIndex = 0;
this._networkLogView.dataGridSorted();
-
- this._dataGrid.markColumnAsSortedBy("timeline", selectedOption.sortOrder);
- },
-
- _patchTimelineHeader: function()
- {
- var timelineSorting = createElement("select");
-
- var option = createElement("option");
- option.value = "startTime";
- option.label = WebInspector.UIString("Timeline");
- option.disabled = true;
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "startTime";
- option.label = WebInspector.UIString("Timeline \u2013 Start Time");
- option.sortOrder = WebInspector.DataGrid.Order.Ascending;
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "responseTime";
- option.label = WebInspector.UIString("Timeline \u2013 Response Time");
- option.sortOrder = WebInspector.DataGrid.Order.Ascending;
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "endTime";
- option.label = WebInspector.UIString("Timeline \u2013 End Time");
- option.sortOrder = WebInspector.DataGrid.Order.Ascending;
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "duration";
- option.label = WebInspector.UIString("Timeline \u2013 Total Duration");
- option.sortOrder = WebInspector.DataGrid.Order.Descending;
- timelineSorting.appendChild(option);
-
- option = createElement("option");
- option.value = "latency";
- option.label = WebInspector.UIString("Timeline \u2013 Latency");
- option.sortOrder = WebInspector.DataGrid.Order.Descending;
- timelineSorting.appendChild(option);
-
- var header = this._dataGrid.headerTableHeader("timeline");
- header.replaceChild(timelineSorting, header.firstChild);
- header.createChild("div", "sort-order-icon-container").createChild("div", "sort-order-icon");
-
- timelineSorting.selectedIndex = 1;
- timelineSorting.addEventListener("click", function(event) { event.consume(); }, false);
- timelineSorting.addEventListener("change", this._sortByTimeline.bind(this), false);
- this._timelineSortSelector = timelineSorting;
},
_updateColumns: function()
{
if (!this._dataGrid)
return;
- var gridMode = this._gridMode;
- var visibleColumns = {"name": true};
- if (gridMode)
- visibleColumns["timeline"] = true;
- if (gridMode) {
- var columnsVisibility = this._columnsVisibilitySetting.get();
- for (var columnIdentifier in columnsVisibility)
- visibleColumns[columnIdentifier] = columnsVisibility[columnIdentifier];
+ var visibleColumns = /** @type {!Object.<string, boolean>} */ ({});
+ if (this._gridMode) {
+ for (var columnConfig of this._columns)
+ visibleColumns[columnConfig.id] = (columnConfig.visible || !columnConfig.hideable);
+ } else {
+ visibleColumns.name = true;
}
-
this._dataGrid.setColumnsVisiblity(visibleColumns);
},
@@ -438,34 +521,43 @@ WebInspector.NetworkLogViewColumns.prototype = {
},
/**
- * @param {string} columnIdentifier
+ * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig
*/
- _toggleColumnVisibility: function(columnIdentifier)
+ _toggleColumnVisibility: function(columnConfig)
{
- var columnsVisibility = this._columnsVisibilitySetting.get();
- columnsVisibility[columnIdentifier] = !columnsVisibility[columnIdentifier];
- this._columnsVisibilitySetting.set(columnsVisibility);
-
+ this._loadColumns();
+ columnConfig.visible = !columnConfig.visible;
+ this._saveColumns();
this._updateColumns();
},
- /**
- * @return {!Array.<string>}
- */
- _getConfigurableColumnIDs: function()
+ _saveColumns: function()
{
- if (this._configurableColumnIDs)
- return this._configurableColumnIDs;
-
- var columnTitles = WebInspector.NetworkLogViewColumns._columnTitles;
- function compare(id1, id2)
- {
- return columnTitles[id1].compareTo(columnTitles[id2]);
+ var saveableSettings = {};
+ for (var columnConfig of this._columns) {
+ saveableSettings[columnConfig.id] = {
+ visible: columnConfig.visible,
+ title: columnConfig.title
+ };
}
+ this._persistantSettings.set(saveableSettings);
+ },
- var columnIDs = Object.keys(this._columnsVisibilitySetting.get());
- this._configurableColumnIDs = columnIDs.sort(compare);
- return this._configurableColumnIDs;
+ _loadColumns: function()
+ {
+ var savedSettings = this._persistantSettings.get();
+ var columnIds = Object.keys(savedSettings);
+ for (var columnId of columnIds) {
+ var setting = savedSettings[columnId];
+ var columnConfig = this._columns.find(columnConfig => columnConfig.id === columnId);
+ if (!columnConfig)
+ continue;
+
+ if (columnConfig.hideable && typeof setting.visible === "boolean")
+ columnConfig.visible = !!setting.visible;
+ if (typeof setting.title === "string")
+ columnConfig.title = setting.title;
+ }
},
/**
@@ -491,15 +583,19 @@ WebInspector.NetworkLogViewColumns.prototype = {
if (!this._gridMode || !event.target.isSelfOrDescendant(this._dataGrid.headerTableBody))
return false;
+ var columnConfigs = this._columns.filter(columnConfig => columnConfig.hideable);
var contextMenu = new WebInspector.ContextMenu(event);
+ var nonResponseHeaders = columnConfigs.filter(columnConfig => !columnConfig.isResponseHeader);
+ for (var columnConfig of nonResponseHeaders)
+ contextMenu.appendCheckboxItem(columnConfig.title, this._toggleColumnVisibility.bind(this, columnConfig), columnConfig.visible);
+
+ contextMenu.appendSeparator();
+
+ var responseSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIString("Response Headers"));
+ var responseHeaders = columnConfigs.filter(columnConfig => columnConfig.isResponseHeader);
+ for (var columnConfig of responseHeaders)
+ responseSubMenu.appendCheckboxItem(columnConfig.title, this._toggleColumnVisibility.bind(this, columnConfig), columnConfig.visible);
- var columnsVisibility = this._columnsVisibilitySetting.get();
- var columnIDs = this._getConfigurableColumnIDs();
- var columnTitles = WebInspector.NetworkLogViewColumns._columnTitles;
- for (var i = 0; i < columnIDs.length; ++i) {
- var columnIdentifier = columnIDs[i];
- contextMenu.appendCheckboxItem(columnTitles[columnIdentifier], this._toggleColumnVisibility.bind(this, columnIdentifier), !!columnsVisibility[columnIdentifier]);
- }
contextMenu.show();
return true;
},
@@ -516,7 +612,7 @@ WebInspector.NetworkLogViewColumns.prototype = {
if (timelineOffset)
this._timelineGrid.element.style.left = timelineOffset + "px";
- var calculator = this._networkLogView.calculator();
+ var calculator = this._calculatorsMap.get(WebInspector.NetworkLogViewColumns._calculatorTypes.Time);
calculator.setDisplayWindow(this._timelineGrid.dividersElement.clientWidth);
this._timelineGrid.updateDividers(calculator, 75);
@@ -593,7 +689,7 @@ WebInspector.NetworkLogViewColumns.prototype = {
_updateEventDividers: function()
{
- var calculator = this._networkLogView.calculator();
+ var calculator = this._calculatorsMap.get(WebInspector.NetworkLogViewColumns._calculatorTypes.Time);
for (var divider of this._eventDividers) {
var timePercent = calculator.computePercentageFromEventTime(divider.time);
divider.element.classList.toggle("invisible", timePercent < 0);
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698