| 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;
|
| }
|
| };
|
|
|
|
|