Chromium Code Reviews| 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; |
| } |