OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 /** | 4 /** |
5 * @unrestricted | 5 * @unrestricted |
6 */ | 6 */ |
7 Network.NetworkLogViewColumns = class { | 7 Network.NetworkLogViewColumns = class { |
8 /** | 8 /** |
9 * @param {!Network.NetworkLogView} networkLogView | 9 * @param {!Network.NetworkLogView} networkLogView |
10 * @param {!Network.NetworkTransferTimeCalculator} timeCalculator | 10 * @param {!Network.NetworkTransferTimeCalculator} timeCalculator |
(...skipping 11 matching lines...) Expand all Loading... |
22 | 22 |
23 /** @type {!Map<string, !Array<number>>} */ | 23 /** @type {!Map<string, !Array<number>>} */ |
24 this._eventDividers = new Map(); | 24 this._eventDividers = new Map(); |
25 this._eventDividersShown = false; | 25 this._eventDividersShown = false; |
26 | 26 |
27 this._gridMode = true; | 27 this._gridMode = true; |
28 | 28 |
29 /** @type {!Array.<!Network.NetworkLogViewColumns.Descriptor>} */ | 29 /** @type {!Array.<!Network.NetworkLogViewColumns.Descriptor>} */ |
30 this._columns = []; | 30 this._columns = []; |
31 | 31 |
32 /** @type {!Map<string, ?Network.NetworkColumnExtensionInterface>} */ | |
33 this._columnExtensions = new Map(); | |
34 | |
35 this._waterfallRequestsAreStale = false; | 32 this._waterfallRequestsAreStale = false; |
36 this._waterfallScrollerWidthIsStale = true; | 33 this._waterfallScrollerWidthIsStale = true; |
37 | 34 |
| 35 /** @type {?ProductRegistry.Registry} */ |
| 36 this._productRegistryInstance = null; |
| 37 |
38 /** @type {!Components.Linkifier} */ | 38 /** @type {!Components.Linkifier} */ |
39 this._popupLinkifier = new Components.Linkifier(); | 39 this._popupLinkifier = new Components.Linkifier(); |
40 | 40 |
41 /** @type {!Map<string, !Network.NetworkTimeCalculator>} */ | 41 /** @type {!Map<string, !Network.NetworkTimeCalculator>} */ |
42 this._calculatorsMap = new Map(); | 42 this._calculatorsMap = new Map(); |
43 this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Time
, timeCalculator); | 43 this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Time
, timeCalculator); |
44 this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Dura
tion, durationCalculator); | 44 this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Dura
tion, durationCalculator); |
45 | 45 |
46 this._setupDataGrid(); | 46 this._setupDataGrid(); |
47 this._setupWaterfall(); | 47 this._setupWaterfall(); |
(...skipping 23 matching lines...) Expand all Loading... |
71 } | 71 } |
72 | 72 |
73 reset() { | 73 reset() { |
74 if (this._popoverHelper) | 74 if (this._popoverHelper) |
75 this._popoverHelper.hidePopover(); | 75 this._popoverHelper.hidePopover(); |
76 this._eventDividers.clear(); | 76 this._eventDividers.clear(); |
77 } | 77 } |
78 | 78 |
79 _setupDataGrid() { | 79 _setupDataGrid() { |
80 var defaultColumns = Network.NetworkLogViewColumns._defaultColumns; | 80 var defaultColumns = Network.NetworkLogViewColumns._defaultColumns; |
| 81 |
| 82 if (Runtime.experiments.isEnabled('networkGroupingRequests')) { |
| 83 defaultColumns.splice(1, 0, /** @type {!Network.NetworkLogViewColumns.Desc
riptor} */ ({ |
| 84 id: 'product', |
| 85 title: Common.UIString('Product'), |
| 86 visible: true |
| 87 })); |
| 88 } |
| 89 |
81 var defaultColumnConfig = Network.NetworkLogViewColumns._defaultColumnConfig
; | 90 var defaultColumnConfig = Network.NetworkLogViewColumns._defaultColumnConfig
; |
82 | 91 |
83 this._columns = /** @type {!Array<!Network.NetworkLogViewColumns.Descriptor>
} */ ([]); | 92 this._columns = /** @type {!Array<!Network.NetworkLogViewColumns.Descriptor>
} */ ([]); |
84 for (var currentConfigColumn of defaultColumns) { | 93 for (var currentConfigColumn of defaultColumns) { |
85 var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} *
/ ( | 94 var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} *
/ ( |
86 Object.assign({}, defaultColumnConfig, currentConfigColumn)); | 95 Object.assign({}, defaultColumnConfig, currentConfigColumn)); |
87 columnConfig.id = columnConfig.id; | 96 columnConfig.id = columnConfig.id; |
88 if (columnConfig.subtitle) | 97 if (columnConfig.subtitle) |
89 columnConfig.titleDOMFragment = this._makeHeaderFragment(columnConfig.ti
tle, columnConfig.subtitle); | 98 columnConfig.titleDOMFragment = this._makeHeaderFragment(columnConfig.ti
tle, columnConfig.subtitle); |
90 this._columns.push(columnConfig); | 99 this._columns.push(columnConfig); |
91 } | 100 } |
92 this._loadColumnExtensions(); | |
93 this._loadCustomColumnsAndSettings(); | 101 this._loadCustomColumnsAndSettings(); |
94 | 102 |
95 this._popoverHelper = new UI.PopoverHelper(this._networkLogView.element, thi
s._getPopoverRequest.bind(this)); | 103 this._popoverHelper = new UI.PopoverHelper(this._networkLogView.element, thi
s._getPopoverRequest.bind(this)); |
96 this._popoverHelper.setHasPadding(true); | 104 this._popoverHelper.setHasPadding(true); |
97 | 105 |
98 /** @type {!DataGrid.SortableDataGrid<!Network.NetworkNode>} */ | 106 /** @type {!DataGrid.SortableDataGrid<!Network.NetworkNode>} */ |
99 this._dataGrid = | 107 this._dataGrid = |
100 new DataGrid.SortableDataGrid(this._columns.map(Network.NetworkLogViewCo
lumns._convertToDataGridDescriptor)); | 108 new DataGrid.SortableDataGrid(this._columns.map(Network.NetworkLogViewCo
lumns._convertToDataGridDescriptor)); |
101 this._dataGrid.element.addEventListener('mousedown', event => { | 109 this._dataGrid.element.addEventListener('mousedown', event => { |
102 if (!this._dataGrid.selectedNode && event.button) | 110 if (!this._dataGrid.selectedNode && event.button) |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 if (columnId === 'waterfall') { | 280 if (columnId === 'waterfall') { |
273 if (this._dataGrid.sortOrder() === DataGrid.DataGrid.Order.Ascending) | 281 if (this._dataGrid.sortOrder() === DataGrid.DataGrid.Order.Ascending) |
274 this._waterfallColumnSortIcon.setIconType('smallicon-triangle-up'); | 282 this._waterfallColumnSortIcon.setIconType('smallicon-triangle-up'); |
275 else | 283 else |
276 this._waterfallColumnSortIcon.setIconType('smallicon-triangle-down'); | 284 this._waterfallColumnSortIcon.setIconType('smallicon-triangle-down'); |
277 | 285 |
278 var sortFunction = Network.NetworkRequestNode.RequestPropertyComparator.bi
nd(null, this._activeWaterfallSortId); | 286 var sortFunction = Network.NetworkRequestNode.RequestPropertyComparator.bi
nd(null, this._activeWaterfallSortId); |
279 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscendin
g()); | 287 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscendin
g()); |
280 this._networkLogView.dataGridSorted(); | 288 this._networkLogView.dataGridSorted(); |
281 return; | 289 return; |
| 290 } else if (columnId === 'product' && !this._productRegistryInstance) { |
| 291 ProductRegistry.instance().then(productRegistry => { |
| 292 this._productRegistryInstance = productRegistry; |
| 293 var columnConfig = this._columns.find(columnConfig => columnConfig.id ==
= columnId); |
| 294 if (!columnConfig) |
| 295 return; |
| 296 columnConfig.sortingFunction = Network.NetworkRequestNode.ProductCompara
tor.bind(null, productRegistry); |
| 297 if (this._dataGrid.sortColumnId() === 'product') |
| 298 this._sortHandler(); |
| 299 }); |
| 300 return; |
282 } | 301 } |
283 this._waterfallColumnSortIcon.setIconType(''); | 302 this._waterfallColumnSortIcon.setIconType(''); |
284 | 303 |
285 var columnConfig = this._columns.find(columnConfig => columnConfig.id === co
lumnId); | 304 var columnConfig = this._columns.find(columnConfig => columnConfig.id === co
lumnId); |
286 if (!columnConfig || !columnConfig.sortingFunction) | 305 if (!columnConfig || !columnConfig.sortingFunction) |
287 return; | 306 return; |
288 | 307 |
289 this._dataGrid.sortNodes(columnConfig.sortingFunction, !this._dataGrid.isSor
tOrderAscending()); | 308 this._dataGrid.sortNodes(columnConfig.sortingFunction, !this._dataGrid.isSor
tOrderAscending()); |
290 this._networkLogView.dataGridSorted(); | 309 this._networkLogView.dataGridSorted(); |
291 } | 310 } |
(...skipping 30 matching lines...) Expand all Loading... |
322 this._networkLogView.removeAllNodeHighlights(); | 341 this._networkLogView.removeAllNodeHighlights(); |
323 this._splitWidget.hideSidebar(); | 342 this._splitWidget.hideSidebar(); |
324 this._activeScroller = this._dataGridScroller; | 343 this._activeScroller = this._dataGridScroller; |
325 this._dataGrid.setScrollContainer(this._dataGridScroller); | 344 this._dataGrid.setScrollContainer(this._dataGridScroller); |
326 } | 345 } |
327 this._networkLogView.element.classList.toggle('brief-mode', !gridMode); | 346 this._networkLogView.element.classList.toggle('brief-mode', !gridMode); |
328 this._updateColumns(); | 347 this._updateColumns(); |
329 } | 348 } |
330 | 349 |
331 /** | 350 /** |
332 * @return {!Map<string, ?Network.NetworkColumnExtensionInterface>} | |
333 */ | |
334 columnExtensions() { | |
335 return this._columnExtensions; | |
336 } | |
337 | |
338 /** | |
339 * @param {!Network.NetworkLogViewColumns.Descriptor} columnConfig | 351 * @param {!Network.NetworkLogViewColumns.Descriptor} columnConfig |
340 */ | 352 */ |
341 _toggleColumnVisibility(columnConfig) { | 353 _toggleColumnVisibility(columnConfig) { |
342 this._loadCustomColumnsAndSettings(); | 354 this._loadCustomColumnsAndSettings(); |
343 columnConfig.visible = !columnConfig.visible; | 355 columnConfig.visible = !columnConfig.visible; |
344 this._saveColumnsSettings(); | 356 this._saveColumnsSettings(); |
345 this._updateColumns(); | 357 this._updateColumns(); |
346 } | 358 } |
347 | 359 |
348 _saveColumnsSettings() { | 360 _saveColumnsSettings() { |
349 var saveableSettings = {}; | 361 var saveableSettings = {}; |
350 for (var columnConfig of this._columns) | 362 for (var columnConfig of this._columns) |
351 saveableSettings[columnConfig.id] = {visible: columnConfig.visible, title:
columnConfig.title}; | 363 saveableSettings[columnConfig.id] = {visible: columnConfig.visible, title:
columnConfig.title}; |
352 | 364 |
353 this._persistantSettings.set(saveableSettings); | 365 this._persistantSettings.set(saveableSettings); |
354 } | 366 } |
355 | 367 |
356 _loadColumnExtensions() { | |
357 var extensions = self.runtime.extensions(Network.NetworkColumnExtensionInter
face); | |
358 for (var i = 0; i < extensions.length; i++) { | |
359 var extension = extensions[i]; | |
360 var title = extension.title(); | |
361 var columnId = title.toLowerCase() + '-extension'; | |
362 | |
363 this._columnExtensions.set(columnId, null); | |
364 extension.instance().then(extensionInstanceResolved.bind(this, columnId)); | |
365 | |
366 var columnConfig = /** @type {!Network.NetworkLogViewColumns.Descriptor} *
/ ( | |
367 Object.assign({}, Network.NetworkLogViewColumns._defaultColumnConfig,
{ | |
368 id: columnId, | |
369 title: title, | |
370 isResponseHeader: false, | |
371 isCustomHeader: false, | |
372 visible: true, | |
373 sortingFunction: | |
374 Network.NetworkRequestNode.ExtensionColumnComparator.bind(null,
this._columnExtensions, columnId) | |
375 })); | |
376 const columnIndex = i + 1; | |
377 this._columns.splice(columnIndex, 0, columnConfig); | |
378 if (this._dataGrid) | |
379 this._dataGrid.addColumn(Network.NetworkLogViewColumns._convertToDataGri
dDescriptor(columnConfig), columnIndex); | |
380 } | |
381 | |
382 /** | |
383 * @param {string} columnId | |
384 * @param {!Network.NetworkColumnExtensionInterface} instance | |
385 * @this {Network.NetworkLogViewColumns} | |
386 */ | |
387 function extensionInstanceResolved(columnId, instance) { | |
388 this._columnExtensions.set(columnId, instance); | |
389 this._networkLogView.columnExtensionResolved(); | |
390 } | |
391 } | |
392 | |
393 _loadCustomColumnsAndSettings() { | 368 _loadCustomColumnsAndSettings() { |
394 var savedSettings = this._persistantSettings.get(); | 369 var savedSettings = this._persistantSettings.get(); |
395 var columnIds = Object.keys(savedSettings); | 370 var columnIds = Object.keys(savedSettings); |
396 for (var columnId of columnIds) { | 371 for (var columnId of columnIds) { |
397 var setting = savedSettings[columnId]; | 372 var setting = savedSettings[columnId]; |
398 var columnConfig = this._columns.find(columnConfig => columnConfig.id ===
columnId); | 373 var columnConfig = this._columns.find(columnConfig => columnConfig.id ===
columnId); |
399 if (!columnConfig) | 374 if (!columnConfig) |
400 columnConfig = this._addCustomHeader(setting.title, columnId); | 375 columnConfig = this._addCustomHeader(setting.title, columnId); |
401 if (columnConfig.hideable && typeof setting.visible === 'boolean') | 376 if (columnConfig.hideable && typeof setting.visible === 'boolean') |
402 columnConfig.visible = !!setting.visible; | 377 columnConfig.visible = !!setting.visible; |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 this._redrawWaterfallColumn(); | 610 this._redrawWaterfallColumn(); |
636 } | 611 } |
637 | 612 |
638 clearFilmStripFrame() { | 613 clearFilmStripFrame() { |
639 this._eventDividers.delete(Network.NetworkLogViewColumns._filmStripDividerCo
lor); | 614 this._eventDividers.delete(Network.NetworkLogViewColumns._filmStripDividerCo
lor); |
640 this._redrawWaterfallColumn(); | 615 this._redrawWaterfallColumn(); |
641 } | 616 } |
642 }; | 617 }; |
643 | 618 |
644 Network.NetworkLogViewColumns._initialSortColumn = 'waterfall'; | 619 Network.NetworkLogViewColumns._initialSortColumn = 'waterfall'; |
| 620 /** @type {?ProductRegistry.Registry} */ |
| 621 Network.NetworkRequestNode._productRegistryInstance = null; |
645 | 622 |
646 /** | 623 /** |
647 * @typedef {{ | 624 * @typedef {{ |
648 * id: string, | 625 * id: string, |
649 * title: string, | 626 * title: string, |
650 * titleDOMFragment: (!DocumentFragment|undefined), | 627 * titleDOMFragment: (!DocumentFragment|undefined), |
651 * subtitle: (string|null), | 628 * subtitle: (string|null), |
652 * visible: boolean, | 629 * visible: boolean, |
653 * weight: number, | 630 * weight: number, |
654 * hideable: boolean, | 631 * hideable: boolean, |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 /** | 824 /** |
848 * @enum {string} | 825 * @enum {string} |
849 */ | 826 */ |
850 Network.NetworkLogViewColumns.WaterfallSortIds = { | 827 Network.NetworkLogViewColumns.WaterfallSortIds = { |
851 StartTime: 'startTime', | 828 StartTime: 'startTime', |
852 ResponseTime: 'responseReceivedTime', | 829 ResponseTime: 'responseReceivedTime', |
853 EndTime: 'endTime', | 830 EndTime: 'endTime', |
854 Duration: 'duration', | 831 Duration: 'duration', |
855 Latency: 'latency' | 832 Latency: 'latency' |
856 }; | 833 }; |
857 | |
858 /** | |
859 * @interface | |
860 */ | |
861 Network.NetworkColumnExtensionInterface = function() {}; | |
862 | |
863 Network.NetworkColumnExtensionInterface.prototype = { | |
864 /** | |
865 * @param {!SDK.NetworkRequest} request | |
866 * @return {string} | |
867 */ | |
868 lookupColumnValue(request) {}, | |
869 | |
870 /** | |
871 * @param {!SDK.NetworkRequest} aRequest | |
872 * @param {!SDK.NetworkRequest} bRequest | |
873 * @return {number} | |
874 */ | |
875 requestComparator(aRequest, bRequest) {} | |
876 }; | |
OLD | NEW |