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

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

Issue 2523633003: [Devtools] Prepare network log view for grouping support (Closed)
Patch Set: Merge branch 'master' into NETWORK_GROUP_SUPPORT_1 Created 4 years, 1 month 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
Index: third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index 7c41cb9129e6dcc6a7784e9d7e9c1abe89d089fa..87df372185ded04ddb707c1bec40a29484a6fc25 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -505,8 +505,9 @@ Network.NetworkLogView = class extends UI.VBox {
_setupDataGrid() {
this._dataGrid = this._columns.dataGrid();
+ var contextMenuHandler = this.handleContextMenuForLogEntry.bind(this);
this._dataGrid.setRowContextMenuCallback(
- (contextMenu, node) => this.handleContextMenuForRequest(contextMenu, node.request()));
+ (contextMenu, node) => contextMenuHandler(contextMenu, /** @type {!Network.NetworkDataGridNode} */ (node)));
this._dataGrid.setStickToBottom(true);
this._dataGrid.setName('networkLog');
this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last);
@@ -523,7 +524,9 @@ Network.NetworkLogView = class extends UI.VBox {
var node = this._dataGrid.dataGridNodeFromNode(event.target);
var highlightInitiatorChain = event.shiftKey;
this._setHoveredNode(node, highlightInitiatorChain);
- this._highlightInitiatorChain((highlightInitiatorChain && node) ? node.request() : null);
+ // TODO(allada) Support groupping initiator chain instead of first request.
+ var firstRequest = node ? node.firstRequest() : null;
+ this._highlightInitiatorChain(highlightInitiatorChain ? firstRequest : null);
}
_dataGridMouseLeave() {
@@ -538,7 +541,8 @@ Network.NetworkLogView = class extends UI.VBox {
setHoveredLogEntry(logEntry, highlightInitiatorChain) {
// TODO(allada) Move this into LogEntry/NetworkDataGridNode.
this._setHoveredNode(/** @type {?Network.NetworkDataGridNode} */ (logEntry), highlightInitiatorChain);
- this._highlightInitiatorChain((logEntry && highlightInitiatorChain) ? logEntry.request() : null);
+ // TODO(allada) Support groupping initiator chain instead of first request.
+ this._highlightInitiatorChain((logEntry && highlightInitiatorChain) ? logEntry.firstRequest() : null);
}
/**
@@ -583,11 +587,19 @@ Network.NetworkLogView = class extends UI.VBox {
for (var node of this._nodesByRequestId.values()) {
if (!node.dataGrid)
continue;
- node.element().classList.toggle(
- 'network-node-on-initiator-path',
- node.request() !== request && initiatorGraph.initiators.has(node.request()));
- node.element().classList.toggle(
- 'network-node-on-initiated-path', node.request() !== request && initiatorGraph.initiated.has(node.request()));
+ var hasInitiator = false;
+ var hasInitiated = false;
+ for (var childRequest of node.requests()) {
+ if (childRequest === request)
+ continue;
+ hasInitiator = initiatorGraph.initiators.has(childRequest);
+ hasInitiated = initiatorGraph.initiated.has(childRequest);
+ if (hasInitiator || hasInitiated)
+ break;
+ }
+
+ node.element().classList.toggle('network-node-on-initiator-path', hasInitiator);
+ node.element().classList.toggle('network-node-on-initiated-path', hasInitiated);
}
}
@@ -605,19 +617,20 @@ Network.NetworkLogView = class extends UI.VBox {
var selectedTransferSize = 0;
var baseTime = -1;
var maxTime = -1;
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i) {
- var request = nodes[i].request();
- var requestTransferSize = request.transferSize;
- transferSize += requestTransferSize;
- if (!nodes[i][Network.NetworkLogView._isFilteredOutSymbol]) {
- selectedRequestsNumber++;
- selectedTransferSize += requestTransferSize;
+ for (var node of this._nodesByRequestId.values()) {
+ var isFilteredOut = node[Network.NetworkLogView._isFilteredOutSymbol];
+ for (var request of node.requests()) {
+ var requestTransferSize = request.transferSize;
+ transferSize += requestTransferSize;
+ if (!isFilteredOut) {
+ selectedRequestsNumber++;
+ selectedTransferSize += requestTransferSize;
+ }
+ if (request.url === request.target().inspectedURL() && request.resourceType() === Common.resourceTypes.Document)
+ baseTime = request.startTime;
+ if (request.endTime > maxTime)
+ maxTime = request.endTime;
}
- if (request.url === request.target().inspectedURL() && request.resourceType() === Common.resourceTypes.Document)
- baseTime = request.startTime;
- if (request.endTime > maxTime)
- maxTime = request.endTime;
}
var summaryBar = this._summaryBarElement;
@@ -805,6 +818,7 @@ Network.NetworkLogView = class extends UI.VBox {
var dataGrid = this._dataGrid;
var rootNode = dataGrid.rootNode();
+
/** @type {!Array<!Network.NetworkDataGridNode> } */
var nodesToInsert = [];
/** @type {!Array<!Network.NetworkDataGridNode> } */
@@ -827,16 +841,17 @@ Network.NetworkLogView = class extends UI.VBox {
}
if (!isFilteredOut)
nodesToRefresh.push(node);
- var request = node.request();
- this._timeCalculator.updateBoundaries(request);
- this._durationCalculator.updateBoundaries(request);
+ for (var request of node.requests()) {
+ this._timeCalculator.updateBoundaries(request);
+ this._durationCalculator.updateBoundaries(request);
+ }
}
- for (var i = 0; i < nodesToInsert.length; ++i) {
- var node = nodesToInsert[i];
- var request = node.request();
- dataGrid.insertChild(node);
- node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(request);
+ for (var node of nodesToInsert) {
+ for (var request of node.requests()) {
+ dataGrid.insertChild(node);
dgozman 2016/11/23 01:57:30 This should go outside of the for loop.
allada 2016/11/23 22:39:14 Done.
+ node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(request);
+ }
}
for (var node of nodesToRefresh)
@@ -913,15 +928,16 @@ Network.NetworkLogView = class extends UI.VBox {
// In case of redirect request id is reassigned to a redirected
// request and we need to update _nodesByRequestId and search results.
var originalRequestNode = this._nodesByRequestId.get(request.requestId);
- if (originalRequestNode)
- this._nodesByRequestId.set(originalRequestNode.request().requestId, originalRequestNode);
+ if (originalRequestNode) {
+ for (var originalRequest of originalRequestNode.requests())
+ this._nodesByRequestId.set(originalRequest.requestId, originalRequestNode);
dgozman 2016/11/23 01:57:30 I believe this is incorrect now - only a single re
allada 2016/11/23 22:39:14 Done.
+ }
+
this._nodesByRequestId.set(request.requestId, node);
// Pull all the redirects of the main request upon commit load.
- if (request.redirects) {
- for (var i = 0; i < request.redirects.length; ++i)
- this._refreshRequest(request.redirects[i]);
- }
+ if (request.redirects)
+ request.redirects.forEach(this._refreshRequest.bind(this));
this._refreshRequest(request);
}
@@ -1032,9 +1048,13 @@ Network.NetworkLogView = class extends UI.VBox {
/**
* @param {!UI.ContextMenu} contextMenu
- * @param {!SDK.NetworkRequest} request
+ * @param {!Network.NetworkLogEntry} logEntry
*/
- handleContextMenuForRequest(contextMenu, request) {
+ handleContextMenuForLogEntry(contextMenu, logEntry) {
+ // TODO(allada) Support groupped items context menu.
+ var request = logEntry.firstRequest();
+ if (logEntry.isGroup() || !request)
+ return;
contextMenu.appendApplicableItems(request);
var copyMenu = contextMenu.appendSubMenuItem(Common.UIString('Copy'));
if (request) {
@@ -1104,9 +1124,9 @@ Network.NetworkLogView = class extends UI.VBox {
}
_harRequests() {
- var requests = this._nodesByRequestId.valuesArray().map(function(node) {
- return node.request();
- });
+ var requests = [];
+ for (var node of this._nodesByRequestId.values())
+ requests = requests.concat(node.requests());
var httpRequests = requests.filter(Network.NetworkLogView.HTTPRequestsFilter);
return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter);
}
@@ -1157,7 +1177,9 @@ Network.NetworkLogView = class extends UI.VBox {
* @param {string} platform
*/
_copyAllCurlCommand(platform) {
- var requests = this._nodesByRequestId.valuesArray().map(node => node.request());
+ var requests = [];
+ for (var node of this._nodesByRequestId.values())
dgozman 2016/11/23 01:57:30 Let's have a helper method which does this.
allada 2016/11/23 22:39:14 Done.
+ requests = requests.concat(node.requests());
var commands = [];
for (var request of requests)
commands.push(this._generateCurlCommand(request, platform));
@@ -1236,25 +1258,24 @@ Network.NetworkLogView = class extends UI.VBox {
_highlightNthMatchedRequestForSearch(n, reveal) {
this._removeAllHighlights();
- /** @type {!Array.<!Network.NetworkDataGridNode>} */
- var nodes = this._dataGrid.rootNode().children;
var matchCount = 0;
var node = null;
- for (var i = 0; i < nodes.length; ++i) {
- if (nodes[i][Network.NetworkLogView._isMatchingSearchQuerySymbol]) {
+ var request = null;
+ for (node of this.flatNodesList()) {
dgozman 2016/11/23 01:57:30 var node
allada 2016/11/23 22:39:14 Done.
+ if (node[Network.NetworkLogView._isMatchingSearchQuerySymbol]) {
if (matchCount === n) {
- node = nodes[i];
+ // TODO(allada) This should support multiple requests.
+ request = node.firstRequest();
break;
}
matchCount++;
}
}
- if (!node) {
+ if (!request) {
this._currentMatchedRequestNode = null;
return;
}
- var request = node.request();
if (reveal)
Common.Revealer.reveal(request);
var highlightedSubstringChanges = node.highlightMatchedSubstring(this._searchRegex);
@@ -1277,10 +1298,12 @@ Network.NetworkLogView = class extends UI.VBox {
this._clearSearchMatchedList();
this._searchRegex = createPlainTextSearchRegex(query, 'i');
- /** @type {!Array.<!Network.NetworkDataGridNode>} */
- var nodes = this._dataGrid.rootNode().children;
- for (var i = 0; i < nodes.length; ++i)
- nodes[i][Network.NetworkLogView._isMatchingSearchQuerySymbol] = this._matchRequest(nodes[i].request());
+ var isMatchingSearchQuerySymbol = Network.NetworkLogView._isMatchingSearchQuerySymbol;
dgozman 2016/11/23 01:57:30 Inline it back :-)
allada 2016/11/23 22:39:14 Done.
+ for (var node of this.flatNodesList()) {
dgozman 2016/11/23 01:57:30 Is this really an equivalent of what was here befo
allada 2016/11/23 22:39:14 Done.
+ var firstRequest = node.firstRequest();
+ // TODO(allada) This should properly support groupped requests.
dgozman 2016/11/23 01:57:30 definitely!
allada 2016/11/23 22:39:14 Acknowledged.
+ node[isMatchingSearchQuerySymbol] = firstRequest ? this._matchRequest(firstRequest) : null;
+ }
var newMatchedRequestIndex = this._updateMatchCountAndFindMatchIndex(currentMatchedRequestNode);
if (!newMatchedRequestIndex && jumpBackwards)
newMatchedRequestIndex = this._matchedRequestCount - 1;
@@ -1339,19 +1362,20 @@ Network.NetworkLogView = class extends UI.VBox {
* @return {boolean}
*/
_applyFilter(node) {
- var request = node.request();
- if (this._timeFilter && !this._timeFilter(request))
- return false;
- var categoryName = request.resourceType().category().title;
- if (!this._resourceCategoryFilterUI.accept(categoryName))
- return false;
- if (this._dataURLFilterUI.checked() && request.parsedURL.isDataURL())
- return false;
- if (request.statusText === 'Service Worker Fallback Required')
- return false;
- for (var i = 0; i < this._filters.length; ++i) {
- if (!this._filters[i](request))
+ for (var request of node.requests()) {
dgozman 2016/11/23 01:57:30 This is incorrect: if one request matches, we shou
allada 2016/11/23 22:39:14 Done.
+ if (this._timeFilter && !this._timeFilter(request))
return false;
+ var categoryName = request.resourceType().category().title;
+ if (!this._resourceCategoryFilterUI.accept(categoryName))
+ return false;
+ if (this._dataURLFilterUI.checked() && request.parsedURL.isDataURL())
+ return false;
+ if (request.statusText === 'Service Worker Fallback Required')
+ return false;
+ for (var i = 0; i < this._filters.length; ++i) {
+ if (!this._filters[i](request))
+ return false;
+ }
}
return true;
}

Powered by Google App Engine
This is Rietveld 408576698