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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js

Issue 2839273003: [Devtools] New structure and colorize rows for network products (Closed)
Patch Set: changes Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> 3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org>
4 * Copyright (C) 2011 Google Inc. All rights reserved. 4 * Copyright (C) 2011 Google Inc. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 20 matching lines...) Expand all
31 /** 31 /**
32 * @unrestricted 32 * @unrestricted
33 */ 33 */
34 Network.NetworkNode = class extends DataGrid.SortableDataGridNode { 34 Network.NetworkNode = class extends DataGrid.SortableDataGridNode {
35 /** 35 /**
36 * @param {!Network.NetworkLogView} parentView 36 * @param {!Network.NetworkLogView} parentView
37 */ 37 */
38 constructor(parentView) { 38 constructor(parentView) {
39 super({}); 39 super({});
40 this._parentView = parentView; 40 this._parentView = parentView;
41 /** @type {!Map<string, ?Network.NetworkColumnExtensionInterface>} */
42 this._columnExtensions = new Map();
43 this._isHovered = false; 41 this._isHovered = false;
44 this._showingInitiatorChain = false; 42 this._showingInitiatorChain = false;
45 /** @type {?SDK.NetworkRequest} */ 43 /** @type {?SDK.NetworkRequest} */
46 this._requestOrFirstKnownChildRequest = null; 44 this._requestOrFirstKnownChildRequest = null;
47 /** @type {!Map<string, !UI.Icon>} */
48 this._columnIcons = new Map();
49 /** @type {?Common.Color} */ 45 /** @type {?Common.Color} */
50 this._backgroundColor = null; 46 this._backgroundColor = null;
51 } 47 }
52 48
53 /** 49 /**
54 * @return {!Network.NetworkNode._SupportedBackgroundColors} 50 * @return {!Network.NetworkNode._SupportedBackgroundColors}
55 */ 51 */
56 static _themedBackgroundColors() { 52 static _themedBackgroundColors() {
57 if (Network.NetworkNode._themedBackgroundColorsCache) 53 if (Network.NetworkNode._themedBackgroundColorsCache)
58 return Network.NetworkNode._themedBackgroundColorsCache; 54 return Network.NetworkNode._themedBackgroundColorsCache;
(...skipping 22 matching lines...) Expand all
81 if (this.isOnInitiatorPath()) 77 if (this.isOnInitiatorPath())
82 color = color.blendWith(bgColors.InitiatorPath); 78 color = color.blendWith(bgColors.InitiatorPath);
83 if (this.isOnInitiatedPath()) 79 if (this.isOnInitiatedPath())
84 color = color.blendWith(bgColors.InitiatedPath); 80 color = color.blendWith(bgColors.InitiatedPath);
85 if (this.selected) 81 if (this.selected)
86 color = color.blendWith(bgColors.Selected); 82 color = color.blendWith(bgColors.Selected);
87 83
88 return /** @type {string} */ (color.asString(Common.Color.Format.HEX)); 84 return /** @type {string} */ (color.asString(Common.Color.Format.HEX));
89 } 85 }
90 86
91 /**
92 * @param {?Common.Color} color
93 */
94 setBackgroundColor(color) {
95 this._backgroundColor = color;
96 this._updateBackgroundColor();
97 }
98
99 _updateBackgroundColor() { 87 _updateBackgroundColor() {
100 var element = this.existingElement(); 88 var element = this.existingElement();
101 if (!element) 89 if (!element)
102 return; 90 return;
103 element.style.backgroundColor = this.backgroundColor(); 91 element.style.backgroundColor = this.backgroundColor();
104 this._parentView.stylesChanged(); 92 this._parentView.stylesChanged();
105 } 93 }
106 94
107 /** 95 /**
108 * @override 96 * @override
(...skipping 27 matching lines...) Expand all
136 124
137 /** 125 /**
138 * @override 126 * @override
139 * @return {number} 127 * @return {number}
140 */ 128 */
141 nodeSelfHeight() { 129 nodeSelfHeight() {
142 return this._parentView.rowHeight(); 130 return this._parentView.rowHeight();
143 } 131 }
144 132
145 /** 133 /**
146 * @param {!Map<string, ?Network.NetworkColumnExtensionInterface>} columnExten sions
147 */
148 setColumnExtensions(columnExtensions) {
149 this._columnExtensions = columnExtensions;
150 }
151
152 /**
153 * @param {boolean} hovered 134 * @param {boolean} hovered
154 * @param {boolean} showInitiatorChain 135 * @param {boolean} showInitiatorChain
155 */ 136 */
156 setHovered(hovered, showInitiatorChain) { 137 setHovered(hovered, showInitiatorChain) {
157 if (this._isHovered === hovered && this._showingInitiatorChain === showIniti atorChain) 138 if (this._isHovered === hovered && this._showingInitiatorChain === showIniti atorChain)
158 return; 139 return;
159 if (this._isHovered !== hovered) { 140 if (this._isHovered !== hovered) {
160 this._isHovered = hovered; 141 this._isHovered = hovered;
161 if (this.attached()) 142 if (this.attached())
162 this.element().classList.toggle('hover', hovered); 143 this.element().classList.toggle('hover', hovered);
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 if (bRemoteAddress > aRemoteAddress) 329 if (bRemoteAddress > aRemoteAddress)
349 return -1; 330 return -1;
350 return aRequest.indentityCompare(bRequest); 331 return aRequest.indentityCompare(bRequest);
351 } 332 }
352 333
353 /** 334 /**
354 * @param {!Network.NetworkNode} a 335 * @param {!Network.NetworkNode} a
355 * @param {!Network.NetworkNode} b 336 * @param {!Network.NetworkNode} b
356 * @return {number} 337 * @return {number}
357 */ 338 */
339 static ProductComparitor(a, b) {
pfeldman 2017/04/27 22:20:48 ProductComparator.
allada 2017/04/28 01:20:06 Done.
340 var aRequest = a.request();
341 var bRequest = b.request();
342 if (!aRequest || !bRequest)
343 return !aRequest ? -1 : 1;
344 var productRegistry = ProductRegistry.existingInstance();
345 if (!productRegistry)
346 return aRequest.indentityCompare(bRequest);
347 var aName = productRegistry.nameForUrl(aRequest.parsedURL) || '';
348 var bName = productRegistry.nameForUrl(bRequest.parsedURL) || '';
349 return aName.compareTo(bName) || aRequest.indentityCompare(bRequest);
pfeldman 2017/04/27 22:20:48 localeCompare
allada 2017/04/28 01:20:06 Done.
350 }
351
352 /**
353 * @param {!Network.NetworkNode} a
354 * @param {!Network.NetworkNode} b
355 * @return {number}
356 */
358 static SizeComparator(a, b) { 357 static SizeComparator(a, b) {
359 // TODO(allada) Handle this properly for group nodes. 358 // TODO(allada) Handle this properly for group nodes.
360 var aRequest = a.requestOrFirstKnownChildRequest(); 359 var aRequest = a.requestOrFirstKnownChildRequest();
361 var bRequest = b.requestOrFirstKnownChildRequest(); 360 var bRequest = b.requestOrFirstKnownChildRequest();
362 if (!aRequest || !bRequest) 361 if (!aRequest || !bRequest)
363 return !aRequest ? -1 : 1; 362 return !aRequest ? -1 : 1;
364 if (bRequest.cached() && !aRequest.cached()) 363 if (bRequest.cached() && !aRequest.cached())
365 return 1; 364 return 1;
366 if (aRequest.cached() && !bRequest.cached()) 365 if (aRequest.cached() && !bRequest.cached())
367 return -1; 366 return -1;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 var aHeader = aRequest.responseHeaderValue(propertyName); 558 var aHeader = aRequest.responseHeaderValue(propertyName);
560 var bHeader = bRequest.responseHeaderValue(propertyName); 559 var bHeader = bRequest.responseHeaderValue(propertyName);
561 var aValue = aHeader ? new Date(aHeader).getTime() : -Infinity; 560 var aValue = aHeader ? new Date(aHeader).getTime() : -Infinity;
562 var bValue = bHeader ? new Date(bHeader).getTime() : -Infinity; 561 var bValue = bHeader ? new Date(bHeader).getTime() : -Infinity;
563 if (aValue === bValue) 562 if (aValue === bValue)
564 return aRequest.indentityCompare(bRequest); 563 return aRequest.indentityCompare(bRequest);
565 return aValue > bValue ? 1 : -1; 564 return aValue > bValue ? 1 : -1;
566 } 565 }
567 566
568 /** 567 /**
569 * @param {!Map<string, ?Network.NetworkColumnExtensionInterface>} extensionsM ap
570 * @param {string} extensionId
571 * @param {!Network.NetworkNode} a
572 * @param {!Network.NetworkNode} b
573 * @return {number}
574 */
575 static ExtensionColumnComparator(extensionsMap, extensionId, a, b) {
576 var aRequest = a.requestOrFirstKnownChildRequest();
577 var bRequest = b.requestOrFirstKnownChildRequest();
578 if (!aRequest || !bRequest)
579 return !aRequest ? -1 : 1;
580 var instance = extensionsMap.get(extensionId);
581 if (!instance)
582 return aRequest.indentityCompare(bRequest);
583 return instance.requestComparator(aRequest, bRequest);
584 }
585
586 /**
587 * @override 568 * @override
588 */ 569 */
589 showingInitiatorChainChanged() { 570 showingInitiatorChainChanged() {
590 var showInitiatorChain = this.showingInitiatorChain(); 571 var showInitiatorChain = this.showingInitiatorChain();
591 572
592 var initiatorGraph = NetworkLog.networkLog.initiatorGraphForRequest(this._re quest); 573 var initiatorGraph = NetworkLog.networkLog.initiatorGraphForRequest(this._re quest);
593 for (var request of initiatorGraph.initiators) { 574 for (var request of initiatorGraph.initiators) {
594 if (request === this._request) 575 if (request === this._request)
595 continue; 576 continue;
596 var node = this.parentView().nodeForRequest(request); 577 var node = this.parentView().nodeForRequest(request);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 /** 680 /**
700 * @override 681 * @override
701 * @param {!Element} element 682 * @param {!Element} element
702 */ 683 */
703 createCells(element) { 684 createCells(element) {
704 this._nameCell = null; 685 this._nameCell = null;
705 this._initiatorCell = null; 686 this._initiatorCell = null;
706 687
707 element.classList.toggle('network-error-row', this._isFailed()); 688 element.classList.toggle('network-error-row', this._isFailed());
708 element.classList.toggle('network-navigation-row', this._isNavigationRequest ); 689 element.classList.toggle('network-navigation-row', this._isNavigationRequest );
709 for (var rowDecorator of this._parentView.rowDecorators())
710 rowDecorator.decorate(this);
711 super.createCells(element); 690 super.createCells(element);
712 this._updateBackgroundColor(); 691 this._updateBackgroundColor();
713 } 692 }
714 693
715 /** 694 /**
716 * @param {string} columnId
717 * @param {!UI.Icon} icon
718 */
719 setIconForColumn(columnId, icon) {
720 this._columnIcons.set(columnId, icon);
721 }
722
723 /**
724 * @param {!Element} element 695 * @param {!Element} element
725 * @param {string} text 696 * @param {string} text
726 */ 697 */
727 _setTextAndTitle(element, text) { 698 _setTextAndTitle(element, text) {
728 element.createTextChild(text); 699 element.createTextChild(text);
729 element.title = text; 700 element.title = text;
730 } 701 }
731 702
732 /** 703 /**
733 * @override 704 * @override
734 * @param {string} columnIdentifier 705 * @param {string} columnIdentifier
735 * @return {!Element} 706 * @return {!Element}
736 */ 707 */
737 createCell(columnIdentifier) { 708 createCell(columnIdentifier) {
738 var cell = this.createTD(columnIdentifier); 709 var cell = this.createTD(columnIdentifier);
739 var icon = this._columnIcons.get(columnIdentifier);
740 if (icon)
741 cell.appendChild(icon);
742 // If the key exists but the value is null it means the extension instance h as not resolved yet.
743 // The view controller will force all rows to update when extension is resol ved.
744 if (this._columnExtensions.has(columnIdentifier)) {
745 var instance = this._columnExtensions.get(columnIdentifier);
746 if (instance)
747 this._setTextAndTitle(cell, instance.lookupColumnValue(this._request));
748 return cell;
749 }
750 switch (columnIdentifier) { 710 switch (columnIdentifier) {
751 case 'name': 711 case 'name':
752 this._renderNameCell(cell); 712 this._renderNameCell(cell);
753 break; 713 break;
714 case 'product':
715 if (!Runtime.experiments.isEnabled('networkGroupingRequests')) {
716 this._setTextAndTitle(cell, this._request.responseHeaderValue(columnId entifier) || '');
717 break;
718 }
719 this._parentView.initializeProductRegistryIfNeeded();
720 this._renderProductCell(cell);
pfeldman 2017/04/27 22:20:48 This should be chained after the promise.
allada 2017/04/28 01:20:06 Done.
721 break;
754 case 'method': 722 case 'method':
755 this._setTextAndTitle(cell, this._request.requestMethod); 723 this._setTextAndTitle(cell, this._request.requestMethod);
756 break; 724 break;
757 case 'status': 725 case 'status':
758 this._renderStatusCell(cell); 726 this._renderStatusCell(cell);
759 break; 727 break;
760 case 'protocol': 728 case 'protocol':
761 this._setTextAndTitle(cell, this._request.protocol); 729 this._setTextAndTitle(cell, this._request.protocol);
762 break; 730 break;
763 case 'scheme': 731 case 'scheme':
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 862
895 cell.appendChild(iconElement); 863 cell.appendChild(iconElement);
896 cell.createTextChild(this._request.networkManager().target().decorateLabel(t his._request.name())); 864 cell.createTextChild(this._request.networkManager().target().decorateLabel(t his._request.name()));
897 this._appendSubtitle(cell, this._request.path()); 865 this._appendSubtitle(cell, this._request.path());
898 cell.title = this._request.url(); 866 cell.title = this._request.url();
899 } 867 }
900 868
901 /** 869 /**
902 * @param {!Element} cell 870 * @param {!Element} cell
903 */ 871 */
872 _renderProductCell(cell) {
873 var productRegistry = ProductRegistry.existingInstance();
pfeldman 2017/04/27 22:20:48 Don't use it here, just chain.
allada 2017/04/28 01:20:06 Done.
874 var request = this.request();
875 if (!productRegistry || !request)
876 return productRegistry;
877 var entry = productRegistry.entryForUrl(request.parsedURL);
878 if (!entry)
879 return;
880 this._setTextAndTitle(cell, entry.name);
881 if (entry.type !== null) {
882 var element = this.existingElement();
883 if (!element)
884 return;
885 switch (entry.type) {
886 case 0:
887 this._backgroundColor = Common.Color.fromRGBA([224, 247, 250, .6]);
888 cell.classList.add('product-ad');
889 break;
890 case 1:
891 this._backgroundColor = Common.Color.fromRGBA([255, 252, 225, .6]);
892 cell.classList.add('product-tracking');
893 break;
894 case 2:
895 this._backgroundColor = Common.Color.fromRGBA([211, 253, 211, .6]);
896 cell.classList.add('product-cdn');
897 break;
898 default:
899 this._backgroundColor = null;
900 }
901 }
902 }
903
904 /**
905 * @param {!Element} cell
906 */
904 _renderStatusCell(cell) { 907 _renderStatusCell(cell) {
905 cell.classList.toggle( 908 cell.classList.toggle(
906 'network-dim-cell', !this._isFailed() && (this._request.cached() || !thi s._request.statusCode)); 909 'network-dim-cell', !this._isFailed() && (this._request.cached() || !thi s._request.statusCode));
907 910
908 if (this._request.failed && !this._request.canceled && !this._request.wasBlo cked()) { 911 if (this._request.failed && !this._request.canceled && !this._request.wasBlo cked()) {
909 var failText = Common.UIString('(failed)'); 912 var failText = Common.UIString('(failed)');
910 if (this._request.localizedFailDescription) { 913 if (this._request.localizedFailDescription) {
911 cell.createTextChild(failText); 914 cell.createTextChild(failText);
912 this._appendSubtitle(cell, this._request.localizedFailDescription); 915 this._appendSubtitle(cell, this._request.localizedFailDescription);
913 cell.title = failText + ' ' + this._request.localizedFailDescription; 916 cell.title = failText + ' ' + this._request.localizedFailDescription;
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 element.title = text; 1096 element.title = text;
1094 } 1097 }
1095 1098
1096 /** 1099 /**
1097 * @override 1100 * @override
1098 * @param {string} columnIdentifier 1101 * @param {string} columnIdentifier
1099 * @return {!Element} 1102 * @return {!Element}
1100 */ 1103 */
1101 createCell(columnIdentifier) { 1104 createCell(columnIdentifier) {
1102 var cell = this.createTD(columnIdentifier); 1105 var cell = this.createTD(columnIdentifier);
1103 if (this._columnExtensions.has(columnIdentifier))
1104 return cell;
1105 if (columnIdentifier === 'name') { 1106 if (columnIdentifier === 'name') {
1106 var leftPadding = this.leftPadding ? this.leftPadding + 'px' : ''; 1107 var leftPadding = this.leftPadding ? this.leftPadding + 'px' : '';
1107 cell.style.setProperty('padding-left', leftPadding); 1108 cell.style.setProperty('padding-left', leftPadding);
1108 cell.classList.add('disclosure'); 1109 cell.classList.add('disclosure');
1109 this._setTextAndTitle(cell, this._displayName); 1110 this._setTextAndTitle(cell, this._displayName);
1110 } 1111 }
1111 return cell; 1112 return cell;
1112 } 1113 }
1113 1114
1114 /** 1115 /**
1115 * @override 1116 * @override
1116 * @param {boolean=} supressSelectedEvent 1117 * @param {boolean=} supressSelectedEvent
1117 */ 1118 */
1118 select(supressSelectedEvent) { 1119 select(supressSelectedEvent) {
1119 if (this.expanded) { 1120 if (this.expanded) {
1120 this.collapse(); 1121 this.collapse();
1121 return; 1122 return;
1122 } 1123 }
1123 this.expand(); 1124 this.expand();
1124 } 1125 }
1125 }; 1126 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698