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

Unified Diff: third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js

Issue 2914033002: [Devtools] NetworkLogView now uses NetworkLog as source of truth. (Closed)
Patch Set: changes Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
diff --git a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
index 638f68d2d3cdf26fb202cb5a95c8589d33023537..859358836e4d1551eec27efce46f532477244b8f 100644
--- a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
+++ b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js
@@ -31,14 +31,18 @@
/**
* @implements {SDK.SDKModelObserver<!SDK.NetworkManager>}
*/
-NetworkLog.NetworkLog = class {
+NetworkLog.NetworkLog = class extends Common.Object {
constructor() {
+ super();
/** @type {!Array<!SDK.NetworkRequest>} */
this._requests = [];
+ /** @type {!Set<!SDK.NetworkRequest>} */
+ this._requestsSet = new Set();
/** @type {!Map<!SDK.NetworkManager, !Map<string, !SDK.NetworkRequest>>} */
this._requestsByManagerAndId = new Map();
/** @type {!Map<!SDK.NetworkManager, !NetworkLog.PageLoad>} */
this._currentPageLoad = new Map();
+ this._isRecording = true;
SDK.targetManager.observeModels(SDK.NetworkManager, this);
}
@@ -50,11 +54,17 @@ NetworkLog.NetworkLog = class {
var eventListeners = [];
eventListeners.push(
networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, this._onRequestStarted, this));
+ eventListeners.push(
+ networkManager.addEventListener(SDK.NetworkManager.Events.RequestUpdated, this._onRequestUpdated, this));
eventListeners.push(
networkManager.addEventListener(SDK.NetworkManager.Events.RequestRedirected, this._onRequestRedirect, this));
+ eventListeners.push(
+ networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this._onRequestUpdated, this));
var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
if (resourceTreeModel) {
+ eventListeners.push(
+ resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.WillReloadPage, this._willReloadPage, this));
eventListeners.push(resourceTreeModel.addEventListener(
SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this));
eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._onLoad, this));
@@ -72,15 +82,41 @@ NetworkLog.NetworkLog = class {
*/
modelRemoved(networkManager) {
this._requestsByManagerAndId.delete(networkManager);
+ this._removeNetworkManagerListeners(networkManager);
+ }
+
+ /**
+ * @param {!SDK.NetworkManager} networkManager
+ */
+ _removeNetworkManagerListeners(networkManager) {
Common.EventTarget.removeEventListeners(networkManager[NetworkLog.NetworkLog._events]);
}
+ /**
+ * @param {boolean} enabled
+ */
+ setIsRecording(enabled) {
+ if (this._isRecording === enabled)
+ return;
+ this._isRecording = enabled;
+ if (enabled) {
+ SDK.targetManager.observeModels(SDK.NetworkManager, this);
+ } else {
+ SDK.targetManager.unobserveModels(SDK.NetworkManager, this);
+ SDK.targetManager.models(SDK.NetworkManager).forEach(this._removeNetworkManagerListeners.bind(this));
+ }
+ }
+
/**
* @param {string} url
* @return {?SDK.NetworkRequest}
*/
requestForURL(url) {
- return this._requests.find(request => request.url() === url) || null;
dgozman 2017/06/15 20:24:10 It was pretty good before :)
allada 2017/06/17 00:04:13 Ooops I think this was because I was debugging it.
+ for (var request of this._requests) {
+ if (request.url() === url)
+ return request;
+ }
+ return null;
}
/**
@@ -233,7 +269,12 @@ NetworkLog.NetworkLog = class {
* @return {?NetworkLog.PageLoad}
*/
pageLoadForRequest(request) {
- return request[NetworkLog.NetworkLog._pageLoadForRequestSymbol];
+ return request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] || null;
+ }
+
+ _willReloadPage() {
+ if (!Common.moduleSetting('network_log.preserve-log').get())
+ this.reset();
}
/**
@@ -245,36 +286,84 @@ NetworkLog.NetworkLog = class {
if (!networkManager)
return;
- this._currentPageLoad.delete(networkManager);
- var oldRequests = this.requestsForManager(networkManager);
- this._requests = this._requests.filter(request => request.networkManager() !== networkManager);
+ var oldManagerRequests = this.requestsForManager(networkManager);
+ var oldRequests = this._requests;
+ this._requests = [];
+ this._requestsSet = new Set();
var idMap = new Map();
+ // TODO(allada) This should be removed in a future patch, but if somewhere else does a request on this in a reset
+ // event it may cause problems.
this._requestsByManagerAndId.set(networkManager, idMap);
+ this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.Reset);
// Preserve requests from the new session.
var currentPageLoad = null;
- for (var i = 0; i < oldRequests.length; ++i) {
- var request = oldRequests[i];
- if (request.loaderId === mainFrame.loaderId) {
- if (!currentPageLoad)
- currentPageLoad = new NetworkLog.PageLoad(request);
- this._requests.push(request);
+ for (var i = 0; i < oldManagerRequests.length; ++i) {
+ var request = oldManagerRequests[i];
+ if (request.loaderId !== mainFrame.loaderId)
+ continue;
+ if (!currentPageLoad) {
+ currentPageLoad = new NetworkLog.PageLoad(request);
+ if (request.redirects) {
+ for (var redirectRequest of request.redirects) {
+ idMap.set(request.requestId(), request);
+ request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = currentPageLoad;
dgozman 2017/06/15 20:24:09 request -> redirectRequest?
allada 2017/06/17 00:04:13 Done.
+ this._addRequest(redirectRequest, idMap, currentPageLoad);
dgozman 2017/06/15 20:24:10 Looks like this call does handle the page load and
allada 2017/06/17 00:04:13 Done.
+ }
+ }
+ // When navigation requests happen we recompute the map and associated PageLoad which can change. We however do
+ // not always recompute the request array, so we always set the map and PageLoad but not always add the request
+ // since it may already exist in the list.
idMap.set(request.requestId(), request);
request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = currentPageLoad;
}
+
+ this._addRequest(request, idMap, currentPageLoad);
+ }
+
+ if (Common.moduleSetting('network_log.preserve-log').get()) {
+ for (var request of oldRequests)
+ this._addRequest(request);
}
+
if (currentPageLoad)
this._currentPageLoad.set(networkManager, currentPageLoad);
}
+ /**
+ * @param {!SDK.NetworkRequest} request
+ * @param {!Map<string, !SDK.NetworkRequest>=} requestIdMap
dgozman 2017/06/15 20:24:10 remove =
allada 2017/06/17 00:04:13 I need it to not update the map or pageload if the
dgozman 2017/06/17 00:12:56 Let's inline _addRequest everywhere.
+ * @param {!NetworkLog.PageLoad=} pageLoad
dgozman 2017/06/15 20:24:10 ?NetworkLog.PageLoad
allada 2017/06/17 00:04:14 ditto.
+ */
+ _addRequest(request, requestIdMap, pageLoad) {
+ if (this._requestsSet.has(request))
dgozman 2017/06/15 20:24:09 How could this happen?
allada 2017/06/17 00:04:13 If preserve log is on it may try to add the naviga
+ return;
+ this._requests.push(request);
+ this._requestsSet.add(request);
+ if (requestIdMap)
+ requestIdMap.set(request.requestId(), request);
+ if (pageLoad)
+ request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = pageLoad;
+ this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestAdded, request);
+ }
+
/**
* @param {!Common.Event} event
*/
_onRequestStarted(event) {
var request = /** @type {!SDK.NetworkRequest} */ (event.data);
- this._requests.push(request);
- this._requestsByManagerAndId.get(request.networkManager()).set(request.requestId(), request);
- request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad.get(request.networkManager());
+ var idMap = this._requestsByManagerAndId.get(request.networkManager());
+ this._addRequest(request, idMap, this._currentPageLoad.get(request.networkManager()) || null);
+ }
+
+ /**
+ * @param {!Common.Event} event
+ */
+ _onRequestUpdated(event) {
+ var request = /** @type {!SDK.NetworkRequest} */ (event.data);
+ if (!this._requestsSet.has(request))
+ return;
+ this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestUpdated, request);
}
/**
@@ -315,6 +404,19 @@ NetworkLog.NetworkLog = class {
var map = this._requestsByManagerAndId.get(networkManager);
return map ? (map.get(requestId) || null) : null;
}
+
+ reset() {
+ this._requests = [];
+ this._requestsSet.clear();
+ this._requestsByManagerAndId.forEach(map => map.clear());
+ var networkManagers = new Set(SDK.targetManager.models(SDK.NetworkManager));
+ for (var networkManager of this._currentPageLoad.keys()) {
+ if (!networkManagers.has(networkManager))
+ this._currentPageLoad.delete(networkManager);
+ }
+
+ this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.Reset);
+ }
};
NetworkLog.PageLoad = class {
@@ -329,6 +431,7 @@ NetworkLog.PageLoad = class {
this.loadTime;
/** @type {number} */
this.contentLoadTime;
+ this.mainRequest = mainRequest;
}
};
@@ -337,6 +440,12 @@ NetworkLog.PageLoad._lastIdentifier = 0;
/** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.NetworkRequest>}} */
NetworkLog.NetworkLog.InitiatorGraph;
+NetworkLog.NetworkLog.Events = {
+ Reset: Symbol('Reset'),
+ RequestAdded: Symbol('RequestAdded'),
+ RequestUpdated: Symbol('RequestUpdated')
+};
+
/** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber: number, columnNumber: number, scriptId: ?string}} */
NetworkLog.NetworkLog._InitiatorInfo;

Powered by Google App Engine
This is Rietveld 408576698