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 d838a5427e465ab4e8be5b5c4db354955f58172d..3c6dd483d4a79074f8eac2e12cc1b9b1f6ca4c05 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js |
@@ -71,10 +71,8 @@ Network.NetworkLogView = class extends UI.VBox { |
this._columns = new Network.NetworkLogViewColumns( |
this, this._timeCalculator, this._durationCalculator, networkLogLargeRowsSetting); |
- /** @type {!Map.<string, !Network.NetworkRequestNode>} */ |
- this._nodesByRequestId = new Map(); |
- /** @type {!Object.<string, boolean>} */ |
- this._staleRequestIds = {}; |
+ /** @type {!Set<!SDK.NetworkRequest>} */ |
+ this._staleRequests = new Set(); |
/** @type {number} */ |
this._mainRequestLoadTime = -1; |
/** @type {number} */ |
@@ -114,12 +112,10 @@ Network.NetworkLogView = class extends UI.VBox { |
.addChangeListener(this._invalidateAllItems.bind(this, false), this); |
SDK.targetManager.observeModels(SDK.NetworkManager, this); |
- SDK.targetManager.addModelListener( |
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestStarted, this._onRequestStarted, this); |
- SDK.targetManager.addModelListener( |
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestUpdated, this._onRequestUpdated, this); |
- SDK.targetManager.addModelListener( |
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestFinished, this._onRequestUpdated, this); |
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestAdded, this._onRequestUpdated, this); |
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestUpdated, this._onRequestUpdated, this); |
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.Reset, this._reset.bind(this)); |
dgozman
2017/06/01 20:56:27
this._reset, this
allada
2017/06/02 01:02:43
Done.
|
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestRemoved, this._onRequestRemoved, this); |
this._updateGroupByFrame(); |
Common.moduleSetting('network.group-by-frame').addChangeListener(() => this._updateGroupByFrame()); |
@@ -379,7 +375,7 @@ Network.NetworkLogView = class extends UI.VBox { |
* @return {?Network.NetworkRequestNode} |
*/ |
nodeForRequest(request) { |
- return this._nodesByRequestId.get(request.requestId()); |
+ return request[Network.NetworkLogView._networkNodeSymbol] || null; |
} |
/** |
@@ -402,17 +398,15 @@ Network.NetworkLogView = class extends UI.VBox { |
* @param {!SDK.NetworkManager} networkManager |
*/ |
modelAdded(networkManager) { |
- if (!networkManager.target().parentTarget()) { |
- var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel); |
- if (resourceTreeModel) { |
- resourceTreeModel.addEventListener( |
- SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this); |
- resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); |
- resourceTreeModel.addEventListener( |
- SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this); |
- } |
+ // TODO(allada) Remove dependency on networkManager and instead use NetworkLog and PageLoad for needed data. |
+ if (networkManager.target().parentTarget()) |
+ return; |
+ var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel); |
+ if (resourceTreeModel) { |
+ resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); |
+ resourceTreeModel.addEventListener( |
+ SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this); |
} |
- NetworkLog.networkLog.requestsForManager(networkManager).forEach(this._appendRequest.bind(this)); |
} |
/** |
@@ -423,8 +417,6 @@ Network.NetworkLogView = class extends UI.VBox { |
if (!networkManager.target().parentTarget()) { |
var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel); |
if (resourceTreeModel) { |
- resourceTreeModel.removeEventListener( |
- SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this); |
resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this); |
resourceTreeModel.removeEventListener( |
SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this); |
@@ -600,26 +592,24 @@ Network.NetworkLogView = class extends UI.VBox { |
} |
_updateSummaryBar() { |
- var requestsNumber = this._nodesByRequestId.size; |
- |
- if (!requestsNumber) { |
- this._showRecordingHint(); |
- return; |
- } |
this._hideRecordingHint(); |
var transferSize = 0; |
- var selectedRequestsNumber = 0; |
+ var selectedNodeNumber = 0; |
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 nodeCount = 0; |
+ for (var request of NetworkLog.networkLog.requests()) { |
+ var node = request[Network.NetworkLogView._networkNodeSymbol]; |
+ if (!node) |
+ continue; |
+ nodeCount++; |
var requestTransferSize = request.transferSize; |
transferSize += requestTransferSize; |
- if (!nodes[i][Network.NetworkLogView._isFilteredOutSymbol]) { |
- selectedRequestsNumber++; |
+ if (!node[Network.NetworkLogView._isFilteredOutSymbol]) { |
+ selectedNodeNumber++; |
selectedTransferSize += requestTransferSize; |
} |
if (request.url() === request.networkManager().target().inspectedURL() && |
@@ -629,6 +619,11 @@ Network.NetworkLogView = class extends UI.VBox { |
maxTime = request.endTime; |
} |
+ if (!nodeCount) { |
+ this._showRecordingHint(); |
+ return; |
+ } |
+ |
var summaryBar = this._summaryBarElement; |
summaryBar.removeChildren(); |
var separator = '\u2002\u2758\u2002'; |
@@ -644,13 +639,13 @@ Network.NetworkLogView = class extends UI.VBox { |
return span; |
} |
- if (selectedRequestsNumber !== requestsNumber) { |
- appendChunk(Common.UIString('%d / %d requests', selectedRequestsNumber, requestsNumber)); |
+ if (selectedNodeNumber !== nodeCount) { |
+ appendChunk(Common.UIString('%d / %d requests', selectedNodeNumber, nodeCount)); |
appendChunk(separator); |
appendChunk(Common.UIString( |
'%s / %s transferred', Number.bytesToString(selectedTransferSize), Number.bytesToString(transferSize))); |
} else { |
- appendChunk(Common.UIString('%d requests', requestsNumber)); |
+ appendChunk(Common.UIString('%d requests', nodeCount)); |
appendChunk(separator); |
appendChunk(Common.UIString('%s transferred', Number.bytesToString(transferSize))); |
} |
@@ -709,9 +704,7 @@ Network.NetworkLogView = class extends UI.VBox { |
* @param {boolean=} deferUpdate |
*/ |
_invalidateAllItems(deferUpdate) { |
- var requestIds = this._nodesByRequestId.keysArray(); |
- for (var i = 0; i < requestIds.length; ++i) |
- this._staleRequestIds[requestIds[i]] = true; |
+ this._staleRequests = new Set(NetworkLog.networkLog.requests()); |
if (deferUpdate) |
this.scheduleRefresh(); |
else |
@@ -832,10 +825,24 @@ Network.NetworkLogView = class extends UI.VBox { |
var nodesToInsert = new Map(); |
/** @type {!Array<!Network.NetworkNode>} */ |
var nodesToRefresh = []; |
- for (var requestId in this._staleRequestIds) { |
- var node = this._nodesByRequestId.get(requestId); |
- if (!node) |
- continue; |
+ |
+ /** @type {!Set<!Network.NetworkRequestNode>} */ |
+ var staleNodes = new Set(); |
+ |
+ // While creating nodes it may add more entries into _staleRequests because redirect request nodes update the parent |
+ // node so we loop until we have no more stale requests. |
+ while (this._staleRequests.size) { |
dgozman
2017/06/01 20:56:27
while (this._staleRequests.size) {
var request =
allada
2017/06/02 01:02:43
Done.
|
+ var staleRequests = Array.from(this._staleRequests); |
+ this._staleRequests.clear(); |
+ for (var request of staleRequests) { |
+ var node = request[Network.NetworkLogView._networkNodeSymbol]; |
+ if (!node) |
+ node = this._createNodeForRequest(request); |
+ staleNodes.add(node); |
+ } |
+ } |
+ |
+ for (var node of staleNodes) { |
var isFilteredOut = !this._applyFilter(node); |
if (isFilteredOut && node === this._hoveredNode) |
this._setHoveredNode(null); |
@@ -884,13 +891,16 @@ Network.NetworkLogView = class extends UI.VBox { |
this._highlightNthMatchedRequestForSearch( |
this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false); |
- this._staleRequestIds = {}; |
this._updateSummaryBar(); |
if (nodesToInsert.size) |
this._columns.sortByCurrentColumn(); |
this._dataGrid.updateInstantly(); |
+ this.didRefreshForTest(); |
dgozman
2017/06/01 20:56:27
_didRefreshForTest
allada
2017/06/02 01:02:43
Done.
|
+ } |
+ |
+ didRefreshForTest() { |
} |
/** |
@@ -907,7 +917,7 @@ Network.NetworkLogView = class extends UI.VBox { |
return groupNode; |
} |
- reset() { |
+ _reset() { |
this._requestWithHighlightedInitiators = null; |
this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null); |
@@ -925,8 +935,7 @@ Network.NetworkLogView = class extends UI.VBox { |
if (this._activeGroupLookup) |
this._activeGroupLookup.reset(); |
- this._nodesByRequestId.clear(); |
- this._staleRequestIds = {}; |
+ this._staleRequests.clear(); |
this._resetSuggestionBuilder(); |
this._mainRequestLoadTime = -1; |
@@ -948,37 +957,33 @@ Network.NetworkLogView = class extends UI.VBox { |
} |
/** |
- * @param {!Common.Event} event |
- */ |
- _onRequestStarted(event) { |
- if (!this._recording) |
dgozman
2017/06/01 20:56:27
Who handles this?
allada
2017/06/02 01:02:43
It's now in NetworkLog.
|
- return; |
- var request = /** @type {!SDK.NetworkRequest} */ (event.data); |
- this._appendRequest(request); |
- } |
- |
- /** |
* @param {!SDK.NetworkRequest} request |
*/ |
- _appendRequest(request) { |
+ _createNodeForRequest(request) { |
var node = new Network.NetworkRequestNode(this, request); |
+ request[Network.NetworkLogView._networkNodeSymbol] = node; |
node[Network.NetworkLogView._isFilteredOutSymbol] = true; |
node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = false; |
- // 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); |
- this._nodesByRequestId.set(request.requestId(), node); |
- |
// Pull all the redirects of the main request upon commit load. |
dgozman
2017/06/01 20:56:27
You don't check that request is a main request.
allada
2017/06/02 01:02:43
This comment was moved and git made a horrible dif
|
- 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)); |
+ return node; |
+ } |
- this._refreshRequest(request); |
+ /** |
+ * @param {!Common.Event} event |
+ */ |
+ _onRequestRemoved(event) { |
+ var request = /** @type {!SDK.NetworkRequest} */ (event.data); |
+ var node = request[Network.NetworkLogView._networkNodeSymbol]; |
+ while (node && node.parent) { |
dgozman
2017/06/01 20:56:27
Why do you remove all parents? This removes the gr
allada
2017/06/02 01:02:43
good catch.
|
+ var parent = node.parent; |
+ parent.removeChild(node); |
+ node = parent; |
+ } |
+ this._staleRequests.delete(request); |
+ delete request[Network.NetworkLogView._networkNodeSymbol]; |
} |
/** |
@@ -993,9 +998,6 @@ Network.NetworkLogView = class extends UI.VBox { |
* @param {!SDK.NetworkRequest} request |
*/ |
_refreshRequest(request) { |
- if (!this._nodesByRequestId.get(request.requestId())) |
- return; |
- |
Network.NetworkLogView._subdomains(request.domain) |
.forEach( |
this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Network.NetworkLogView.FilterType.Domain)); |
@@ -1037,47 +1039,11 @@ Network.NetworkLogView = class extends UI.VBox { |
this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCookieValue, cookie.value()); |
} |
- this._staleRequestIds[request.requestId()] = true; |
- this.dispatchEventToListeners(Network.NetworkLogView.Events.UpdateRequest, request); |
+ this._staleRequests.add(request); |
this.scheduleRefresh(); |
} |
/** |
- * @param {!Common.Event} event |
- */ |
- _mainFrameNavigated(event) { |
- if (!this._recording) |
- return; |
- |
- var frame = /** @type {!SDK.ResourceTreeFrame} */ (event.data); |
- var loaderId = frame.loaderId; |
- |
- // Pick provisional load requests. |
- var requestsToPick = []; |
- var networkManager = frame.resourceTreeModel().target().model(SDK.NetworkManager); |
- var requests = networkManager ? NetworkLog.networkLog.requestsForManager(networkManager) : []; |
- for (var i = 0; i < requests.length; ++i) { |
- var request = requests[i]; |
- if (request.loaderId === loaderId) |
- requestsToPick.push(request); |
- } |
- |
- if (!Common.moduleSetting('network.preserve-log').get()) { |
- this.reset(); |
- for (var i = 0; i < requestsToPick.length; ++i) |
- this._appendRequest(requestsToPick[i]); |
- } |
- for (var i = 0; i < requestsToPick.length; ++i) { |
- var request = requestsToPick[i]; |
- var node = this._nodesByRequestId.get(request.requestId()); |
- if (node) { |
- node.markAsNavigationRequest(); |
- break; |
- } |
- } |
- } |
- |
- /** |
* @return {number} |
*/ |
rowHeight() { |
@@ -1189,10 +1155,7 @@ Network.NetworkLogView = class extends UI.VBox { |
} |
_harRequests() { |
- var requests = this._nodesByRequestId.valuesArray().map(function(node) { |
- return node.request(); |
- }); |
- var httpRequests = requests.filter(Network.NetworkLogView.HTTPRequestsFilter); |
+ var httpRequests = Array.from(NetworkLog.networkLog.requests()).filter(Network.NetworkLogView.HTTPRequestsFilter); |
return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter); |
} |
@@ -1242,7 +1205,7 @@ Network.NetworkLogView = class extends UI.VBox { |
* @param {string} platform |
*/ |
_copyAllCurlCommand(platform) { |
- var requests = this._nodesByRequestId.valuesArray().map(node => node.request()); |
+ var requests = NetworkLog.networkLog.requests(); |
var commands = []; |
for (var request of requests) |
commands.push(this._generateCurlCommand(request, platform)); |
@@ -1610,7 +1573,7 @@ Network.NetworkLogView = class extends UI.VBox { |
revealAndHighlightRequest(request) { |
this.removeAllNodeHighlights(); |
- var node = this._nodesByRequestId.get(request.requestId()); |
+ var node = request[Network.NetworkLogView._networkNodeSymbol]; |
if (node) { |
node.reveal(); |
this._highlightNode(node); |
@@ -1761,6 +1724,7 @@ Network.NetworkLogView = class extends UI.VBox { |
Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut'); |
Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQuery'); |
+Network.NetworkLogView._networkNodeSymbol = Symbol('NetworkNode'); |
Network.NetworkLogView.HTTPSchemas = { |
'http': true, |
@@ -1773,8 +1737,7 @@ Network.NetworkLogView.HTTPSchemas = { |
Network.NetworkLogView.Events = { |
RequestSelected: Symbol('RequestSelected'), |
SearchCountUpdated: Symbol('SearchCountUpdated'), |
- SearchIndexUpdated: Symbol('SearchIndexUpdated'), |
- UpdateRequest: Symbol('UpdateRequest') |
+ SearchIndexUpdated: Symbol('SearchIndexUpdated') |
}; |
/** @enum {string} */ |