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

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

Issue 2628693002: [Devtools] Move initiator data into NetworkLog from NetworkRequest (Closed)
Patch Set: changes Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
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..4d0752b1229157cd1b9094ffbb468c518ae629e2 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 fromRequest(request) {
+ 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)}} */
+ 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.fromRequest(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.fromRequest(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');

Powered by Google App Engine
This is Rietveld 408576698