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

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

Issue 2758673002: [DevTools] Extract NetworkLog and HAREntry to a separate network_log module (Closed)
Patch Set: rebased Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 13 matching lines...) Expand all
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 /** 31 /**
32 * @implements {SDK.SDKModelObserver<!SDK.NetworkManager>} 32 * @implements {SDK.SDKModelObserver<!SDK.NetworkManager>}
33 */ 33 */
34 SDK.NetworkLog = class { 34 NetworkLog.NetworkLog = class {
35 constructor() { 35 constructor() {
36 /** @type {!Array<!SDK.NetworkRequest>} */ 36 /** @type {!Array<!SDK.NetworkRequest>} */
37 this._requests = []; 37 this._requests = [];
38 /** @type {!Map<!SDK.Target, !Map<string, !SDK.NetworkRequest>>} */ 38 /** @type {!Map<!SDK.Target, !Map<string, !SDK.NetworkRequest>>} */
39 this._requestsByTargetAndId = new Map(); 39 this._requestsByTargetAndId = new Map();
40 /** @type {!Map<!SDK.Target, !SDK.PageLoad>} */ 40 /** @type {!Map<!SDK.Target, !NetworkLog.PageLoad>} */
41 this._currentPageLoad = new Map(); 41 this._currentPageLoad = new Map();
42 SDK.targetManager.observeModels(SDK.NetworkManager, this); 42 SDK.targetManager.observeModels(SDK.NetworkManager, this);
43 } 43 }
44 44
45 /** 45 /**
46 * @override 46 * @override
47 * @param {!SDK.NetworkManager} networkManager 47 * @param {!SDK.NetworkManager} networkManager
48 */ 48 */
49 modelAdded(networkManager) { 49 modelAdded(networkManager) {
50 var eventListeners = []; 50 var eventListeners = [];
51 eventListeners.push( 51 eventListeners.push(
52 networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted , this._onRequestStarted, this)); 52 networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted , this._onRequestStarted, this));
53 eventListeners.push(networkManager.on(SDK.NetworkManager.RequestRedirectEven t, this._onRequestRedirect, this)); 53 eventListeners.push(networkManager.on(SDK.NetworkManager.RequestRedirectEven t, this._onRequestRedirect, this));
54 54
55 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel) ; 55 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel) ;
56 if (resourceTreeModel) { 56 if (resourceTreeModel) {
57 eventListeners.push(resourceTreeModel.addEventListener( 57 eventListeners.push(resourceTreeModel.addEventListener(
58 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavi gated, this)); 58 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavi gated, this));
59 eventListeners.push(resourceTreeModel.addEventListener( 59 eventListeners.push(resourceTreeModel.addEventListener(
60 SDK.ResourceTreeModel.Events.Load, this._onLoad.bind(this, resourceTre eModel))); 60 SDK.ResourceTreeModel.Events.Load, this._onLoad.bind(this, resourceTre eModel)));
61 eventListeners.push(resourceTreeModel.addEventListener( 61 eventListeners.push(resourceTreeModel.addEventListener(
62 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._onDOMContentLoade d.bind(this, resourceTreeModel))); 62 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._onDOMContentLoade d.bind(this, resourceTreeModel)));
63 } 63 }
64 64
65 networkManager[SDK.NetworkLog._events] = eventListeners; 65 networkManager[NetworkLog.NetworkLog._events] = eventListeners;
66 this._requestsByTargetAndId.set(networkManager.target(), new Map()); 66 this._requestsByTargetAndId.set(networkManager.target(), new Map());
67 } 67 }
68 68
69 /** 69 /**
70 * @override 70 * @override
71 * @param {!SDK.NetworkManager} networkManager 71 * @param {!SDK.NetworkManager} networkManager
72 */ 72 */
73 modelRemoved(networkManager) { 73 modelRemoved(networkManager) {
74 this._requestsByTargetAndId.delete(networkManager.target()); 74 this._requestsByTargetAndId.delete(networkManager.target());
75 Common.EventTarget.removeEventListeners(networkManager[SDK.NetworkLog._event s]); 75 Common.EventTarget.removeEventListeners(networkManager[NetworkLog.NetworkLog ._events]);
76 } 76 }
77 77
78 /** 78 /**
79 * @param {string} url 79 * @param {string} url
80 * @return {?SDK.NetworkRequest} 80 * @return {?SDK.NetworkRequest}
81 */ 81 */
82 requestForURL(url) { 82 requestForURL(url) {
83 return this._requests.find(request => request.url() === url) || null; 83 return this._requests.find(request => request.url() === url) || null;
84 } 84 }
85 85
(...skipping 26 matching lines...) Expand all
112 if (request.url() === url) 112 if (request.url() === url)
113 return request; 113 return request;
114 } 114 }
115 return null; 115 return null;
116 } 116 }
117 117
118 /** 118 /**
119 * @param {!SDK.NetworkRequest} request 119 * @param {!SDK.NetworkRequest} request
120 */ 120 */
121 _initializeInitiatorSymbolIfNeeded(request) { 121 _initializeInitiatorSymbolIfNeeded(request) {
122 if (!request[SDK.NetworkLog._initiatorDataSymbol]) { 122 if (!request[NetworkLog.NetworkLog._initiatorDataSymbol]) {
123 /** @type {!{info: ?SDK.NetworkLog._InitiatorInfo, chain: !Set<!SDK.Networ kRequest>, request: (?SDK.NetworkRequest|undefined)}} */ 123 /** @type {!{info: ?NetworkLog.NetworkLog._InitiatorInfo, chain: !Set<!SDK .NetworkRequest>, request: (?SDK.NetworkRequest|undefined)}} */
124 request[SDK.NetworkLog._initiatorDataSymbol] = { 124 request[NetworkLog.NetworkLog._initiatorDataSymbol] = {
125 info: null, 125 info: null,
126 chain: null, 126 chain: null,
127 request: undefined, 127 request: undefined,
128 }; 128 };
129 } 129 }
130 } 130 }
131 131
132 /** 132 /**
133 * @param {!SDK.NetworkRequest} request 133 * @param {!SDK.NetworkRequest} request
134 * @return {!SDK.NetworkLog._InitiatorInfo} 134 * @return {!NetworkLog.NetworkLog._InitiatorInfo}
135 */ 135 */
136 initiatorInfoForRequest(request) { 136 initiatorInfoForRequest(request) {
137 this._initializeInitiatorSymbolIfNeeded(request); 137 this._initializeInitiatorSymbolIfNeeded(request);
138 if (request[SDK.NetworkLog._initiatorDataSymbol].info) 138 if (request[NetworkLog.NetworkLog._initiatorDataSymbol].info)
139 return request[SDK.NetworkLog._initiatorDataSymbol].info; 139 return request[NetworkLog.NetworkLog._initiatorDataSymbol].info;
140 140
141 var type = SDK.NetworkRequest.InitiatorType.Other; 141 var type = SDK.NetworkRequest.InitiatorType.Other;
142 var url = ''; 142 var url = '';
143 var lineNumber = -Infinity; 143 var lineNumber = -Infinity;
144 var columnNumber = -Infinity; 144 var columnNumber = -Infinity;
145 var scriptId = null; 145 var scriptId = null;
146 var initiator = request.initiator(); 146 var initiator = request.initiator();
147 147
148 if (request.redirectSource) { 148 if (request.redirectSource) {
149 type = SDK.NetworkRequest.InitiatorType.Redirect; 149 type = SDK.NetworkRequest.InitiatorType.Redirect;
(...skipping 13 matching lines...) Expand all
163 lineNumber = topFrame.lineNumber; 163 lineNumber = topFrame.lineNumber;
164 columnNumber = topFrame.columnNumber; 164 columnNumber = topFrame.columnNumber;
165 scriptId = topFrame.scriptId; 165 scriptId = topFrame.scriptId;
166 break; 166 break;
167 } 167 }
168 } else if (initiator.type === Protocol.Network.InitiatorType.Preload) { 168 } else if (initiator.type === Protocol.Network.InitiatorType.Preload) {
169 type = SDK.NetworkRequest.InitiatorType.Preload; 169 type = SDK.NetworkRequest.InitiatorType.Preload;
170 } 170 }
171 } 171 }
172 172
173 request[SDK.NetworkLog._initiatorDataSymbol].info = 173 request[NetworkLog.NetworkLog._initiatorDataSymbol].info =
174 {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumbe r, scriptId: scriptId}; 174 {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumbe r, scriptId: scriptId};
175 return request[SDK.NetworkLog._initiatorDataSymbol].info; 175 return request[NetworkLog.NetworkLog._initiatorDataSymbol].info;
176 } 176 }
177 177
178 /** 178 /**
179 * @param {!SDK.NetworkRequest} request 179 * @param {!SDK.NetworkRequest} request
180 * @return {!SDK.NetworkLog.InitiatorGraph} 180 * @return {!NetworkLog.NetworkLog.InitiatorGraph}
181 */ 181 */
182 initiatorGraphForRequest(request) { 182 initiatorGraphForRequest(request) {
183 /** @type {!Set<!SDK.NetworkRequest>} */ 183 /** @type {!Set<!SDK.NetworkRequest>} */
184 var initiated = new Set(); 184 var initiated = new Set();
185 var map = this._requestsByTargetAndId.get(request.target()); 185 var map = this._requestsByTargetAndId.get(request.target());
186 if (map) { 186 if (map) {
187 for (var otherRequest of map.values()) { 187 for (var otherRequest of map.values()) {
188 if (this._initiatorChain(otherRequest).has(request)) 188 if (this._initiatorChain(otherRequest).has(request))
189 initiated.add(otherRequest); 189 initiated.add(otherRequest);
190 } 190 }
191 } 191 }
192 return {initiators: this._initiatorChain(request), initiated: initiated}; 192 return {initiators: this._initiatorChain(request), initiated: initiated};
193 } 193 }
194 194
195 /** 195 /**
196 * @param {!SDK.NetworkRequest} request 196 * @param {!SDK.NetworkRequest} request
197 * @return {!Set<!SDK.NetworkRequest>} 197 * @return {!Set<!SDK.NetworkRequest>}
198 */ 198 */
199 _initiatorChain(request) { 199 _initiatorChain(request) {
200 this._initializeInitiatorSymbolIfNeeded(request); 200 this._initializeInitiatorSymbolIfNeeded(request);
201 var initiatorChainCache = 201 var initiatorChainCache =
202 /** @type {?Set<!SDK.NetworkRequest>} */ (request[SDK.NetworkLog._initia torDataSymbol].chain); 202 /** @type {?Set<!SDK.NetworkRequest>} */ (request[NetworkLog.NetworkLog. _initiatorDataSymbol].chain);
203 if (initiatorChainCache) 203 if (initiatorChainCache)
204 return initiatorChainCache; 204 return initiatorChainCache;
205 205
206 initiatorChainCache = new Set(); 206 initiatorChainCache = new Set();
207 207
208 var checkRequest = request; 208 var checkRequest = request;
209 do { 209 do {
210 initiatorChainCache.add(checkRequest); 210 initiatorChainCache.add(checkRequest);
211 checkRequest = this._initiatorRequest(checkRequest); 211 checkRequest = this._initiatorRequest(checkRequest);
212 } while (checkRequest); 212 } while (checkRequest);
213 request[SDK.NetworkLog._initiatorDataSymbol].chain = initiatorChainCache; 213 request[NetworkLog.NetworkLog._initiatorDataSymbol].chain = initiatorChainCa che;
214 return initiatorChainCache; 214 return initiatorChainCache;
215 } 215 }
216 216
217 /** 217 /**
218 * @param {!SDK.NetworkRequest} request 218 * @param {!SDK.NetworkRequest} request
219 * @return {?SDK.NetworkRequest} 219 * @return {?SDK.NetworkRequest}
220 */ 220 */
221 _initiatorRequest(request) { 221 _initiatorRequest(request) {
222 this._initializeInitiatorSymbolIfNeeded(request); 222 this._initializeInitiatorSymbolIfNeeded(request);
223 if (request[SDK.NetworkLog._initiatorDataSymbol].request !== undefined) 223 if (request[NetworkLog.NetworkLog._initiatorDataSymbol].request !== undefine d)
224 return request[SDK.NetworkLog._initiatorDataSymbol].request; 224 return request[NetworkLog.NetworkLog._initiatorDataSymbol].request;
225 var url = this.initiatorInfoForRequest(request).url; 225 var url = this.initiatorInfoForRequest(request).url;
226 request[SDK.NetworkLog._initiatorDataSymbol].request = this._requestForURLIn Target(url, request.target()); 226 request[NetworkLog.NetworkLog._initiatorDataSymbol].request = this._requestF orURLInTarget(url, request.target());
227 return request[SDK.NetworkLog._initiatorDataSymbol].request; 227 return request[NetworkLog.NetworkLog._initiatorDataSymbol].request;
228 } 228 }
229 229
230 /** 230 /**
231 * @param {!SDK.NetworkRequest} request 231 * @param {!SDK.NetworkRequest} request
232 * @return {?SDK.PageLoad} 232 * @return {?NetworkLog.PageLoad}
233 */ 233 */
234 pageLoadForRequest(request) { 234 pageLoadForRequest(request) {
235 return request[SDK.NetworkLog._pageLoadForRequestSymbol]; 235 return request[NetworkLog.NetworkLog._pageLoadForRequestSymbol];
236 } 236 }
237 237
238 /** 238 /**
239 * @param {!Common.Event} event 239 * @param {!Common.Event} event
240 */ 240 */
241 _onMainFrameNavigated(event) { 241 _onMainFrameNavigated(event) {
242 var mainFrame = /** @type {!SDK.ResourceTreeFrame} */ (event.data); 242 var mainFrame = /** @type {!SDK.ResourceTreeFrame} */ (event.data);
243 var target = mainFrame.target(); 243 var target = mainFrame.target();
244 this._currentPageLoad.delete(target); 244 this._currentPageLoad.delete(target);
245 var oldRequests = this.requestsForTarget(target); 245 var oldRequests = this.requestsForTarget(target);
246 this._requests = this._requests.filter(request => request.target() !== targe t); 246 this._requests = this._requests.filter(request => request.target() !== targe t);
247 var idMap = new Map(); 247 var idMap = new Map();
248 this._requestsByTargetAndId.set(target, idMap); 248 this._requestsByTargetAndId.set(target, idMap);
249 249
250 // Preserve requests from the new session. 250 // Preserve requests from the new session.
251 var currentPageLoad = null; 251 var currentPageLoad = null;
252 for (var i = 0; i < oldRequests.length; ++i) { 252 for (var i = 0; i < oldRequests.length; ++i) {
253 var request = oldRequests[i]; 253 var request = oldRequests[i];
254 if (request.loaderId === mainFrame.loaderId) { 254 if (request.loaderId === mainFrame.loaderId) {
255 if (!currentPageLoad) 255 if (!currentPageLoad)
256 currentPageLoad = new SDK.PageLoad(request); 256 currentPageLoad = new NetworkLog.PageLoad(request);
257 this._requests.push(request); 257 this._requests.push(request);
258 idMap.set(request.requestId(), request); 258 idMap.set(request.requestId(), request);
259 request[SDK.NetworkLog._pageLoadForRequestSymbol] = currentPageLoad; 259 request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = currentPageLo ad;
260 } 260 }
261 } 261 }
262 if (currentPageLoad) 262 if (currentPageLoad)
263 this._currentPageLoad.set(target, currentPageLoad); 263 this._currentPageLoad.set(target, currentPageLoad);
264 } 264 }
265 265
266 /** 266 /**
267 * @param {!Common.Event} event 267 * @param {!Common.Event} event
268 */ 268 */
269 _onRequestStarted(event) { 269 _onRequestStarted(event) {
270 var request = /** @type {!SDK.NetworkRequest} */ (event.data); 270 var request = /** @type {!SDK.NetworkRequest} */ (event.data);
271 this._requests.push(request); 271 this._requests.push(request);
272 this._requestsByTargetAndId.get(request.target()).set(request.requestId(), r equest); 272 this._requestsByTargetAndId.get(request.target()).set(request.requestId(), r equest);
273 request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad.ge t(request.target()); 273 request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = this._currentPage Load.get(request.target());
274 } 274 }
275 275
276 /** 276 /**
277 * @param {!SDK.NetworkManager.RequestRedirectEvent} event 277 * @param {!SDK.NetworkManager.RequestRedirectEvent} event
278 */ 278 */
279 _onRequestRedirect(event) { 279 _onRequestRedirect(event) {
280 var request = event.request; 280 var request = event.request;
281 delete request[SDK.NetworkLog._initiatorDataSymbol]; 281 delete request[NetworkLog.NetworkLog._initiatorDataSymbol];
282 } 282 }
283 283
284 /** 284 /**
285 * @param {!SDK.ResourceTreeModel} resourceTreeModel 285 * @param {!SDK.ResourceTreeModel} resourceTreeModel
286 * @param {!Common.Event} event 286 * @param {!Common.Event} event
287 */ 287 */
288 _onDOMContentLoaded(resourceTreeModel, event) { 288 _onDOMContentLoaded(resourceTreeModel, event) {
289 var pageLoad = this._currentPageLoad.get(resourceTreeModel.target()); 289 var pageLoad = this._currentPageLoad.get(resourceTreeModel.target());
290 if (pageLoad) 290 if (pageLoad)
291 pageLoad.contentLoadTime = /** @type {number} */ (event.data); 291 pageLoad.contentLoadTime = /** @type {number} */ (event.data);
(...skipping 13 matching lines...) Expand all
305 * @param {!SDK.Target} target 305 * @param {!SDK.Target} target
306 * @param {!Protocol.Network.RequestId} requestId 306 * @param {!Protocol.Network.RequestId} requestId
307 * @return {?SDK.NetworkRequest} 307 * @return {?SDK.NetworkRequest}
308 */ 308 */
309 requestForId(target, requestId) { 309 requestForId(target, requestId) {
310 var map = this._requestsByTargetAndId.get(target); 310 var map = this._requestsByTargetAndId.get(target);
311 return map ? (map.get(requestId) || null) : null; 311 return map ? (map.get(requestId) || null) : null;
312 } 312 }
313 }; 313 };
314 314
315 SDK.PageLoad = class { 315 NetworkLog.PageLoad = class {
316 /** 316 /**
317 * @param {!SDK.NetworkRequest} mainRequest 317 * @param {!SDK.NetworkRequest} mainRequest
318 */ 318 */
319 constructor(mainRequest) { 319 constructor(mainRequest) {
320 this.id = ++SDK.PageLoad._lastIdentifier; 320 this.id = ++NetworkLog.PageLoad._lastIdentifier;
321 this.url = mainRequest.url(); 321 this.url = mainRequest.url();
322 this.startTime = mainRequest.startTime; 322 this.startTime = mainRequest.startTime;
323 /** @type {number} */ 323 /** @type {number} */
324 this.loadTime; 324 this.loadTime;
325 /** @type {number} */ 325 /** @type {number} */
326 this.contentLoadTime; 326 this.contentLoadTime;
327 } 327 }
328 }; 328 };
329 329
330 SDK.PageLoad._lastIdentifier = 0; 330 NetworkLog.PageLoad._lastIdentifier = 0;
331 331
332 /** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.Netw orkRequest>}} */ 332 /** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.Netw orkRequest>}} */
333 SDK.NetworkLog.InitiatorGraph; 333 NetworkLog.NetworkLog.InitiatorGraph;
334 334
335 /** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber : number, columnNumber: number, scriptId: ?string}} */ 335 /** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber : number, columnNumber: number, scriptId: ?string}} */
336 SDK.NetworkLog._InitiatorInfo; 336 NetworkLog.NetworkLog._InitiatorInfo;
337 337
338 SDK.NetworkLog._initiatorDataSymbol = Symbol('InitiatorData'); 338 NetworkLog.NetworkLog._initiatorDataSymbol = Symbol('InitiatorData');
339 SDK.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest'); 339 NetworkLog.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest');
340 SDK.NetworkLog._events = Symbol('SDK.NetworkLog.events'); 340 NetworkLog.NetworkLog._events = Symbol('NetworkLog.NetworkLog.events');
341 341
342 /** @type {!SDK.NetworkLog} */ 342 /** @type {!NetworkLog.NetworkLog} */
343 SDK.networkLog; 343 NetworkLog.networkLog;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698