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..57e87ac36c10d631b3ad0e3bf859f3a9a3c48758 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/NetworkLog.js |
| @@ -87,6 +87,119 @@ SDK.NetworkLog = class extends SDK.SDKModel { |
| } |
| /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.NetworkLog} |
| + */ |
| + static networkLogForRequest(request) { |
| + return request[SDK.NetworkLog._networkLogForRequestSymbol] || null; |
|
dgozman
2017/01/13 00:51:54
You can still do NetworkLog.FromTarget(request.tar
allada
2017/01/17 22:10:30
Done.
|
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {!{type: !SDK.NetworkRequest.InitiatorType, url: string, lineNumber: number, columnNumber: number, scriptId: ?string}} |
| + */ |
| + static initiatorInfoForRequest(request) { |
| + if (request[SDK.NetworkLog._initiatorInfoSymbol]) |
| + return request[SDK.NetworkLog._initiatorInfoSymbol]; |
| + |
| + 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._initiatorInfoSymbol] = |
| + {type: type, url: url, lineNumber: lineNumber, columnNumber: columnNumber, scriptId: scriptId}; |
| + return request[SDK.NetworkLog._initiatorInfoSymbol]; |
| + } |
| + |
| + /** |
| + * @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) { |
| + var initiatorChainCache = |
| + /** @type {!Set<!SDK.NetworkRequest>} */ (request[SDK.NetworkLog._initiatorChainSymbol]); |
| + if (initiatorChainCache) |
| + return initiatorChainCache; |
| + |
| + initiatorChainCache = new Set(); |
| + |
| + var checkRequest = request; |
| + while (checkRequest) { |
| + initiatorChainCache.add(checkRequest); |
| + checkRequest = initiatorRequest(checkRequest); |
| + } |
| + request[SDK.NetworkLog._initiatorChainSymbol] = initiatorChainCache; |
| + return initiatorChainCache; |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.NetworkRequest} |
| + */ |
| + function initiatorRequest(request) { |
| + if (request[SDK.NetworkLog._initiatorRequestSymbol] !== undefined) |
| + return request[SDK.NetworkLog._initiatorRequestSymbol]; |
| + var networkLog = SDK.NetworkLog.networkLogForRequest(request); |
| + var url = SDK.NetworkLog.initiatorInfoForRequest(request).url; |
| + request[SDK.NetworkLog._initiatorRequestSymbol] = networkLog.requestForURL(url); |
| + return request[SDK.NetworkLog._initiatorRequestSymbol]; |
| + } |
| + } |
| + |
| + /** |
| + * @param {!SDK.NetworkRequest} request |
| + * @return {?SDK.PageLoad} |
| + */ |
| + static pageLoadForRequest(request) { |
| + return request[SDK.NetworkLog._pageLoadForRequestSymbol]; |
| + } |
| + |
| + /** |
| * @return {!Array.<!SDK.NetworkRequest>} |
| */ |
| requests() { |
| @@ -106,14 +219,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 +234,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 +246,9 @@ 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; |
| + request.addEventListener( |
|
dgozman
2017/01/13 00:51:54
Remove this listener somewhere?
allada
2017/01/17 22:10:30
Done.
|
| + SDK.NetworkRequest.Events.RedirectSourceChanged, () => delete request[SDK.NetworkLog._initiatorInfoSymbol]); |
|
dgozman
2017/01/13 00:51:54
nit: let's wrap the body in {}
allada
2017/01/17 22:10:30
Done.
|
| } |
| /** |
| @@ -185,3 +292,12 @@ SDK.PageLoad = class { |
| }; |
| SDK.PageLoad._lastIdentifier = 0; |
| + |
| +/** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.NetworkRequest>}} */ |
| +SDK.NetworkLog.InitiatorGraph; |
| + |
| +SDK.NetworkLog._networkLogForRequestSymbol = Symbol('NetworkLogForRequest'); |
| +SDK.NetworkLog._initiatorInfoSymbol = Symbol('InitiatorInfo'); |
| +SDK.NetworkLog._initiatorRequestSymbol = Symbol('InitiatorRequest'); |
| +SDK.NetworkLog._initiatorChainSymbol = Symbol('InitiatorChain'); |
|
caseq
2017/01/13 01:16:59
Why not merge all initiator-related info for a req
allada
2017/01/17 22:10:30
Done.
|
| +SDK.NetworkLog._pageLoadForRequestSymbol = Symbol('PageLoadForRequest'); |