1545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 3545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 4545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * Redistribution and use in source and binary forms, with or without 5545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * modification, are permitted provided that the following conditions are 6545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * met: 7545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * * Redistributions of source code must retain the above copyright 9545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * notice, this list of conditions and the following disclaimer. 10545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * * Redistributions in binary form must reproduce the above 11545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 12545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * in the documentation and/or other materials provided with the 13545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * distribution. 14545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * * Neither the name of Google Inc. nor the names of its 15545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * contributors may be used to endorse or promote products derived from 16545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * this software without specific prior written permission. 17545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * 18545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch */ 30545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 31545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// See http://groups.google.com/group/http-archive-specification/web/har-1-2-spec 32545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch// for HAR specification. 33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// FIXME: Some fields are not yet supported due to back-end limitations. 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// See https://bugs.webkit.org/show_bug.cgi?id=58127 for details. 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebInspector.HAREntry = function(resource) 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch this._resource = resource; 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebInspector.HAREntry.prototype = { 43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch build: function() 44545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return { 46545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch pageref: this._resource.documentURL, 47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch startedDateTime: new Date(this._resource.startTime * 1000), 4868513a70bcd92384395513322f1b801e7bf9c729Steve Block time: WebInspector.HAREntry._toMilliseconds(this._resource.duration), 49545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch request: this._buildRequest(), 50545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch response: this._buildResponse(), 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch cache: { }, // Not supproted yet. 52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch timings: this._buildTimings() 53545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 54545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildRequest: function() 57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch var res = { 59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch method: this._resource.requestMethod, 60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch url: this._resource.url, 61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // httpVersion: "HTTP/1.1" -- Not available. 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch headers: this._buildHeaders(this._resource.requestHeaders), 632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch queryString: this._buildParameters(this._resource.queryParameters || []), 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch cookies: this._buildCookies(this._resource.requestCookies || []), 65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch headersSize: -1, // Not available. 66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch bodySize: -1 // Not available. 67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (this._resource.requestFormData) 69545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch res.postData = this._buildPostData(); 70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return res; 71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 72545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildResponse: function() 74545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return { 76545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch status: this._resource.statusCode, 77545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch statusText: this._resource.statusText, 78545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // "httpVersion": "HTTP/1.1" -- Not available. 79545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch headers: this._buildHeaders(this._resource.responseHeaders), 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch cookies: this._buildCookies(this._resource.responseCookies || []), 81545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch content: this._buildContent(), 82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch redirectURL: this._resource.responseHeaderValue("Location") || "", 83545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch headersSize: -1, // Not available. 84545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch bodySize: this._resource.resourceSize 85545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 88545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildContent: function() 89545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return { 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch size: this._resource.resourceSize, 92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // compression: 0, -- Not available. 93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch mimeType: this._resource.mimeType, 94545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // text: -- Not available. 95545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 96545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 97545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 98545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildTimings: function() 99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 10068513a70bcd92384395513322f1b801e7bf9c729Steve Block var waitForConnection = this._interval("connectStart", "connectEnd"); 10168513a70bcd92384395513322f1b801e7bf9c729Steve Block var blocked; 10268513a70bcd92384395513322f1b801e7bf9c729Steve Block var connect; 10368513a70bcd92384395513322f1b801e7bf9c729Steve Block var dns = this._interval("dnsStart", "dnsEnd"); 10468513a70bcd92384395513322f1b801e7bf9c729Steve Block var send = this._interval("sendStart", "sendEnd"); 10568513a70bcd92384395513322f1b801e7bf9c729Steve Block var ssl = this._interval("sslStart", "sslEnd"); 10668513a70bcd92384395513322f1b801e7bf9c729Steve Block 10768513a70bcd92384395513322f1b801e7bf9c729Steve Block if (ssl !== -1 && send !== -1) 10868513a70bcd92384395513322f1b801e7bf9c729Steve Block send -= ssl; 10968513a70bcd92384395513322f1b801e7bf9c729Steve Block 11068513a70bcd92384395513322f1b801e7bf9c729Steve Block if (this._resource.connectionReused) { 11168513a70bcd92384395513322f1b801e7bf9c729Steve Block connect = -1; 11268513a70bcd92384395513322f1b801e7bf9c729Steve Block blocked = waitForConnection; 11368513a70bcd92384395513322f1b801e7bf9c729Steve Block } else { 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block blocked = 0; 11568513a70bcd92384395513322f1b801e7bf9c729Steve Block connect = waitForConnection; 11668513a70bcd92384395513322f1b801e7bf9c729Steve Block if (dns !== -1) 11768513a70bcd92384395513322f1b801e7bf9c729Steve Block connect -= dns; 11868513a70bcd92384395513322f1b801e7bf9c729Steve Block } 11968513a70bcd92384395513322f1b801e7bf9c729Steve Block 120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return { 12168513a70bcd92384395513322f1b801e7bf9c729Steve Block blocked: blocked, 12268513a70bcd92384395513322f1b801e7bf9c729Steve Block dns: dns, 12368513a70bcd92384395513322f1b801e7bf9c729Steve Block connect: connect, 12468513a70bcd92384395513322f1b801e7bf9c729Steve Block send: send, 12568513a70bcd92384395513322f1b801e7bf9c729Steve Block wait: this._interval("sendEnd", "receiveHeadersEnd"), 12668513a70bcd92384395513322f1b801e7bf9c729Steve Block receive: WebInspector.HAREntry._toMilliseconds(this._resource.receiveDuration), 12768513a70bcd92384395513322f1b801e7bf9c729Steve Block ssl: ssl 128545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 129545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 131545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildHeaders: function(headers) 132545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 133545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch var result = []; 134545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch for (var name in headers) 135545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch result.push({ name: name, value: headers[name] }); 136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return result; 137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 139545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildPostData: function() 140545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 1415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick var res = { 142545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch mimeType: this._resource.requestHeaderValue("Content-Type"), 143545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch text: this._resource.requestFormData 144545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 1455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (this._resource.formParameters) 1465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick res.params = this._buildParameters(this._resource.formParameters); 1475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return res; 148545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 149545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 150545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _buildParameters: function(parameters) 151545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 152545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return parameters.slice(); 153545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }, 154545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 155a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _buildCookies: function(cookies) 156a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 157a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return cookies.map(this._buildCookie.bind(this)); 158a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 159a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 160a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _buildCookie: function(cookie) 161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 162a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 163a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return { 164a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch name: cookie.name, 165a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch value: cookie.value, 166a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch path: cookie.path, 167a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch domain: cookie.domain, 168a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch expires: cookie.expires(new Date(this._resource.startTime * 1000)), 169a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch httpOnly: cookie.httpOnly, 170a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch secure: cookie.secure 171a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }; 172a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 173a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 17468513a70bcd92384395513322f1b801e7bf9c729Steve Block _interval: function(start, end) 17568513a70bcd92384395513322f1b801e7bf9c729Steve Block { 17668513a70bcd92384395513322f1b801e7bf9c729Steve Block var timing = this._resource.timing; 17768513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!timing) 17868513a70bcd92384395513322f1b801e7bf9c729Steve Block return -1; 17968513a70bcd92384395513322f1b801e7bf9c729Steve Block var startTime = timing[start]; 18068513a70bcd92384395513322f1b801e7bf9c729Steve Block return typeof startTime !== "number" || startTime === -1 ? -1 : Math.round(timing[end] - startTime); 18168513a70bcd92384395513322f1b801e7bf9c729Steve Block } 182e14391e94c850b8bd03680c23b38978db68687a8John Reck} 18368513a70bcd92384395513322f1b801e7bf9c729Steve Block 18468513a70bcd92384395513322f1b801e7bf9c729Steve BlockWebInspector.HAREntry._toMilliseconds = function(time) 18568513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 18668513a70bcd92384395513322f1b801e7bf9c729Steve Block return time === -1 ? -1 : Math.round(time * 1000); 18768513a70bcd92384395513322f1b801e7bf9c729Steve Block} 18868513a70bcd92384395513322f1b801e7bf9c729Steve Block 18968513a70bcd92384395513322f1b801e7bf9c729Steve BlockWebInspector.HARLog = function() 19068513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 19168513a70bcd92384395513322f1b801e7bf9c729Steve Block} 19268513a70bcd92384395513322f1b801e7bf9c729Steve Block 19368513a70bcd92384395513322f1b801e7bf9c729Steve BlockWebInspector.HARLog.prototype = { 19468513a70bcd92384395513322f1b801e7bf9c729Steve Block build: function() 19568513a70bcd92384395513322f1b801e7bf9c729Steve Block { 19668513a70bcd92384395513322f1b801e7bf9c729Steve Block var webKitVersion = /AppleWebKit\/([^ ]+)/.exec(window.navigator.userAgent); 19768513a70bcd92384395513322f1b801e7bf9c729Steve Block 19868513a70bcd92384395513322f1b801e7bf9c729Steve Block return { 19968513a70bcd92384395513322f1b801e7bf9c729Steve Block version: "1.2", 20068513a70bcd92384395513322f1b801e7bf9c729Steve Block creator: { 20168513a70bcd92384395513322f1b801e7bf9c729Steve Block name: "WebInspector", 20268513a70bcd92384395513322f1b801e7bf9c729Steve Block version: webKitVersion ? webKitVersion[1] : "n/a" 20368513a70bcd92384395513322f1b801e7bf9c729Steve Block }, 20468513a70bcd92384395513322f1b801e7bf9c729Steve Block pages: this._buildPages(), 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch entries: WebInspector.networkResources.map(this._convertResource.bind(this)) 20668513a70bcd92384395513322f1b801e7bf9c729Steve Block } 20768513a70bcd92384395513322f1b801e7bf9c729Steve Block }, 20868513a70bcd92384395513322f1b801e7bf9c729Steve Block 20968513a70bcd92384395513322f1b801e7bf9c729Steve Block _buildPages: function() 21068513a70bcd92384395513322f1b801e7bf9c729Steve Block { 21168513a70bcd92384395513322f1b801e7bf9c729Steve Block return [ 21268513a70bcd92384395513322f1b801e7bf9c729Steve Block { 21368513a70bcd92384395513322f1b801e7bf9c729Steve Block startedDateTime: new Date(WebInspector.mainResource.startTime * 1000), 21468513a70bcd92384395513322f1b801e7bf9c729Steve Block id: WebInspector.mainResource.documentURL, 21568513a70bcd92384395513322f1b801e7bf9c729Steve Block title: "", 216a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pageTimings: this.buildMainResourceTimings() 21768513a70bcd92384395513322f1b801e7bf9c729Steve Block } 21868513a70bcd92384395513322f1b801e7bf9c729Steve Block ]; 21968513a70bcd92384395513322f1b801e7bf9c729Steve Block }, 22068513a70bcd92384395513322f1b801e7bf9c729Steve Block 221a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch buildMainResourceTimings: function() 22268513a70bcd92384395513322f1b801e7bf9c729Steve Block { 22368513a70bcd92384395513322f1b801e7bf9c729Steve Block return { 224e14391e94c850b8bd03680c23b38978db68687a8John Reck onContentLoad: this._pageEventTime(WebInspector.mainResourceDOMContentTime), 225e14391e94c850b8bd03680c23b38978db68687a8John Reck onLoad: this._pageEventTime(WebInspector.mainResourceLoadTime), 22668513a70bcd92384395513322f1b801e7bf9c729Steve Block } 22768513a70bcd92384395513322f1b801e7bf9c729Steve Block }, 22868513a70bcd92384395513322f1b801e7bf9c729Steve Block 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _convertResource: function(resource) 230545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch { 23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return (new WebInspector.HAREntry(resource)).build(); 232a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch }, 233a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 234a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch _pageEventTime: function(time) 235a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 236a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch var startTime = WebInspector.mainResource.startTime; 237a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (time === -1 || startTime === -1) 238a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return -1; 239a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return WebInspector.HAREntry._toMilliseconds(time - startTime); 240545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 241e14391e94c850b8bd03680c23b38978db68687a8John Reck} 242