| 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..81fe604e9d292118640c7704df2ad97c0fe59f95 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;
|
| + for (var request of this._requests) {
|
| + if (request.url() === url)
|
| + return request;
|
| + }
|
| + return null;
|
| }
|
|
|
| /**
|
| @@ -236,6 +272,11 @@ NetworkLog.NetworkLog = class {
|
| return request[NetworkLog.NetworkLog._pageLoadForRequestSymbol];
|
| }
|
|
|
| + _willReloadPage() {
|
| + if (!Common.moduleSetting('network_log.preserve-log').get())
|
| + this.reset();
|
| + }
|
| +
|
| /**
|
| * @param {!Common.Event} event
|
| */
|
| @@ -245,9 +286,13 @@ 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 removedRequests = new Set();
|
| + if (!Common.moduleSetting('network_log.preserve-log').get()) {
|
| + removedRequests = new Set(this._requests.filter(request => request.networkManager() === networkManager));
|
| + this._requests = this._requests.filter(request => request.networkManager() !== networkManager);
|
| + this._requestsSet = new Set(this._requests);
|
| + }
|
| var idMap = new Map();
|
| this._requestsByManagerAndId.set(networkManager, idMap);
|
|
|
| @@ -255,26 +300,59 @@ NetworkLog.NetworkLog = class {
|
| 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);
|
| - idMap.set(request.requestId(), request);
|
| - request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = currentPageLoad;
|
| + if (request.loaderId !== mainFrame.loaderId)
|
| + continue;
|
| + if (!currentPageLoad) {
|
| + currentPageLoad = new NetworkLog.PageLoad(request);
|
| + if (request.redirects) {
|
| + for (var redirectRequest of request.redirects) {
|
| + this._addRequest(redirectRequest, idMap, currentPageLoad);
|
| + removedRequests.delete(redirectRequest);
|
| + }
|
| + }
|
| }
|
| +
|
| + this._addRequest(request, idMap, currentPageLoad);
|
| + removedRequests.delete(request);
|
| }
|
| +
|
| + this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestsRemoved, removedRequests);
|
| if (currentPageLoad)
|
| this._currentPageLoad.set(networkManager, currentPageLoad);
|
| }
|
|
|
| + /**
|
| + * @param {!SDK.NetworkRequest} request
|
| + * @param {!Map<string, !SDK.NetworkRequest>} requestIdMap
|
| + * @param {!NetworkLog.PageLoad|undefined} pageLoad
|
| + */
|
| + _addRequest(request, requestIdMap, pageLoad) {
|
| + if (this._requestsSet.has(request))
|
| + return;
|
| + this._requests.push(request);
|
| + this._requestsSet.add(request);
|
| + requestIdMap.set(request.requestId(), request);
|
| + request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = pageLoad;
|
| + }
|
| +
|
| /**
|
| * @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()) || new Map();
|
| + this._addRequest(request, idMap, this._currentPageLoad.get(request.networkManager()));
|
| + this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestAdded, request);
|
| + }
|
| +
|
| + /**
|
| + * @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 +393,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 +420,7 @@ NetworkLog.PageLoad = class {
|
| this.loadTime;
|
| /** @type {number} */
|
| this.contentLoadTime;
|
| + this.mainRequest = mainRequest;
|
| }
|
| };
|
|
|
| @@ -337,6 +429,13 @@ 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'),
|
| + RequestsRemoved: Symbol('RequestsRemoved'),
|
| + RequestUpdated: Symbol('RequestUpdated')
|
| +};
|
| +
|
| /** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber: number, columnNumber: number, scriptId: ?string}} */
|
| NetworkLog.NetworkLog._InitiatorInfo;
|
|
|
|
|