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 /** | 5 /** |
6 * @constructor | 6 * @constructor |
7 * @param {!WebInspector.NetworkLogView} networkLogView | 7 * @param {!WebInspector.NetworkLogView} networkLogView |
8 * @param {!WebInspector.NetworkTransferTimeCalculator} timeCalculator | 8 * @param {!WebInspector.NetworkTransferTimeCalculator} timeCalculator |
9 * @param {!WebInspector.NetworkTransferDurationCalculator} durationCalculator | 9 * @param {!WebInspector.NetworkTransferDurationCalculator} durationCalculator |
10 * @param {!WebInspector.Setting} networkLogLargeRowsSetting | 10 * @param {!WebInspector.Setting} networkLogLargeRowsSetting |
11 */ | 11 */ |
12 WebInspector.NetworkLogViewColumns = function(networkLogView, timeCalculator, du
rationCalculator, networkLogLargeRowsSetting) | 12 WebInspector.NetworkLogViewColumns = function(networkLogView, timeCalculator, du
rationCalculator, networkLogLargeRowsSetting) |
13 { | 13 { |
14 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { | 14 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { |
15 var timelineColumn = WebInspector.NetworkLogViewColumns._defaultColumns.
find(columnConfig => columnConfig.id === "timeline"); | 15 var timelineColumn = WebInspector.NetworkLogViewColumns._defaultColumns.
find(columnConfig => columnConfig.id === "timeline"); |
16 timelineColumn.visible = false; | 16 timelineColumn.visible = false; |
17 timelineColumn.hideable = true; | 17 timelineColumn.hideable = false; |
18 timelineColumn.sortConfig = { | |
19 sortingFunction: WebInspector.NetworkDataGridNode.RequestPropertyCom
parator.bind(null, "startTime") | |
20 }; | |
21 } | 18 } |
22 | 19 |
23 this._networkLogView = networkLogView; | 20 this._networkLogView = networkLogView; |
24 | 21 |
25 /** @type {!WebInspector.Setting} */ | 22 /** @type {!WebInspector.Setting} */ |
26 this._persistantSettings = WebInspector.settings.createSetting("networkLogCo
lumns", {}); | 23 this._persistantSettings = WebInspector.settings.createSetting("networkLogCo
lumns", {}); |
27 | 24 |
28 /** @type {!Array<!Element>} */ | 25 /** @type {!Array<!Element>} */ |
29 this._dropDownColumnSelectors = []; | 26 this._dropDownColumnSelectors = []; |
30 | 27 |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 calculator: WebInspector.NetworkLogViewColumns._calculatorTy
pes.Duration | 357 calculator: WebInspector.NetworkLogViewColumns._calculatorTy
pes.Duration |
361 } | 358 } |
362 ] | 359 ] |
363 } | 360 } |
364 } | 361 } |
365 ]; | 362 ]; |
366 | 363 |
367 WebInspector.NetworkLogViewColumns._filmStripDividerColor = "#fccc49"; | 364 WebInspector.NetworkLogViewColumns._filmStripDividerColor = "#fccc49"; |
368 | 365 |
369 /** | 366 /** |
| 367 * @enum {string} |
| 368 */ |
| 369 WebInspector.NetworkLogViewColumns.TimelineSortIds = { |
| 370 StartTime: "startTime", |
| 371 ResponseTime: "responseReceivedTime", |
| 372 EndTime: "endTime", |
| 373 Duration: "duration", |
| 374 Latency: "latency" |
| 375 }; |
| 376 |
| 377 /** |
370 * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig | 378 * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig |
371 * @return {!WebInspector.DataGrid.ColumnDescriptor} | 379 * @return {!WebInspector.DataGrid.ColumnDescriptor} |
372 */ | 380 */ |
373 WebInspector.NetworkLogViewColumns._convertToDataGridDescriptor = function(colum
nConfig) | 381 WebInspector.NetworkLogViewColumns._convertToDataGridDescriptor = function(colum
nConfig) |
374 { | 382 { |
375 return /** @type {!WebInspector.DataGrid.ColumnDescriptor} */ ({ | 383 return /** @type {!WebInspector.DataGrid.ColumnDescriptor} */ ({ |
376 id: columnConfig.id, | 384 id: columnConfig.id, |
377 title: columnConfig.title, | 385 title: columnConfig.title, |
378 sortable: columnConfig.sortable, | 386 sortable: columnConfig.sortable, |
379 align: columnConfig.align, | 387 align: columnConfig.align, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResi
zed, this.updateDividersIfNeeded, this); | 441 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResi
zed, this.updateDividersIfNeeded, this); |
434 this._dataGrid.setHeaderContextMenuCallback(this._innerHeaderContextMenu
.bind(this)); | 442 this._dataGrid.setHeaderContextMenuCallback(this._innerHeaderContextMenu
.bind(this)); |
435 | 443 |
436 this._timelineGrid = new WebInspector.TimelineGrid(); | 444 this._timelineGrid = new WebInspector.TimelineGrid(); |
437 this._timelineGrid.element.classList.add("network-timeline-grid"); | 445 this._timelineGrid.element.classList.add("network-timeline-grid"); |
438 if (!Runtime.experiments.isEnabled("canvasNetworkTimeline")) | 446 if (!Runtime.experiments.isEnabled("canvasNetworkTimeline")) |
439 this._dataGrid.element.appendChild(this._timelineGrid.element); | 447 this._dataGrid.element.appendChild(this._timelineGrid.element); |
440 | 448 |
441 this._setupDropdownColumns(); | 449 this._setupDropdownColumns(); |
442 | 450 |
| 451 this._activeTimelineSortId = WebInspector.NetworkLogViewColumns.Timeline
SortIds.StartTime; |
443 this._dataGrid.markColumnAsSortedBy(WebInspector.NetworkLogViewColumns._
initialSortColumn, WebInspector.DataGrid.Order.Ascending); | 452 this._dataGrid.markColumnAsSortedBy(WebInspector.NetworkLogViewColumns._
initialSortColumn, WebInspector.DataGrid.Order.Ascending); |
444 | 453 |
445 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { | 454 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { |
446 this._splitWidget = new WebInspector.SplitWidget(true, false, "netwo
rkPanelSplitViewTimeline"); | 455 this._splitWidget = new WebInspector.SplitWidget(true, false, "netwo
rkPanelSplitViewTimeline"); |
447 this._splitWidget.setSidebarWidget(this._dataGrid.asWidget()); | 456 this._splitWidget.setSidebarWidget(this._dataGrid.asWidget()); |
448 } | 457 } |
449 }, | 458 }, |
450 | 459 |
451 _setupTimeline: function() | 460 _setupTimeline: function() |
452 { | 461 { |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 }, | 640 }, |
632 | 641 |
633 sortByCurrentColumn: function() | 642 sortByCurrentColumn: function() |
634 { | 643 { |
635 this._sortHandler(); | 644 this._sortHandler(); |
636 }, | 645 }, |
637 | 646 |
638 _sortHandler: function() | 647 _sortHandler: function() |
639 { | 648 { |
640 var columnId = this._dataGrid.sortColumnId(); | 649 var columnId = this._dataGrid.sortColumnId(); |
| 650 this._networkLogView.removeAllNodeHighlights(); |
| 651 if (Runtime.experiments.isEnabled("canvasNetworkTimeline") && columnId =
== "timeline") { |
| 652 this._timelineColumnSortIcon.classList.remove("sort-ascending", "sor
t-descending"); |
| 653 |
| 654 if (this._dataGrid.sortOrder() === WebInspector.DataGrid.Order.Ascen
ding) |
| 655 this._timelineColumnSortIcon.classList.add("sort-ascending"); |
| 656 else |
| 657 this._timelineColumnSortIcon.classList.add("sort-descending"); |
| 658 |
| 659 this._timelineRequestsAreStale = true; |
| 660 var sortFunction = WebInspector.NetworkDataGridNode.RequestPropertyC
omparator.bind(null, this._activeTimelineSortId); |
| 661 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAs
cending()); |
| 662 return; |
| 663 } |
| 664 |
641 var columnConfig = this._columns.find(columnConfig => columnConfig.id ==
= columnId); | 665 var columnConfig = this._columns.find(columnConfig => columnConfig.id ==
= columnId); |
642 if (!columnConfig) | 666 if (!columnConfig) |
643 return; | 667 return; |
644 if (columnConfig.sortConfig && columnConfig.sortConfig.entries) { | 668 if (columnConfig.sortConfig && columnConfig.sortConfig.entries) { |
645 this._sortByDropdownItem(columnConfig); | 669 this._sortByDropdownItem(columnConfig); |
646 return; | 670 return; |
647 } | 671 } |
648 if (!columnConfig.sortConfig.sortingFunction) | 672 if (!columnConfig.sortConfig.sortingFunction) |
649 return; | 673 return; |
650 | 674 |
651 this._networkLogView.removeAllNodeHighlights(); | |
652 this._dataGrid.sortNodes(columnConfig.sortConfig.sortingFunction, !this.
_dataGrid.isSortOrderAscending()); | 675 this._dataGrid.sortNodes(columnConfig.sortConfig.sortingFunction, !this.
_dataGrid.isSortOrderAscending()); |
653 this._networkLogView.dataGridSorted(); | 676 this._networkLogView.dataGridSorted(); |
654 | |
655 if (!Runtime.experiments.isEnabled("canvasNetworkTimeline")) | |
656 return; | |
657 | |
658 this._timelineColumnSortIcon.classList.remove("sort-ascending", "sort-de
scending"); | |
659 | |
660 if (this._dataGrid.sortColumnId() === "timeline") { | |
661 if (this._dataGrid.sortOrder() === WebInspector.DataGrid.Order.Ascen
ding) | |
662 this._timelineColumnSortIcon.classList.add("sort-ascending"); | |
663 else | |
664 this._timelineColumnSortIcon.classList.add("sort-descending"); | |
665 } | |
666 | |
667 this._timelineRequestsAreStale = true; | |
668 | |
669 }, | 677 }, |
670 | 678 |
671 /** | 679 /** |
672 * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig | 680 * @param {!WebInspector.NetworkLogViewColumns.Descriptor} columnConfig |
673 */ | 681 */ |
674 _sortByDropdownItem: function(columnConfig) | 682 _sortByDropdownItem: function(columnConfig) |
675 { | 683 { |
676 this._networkLogView.removeAllNodeHighlights(); | 684 this._networkLogView.removeAllNodeHighlights(); |
677 var selectedIndex = columnConfig.selectBox.selectedIndex; | 685 var selectedIndex = columnConfig.selectBox.selectedIndex; |
678 if (!selectedIndex) | 686 if (!selectedIndex) |
679 selectedIndex = 1; // Sort by first item by default. | 687 selectedIndex = 1; // Sort by first item by default. |
680 var selectedItemConfig = columnConfig.sortConfig.entries[selectedIndex -
1]; // -1 because of placeholder. | 688 var selectedItemConfig = columnConfig.sortConfig.entries[selectedIndex -
1]; // -1 because of placeholder. |
681 var selectedOption = columnConfig.selectBox[selectedIndex]; | 689 var selectedOption = columnConfig.selectBox[selectedIndex]; |
682 var value = selectedOption.value; | 690 var value = selectedOption.value; |
683 | 691 |
684 this._dataGrid.sortNodes(selectedItemConfig.sortingFunction); | 692 this._dataGrid.sortNodes(selectedItemConfig.sortingFunction); |
685 this._dataGrid.markColumnAsSortedBy(columnConfig.id, /** @type {!WebInsp
ector.DataGrid.Order} */ (selectedItemConfig.sort)); | 693 this._dataGrid.markColumnAsSortedBy(columnConfig.id, /** @type {!WebInsp
ector.DataGrid.Order} */ (selectedItemConfig.sort)); |
686 if (selectedItemConfig.calculator) | 694 if (selectedItemConfig.calculator) |
687 this._networkLogView.setCalculator(this._calculatorsMap.get(selected
ItemConfig.calculator)); | 695 this._networkLogView.setCalculator(this._calculatorsMap.get(selected
ItemConfig.calculator)); |
688 columnConfig.selectBox.options[0].label = selectedItemConfig.title; | 696 columnConfig.selectBox.options[0].label = selectedItemConfig.title; |
689 columnConfig.selectBox.selectedIndex = 0; | 697 columnConfig.selectBox.selectedIndex = 0; |
690 this._networkLogView.dataGridSorted(); | 698 this._networkLogView.dataGridSorted(); |
691 | |
692 // TODO(allada) This entire function will be removed when the timeline c
omes out of exp, so copying code above for now. | |
693 if (!Runtime.experiments.isEnabled("canvasNetworkTimeline")) | |
694 return; | |
695 | |
696 this._timelineColumnSortIcon.classList.remove("sort-ascending", "sort-de
scending"); | |
697 | |
698 if (this._dataGrid.sortColumnId() === "timeline") { | |
699 if (this._dataGrid.sortOrder() === WebInspector.DataGrid.Order.Ascen
ding) | |
700 this._timelineColumnSortIcon.classList.add("sort-ascending"); | |
701 else | |
702 this._timelineColumnSortIcon.classList.add("sort-descending"); | |
703 } | |
704 | |
705 this._timelineRequestsAreStale = true; | |
706 }, | 699 }, |
707 | 700 |
708 _updateColumns: function() | 701 _updateColumns: function() |
709 { | 702 { |
710 if (!this._dataGrid) | 703 if (!this._dataGrid) |
711 return; | 704 return; |
712 var visibleColumns = /** @type {!Object.<string, boolean>} */ ({}); | 705 var visibleColumns = /** @type {!Object.<string, boolean>} */ ({}); |
713 if (this._gridMode) { | 706 if (this._gridMode) { |
714 for (var columnConfig of this._columns) | 707 for (var columnConfig of this._columns) |
715 visibleColumns[columnConfig.id] = (columnConfig.visible || !colu
mnConfig.hideable); | 708 visibleColumns[columnConfig.id] = columnConfig.visible; |
716 } else { | 709 } else { |
717 visibleColumns.name = true; | 710 visibleColumns.name = true; |
718 } | 711 } |
719 this._dataGrid.setColumnsVisiblity(visibleColumns); | 712 this._dataGrid.setColumnsVisiblity(visibleColumns); |
720 }, | 713 }, |
721 | 714 |
722 /** | 715 /** |
723 * @param {boolean} gridMode | 716 * @param {boolean} gridMode |
724 */ | 717 */ |
725 switchViewMode: function(gridMode) | 718 switchViewMode: function(gridMode) |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 var subtitleDiv = fragment.createChild("div", "network-header-subtitle")
; | 801 var subtitleDiv = fragment.createChild("div", "network-header-subtitle")
; |
809 subtitleDiv.createTextChild(subtitle); | 802 subtitleDiv.createTextChild(subtitle); |
810 return fragment; | 803 return fragment; |
811 }, | 804 }, |
812 | 805 |
813 /** | 806 /** |
814 * @param {!WebInspector.ContextMenu} contextMenu | 807 * @param {!WebInspector.ContextMenu} contextMenu |
815 */ | 808 */ |
816 _innerHeaderContextMenu: function(contextMenu) | 809 _innerHeaderContextMenu: function(contextMenu) |
817 { | 810 { |
| 811 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { |
| 812 var timelineSortIds = WebInspector.NetworkLogViewColumns.TimelineSor
tIds; |
| 813 var timelineSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIS
tring("Timeline")); |
| 814 timelineSubMenu.appendCheckboxItem(WebInspector.UIString("Start Time
"), setTimelineMode.bind(this, timelineSortIds.StartTime), this._activeTimelineS
ortId === timelineSortIds.StartTime); |
| 815 timelineSubMenu.appendCheckboxItem(WebInspector.UIString("Response T
ime"), setTimelineMode.bind(this, timelineSortIds.ResponseTime), this._activeTim
elineSortId === timelineSortIds.ResponseTime); |
| 816 timelineSubMenu.appendCheckboxItem(WebInspector.UIString("End Time")
, setTimelineMode.bind(this, timelineSortIds.EndTime), this._activeTimelineSortI
d === timelineSortIds.EndTime); |
| 817 timelineSubMenu.appendCheckboxItem(WebInspector.UIString("Total Dura
tion"), setTimelineMode.bind(this, timelineSortIds.Duration), this._activeTimeli
neSortId === timelineSortIds.Duration); |
| 818 timelineSubMenu.appendCheckboxItem(WebInspector.UIString("Latency"),
setTimelineMode.bind(this, timelineSortIds.Latency), this._activeTimelineSortId
=== timelineSortIds.Latency); |
| 819 contextMenu.appendSeparator(); |
| 820 } |
818 var columnConfigs = this._columns.filter(columnConfig => columnConfig.hi
deable); | 821 var columnConfigs = this._columns.filter(columnConfig => columnConfig.hi
deable); |
819 var nonResponseHeaders = columnConfigs.filter(columnConfig => !columnCon
fig.isResponseHeader); | 822 var nonResponseHeaders = columnConfigs.filter(columnConfig => !columnCon
fig.isResponseHeader); |
820 for (var columnConfig of nonResponseHeaders) | 823 for (var columnConfig of nonResponseHeaders) |
821 contextMenu.appendCheckboxItem(columnConfig.title, this._toggleColum
nVisibility.bind(this, columnConfig), columnConfig.visible); | 824 contextMenu.appendCheckboxItem(columnConfig.title, this._toggleColum
nVisibility.bind(this, columnConfig), columnConfig.visible); |
822 | 825 |
823 contextMenu.appendSeparator(); | 826 contextMenu.appendSeparator(); |
824 | 827 |
825 var responseSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIStrin
g("Response Headers")); | 828 var responseSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIStrin
g("Response Headers")); |
826 var responseHeaders = columnConfigs.filter(columnConfig => columnConfig.
isResponseHeader); | 829 var responseHeaders = columnConfigs.filter(columnConfig => columnConfig.
isResponseHeader); |
827 for (var columnConfig of responseHeaders) | 830 for (var columnConfig of responseHeaders) |
828 responseSubMenu.appendCheckboxItem(columnConfig.title, this._toggleC
olumnVisibility.bind(this, columnConfig), columnConfig.visible); | 831 responseSubMenu.appendCheckboxItem(columnConfig.title, this._toggleC
olumnVisibility.bind(this, columnConfig), columnConfig.visible); |
829 | 832 |
830 responseSubMenu.appendSeparator(); | 833 responseSubMenu.appendSeparator(); |
831 responseSubMenu.appendItem(WebInspector.UIString("Manage Header Columns\
u2026"), this._manageCustomHeaderDialog.bind(this)); | 834 responseSubMenu.appendItem(WebInspector.UIString("Manage Header Columns\
u2026"), this._manageCustomHeaderDialog.bind(this)); |
832 | 835 |
833 contextMenu.show(); | 836 contextMenu.show(); |
| 837 |
| 838 /** |
| 839 * @param {!WebInspector.NetworkLogViewColumns.TimelineSortIds} sortId |
| 840 * @this {WebInspector.NetworkLogViewColumns} |
| 841 */ |
| 842 function setTimelineMode(sortId) |
| 843 { |
| 844 var calculator = this._calculatorsMap.get(WebInspector.NetworkLogVie
wColumns._calculatorTypes.Time); |
| 845 var timelineSortIds = WebInspector.NetworkLogViewColumns.TimelineSor
tIds; |
| 846 if (sortId === timelineSortIds.Duration || sortId === timelineSortId
s.Latency) |
| 847 calculator = this._calculatorsMap.get(WebInspector.NetworkLogVie
wColumns._calculatorTypes.Duration); |
| 848 this._networkLogView.setCalculator(calculator); |
| 849 |
| 850 this._activeTimelineSortId = sortId; |
| 851 this._dataGrid.markColumnAsSortedBy("timeline", WebInspector.DataGri
d.Order.Ascending); |
| 852 this._sortHandler(); |
| 853 } |
834 }, | 854 }, |
835 | 855 |
836 _manageCustomHeaderDialog: function() | 856 _manageCustomHeaderDialog: function() |
837 { | 857 { |
838 var customHeaders = []; | 858 var customHeaders = []; |
839 for (var columnConfig of this._columns) { | 859 for (var columnConfig of this._columns) { |
840 if (columnConfig.isResponseHeader) | 860 if (columnConfig.isResponseHeader) |
841 customHeaders.push({title: columnConfig.title, editable: columnC
onfig.isCustomHeader}); | 861 customHeaders.push({title: columnConfig.title, editable: columnC
onfig.isCustomHeader}); |
842 } | 862 } |
843 var manageCustomHeaders = new WebInspector.NetworkManageCustomHeadersVie
w(customHeaders, headerTitle => !!this._addCustomHeader(headerTitle), this._chan
geCustomHeader.bind(this), this._removeCustomHeader.bind(this)); | 863 var manageCustomHeaders = new WebInspector.NetworkManageCustomHeadersVie
w(customHeaders, headerTitle => !!this._addCustomHeader(headerTitle), this._chan
geCustomHeader.bind(this), this._removeCustomHeader.bind(this)); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1082 { | 1102 { |
1083 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { | 1103 if (Runtime.experiments.isEnabled("canvasNetworkTimeline")) { |
1084 this._shownEventDividers.delete(WebInspector.NetworkLogViewColumns._
filmStripDividerColor); | 1104 this._shownEventDividers.delete(WebInspector.NetworkLogViewColumns._
filmStripDividerColor); |
1085 this._redrawTimelineColumn(); | 1105 this._redrawTimelineColumn(); |
1086 return; | 1106 return; |
1087 } | 1107 } |
1088 for (var divider of this._eventDividers) | 1108 for (var divider of this._eventDividers) |
1089 divider.element.classList.toggle("network-frame-divider-selected", f
alse); | 1109 divider.element.classList.toggle("network-frame-divider-selected", f
alse); |
1090 } | 1110 } |
1091 }; | 1111 }; |
OLD | NEW |