Index: third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js |
index 55d223b3a10a3d7e79c488d5f28344849cf474bd..b90cbda4bb44da7db4e8d0109ab1e6bd86a0dee4 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js |
+++ b/third_party/WebKit/Source/devtools/front_end/network_log/NetworkLog.js |
@@ -44,6 +44,154 @@ NetworkLog.NetworkLog = class extends Common.Object { |
SDK.targetManager.observeModels(SDK.NetworkManager, this); |
} |
+ /** |
+ * @param {!Object} harData |
+ */ |
+ loadHAR(harData) { |
+ var entries = harData.log.entries; |
+ |
+ var pages = new Map(); |
+ for (var page of harData.log.pages) |
+ pages.set(page.id, page); |
+ |
+ entries.sort((a, b) => new Date(a.startedDateTime).getTime() - new Date(b.startedDateTime).getTime()); |
+ var pageLoads = new Map(); |
+ var requests = []; |
+ for (var i = 0; i < entries.length; i++) { |
+ var entry = entries[i]; |
+ var pageLoad = pageLoads.get(entry.pageref); |
+ var request = new SDK.NetworkRequest("har-" + i, entry.request.url, pageLoad ? pageLoad.inspectedURL : entry.request.url.asParsedURL(), 0, 0, null); |
+ if (!pageLoad) { |
+ var page = pages.get(entry.pageref); |
+ if (page) { |
+ pageLoad = new NetworkLog.PageLoad(request, entry.request.url.asParsedURL()); |
+ pageLoad.startTime = page.startedDateTime * 1000; |
+ pageLoad.contentLoadTime = page.pageTimings.onContentLoad * 1000; |
+ pageLoad.loadTime = page.pageTimings.onLoad * 1000; |
+ pageLoads.set(entry.pageref, pageLoad); |
+ } |
+ } |
+ |
+ var baseTime = (new Date(entry.startedDateTime).getTime()) / 1000; |
+ request.setIssueTime(baseTime, baseTime); |
+ //FIX THIS. |
+ if (pageLoad.mainRequest !== request) |
+ request.setResourceType(SDK.NetworkRequest.resourceTypeForMimeType(entry.response.content.mimeType)); |
+ else |
+ request.setResourceType(Common.resourceTypes.Document); |
+ |
+ var lastEntry = entry.timings.blocked; |
+ |
+ var dnsStart = -1; |
+ var dnsEnd = -1; |
+ if (entry.timings.dns >= 0) { |
+ dnsStart = lastEntry; |
+ dnsEnd = dnsStart + entry.timings.dns; |
+ lastEntry = dnsEnd; |
+ } |
+ |
+ var connectStart = -1; |
+ var connectEnd = -1; |
+ if (entry.timings.connect >= 0) { |
+ connectStart = lastEntry; |
+ connectEnd = lastEntry + entry.timings.connect; |
+ lastEntry = connectEnd; |
+ } |
+ |
+ var sslStart = -1; |
+ var sslEnd = -1; |
+ if (entry.timings.ssl >= 0) { |
+ sslStart = lastEntry; |
+ sslEnd = lastEntry + entry.timings.ssl; |
+ lastEntry = sslEnd; |
+ } |
+ |
+ var sendStart = -1; |
+ var sendEnd = -1; |
+ if (entry.timings.send >= 0) { |
+ sendStart = lastEntry; |
+ sendEnd = lastEntry + entry.timings.send; |
+ lastEntry = sendEnd; |
+ } |
+ |
+ var receiveHeadersEnd = sendEnd + entry.timings.wait; |
+ |
+ request.timing = { |
+ requestTime: baseTime, |
+ // proxyStart: -1, |
+ // proxyEnd: -1, |
+ dnsStart: dnsStart, |
+ dnsEnd: dnsEnd, |
+ connectStart: connectStart, |
+ connectEnd: connectEnd, |
+ sslStart: sslStart, |
+ sslEnd: sslEnd, |
+ // workerStart: -1, |
+ // workerReady: -1, |
+ sendStart: sendStart, |
+ sendEnd: sendEnd, |
+ // pushStart: -1, |
+ // pushEnd: -1, |
+ receiveHeadersEnd: receiveHeadersEnd, |
+ }; |
+ |
+ var timings = Object.values(entry.timings); |
+ |
+ var time = entry.time || timings.reduce((sum, time) => time > 0 ? time : 0, 0); |
+ request.endTime = baseTime + (time / 1000); |
+ |
+ //request.responseReceivedTime = (baseTime + receiveHeadersEnd); |
+ |
+ request.resourceSize = (entry.response.content.size) || (entry.response.headersSize + entry.response.bodySize); |
+ request.increaseTransferSize(entry.response._transferSize || (entry.response.headersSize + entry.response.bodySize)); |
+ if (entry.response.content.mimeType !== 'x-unknown') |
+ request.mimeType = entry.response.content.mimeType; |
+ request.setRequestHeaders(entry.request.headers); |
+ request.setRequestHeadersText(headersArrayToString(entry.request.headers)); |
+ |
+ if (entry.request.postData) |
+ request.requestFormData = entry.request.postData.text; |
+ |
+ request.responseHeaders = entry.response.headers; |
+ request.responseHeadersText = headersArrayToString(entry.response.headers); |
+ |
+ request._contentRequested = true; |
+ if (entry.response.content.encoding === 'base64') |
+ request._contentEncoded = true; |
+ request._content = entry.response.content.text; |
+ |
+ request.statusCode = entry.response.status; |
+ request.statusText = entry.response.statusText; |
+ request.requestMethod = entry.response.method; |
+ request.protocol = entry.response.httpVersion.toLowerCase(); |
+ |
+ request.connectionId = entry.connection || ''; |
+ |
+ |
+ |
+ |
+ |
+ |
+ request.finished = true; |
+ request[NetworkLog.NetworkLog._pageLoadForRequestSymbol] = pageLoad; |
+ requests.push(request); |
+ }; |
+ |
+ request.setRemoteAddress(entry.serverIPAddress, 80); |
+ |
+ this.reset(); |
+ |
+ this._requests = requests; |
+ this._requestsSet = new Set(requests); |
+ |
+ for (var request of requests) |
+ this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestAdded, request); |
+ |
+ function headersArrayToString(headers) { |
+ return headers.map(header => header.name + ': ' + header.value).join('\n'); |
+ } |
+ } |
+ |
/** |
* @override |
* @param {!SDK.NetworkManager} networkManager |
@@ -295,7 +443,7 @@ NetworkLog.NetworkLog = class extends Common.Object { |
if (request.loaderId !== mainFrame.loaderId) |
continue; |
if (!currentPageLoad) |
- currentPageLoad = new NetworkLog.PageLoad(request); |
+ currentPageLoad = new NetworkLog.PageLoad(request, manager.target().inspectedURL().asParsedURL()); |
this._requests.push(request); |
this._requestsSet.add(request); |
this.dispatchEventToListeners(NetworkLog.NetworkLog.Events.RequestAdded, request); |
@@ -382,16 +530,18 @@ NetworkLog.NetworkLog = class extends Common.Object { |
NetworkLog.PageLoad = class { |
/** |
* @param {!SDK.NetworkRequest} mainRequest |
+ * @param {!Common.ParsedURL} inspectedURL |
*/ |
- constructor(mainRequest) { |
+ constructor(mainRequest, inspectedURL) { |
this.id = ++NetworkLog.PageLoad._lastIdentifier; |
this.url = mainRequest.url(); |
- this.startTime = mainRequest.startTime; |
+ this.startTime = mainRequest.pseudoWallTime(mainRequest.startTime); |
/** @type {number} */ |
this.loadTime; |
/** @type {number} */ |
this.contentLoadTime; |
this.mainRequest = mainRequest; |
+ this.inspectedURL = inspectedURL; |
} |
}; |