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

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

Issue 2749043005: [DevTools] Make NetworkLog a singleton, and not an SDKModel (Closed)
Patch Set: 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 11 matching lines...) Expand all
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
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 * @unrestricted 32 * @implements {SDK.SDKModelObserver<!SDK.NetworkManager>}
33 */ 33 */
34 SDK.NetworkLog = class { 34 SDK.NetworkLog = class {
35 /** 35 constructor() {
36 * @param {!SDK.Target} target
37 * @param {!SDK.ResourceTreeModel} resourceTreeModel
38 * @param {!SDK.NetworkManager} networkManager
39 */
40 constructor(target, resourceTreeModel, networkManager) {
41 this._target = target;
42 target[SDK.NetworkLog._logSymbol] = this;
43 /** @type {!Array<!SDK.NetworkRequest>} */ 36 /** @type {!Array<!SDK.NetworkRequest>} */
44 this._requests = []; 37 this._requests = [];
45 /** @type {!Object<string, !SDK.NetworkRequest>} */ 38 /** @type {!Map<!SDK.Target, !Map<string, !SDK.NetworkRequest>>} */
46 this._requestForId = {}; 39 this._requestsByTargetAndId = new Map();
47 networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, th is._onRequestStarted, this); 40 /** @type {!Map<!SDK.Target, !SDK.PageLoad>} */
48 resourceTreeModel.addEventListener( 41 this._currentPageLoad = new Map();
49 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNaviga ted, this); 42 SDK.targetManager.observeModels(SDK.NetworkManager, this);
50 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._ onLoad, this);
51 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLo aded, this._onDOMContentLoaded, this);
52 networkManager.on(SDK.NetworkManager.RequestRedirectEvent, this._onRequestRe direct, this);
53 } 43 }
54 44
55 /** 45 /**
56 * @return {!SDK.Target} 46 * @override
47 * @param {!SDK.NetworkManager} networkManager
57 */ 48 */
58 target() { 49 modelAdded(networkManager) {
59 return this._target; 50 var eventListeners = [];
51 eventListeners.push(
52 networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted , this._onRequestStarted, this));
53 eventListeners.push(networkManager.on(SDK.NetworkManager.RequestRedirectEven t, this._onRequestRedirect, this));
54
55 var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel) ;
56 if (resourceTreeModel) {
57 eventListeners.push(resourceTreeModel.addEventListener(
58 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavi gated, this));
59 eventListeners.push(resourceTreeModel.addEventListener(
60 SDK.ResourceTreeModel.Events.Load, this._onLoad.bind(this, resourceTre eModel)));
61 eventListeners.push(resourceTreeModel.addEventListener(
62 SDK.ResourceTreeModel.Events.DOMContentLoaded, this._onDOMContentLoade d.bind(this, resourceTreeModel)));
63 }
64
65 networkManager[SDK.NetworkLog._events] = eventListeners;
66 this._requestsByTargetAndId.set(networkManager.target(), new Map());
60 } 67 }
61 68
62 /** 69 /**
63 * @param {!SDK.Target} target 70 * @override
64 * @return {?SDK.NetworkLog} 71 * @param {!SDK.NetworkManager} networkManager
65 */ 72 */
66 static fromTarget(target) { 73 modelRemoved(networkManager) {
67 return target[SDK.NetworkLog._logSymbol] || null; 74 this._requestsByTargetAndId.delete(networkManager.target());
75 Common.EventTarget.removeEventListeners(networkManager[SDK.NetworkLog._event s]);
68 } 76 }
69 77
70 /** 78 /**
71 * @param {string} url 79 * @param {string} url
72 * @return {?SDK.NetworkRequest} 80 * @return {?SDK.NetworkRequest}
73 */ 81 */
74 static requestForURL(url) { 82 requestForURL(url) {
75 for (var target of SDK.targetManager.targets()) { 83 for (var i = 0; i < this._requests.length; ++i) {
caseq 2017/03/16 20:27:47 return this._requests.find(request => request.url(
dgozman 2017/03/16 20:51:20 Done.
76 var networkLog = SDK.NetworkLog.fromTarget(target); 84 if (this._requests[i].url() === url)
77 var result = networkLog && networkLog.requestForURL(url); 85 return this._requests[i];
78 if (result)
79 return result;
80 } 86 }
81 return null; 87 return null;
82 } 88 }
83 89
84 /** 90 /**
85 * @return {!Array.<!SDK.NetworkRequest>} 91 * @return {!Array<!SDK.NetworkRequest>}
86 */ 92 */
87 static requests() { 93 requests() {
88 var result = []; 94 return this._requests;
89 for (var target of SDK.targetManager.targets()) {
90 var networkLog = SDK.NetworkLog.fromTarget(target);
91 if (networkLog)
92 result = result.concat(networkLog.requests());
93 }
94 return result;
95 } 95 }
96 96
97 /** 97 /**
98 * @param {!SDK.NetworkRequest} request 98 * @param {!SDK.Target} target
99 * @return {?SDK.NetworkLog} 99 * @return {!Array<!SDK.NetworkRequest>}
100 */ 100 */
101 static fromRequest(request) { 101 requestsForTarget(target) {
102 return SDK.NetworkLog.fromTarget(request.target()); 102 return this._requests.filter(request => request.target() === target);
caseq 2017/03/16 20:27:47 return Array.from(this._requestsByTargetAndId.get(
dgozman 2017/03/16 20:51:20 Done.
103 }
104
105 /**
106 * @param {string} url
107 * @param {!SDK.Target} target
108 * @return {?SDK.NetworkRequest}
109 */
110 _requestForURLInTarget(url, target) {
111 for (var i = 0; i < this._requests.length; ++i) {
112 if (this._requests[i].target() === target && this._requests[i].url() === u rl)
caseq 2017/03/16 20:27:47 Iterate over this._requestsByTargetAndId.get(targe
dgozman 2017/03/16 20:51:20 Done.
113 return this._requests[i];
114 }
115 return null;
103 } 116 }
104 117
105 /** 118 /**
106 * @param {!SDK.NetworkRequest} request 119 * @param {!SDK.NetworkRequest} request
107 */ 120 */
108 static _initializeInitiatorSymbolIfNeeded(request) { 121 _initializeInitiatorSymbolIfNeeded(request) {
109 if (!request[SDK.NetworkLog._initiatorDataSymbol]) { 122 if (!request[SDK.NetworkLog._initiatorDataSymbol]) {
110 /** @type {!{info: ?SDK.NetworkLog._InitiatorInfo, chain: !Set<!SDK.Networ kRequest>, request: (?SDK.NetworkRequest|undefined)}} */ 123 /** @type {!{info: ?SDK.NetworkLog._InitiatorInfo, chain: !Set<!SDK.Networ kRequest>, request: (?SDK.NetworkRequest|undefined)}} */
111 request[SDK.NetworkLog._initiatorDataSymbol] = { 124 request[SDK.NetworkLog._initiatorDataSymbol] = {
112 info: null, 125 info: null,
113 chain: null, 126 chain: null,
114 request: undefined, 127 request: undefined,
115 }; 128 };
116 } 129 }
117 } 130 }
118 131
119 /** 132 /**
120 * @param {!SDK.NetworkRequest} request 133 * @param {!SDK.NetworkRequest} request
121 * @return {!SDK.NetworkLog._InitiatorInfo} 134 * @return {!SDK.NetworkLog._InitiatorInfo}
122 */ 135 */
123 static initiatorInfoForRequest(request) { 136 initiatorInfoForRequest(request) {
124 SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); 137 this._initializeInitiatorSymbolIfNeeded(request);
125 if (request[SDK.NetworkLog._initiatorDataSymbol].info) 138 if (request[SDK.NetworkLog._initiatorDataSymbol].info)
126 return request[SDK.NetworkLog._initiatorDataSymbol].info; 139 return request[SDK.NetworkLog._initiatorDataSymbol].info;
127 140
128 var type = SDK.NetworkRequest.InitiatorType.Other; 141 var type = SDK.NetworkRequest.InitiatorType.Other;
129 var url = ''; 142 var url = '';
130 var lineNumber = -Infinity; 143 var lineNumber = -Infinity;
131 var columnNumber = -Infinity; 144 var columnNumber = -Infinity;
132 var scriptId = null; 145 var scriptId = null;
133 var initiator = request.initiator(); 146 var initiator = request.initiator();
134 147
(...skipping 24 matching lines...) Expand all
159 172
160 request[SDK.NetworkLog._initiatorDataSymbol].info = 173 request[SDK.NetworkLog._initiatorDataSymbol].info =
161 {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumbe r, scriptId: scriptId}; 174 {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumbe r, scriptId: scriptId};
162 return request[SDK.NetworkLog._initiatorDataSymbol].info; 175 return request[SDK.NetworkLog._initiatorDataSymbol].info;
163 } 176 }
164 177
165 /** 178 /**
166 * @param {!SDK.NetworkRequest} request 179 * @param {!SDK.NetworkRequest} request
167 * @return {!SDK.NetworkLog.InitiatorGraph} 180 * @return {!SDK.NetworkLog.InitiatorGraph}
168 */ 181 */
169 static initiatorGraphForRequest(request) { 182 initiatorGraphForRequest(request) {
170 /** @type {!Set<!SDK.NetworkRequest>} */ 183 /** @type {!Set<!SDK.NetworkRequest>} */
171 var initiated = new Set(); 184 var initiated = new Set();
172 var networkLog = SDK.NetworkLog.fromRequest(request); 185 for (var logRequest of this._requests) {
173 if (!networkLog) 186 if (logRequest.target() !== request.target())
caseq 2017/03/16 20:27:47 ditto
dgozman 2017/03/16 20:51:20 Done.
174 return {initiators: new Set(), initiated: new Set()}; 187 continue;
175 188 var localInitiators = this._initiatorChain(logRequest);
176 var requests = networkLog.requests();
177 for (var logRequest of requests) {
178 var localInitiators = initiatorChain(logRequest);
179 if (localInitiators.has(request)) 189 if (localInitiators.has(request))
180 initiated.add(logRequest); 190 initiated.add(logRequest);
181 } 191 }
182 return {initiators: initiatorChain(request), initiated: initiated}; 192 return {initiators: this._initiatorChain(request), initiated: initiated};
193 }
183 194
184 /** 195 /**
185 * @param {!SDK.NetworkRequest} request 196 * @param {!SDK.NetworkRequest} request
186 * @return {!Set<!SDK.NetworkRequest>} 197 * @return {!Set<!SDK.NetworkRequest>}
187 */ 198 */
188 function initiatorChain(request) { 199 _initiatorChain(request) {
189 SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); 200 this._initializeInitiatorSymbolIfNeeded(request);
190 var initiatorChainCache = 201 var initiatorChainCache =
191 /** @type {?Set<!SDK.NetworkRequest>} */ (request[SDK.NetworkLog._init iatorDataSymbol].chain); 202 /** @type {?Set<!SDK.NetworkRequest>} */ (request[SDK.NetworkLog._initia torDataSymbol].chain);
192 if (initiatorChainCache) 203 if (initiatorChainCache)
193 return initiatorChainCache; 204 return initiatorChainCache;
194 205
195 initiatorChainCache = new Set(); 206 initiatorChainCache = new Set();
196 207
197 var checkRequest = request; 208 var checkRequest = request;
198 while (checkRequest) { 209 while (checkRequest) {
199 initiatorChainCache.add(checkRequest); 210 initiatorChainCache.add(checkRequest);
200 checkRequest = initiatorRequest(checkRequest); 211 checkRequest = this._initiatorRequest(checkRequest);
201 }
202 request[SDK.NetworkLog._initiatorDataSymbol].chain = initiatorChainCache;
203 return initiatorChainCache;
204 } 212 }
213 request[SDK.NetworkLog._initiatorDataSymbol].chain = initiatorChainCache;
214 return initiatorChainCache;
215 }
205 216
206 /** 217 /**
207 * @param {!SDK.NetworkRequest} request 218 * @param {!SDK.NetworkRequest} request
208 * @return {?SDK.NetworkRequest} 219 * @return {?SDK.NetworkRequest}
209 */ 220 */
210 function initiatorRequest(request) { 221 _initiatorRequest(request) {
211 SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); 222 this._initializeInitiatorSymbolIfNeeded(request);
212 if (request[SDK.NetworkLog._initiatorDataSymbol].request !== undefined) 223 if (request[SDK.NetworkLog._initiatorDataSymbol].request !== undefined)
213 return request[SDK.NetworkLog._initiatorDataSymbol].request;
214 var networkLog = SDK.NetworkLog.fromRequest(request);
215 var url = SDK.NetworkLog.initiatorInfoForRequest(request).url;
216 request[SDK.NetworkLog._initiatorDataSymbol].request = networkLog.requestF orURL(url);
217 return request[SDK.NetworkLog._initiatorDataSymbol].request; 224 return request[SDK.NetworkLog._initiatorDataSymbol].request;
218 } 225 var url = this.initiatorInfoForRequest(request).url;
226 request[SDK.NetworkLog._initiatorDataSymbol].request = this._requestForURLIn Target(url, request.target());
227 return request[SDK.NetworkLog._initiatorDataSymbol].request;
219 } 228 }
220 229
221 /** 230 /**
222 * @param {!SDK.NetworkRequest} request 231 * @param {!SDK.NetworkRequest} request
223 * @return {?SDK.PageLoad} 232 * @return {?SDK.PageLoad}
224 */ 233 */
225 static pageLoadForRequest(request) { 234 pageLoadForRequest(request) {
226 return request[SDK.NetworkLog._pageLoadForRequestSymbol]; 235 return request[SDK.NetworkLog._pageLoadForRequestSymbol];
227 } 236 }
228 237
229 /** 238 /**
230 * @return {!Array.<!SDK.NetworkRequest>}
231 */
232 requests() {
233 return this._requests;
234 }
235
236 /**
237 * @param {string} url
238 * @return {?SDK.NetworkRequest}
239 */
240 requestForURL(url) {
241 for (var i = 0; i < this._requests.length; ++i) {
242 if (this._requests[i].url() === url)
243 return this._requests[i];
244 }
245 return null;
246 }
247
248 /**
249 * @param {!Common.Event} event 239 * @param {!Common.Event} event
250 */ 240 */
251 _onMainFrameNavigated(event) { 241 _onMainFrameNavigated(event) {
252 var mainFrame = /** type {SDK.ResourceTreeFrame} */ event.data; 242 var mainFrame = /** type {!SDK.ResourceTreeFrame} */ (event.data);
243 var target = mainFrame.target();
244 this._currentPageLoad.delete(target);
245 var oldRequests = this.requestsForTarget(target);
246 this._requests = this._requests.filter(request => request.target() !== targe t);
247 this._requestsByTargetAndId.set(target, new Map());
248
253 // Preserve requests from the new session. 249 // Preserve requests from the new session.
254 this._currentPageLoad = null; 250 var currentPageLoad = null;
255 var oldRequests = this._requests.splice(0, this._requests.length);
256 this._requestForId = {};
257 for (var i = 0; i < oldRequests.length; ++i) { 251 for (var i = 0; i < oldRequests.length; ++i) {
258 var request = oldRequests[i]; 252 var request = oldRequests[i];
259 if (request.loaderId === mainFrame.loaderId) { 253 if (request.loaderId === mainFrame.loaderId) {
260 if (!this._currentPageLoad) 254 if (!currentPageLoad)
261 this._currentPageLoad = new SDK.PageLoad(request); 255 currentPageLoad = new SDK.PageLoad(request);
262 this._requests.push(request); 256 this._requests.push(request);
263 this._requestForId[request.requestId()] = request; 257 this._requestsByTargetAndId.get(target).set(request.requestId(), request );
264 request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoa d; 258 request[SDK.NetworkLog._pageLoadForRequestSymbol] = currentPageLoad;
265 } 259 }
266 } 260 }
261 if (currentPageLoad)
262 this._currentPageLoad.set(target, currentPageLoad);
caseq 2017/03/16 20:27:47 Why can we have more than one?
dgozman 2017/03/16 20:51:20 One per target in case of multiple targets?
267 } 263 }
268 264
269 /** 265 /**
270 * @param {!Common.Event} event 266 * @param {!Common.Event} event
271 */ 267 */
272 _onRequestStarted(event) { 268 _onRequestStarted(event) {
273 var request = /** @type {!SDK.NetworkRequest} */ (event.data); 269 var request = /** @type {!SDK.NetworkRequest} */ (event.data);
274 this._requests.push(request); 270 this._requests.push(request);
275 this._requestForId[request.requestId()] = request; 271 this._requestsByTargetAndId.get(request.target()).set(request.requestId(), r equest);
276 request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad; 272 request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad.ge t(request.target());
277 } 273 }
278 274
279 /** 275 /**
280 * @param {!SDK.NetworkManager.RequestRedirectEvent} event 276 * @param {!SDK.NetworkManager.RequestRedirectEvent} event
281 */ 277 */
282 _onRequestRedirect(event) { 278 _onRequestRedirect(event) {
283 var request = event.request; 279 var request = event.request;
284 delete request[SDK.NetworkLog._initiatorDataSymbol]; 280 delete request[SDK.NetworkLog._initiatorDataSymbol];
285 } 281 }
286 282
287 /** 283 /**
284 * @param {!SDK.ResourceTreeModel} resourceTreeModel
288 * @param {!Common.Event} event 285 * @param {!Common.Event} event
289 */ 286 */
290 _onDOMContentLoaded(event) { 287 _onDOMContentLoaded(resourceTreeModel, event) {
291 if (this._currentPageLoad) 288 var pageLoad = this._currentPageLoad.get(resourceTreeModel.target());
292 this._currentPageLoad.contentLoadTime = event.data; 289 if (pageLoad)
290 pageLoad.contentLoadTime = event.data;
293 } 291 }
294 292
295 /** 293 /**
294 * @param {!SDK.ResourceTreeModel} resourceTreeModel
296 * @param {!Common.Event} event 295 * @param {!Common.Event} event
297 */ 296 */
298 _onLoad(event) { 297 _onLoad(resourceTreeModel, event) {
299 if (this._currentPageLoad) 298 var pageLoad = this._currentPageLoad.get(resourceTreeModel.target());
300 this._currentPageLoad.loadTime = event.data; 299 if (pageLoad)
300 pageLoad.loadTime = event.data;
301 } 301 }
302 302
303 /** 303 /**
304 * @param {!SDK.Target} target
304 * @param {!Protocol.Network.RequestId} requestId 305 * @param {!Protocol.Network.RequestId} requestId
305 * @return {?SDK.NetworkRequest} 306 * @return {?SDK.NetworkRequest}
306 */ 307 */
307 requestForId(requestId) { 308 requestForId(target, requestId) {
308 return this._requestForId[requestId]; 309 var map = this._requestsByTargetAndId.get(target);
310 return map ? (map.get(requestId) || null) : null;
309 } 311 }
310 }; 312 };
311 313
312 /** 314 /**
313 * @unrestricted 315 * @unrestricted
314 */ 316 */
315 SDK.PageLoad = class { 317 SDK.PageLoad = class {
316 /** 318 /**
317 * @param {!SDK.NetworkRequest} mainRequest 319 * @param {!SDK.NetworkRequest} mainRequest
318 */ 320 */
319 constructor(mainRequest) { 321 constructor(mainRequest) {
320 this.id = ++SDK.PageLoad._lastIdentifier; 322 this.id = ++SDK.PageLoad._lastIdentifier;
321 this.url = mainRequest.url(); 323 this.url = mainRequest.url();
322 this.startTime = mainRequest.startTime; 324 this.startTime = mainRequest.startTime;
323 } 325 }
324 }; 326 };
325 327
326 SDK.PageLoad._lastIdentifier = 0; 328 SDK.PageLoad._lastIdentifier = 0;
327 329
328 /** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.Netw orkRequest>}} */ 330 /** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.Netw orkRequest>}} */
329 SDK.NetworkLog.InitiatorGraph; 331 SDK.NetworkLog.InitiatorGraph;
330 332
331 /** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber : number, columnNumber: number, scriptId: ?string}} */ 333 /** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber : number, columnNumber: number, scriptId: ?string}} */
332 SDK.NetworkLog._InitiatorInfo; 334 SDK.NetworkLog._InitiatorInfo;
333 335
334 SDK.NetworkLog._initiatorDataSymbol = Symbol('InitiatorData'); 336 SDK.NetworkLog._initiatorDataSymbol = Symbol('InitiatorData');
335 SDK.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest'); 337 SDK.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest');
336 SDK.NetworkLog._logSymbol = Symbol('NetworkLog'); 338 SDK.NetworkLog._events = Symbol('SDK.NetworkLog.events');
339
340 /** @type {!SDK.NetworkLog} */
341 SDK.networkLog;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698