Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| index 04fe7a61b52444a31d473500fa67e45d8e2ab168..4c0ff3b62252bb80297a6dc369413746fffca9b1 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| @@ -49,6 +49,7 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| SDK.ResourceTreeModel.Events.MainFrameNavigated, this._onMainFrameNavigated, this); |
| resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._onLoad, this); |
| resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded, this._onDOMContentLoaded, this); |
| + networkManager.on(SDK.NetworkManager.RequestRedirectEvent, this._onRequestRedirect, this); |
| } |
| /** |
| @@ -87,6 +88,136 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| } |
| /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.NetworkLog} |
| + */ |
| + static networkLogForRequest(request) { |
|
dgozman
2017/01/18 18:02:01
fromRequest
allada
2017/01/19 00:50:11
Done.
|
| + return SDK.NetworkLog.fromTarget(request.target()); |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + */ |
| + static _initializeInitiatorSymbolIfNeeded(request) { |
| + if (!request[SDK.NetworkLog._initiatorDataSymbol]) { |
| + /** @type {!{info: ?SDK.NetworkLog._InitiatorInfo, chain: !Set<!SDK.NetworkRequest>, request: (?SDK.NetworkRequest|undefined)}} */ |
|
dgozman
2017/01/18 18:02:01
Why do you have to type? It doesn't help later any
allada
2017/01/19 00:50:11
I typed it so that future people looking at the co
|
| + request[SDK.NetworkLog._initiatorDataSymbol] = { |
| + info: null, |
| + chain: null, |
| + request: undefined, |
| + }; |
| + } |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {!SDK.NetworkLog._InitiatorInfo} |
| + */ |
| + static initiatorInfoForRequest(request) { |
| + SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); |
| + if (request[SDK.NetworkLog._initiatorDataSymbol].info) |
| + return request[SDK.NetworkLog._initiatorDataSymbol].info; |
| + |
| + var type = SDK.NetworkRequest.InitiatorType.Other; |
| + var url = ''; |
| + var lineNumber = -Infinity; |
| + var columnNumber = -Infinity; |
| + var scriptId = null; |
| + var initiator = request.initiator(); |
| + |
| + if (request.redirectSource) { |
| + type = SDK.NetworkRequest.InitiatorType.Redirect; |
| + url = request.redirectSource.url; |
| + } else if (initiator) { |
| + if (initiator.type === Protocol.Network.InitiatorType.Parser) { |
| + type = SDK.NetworkRequest.InitiatorType.Parser; |
| + url = initiator.url ? initiator.url : url; |
| + lineNumber = initiator.lineNumber ? initiator.lineNumber : lineNumber; |
| + } else if (initiator.type === Protocol.Network.InitiatorType.Script) { |
| + for (var stack = initiator.stack; stack; stack = stack.parent) { |
| + var topFrame = stack.callFrames.length ? stack.callFrames[0] : null; |
| + if (!topFrame) |
| + continue; |
| + type = SDK.NetworkRequest.InitiatorType.Script; |
| + url = topFrame.url || Common.UIString('<anonymous>'); |
| + lineNumber = topFrame.lineNumber; |
| + columnNumber = topFrame.columnNumber; |
| + scriptId = topFrame.scriptId; |
| + break; |
| + } |
| + } |
| + } |
| + |
| + request[SDK.NetworkLog._initiatorDataSymbol].info = |
| + {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumber, scriptId: scriptId}; |
| + return request[SDK.NetworkLog._initiatorDataSymbol].info; |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {!SDK.NetworkLog.InitiatorGraph} |
| + */ |
| + static initiatorGraphForRequest(request) { |
| + /** @type {!Set<!SDK.NetworkRequest>} */ |
| + var initiated = new Set(); |
| + var networkLog = SDK.NetworkLog.networkLogForRequest(request); |
| + if (!networkLog) |
| + return {initiators: new Set(), initiated: new Set()}; |
| + |
| + var requests = networkLog.requests(); |
| + for (var logRequest of requests) { |
| + var localInitiators = initiatorChain(logRequest); |
| + if (localInitiators.has(request)) |
| + initiated.add(logRequest); |
| + } |
| + return {initiators: initiatorChain(request), initiated: initiated}; |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {!Set<!SDK.NetworkRequest>} |
| + */ |
| + function initiatorChain(request) { |
| + SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); |
| + var initiatorChainCache = |
| + /** @type {?Set<!SDK.NetworkRequest>} */ (request[SDK.NetworkLog._initiatorDataSymbol].chain); |
| + if (initiatorChainCache) |
| + return initiatorChainCache; |
| + |
| + initiatorChainCache = new Set(); |
| + |
| + var checkRequest = request; |
| + while (checkRequest) { |
| + initiatorChainCache.add(checkRequest); |
| + checkRequest = initiatorRequest(checkRequest); |
| + } |
| + request[SDK.NetworkLog._initiatorDataSymbol].chain = initiatorChainCache; |
| + return initiatorChainCache; |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.NetworkRequest} |
| + */ |
| + function initiatorRequest(request) { |
| + SDK.NetworkLog._initializeInitiatorSymbolIfNeeded(request); |
| + if (request[SDK.NetworkLog._initiatorDataSymbol].request !== undefined) |
| + return request[SDK.NetworkLog._initiatorDataSymbol].request; |
| + var networkLog = SDK.NetworkLog.networkLogForRequest(request); |
| + var url = SDK.NetworkLog.initiatorInfoForRequest(request).url; |
| + request[SDK.NetworkLog._initiatorDataSymbol].request = networkLog.requestForURL(url); |
| + return request[SDK.NetworkLog._initiatorDataSymbol].request; |
| + } |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.PageLoad} |
| + */ |
| + static pageLoadForRequest(request) { |
| + return request[SDK.NetworkLog._pageLoadForRequestSymbol]; |
| + } |
| + |
| + /** |
| * @return {!Array.<!SDK.NetworkRequest>} |
| */ |
| requests() { |
| @@ -106,14 +237,6 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| } |
| /** |
| - * @param {!SDK.NetworkRequest} request |
| - * @return {!SDK.PageLoad} |
| - */ |
| - pageLoadForRequest(request) { |
| - return request.__page; |
| - } |
| - |
| - /** |
| * @param {!Common.Event} event |
| */ |
| _onMainFrameNavigated(event) { |
| @@ -129,7 +252,7 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| this._currentPageLoad = new SDK.PageLoad(request); |
| this._requests.push(request); |
| this._requestForId[request.requestId()] = request; |
| - request.__page = this._currentPageLoad; |
| + request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad; |
| } |
| } |
| } |
| @@ -141,7 +264,15 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| var request = /** @type {!SDK.NetworkRequest} */ (event.data); |
| this._requests.push(request); |
| this._requestForId[request.requestId()] = request; |
| - request.__page = this._currentPageLoad; |
| + request[SDK.NetworkLog._pageLoadForRequestSymbol] = this._currentPageLoad; |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkManager.RequestRedirectEvent} event |
| + */ |
| + _onRequestRedirect(event) { |
| + var request = event.request; |
| + delete request[SDK.NetworkLog._initiatorDataSymbol]; |
| } |
| /** |
| @@ -169,7 +300,6 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| } |
| }; |
| - |
| /** |
| * @unrestricted |
| */ |
| @@ -185,3 +315,12 @@ SDK.PageLoad = class { |
| }; |
| SDK.PageLoad._lastIdentifier = 0; |
| + |
| +/** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.NetworkRequest>}} */ |
| +SDK.NetworkLog.InitiatorGraph; |
| + |
| +/** @typedef {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber: number, columnNumber: number, scriptId: ?string}} */ |
| +SDK.NetworkLog._InitiatorInfo; |
| + |
| +SDK.NetworkLog._initiatorDataSymbol = Symbol('InitiatorData'); |
| +SDK.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest'); |