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

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: 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..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');

Powered by Google App Engine
This is Rietveld 408576698