<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[212989] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/212989">212989</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2017-02-24 19:34:33 -0800 (Fri, 24 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/212944">r212944</a>.

Caused a lot of failures on the debug bots

Reverted changeset:

&quot;[Resource Timing] Gather timing information with reliable
responseEnd time&quot;
https://bugs.webkit.org/show_bug.cgi?id=168351
http://trac.webkit.org/changeset/212944</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsperformanceapiresourcetimingapisexpectedtxt">trunk/LayoutTests/performance-api/resource-timing-apis-expected.txt</a></li>
<li><a href="#trunkLayoutTestsperformanceapiresourcesresourcetimingapijs">trunk/LayoutTests/performance-api/resources/resource-timing-api.js</a></li>
<li><a href="#trunkLayoutTestsplatformgtkTestExpectations">trunk/LayoutTests/platform/gtk/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorTestExpectations">trunk/LayoutTests/platform/ios-simulator/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwinTestExpectations">trunk/LayoutTests/platform/win/TestExpectations</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfpersistenceCodersh">trunk/Source/WTF/wtf/persistence/Coders.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchLoadercpp">trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchFetchLoaderh">trunk/Source/WebCore/Modules/fetch/FetchLoader.h</a></li>
<li><a href="#trunkSourceWebCorePlatformMaccmake">trunk/Source/WebCore/PlatformMac.cmake</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderLoadercpp">trunk/Source/WebCore/fileapi/FileReaderLoader.cpp</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderLoaderh">trunk/Source/WebCore/fileapi/FileReaderLoader.h</a></li>
<li><a href="#trunkSourceWebCorehtmlMediaFragmentURIParsercpp">trunk/Source/WebCore/html/MediaFragmentURIParser.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorInstrumentationcpp">trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorInstrumentationh">trunk/Source/WebCore/inspector/InspectorInstrumentation.h</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorNetworkAgentcpp">trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorNetworkAgenth">trunk/Source/WebCore/inspector/InspectorNetworkAgent.h</a></li>
<li><a href="#trunkSourceWebCoreloaderCrossOriginPreflightCheckercpp">trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentThreadableLoadercpp">trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentThreadableLoaderh">trunk/Source/WebCore/loader/DocumentThreadableLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderNetscapePlugInStreamLoadercpp">trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderNetscapePlugInStreamLoaderh">trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadNotifiercpp">trunk/Source/WebCore/loader/ResourceLoadNotifier.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadNotifierh">trunk/Source/WebCore/loader/ResourceLoadNotifier.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadercpp">trunk/Source/WebCore/loader/ResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoaderh">trunk/Source/WebCore/loader/ResourceLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceTimingcpp">trunk/Source/WebCore/loader/ResourceTiming.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceTimingh">trunk/Source/WebCore/loader/ResourceTiming.h</a></li>
<li><a href="#trunkSourceWebCoreloaderSubresourceLoadercpp">trunk/Source/WebCore/loader/SubresourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderSubresourceLoaderh">trunk/Source/WebCore/loader/SubresourceLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderThreadableLoaderClienth">trunk/Source/WebCore/loader/ThreadableLoaderClient.h</a></li>
<li><a href="#trunkSourceWebCoreloaderThreadableLoaderClientWrapperh">trunk/Source/WebCore/loader/ThreadableLoaderClientWrapper.h</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoadercpp">trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoaderh">trunk/Source/WebCore/loader/WorkerThreadableLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderappcacheApplicationCacheGroupcpp">trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderappcacheApplicationCacheGrouph">trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedResourceh">trunk/Source/WebCore/loader/cache/CachedResource.h</a></li>
<li><a href="#trunkSourceWebCoreloaderiosQuickLookmm">trunk/Source/WebCore/loader/ios/QuickLook.mm</a></li>
<li><a href="#trunkSourceWebCorepageEventSourcecpp">trunk/Source/WebCore/page/EventSource.cpp</a></li>
<li><a href="#trunkSourceWebCorepageEventSourceh">trunk/Source/WebCore/page/EventSource.h</a></li>
<li><a href="#trunkSourceWebCorepagePerformanceResourceTimingcpp">trunk/Source/WebCore/page/PerformanceResourceTiming.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePerformanceResourceTimingh">trunk/Source/WebCore/page/PerformanceResourceTiming.h</a></li>
<li><a href="#trunkSourceWebCorepagePerformanceResourceTimingidl">trunk/Source/WebCore/page/PerformanceResourceTiming.idl</a></li>
<li><a href="#trunkSourceWebCorepagePerformanceTimingcpp">trunk/Source/WebCore/page/PerformanceTiming.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePerformanceTimingh">trunk/Source/WebCore/page/PerformanceTiming.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerWebKitWebSourceGStreamercpp">trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkBlobResourceHandlecpp">trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkPingHandleh">trunk/Source/WebCore/platform/network/PingHandle.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkResourceHandleh">trunk/Source/WebCore/platform/network/ResourceHandle.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkResourceHandleClienth">trunk/Source/WebCore/platform/network/ResourceHandleClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkResourceResponseBasecpp">trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkResourceResponseBaseh">trunk/Source/WebCore/platform/network/ResourceResponseBase.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkSynchronousLoaderClientcpp">trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkSynchronousLoaderClienth">trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcfResourceHandleCFURLConnectionDelegateWithOperationQueuecpp">trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcfSynchronousResourceHandleCFURLConnectionDelegatecpp">trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlResourceHandleCurlcpp">trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlResourceHandleManagercpp">trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkmacResourceHandleMacmm">trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkmacWebCoreResourceHandleAsDelegatemm">trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkmacWebCoreResourceHandleAsOperationQueueDelegatemm">trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupResourceHandleSoupcpp">trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerScriptLoadercpp">trunk/Source/WebCore/workers/WorkerScriptLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerScriptLoaderh">trunk/Source/WebCore/workers/WorkerScriptLoader.h</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequestcpp">trunk/Source/WebCore/xml/XMLHttpRequest.cpp</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequesth">trunk/Source/WebCore/xml/XMLHttpRequest.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClientcpp">trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClienth">trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessDownloadsPendingDownloadh">trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkDataTaskh">trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadcpp">trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadh">trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadClienth">trunk/Source/WebKit2/NetworkProcess/NetworkLoadClient.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkResourceLoadercpp">trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkResourceLoaderh">trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessPingLoadh">trunk/Source/WebKit2/NetworkProcess/PingLoad.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadcpp">trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadh">trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoah">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoamm">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoah">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoamm">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSoupcpp">trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSouph">trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessNetworkWebResourceLoadercpp">trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessNetworkWebResourceLoaderh">trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessNetworkWebResourceLoadermessagesin">trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.messages.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformnetworkNetworkLoadTimingh">trunk/Source/WebCore/platform/network/NetworkLoadTiming.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcocoaNetworkLoadTimingmm">trunk/Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocoljs">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.js</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolworkerexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolworkerhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolworkerjs">trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.js</a></li>
<li>trunk/LayoutTests/platform/mac/imported/w3c/web-platform-tests/resource-timing/</li>
<li>trunk/LayoutTests/platform/mac-elcapitan/imported/</li>
<li><a href="#trunkSourceWebCoreplatformnetworkNetworkLoadMetricsh">trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcocoaNetworkLoadMetricsmm">trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/ChangeLog        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r212944.
+
+        Caused a lot of failures on the debug bots
+
+        Reverted changeset:
+
+        &quot;[Resource Timing] Gather timing information with reliable
+        responseEnd time&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=168351
+        http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24  Jon Lee  &lt;jonlee@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Alias &quot;system-ui&quot; for the System font name
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/TestExpectations        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -312,7 +312,6 @@
</span><span class="cx"> webkit.org/b/168357 imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-media.html [ Failure ]
</span><span class="cx"> webkit.org/b/168448 imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-frames.html [ Pass Failure ]
</span><span class="cx"> webkit.org/b/168448 imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-workers.html [ Pass Failure ]
</span><del>-imported/w3c/web-platform-tests/resource-timing/test_resource_timing.html [ Pass Failure ]
</del><span class="cx"> 
</span><span class="cx"> webkit.org/b/161176 [ Debug ] imported/w3c/web-platform-tests/url/url-setters.html [ Skip ]
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r212944.
+
+        Caused a lot of failures on the debug bots
+
+        Reverted changeset:
+
+        &quot;[Resource Timing] Gather timing information with reliable
+        responseEnd time&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=168351
+        http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Non-special relative URLs should not ignore extra slashes
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol-expected.txt (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol-expected.txt        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol-expected.txt        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,5 +0,0 @@
</span><del>-Resource Timing: nextHopProtocol
-
-
-PASS nextHopProtocol is expected to be 'http1/1' 
-
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,18 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;meta charset=&quot;utf-8&quot;&gt;
-&lt;title&gt;Resource Timing - nextHopProtocol&lt;/title&gt;
-&lt;meta name=&quot;author&quot; title=&quot;JosephPecoraro&quot; href=&quot;mailto:joepeck@webkit.org&quot;&gt;
-&lt;meta name=&quot;assert&quot; content=&quot;Resource Timing nextHopProtocol&quot;&gt;
-&lt;link rel=&quot;help&quot; href=&quot;https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-nexthopprotocol&quot;&gt;
-&lt;script src=&quot;/resources/testharness.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;/resources/testharnessreport.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;resources/rt-utilities.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;h1&gt;Resource Timing: nextHopProtocol&lt;/h1&gt;
-&lt;div id=&quot;log&quot;&gt;&lt;/div&gt;
-&lt;script src=&quot;rt-nextHopProtocol.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocoljs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.js (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.js        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.js        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,5 +0,0 @@
</span><del>-promise_test(function(t) {
-    return loadResources(1).then(function([entry]) {
-        assert_equals(entry.nextHopProtocol, &quot;http/1.1&quot;);
-    });
-}, &quot;nextHopProtocol is expected to be 'http1/1'&quot;, {timeout: 3000});
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolworkerexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker-expected.txt (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker-expected.txt        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker-expected.txt        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,4 +0,0 @@
</span><del>-
-PASS Must have PerformanceObserver and PerformanceResourceTiming in DedicatedWorkerGlobalScope 
-PASS nextHopProtocol is expected to be 'http1/1' 
-
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsresourcetimingrtnextHopProtocolworkerhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html ( => )</h4>
<pre class="diff"><span>
<span class="info">Deleted: trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.js
===================================================================
</span><del>--- trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.js        2017-02-25 03:24:59 UTC (rev 212988)
</del><ins>+++ trunk/LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.js        2017-02-25 03:34:33 UTC (rev 212989)
</ins><span class="lines">@@ -1,13 +0,0 @@
</span><del>-importScripts(&quot;/resources/testharness.js&quot;);
-importScripts(&quot;resources/rt-utilities.js&quot;);
-
-(function() {
-    if (!testNecessaryPerformanceFeatures()) {
-        done();
-        return;
-    }
-
-    importScripts(&quot;rt-nextHopProtocol.js&quot;);
-
-    done();
-})();
</del></span></pre></div>
<a id="trunkLayoutTestsperformanceapiresourcetimingapisexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/performance-api/resource-timing-apis-expected.txt (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/performance-api/resource-timing-apis-expected.txt        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/performance-api/resource-timing-apis-expected.txt        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> PerformanceResourceTiming
</span><span class="cx"> PASS PerformanceResourceTiming is defined.
</span><span class="cx"> PASS &quot;initiatorType&quot; in PerformanceResourceTiming.prototype is true
</span><del>-PASS &quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype is true
</del><ins>+FAIL &quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype should be true. Was false.
</ins><span class="cx"> PASS &quot;workerStart&quot; in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS &quot;redirectStart&quot; in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS &quot;redirectEnd&quot; in PerformanceResourceTiming.prototype is true
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> [Worker] PerformanceResourceTiming
</span><span class="cx"> PASS [Worker] PerformanceResourceTiming is defined.
</span><span class="cx"> PASS [Worker] &quot;initiatorType&quot; in PerformanceResourceTiming.prototype is true
</span><del>-PASS [Worker] &quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype is true
</del><ins>+FAIL [Worker] &quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype should be true. Was false.
</ins><span class="cx"> PASS [Worker] &quot;workerStart&quot; in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS [Worker] &quot;redirectStart&quot; in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS [Worker] &quot;redirectEnd&quot; in PerformanceResourceTiming.prototype is true
</span></span></pre></div>
<a id="trunkLayoutTestsperformanceapiresourcesresourcetimingapijs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/performance-api/resources/resource-timing-api.js (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/performance-api/resources/resource-timing-api.js        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/performance-api/resources/resource-timing-api.js        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -7,7 +7,7 @@
</span><span class="cx"> debug(&quot;PerformanceResourceTiming&quot;);
</span><span class="cx"> shouldBeDefined(&quot;PerformanceResourceTiming&quot;);
</span><span class="cx"> shouldBeTrue(`&quot;initiatorType&quot; in PerformanceResourceTiming.prototype`);
</span><del>-shouldBeTrue(`&quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype`);
</del><ins>+shouldBeTrue(`&quot;nextHopProtocol&quot; in PerformanceResourceTiming.prototype`); // Not yet implemented.
</ins><span class="cx"> shouldBeTrue(`&quot;workerStart&quot; in PerformanceResourceTiming.prototype`);
</span><span class="cx"> shouldBeTrue(`&quot;redirectStart&quot; in PerformanceResourceTiming.prototype`);
</span><span class="cx"> shouldBeTrue(`&quot;redirectEnd&quot; in PerformanceResourceTiming.prototype`);
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/TestExpectations (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/TestExpectations        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/platform/gtk/TestExpectations        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -2840,9 +2840,6 @@
</span><span class="cx"> webkit.org/b/167999 imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count.html [ Failure ]
</span><span class="cx"> webkit.org/b/167999 imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location.html [ Failure ]
</span><span class="cx"> 
</span><del>-webkit.org/b/168543 imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html [ Failure ]
-webkit.org/b/168543 imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html [ Failure ]
-
</del><span class="cx"> webkit.org/b/145260 media/audio-playback-restriction-play.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/168188 fast/events/ime-compositionend-on-selection-change.html [ Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -2877,14 +2877,6 @@
</span><span class="cx"> webkit.org/b/168215 imported/w3c/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click.html [ Skip ]
</span><span class="cx"> webkit.org/b/168215 imported/w3c/web-platform-tests/html/semantics/embedded-content/the-area-element/area-download-click.html [ Skip ]
</span><span class="cx"> 
</span><del>-# &lt;rdar://problem/30610988&gt;
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin-worker.html [ Failure ]
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin.html [ Failure ]
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker.html [ Failure ]
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count.html [ Failure ]
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-worker.html [ Failure ]
-imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location.html [ Failure ]
-
</del><span class="cx"> # rdar://problem/23643423
</span><span class="cx"> [ Debug ] fast/frames/exponential-frames.html [ Skip ]
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1535,15 +1535,4 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/212466 [ ElCapitan ] js/dom/gc-slot-visitor-parallel-drain-pings-runloop-when-done.html [ Skip ]
</span><span class="cx"> 
</span><del>-[ ElCapitan ] imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html [ Failure ]
-[ ElCapitan ] imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html [ Failure ]
-
-# &lt;rdar://problem/30610988&gt;
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin-worker.html [ Failure ]
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-cross-origin.html [ Failure ]
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker.html [ Failure ]
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count.html [ Failure ]
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-worker.html [ Failure ]
-[ Sierra+ ] imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location.html [ Failure ]
-
</del><span class="cx"> webkit.org/b/168503 editing/pasteboard/drag-drop-copy-content.html [ Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/LayoutTests/platform/win/TestExpectations        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -3785,10 +3785,6 @@
</span><span class="cx"> # webrtc not supported
</span><span class="cx"> imported/w3c/web-platform-tests/webrtc [ Skip ]
</span><span class="cx"> 
</span><del>-# Resource Timing networking data not yet available.
-imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.html [ Failure ]
-imported/w3c/web-platform-tests/resource-timing/rt-nextHopProtocol.worker.html [ Failure ]
-
</del><span class="cx"> # WebCrypto tests are failing.
</span><span class="cx"> webkit.org/b/165090 imported/w3c/WebCryptoAPI [ Skip ]
</span><span class="cx"> webkit.org/b/165090 imported/w3c/web-platform-tests/WebCryptoAPI [ Skip ]
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WTF/ChangeLog        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r212944.
+
+        Caused a lot of failures on the debug bots
+
+        Reverted changeset:
+
+        &quot;[Resource Timing] Gather timing information with reliable
+        responseEnd time&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=168351
+        http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24  Keith Miller  &lt;keith_miller@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         We should be able to use std::tuples as keys in HashMap
</span></span></pre></div>
<a id="trunkSourceWTFwtfpersistenceCodersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/persistence/Coders.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/persistence/Coders.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WTF/wtf/persistence/Coders.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><span class="cx"> #include &lt;wtf/SHA1.h&gt;
</span><del>-#include &lt;wtf/Seconds.h&gt;
</del><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> #include &lt;wtf/persistence/Decoder.h&gt;
</span><span class="cx"> #include &lt;wtf/persistence/Encoder.h&gt;
</span><span class="lines">@@ -279,23 +278,6 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-template&lt;&gt; struct Coder&lt;Seconds&gt; {
-    static void encode(Encoder&amp; encoder, const Seconds&amp; seconds)
-    {
-        encoder &lt;&lt; seconds.value();
-    }
-
-    static bool decode(Decoder&amp; decoder, Seconds&amp; result)
-    {
-        double value;
-        if (!decoder.decode(value))
-            return false;
-
-        result = Seconds(value);
-        return true;
-    }
-};
-
</del><span class="cx"> template&lt;&gt; struct Coder&lt;AtomicString&gt; {
</span><span class="cx">     WTF_EXPORT_PRIVATE static void encode(Encoder&amp;, const AtomicString&amp;);
</span><span class="cx">     WTF_EXPORT_PRIVATE static bool decode(Decoder&amp;, AtomicString&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/ChangeLog        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,5 +1,18 @@
</span><span class="cx"> 2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Unreviewed, rolling out r212944.
+
+        Caused a lot of failures on the debug bots
+
+        Reverted changeset:
+
+        &quot;[Resource Timing] Gather timing information with reliable
+        responseEnd time&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=168351
+        http://trac.webkit.org/changeset/212944
+
+2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
</ins><span class="cx">         Unreviewed, follow-up fix after r212972.
</span><span class="cx"> 
</span><span class="cx">         Fixes a few assertions on the debug build bots.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx">     m_consumer-&gt;append(value, size);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FetchLoader::didFinishLoading(unsigned long)
</del><ins>+void FetchLoader::didFinishLoading(unsigned long, double)
</ins><span class="cx"> {
</span><span class="cx">     m_client.didSucceed();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchFetchLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/FetchLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/FetchLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/Modules/fetch/FetchLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     // ThreadableLoaderClient API.
</span><span class="cx">     void didReceiveResponse(unsigned long, const ResourceResponse&amp;) final;
</span><span class="cx">     void didReceiveData(const char*, int) final;
</span><del>-    void didFinishLoading(unsigned long) final;
</del><ins>+    void didFinishLoading(unsigned long, double) final;
</ins><span class="cx">     void didFail(const ResourceError&amp;) final;
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCorePlatformMaccmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformMac.cmake (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformMac.cmake        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/PlatformMac.cmake        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -525,7 +525,7 @@
</span><span class="cx">     platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp
</span><span class="cx"> 
</span><span class="cx">     platform/network/cocoa/CredentialCocoa.mm
</span><del>-    platform/network/cocoa/NetworkLoadMetrics.mm
</del><ins>+    platform/network/cocoa/NetworkLoadTiming.mm
</ins><span class="cx">     platform/network/cocoa/ProtectionSpaceCocoa.mm
</span><span class="cx">     platform/network/cocoa/ResourceRequestCocoa.mm
</span><span class="cx">     platform/network/cocoa/ResourceResponseCocoa.mm
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -2448,7 +2448,7 @@
</span><span class="cx">                 5C7C88D81D0F1F4A009D2F6D /* SocketProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 5C9A7A751AA0F6EA00958ACF /* DFABytecodeCompiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C39305E1AA0F6A90029C816 /* DFABytecodeCompiler.cpp */; };
</span><span class="cx">                 5C9A7A761AA0F6ED00958ACF /* DFABytecodeInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C3930601AA0F6A90029C816 /* DFABytecodeInterpreter.cpp */; };
</span><del>-                5C9B860C1C21E3C900110F36 /* NetworkLoadMetrics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */; };
</del><ins>+                5C9B860C1C21E3C900110F36 /* NetworkLoadTiming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9B860B1C21E3C600110F36 /* NetworkLoadTiming.mm */; };
</ins><span class="cx">                 5C9EF1711DFF71CC00A452E3 /* XPathGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */; };
</span><span class="cx">                 5CB37FFE1C62D28C00F20188 /* ScrollAnimatorMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */; };
</span><span class="cx">                 5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; };
</span><span class="lines">@@ -3286,7 +3286,7 @@
</span><span class="cx">                 8A413AE11207BBA50082016E /* ScriptRunner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A413ADF1207BBA50082016E /* ScriptRunner.cpp */; };
</span><span class="cx">                 8A7CC96B12076D73001D4588 /* PendingScript.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7CC96A12076D73001D4588 /* PendingScript.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 8A7CC97012076F8A001D4588 /* PendingScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A7CC96F12076F8A001D4588 /* PendingScript.cpp */; };
</span><del>-                8A81BF8511DCFD9000DA2B98 /* NetworkLoadMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A81BF8411DCFD9000DA2B98 /* NetworkLoadMetrics.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><ins>+                8A81BF8511DCFD9000DA2B98 /* NetworkLoadTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A81BF8411DCFD9000DA2B98 /* NetworkLoadTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 8A844D0511D3C18E0014065C /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A844D0211D3C18E0014065C /* Performance.h */; };
</span><span class="cx">                 8A9A587011E84C36008ACFD1 /* JSPerformanceNavigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */; };
</span><span class="cx">                 8A9A587111E84C36008ACFD1 /* JSPerformanceNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A586F11E84C36008ACFD1 /* JSPerformanceNavigation.h */; };
</span><span class="lines">@@ -9843,7 +9843,7 @@
</span><span class="cx">                 5C6E653F1D5CEDC900F7862E /* URLParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URLParser.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C6E65401D5CEDC900F7862E /* URLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLParser.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkLoadMetrics.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                5C9B860B1C21E3C600110F36 /* NetworkLoadTiming.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkLoadTiming.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPathGrammar.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C9EF1701DFF719900A452E3 /* XPathGrammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPathGrammar.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -11019,7 +11019,7 @@
</span><span class="cx">                 8A413ADF1207BBA50082016E /* ScriptRunner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptRunner.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 8A7CC96A12076D73001D4588 /* PendingScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PendingScript.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 8A7CC96F12076F8A001D4588 /* PendingScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PendingScript.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                8A81BF8411DCFD9000DA2B98 /* NetworkLoadMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadMetrics.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                8A81BF8411DCFD9000DA2B98 /* NetworkLoadTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadTiming.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 8A844D0211D3C18E0014065C /* Performance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 8A844D0311D3C18E0014065C /* Performance.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Performance.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceNavigation.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -18018,7 +18018,7 @@
</span><span class="cx">                                 37DDCD9213844FD50008B793 /* MIMEHeader.cpp */,
</span><span class="cx">                                 37DDCD9313844FD50008B793 /* MIMEHeader.h */,
</span><span class="cx">                                 628D214B12131ED10055DCFC /* NetworkingContext.h */,
</span><del>-                                8A81BF8411DCFD9000DA2B98 /* NetworkLoadMetrics.h */,
</del><ins>+                                8A81BF8411DCFD9000DA2B98 /* NetworkLoadTiming.h */,
</ins><span class="cx">                                 1A7FA61A0DDA3BBE0028F8A5 /* NetworkStateNotifier.cpp */,
</span><span class="cx">                                 1A7FA6180DDA3B3A0028F8A5 /* NetworkStateNotifier.h */,
</span><span class="cx">                                 5C3C856C1D5A7AD30088B9EC /* NetworkStorageSession.cpp */,
</span><span class="lines">@@ -18816,7 +18816,7 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 3792917C1987678F00F4B661 /* CredentialCocoa.h */,
</span><span class="cx">                                 3792917B1987678F00F4B661 /* CredentialCocoa.mm */,
</span><del>-                                5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */,
</del><ins>+                                5C9B860B1C21E3C600110F36 /* NetworkLoadTiming.mm */,
</ins><span class="cx">                                 372ADA37197F47B900FC501E /* ProtectionSpaceCocoa.h */,
</span><span class="cx">                                 372ADA39197F687600FC501E /* ProtectionSpaceCocoa.mm */,
</span><span class="cx">                                 7E7DE1FC195CEF260035363B /* ResourceRequestCocoa.mm */,
</span><span class="lines">@@ -27472,7 +27472,7 @@
</span><span class="cx">                                 656D37430ADBA5DE00A4554D /* NetscapePlugInStreamLoader.h in Headers */,
</span><span class="cx">                                 A19D934B1AA11B1E00B46C24 /* NetworkExtensionContentFilter.h in Headers */,
</span><span class="cx">                                 628D214C12131ED10055DCFC /* NetworkingContext.h in Headers */,
</span><del>-                                8A81BF8511DCFD9000DA2B98 /* NetworkLoadMetrics.h in Headers */,
</del><ins>+                                8A81BF8511DCFD9000DA2B98 /* NetworkLoadTiming.h in Headers */,
</ins><span class="cx">                                 59C27F07138D28CF0079B7E2 /* NetworkResourcesData.h in Headers */,
</span><span class="cx">                                 1A7FA6190DDA3B3A0028F8A5 /* NetworkStateNotifier.h in Headers */,
</span><span class="cx">                                 E13EF3441684ECF40034C83F /* NetworkStorageSession.h in Headers */,
</span><span class="lines">@@ -31308,7 +31308,7 @@
</span><span class="cx">                                 996E59DE1DF01285006612B9 /* NavigatorWebDriver.cpp in Sources */,
</span><span class="cx">                                 5D874F130D161D3200796C3B /* NetscapePlugInStreamLoader.cpp in Sources */,
</span><span class="cx">                                 A19D934A1AA11B1E00B46C24 /* NetworkExtensionContentFilter.mm in Sources */,
</span><del>-                                5C9B860C1C21E3C900110F36 /* NetworkLoadMetrics.mm in Sources */,
</del><ins>+                                5C9B860C1C21E3C900110F36 /* NetworkLoadTiming.mm in Sources */,
</ins><span class="cx">                                 59C27F05138D28C10079B7E2 /* NetworkResourcesData.cpp in Sources */,
</span><span class="cx">                                 1A7FA61B0DDA3BBE0028F8A5 /* NetworkStateNotifier.cpp in Sources */,
</span><span class="cx">                                 443F04270E75C8FB007E5407 /* NetworkStateNotifierIOS.mm in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReaderLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReaderLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/fileapi/FileReaderLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -215,7 +215,7 @@
</span><span class="cx">         m_client-&gt;didReceiveData();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FileReaderLoader::didFinishLoading(unsigned long)
</del><ins>+void FileReaderLoader::didFinishLoading(unsigned long, double)
</ins><span class="cx"> {
</span><span class="cx">     if (m_variableLength &amp;&amp; m_totalBytes &gt; m_bytesLoaded) {
</span><span class="cx">         RefPtr&lt;ArrayBuffer&gt; newData = m_rawData-&gt;slice(0, m_bytesLoaded);
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReaderLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReaderLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/fileapi/FileReaderLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">     // ThreadableLoaderClient
</span><span class="cx">     void didReceiveResponse(unsigned long, const ResourceResponse&amp;) override;
</span><span class="cx">     void didReceiveData(const char*, int) override;
</span><del>-    void didFinishLoading(unsigned long) override;
</del><ins>+    void didFinishLoading(unsigned long, double) override;
</ins><span class="cx">     void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     String stringResult();
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlMediaFragmentURIParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/MediaFragmentURIParser.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/MediaFragmentURIParser.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/html/MediaFragmentURIParser.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -244,7 +244,7 @@
</span><span class="cx"> 
</span><span class="cx">     // http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/#npttimedef
</span><span class="cx">     // Normal Play Time can either be specified as seconds, with an optional
</span><del>-    // fractional part to indicate milliseconds, or as colon-separated hours,
</del><ins>+    // fractional part to indicate miliseconds, or as colon-separated hours,
</ins><span class="cx">     // minutes and seconds (again with an optional fraction). Minutes and
</span><span class="cx">     // seconds must be specified as exactly two digits, hours and fractional
</span><span class="cx">     // seconds can be any number of digits. The hours, minutes and seconds
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorInstrumentationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -605,13 +605,13 @@
</span><span class="cx">         networkAgent-&gt;didReceiveData(identifier, data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents&amp; instrumentingAgents, unsigned long identifier, DocumentLoader* loader)
</del><ins>+void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents&amp; instrumentingAgents, unsigned long identifier, DocumentLoader* loader, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     if (!loader)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent())
</span><del>-        networkAgent-&gt;didFinishLoading(identifier, *loader);
</del><ins>+        networkAgent-&gt;didFinishLoading(identifier, *loader, finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InspectorInstrumentation::didFailLoadingImpl(InstrumentingAgents&amp; instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorInstrumentationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx">     static void didReceiveResourceResponse(Frame&amp;, unsigned long identifier, DocumentLoader*, const ResourceResponse&amp;, ResourceLoader*);
</span><span class="cx">     static void didReceiveThreadableLoaderResponse(DocumentThreadableLoader&amp;, unsigned long identifier);
</span><span class="cx">     static void didReceiveData(Frame*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
</span><del>-    static void didFinishLoading(Frame*, DocumentLoader*, unsigned long identifier);
</del><ins>+    static void didFinishLoading(Frame*, DocumentLoader*, unsigned long identifier, double finishTime);
</ins><span class="cx">     static void didFailLoading(Frame*, DocumentLoader*, unsigned long identifier, const ResourceError&amp;);
</span><span class="cx">     static void continueAfterXFrameOptionsDenied(Frame&amp;, unsigned long identifier, DocumentLoader&amp;, const ResourceResponse&amp;);
</span><span class="cx">     static void continueWithPolicyDownload(Frame&amp;, unsigned long identifier, DocumentLoader&amp;, const ResourceResponse&amp;);
</span><span class="lines">@@ -327,7 +327,7 @@
</span><span class="cx">     static void didReceiveResourceResponseImpl(InstrumentingAgents&amp;, unsigned long identifier, DocumentLoader*, const ResourceResponse&amp;, ResourceLoader*);
</span><span class="cx">     static void didReceiveThreadableLoaderResponseImpl(InstrumentingAgents&amp;, DocumentThreadableLoader&amp;, unsigned long identifier);
</span><span class="cx">     static void didReceiveDataImpl(InstrumentingAgents&amp;, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
</span><del>-    static void didFinishLoadingImpl(InstrumentingAgents&amp;, unsigned long identifier, DocumentLoader*);
</del><ins>+    static void didFinishLoadingImpl(InstrumentingAgents&amp;, unsigned long identifier, DocumentLoader*, double finishTime);
</ins><span class="cx">     static void didFailLoadingImpl(InstrumentingAgents&amp;, unsigned long identifier, DocumentLoader*, const ResourceError&amp;);
</span><span class="cx">     static void didFinishXHRLoadingImpl(InstrumentingAgents&amp;, unsigned long identifier, std::optional&lt;String&gt; decodedText, const String&amp; url, const String&amp; sendURL, unsigned sendLineNumber, unsigned sendColumnNumber);
</span><span class="cx">     static void willLoadXHRSynchronouslyImpl(InstrumentingAgents&amp;);
</span><span class="lines">@@ -863,10 +863,10 @@
</span><span class="cx">         didReceiveDataImpl(*instrumentingAgents, identifier, data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void InspectorInstrumentation::didFinishLoading(Frame* frame, DocumentLoader* loader, unsigned long identifier)
</del><ins>+inline void InspectorInstrumentation::didFinishLoading(Frame* frame, DocumentLoader* loader, unsigned long identifier, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
</span><del>-        didFinishLoadingImpl(*instrumentingAgents, identifier, loader);
</del><ins>+        didFinishLoadingImpl(*instrumentingAgents, identifier, loader, finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline void InspectorInstrumentation::didFailLoading(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorNetworkAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx">         m_responseText.append(m_decoder-&gt;decode(data, dataLength));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void didFinishLoading(unsigned long) override
</del><ins>+    void didFinishLoading(unsigned long, double) override
</ins><span class="cx">     {
</span><span class="cx">         if (m_decoder)
</span><span class="cx">             m_responseText.append(m_decoder-&gt;flush());
</span><span class="lines">@@ -179,7 +179,7 @@
</span><span class="cx">     return headersObject;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;Inspector::Protocol::Network::ResourceTiming&gt; InspectorNetworkAgent::buildObjectForTiming(const NetworkLoadMetrics&amp; timing, ResourceLoader&amp; resourceLoader)
</del><ins>+Ref&lt;Inspector::Protocol::Network::ResourceTiming&gt; InspectorNetworkAgent::buildObjectForTiming(const NetworkLoadTiming&amp; timing, ResourceLoader&amp; resourceLoader)
</ins><span class="cx"> {
</span><span class="cx">     MonotonicTime startTime = resourceLoader.loadTiming().startTime();
</span><span class="cx">     double startTimeInInspector = m_environment.executionStopwatch()-&gt;elapsedTimeSince(startTime);
</span><span class="lines">@@ -186,13 +186,13 @@
</span><span class="cx"> 
</span><span class="cx">     return Inspector::Protocol::Network::ResourceTiming::create()
</span><span class="cx">         .setStartTime(startTimeInInspector)
</span><del>-        .setDomainLookupStart(timing.domainLookupStart.milliseconds())
-        .setDomainLookupEnd(timing.domainLookupEnd.milliseconds())
-        .setConnectStart(timing.connectStart.milliseconds())
-        .setConnectEnd(timing.connectEnd.milliseconds())
-        .setSecureConnectionStart(timing.secureConnectionStart.milliseconds())
-        .setRequestStart(timing.requestStart.milliseconds())
-        .setResponseStart(timing.responseStart.milliseconds())
</del><ins>+        .setDomainLookupStart(timing.domainLookupStart)
+        .setDomainLookupEnd(timing.domainLookupEnd)
+        .setConnectStart(timing.connectStart)
+        .setConnectEnd(timing.connectEnd)
+        .setSecureConnectionStart(timing.secureConnectionStart)
+        .setRequestStart(timing.requestStart)
+        .setResponseStart(timing.responseStart)
</ins><span class="cx">         .release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx"> 
</span><span class="cx">     responseObject-&gt;setFromDiskCache(response.source() == ResourceResponse::Source::DiskCache || response.source() == ResourceResponse::Source::DiskCacheAfterValidation);
</span><span class="cx">     if (resourceLoader)
</span><del>-        responseObject-&gt;setTiming(buildObjectForTiming(response.deprecatedNetworkLoadMetrics(), *resourceLoader));
</del><ins>+        responseObject-&gt;setTiming(buildObjectForTiming(response.networkLoadTiming(), *resourceLoader));
</ins><span class="cx"> 
</span><span class="cx">     return WTFMove(responseObject);
</span><span class="cx"> }
</span><span class="lines">@@ -380,14 +380,11 @@
</span><span class="cx">     m_frontendDispatcher-&gt;dataReceived(requestId, timestamp(), dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorNetworkAgent::didFinishLoading(unsigned long identifier, DocumentLoader&amp; loader)
</del><ins>+void InspectorNetworkAgent::didFinishLoading(unsigned long identifier, DocumentLoader&amp; loader, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     if (m_hiddenRequestIdentifiers.remove(identifier))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // FIXME: Inspector should make use of NetworkLoadMetrics.
-    double elapsedFinishTime = timestamp();
-
</del><span class="cx">     String requestId = IdentifiersFactory::requestId(identifier);
</span><span class="cx">     if (m_resourcesData-&gt;resourceType(requestId) == InspectorPageAgent::DocumentResource)
</span><span class="cx">         m_resourcesData-&gt;addResourceSharedBuffer(requestId, loader.frameLoader()-&gt;documentLoader()-&gt;mainResourceData(), loader.frame()-&gt;document()-&gt;encoding());
</span><span class="lines">@@ -394,6 +391,8 @@
</span><span class="cx"> 
</span><span class="cx">     m_resourcesData-&gt;maybeDecodeDataToContent(requestId);
</span><span class="cx"> 
</span><ins>+    double elapsedFinishTime = finishTime ? m_environment.executionStopwatch()-&gt;elapsedTimeSince(MonotonicTime::fromRawSeconds(finishTime)) : timestamp();
+
</ins><span class="cx">     String sourceMappingURL;
</span><span class="cx">     NetworkResourcesData::ResourceData const* resourceData = m_resourcesData-&gt;data(requestId);
</span><span class="cx">     if (resourceData &amp;&amp; resourceData-&gt;cachedResource())
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorNetworkAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorNetworkAgent.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorNetworkAgent.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/inspector/InspectorNetworkAgent.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> class DocumentLoader;
</span><span class="cx"> class DocumentThreadableLoader;
</span><span class="cx"> class InspectorPageAgent;
</span><del>-class NetworkLoadMetrics;
</del><ins>+class NetworkLoadTiming;
</ins><span class="cx"> class NetworkResourcesData;
</span><span class="cx"> class ResourceError;
</span><span class="cx"> class ResourceLoader;
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">     void markResourceAsCached(unsigned long identifier);
</span><span class="cx">     void didReceiveResponse(unsigned long identifier, DocumentLoader&amp;, const ResourceResponse&amp;, ResourceLoader*);
</span><span class="cx">     void didReceiveData(unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
</span><del>-    void didFinishLoading(unsigned long identifier, DocumentLoader&amp;);
</del><ins>+    void didFinishLoading(unsigned long identifier, DocumentLoader&amp;, double finishTime);
</ins><span class="cx">     void didFailLoading(unsigned long identifier, DocumentLoader&amp;, const ResourceError&amp;);
</span><span class="cx">     void didLoadResourceFromMemoryCache(DocumentLoader&amp;, CachedResource&amp;);
</span><span class="cx">     void didReceiveThreadableLoaderResponse(unsigned long identifier, DocumentThreadableLoader&amp;);
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> private:
</span><span class="cx">     void enable();
</span><span class="cx"> 
</span><del>-    Ref&lt;Inspector::Protocol::Network::ResourceTiming&gt; buildObjectForTiming(const NetworkLoadMetrics&amp;, ResourceLoader&amp;);
</del><ins>+    Ref&lt;Inspector::Protocol::Network::ResourceTiming&gt; buildObjectForTiming(const NetworkLoadTiming&amp;, ResourceLoader&amp;);
</ins><span class="cx">     RefPtr&lt;Inspector::Protocol::Network::Response&gt; buildObjectForResourceResponse(const ResourceResponse&amp;, ResourceLoader*);
</span><span class="cx">     Ref&lt;Inspector::Protocol::Network::CachedResource&gt; buildObjectForCachedResource(CachedResource*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderCrossOriginPreflightCheckercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">     // This is only showing success preflight requests and responses but we should show network events
</span><span class="cx">     // for preflight failures and distinguish them better from non-preflight requests.
</span><span class="cx">     InspectorInstrumentation::didReceiveResourceResponse(*frame, identifier, frame-&gt;loader().documentLoader(), response, nullptr);
</span><del>-    InspectorInstrumentation::didFinishLoading(frame, frame-&gt;loader().documentLoader(), identifier);
</del><ins>+    InspectorInstrumentation::didFinishLoading(frame, frame-&gt;loader().documentLoader(), identifier, 0);
</ins><span class="cx"> 
</span><span class="cx">     CrossOriginPreflightResultCache::singleton().appendEntry(loader.securityOrigin().toString(), request.url(), WTFMove(result));
</span><span class="cx">     loader.preflightSuccess(WTFMove(request));
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -363,7 +363,7 @@
</span><span class="cx">     ASSERT_UNUSED(resource, m_mainResource == &amp;resource);
</span><span class="cx">     ASSERT(m_mainResource);
</span><span class="cx">     if (!m_mainResource-&gt;errorOccurred() &amp;&amp; !m_mainResource-&gt;wasCanceled()) {
</span><del>-        finishedLoading();
</del><ins>+        finishedLoading(m_mainResource-&gt;loadFinishTime());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -375,7 +375,7 @@
</span><span class="cx">     mainReceivedError(m_mainResource-&gt;resourceError());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DocumentLoader::finishedLoading()
</del><ins>+void DocumentLoader::finishedLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     // There is a bug in CFNetwork where callbacks can be dispatched even when loads are deferred.
</span><span class="cx">     // See &lt;rdar://problem/6304600&gt; for more details.
</span><span class="lines">@@ -392,12 +392,16 @@
</span><span class="cx">         // cancel the already-finished substitute load.
</span><span class="cx">         unsigned long identifier = m_identifierForLoadWithoutResourceLoader;
</span><span class="cx">         m_identifierForLoadWithoutResourceLoader = 0;
</span><del>-        frameLoader()-&gt;notifier().dispatchDidFinishLoading(this, identifier);
</del><ins>+        frameLoader()-&gt;notifier().dispatchDidFinishLoading(this, identifier, finishTime);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     maybeFinishLoadingMultipartContent();
</span><span class="cx"> 
</span><del>-    MonotonicTime responseEndTime = m_timeOfLastDataReceived ? m_timeOfLastDataReceived : MonotonicTime::now();
</del><ins>+    MonotonicTime responseEndTime = MonotonicTime::fromRawSeconds(finishTime);
+    if (!responseEndTime)
+        responseEndTime = m_timeOfLastDataReceived;
+    if (!responseEndTime)
+        responseEndTime = MonotonicTime::now();
</ins><span class="cx">     timing().setResponseEnd(responseEndTime);
</span><span class="cx"> 
</span><span class="cx">     commitIfReady();
</span><span class="lines">@@ -808,7 +812,7 @@
</span><span class="cx">         if (content &amp;&amp; content-&gt;size())
</span><span class="cx">             dataReceived(content-&gt;data(), content-&gt;size());
</span><span class="cx">         if (isLoadingMainResource())
</span><del>-            finishedLoading();
</del><ins>+            finishedLoading(0);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1421,7 +1425,7 @@
</span><span class="cx"> 
</span><span class="cx">     String mimeType = shouldLoadEmpty ? &quot;text/html&quot; : frameLoader()-&gt;client().generatedMIMETypeForURLScheme(m_request.url().protocol().toStringWithoutCopying());
</span><span class="cx">     m_response = ResourceResponse(m_request.url(), mimeType, 0, String());
</span><del>-    finishedLoading();
</del><ins>+    finishedLoading(monotonicallyIncreasingTime());
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -319,7 +319,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     void willSendRequest(ResourceRequest&amp;, const ResourceResponse&amp;);
</span><del>-    void finishedLoading();
</del><ins>+    void finishedLoading(double finishTime);
</ins><span class="cx">     void mainReceivedError(const ResourceError&amp;);
</span><span class="cx">     WEBCORE_EXPORT void redirectReceived(CachedResource&amp;, ResourceRequest&amp;, const ResourceResponse&amp;) override;
</span><span class="cx">     WEBCORE_EXPORT void responseReceived(CachedResource&amp;, const ResourceResponse&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentThreadableLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx">         if (tainting == ResourceResponse::Tainting::Opaque) {
</span><span class="cx">             clearResource();
</span><span class="cx">             if (m_client)
</span><del>-                m_client-&gt;didFinishLoading(identifier);
</del><ins>+                m_client-&gt;didFinishLoading(identifier, 0.0);
</ins><span class="cx">         }
</span><span class="cx">     } else {
</span><span class="cx">         ASSERT(response.type() == ResourceResponse::Type::Opaqueredirect);
</span><span class="lines">@@ -355,13 +355,13 @@
</span><span class="cx">     if (m_resource-&gt;errorOccurred())
</span><span class="cx">         didFail(m_resource-&gt;identifier(), m_resource-&gt;resourceError());
</span><span class="cx">     else
</span><del>-        didFinishLoading(m_resource-&gt;identifier());
</del><ins>+        didFinishLoading(m_resource-&gt;identifier(), m_resource-&gt;loadFinishTime());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DocumentThreadableLoader::didFinishLoading(unsigned long identifier)
</del><ins>+void DocumentThreadableLoader::didFinishLoading(unsigned long identifier, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_client);
</span><del>-    m_client-&gt;didFinishLoading(identifier);
</del><ins>+    m_client-&gt;didFinishLoading(identifier, finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DocumentThreadableLoader::didFail(unsigned long, const ResourceError&amp; error)
</span><span class="lines">@@ -461,7 +461,7 @@
</span><span class="cx">             // We don't want XMLHttpRequest to raise an exception for file:// resources, see &lt;rdar://problem/4962298&gt;.
</span><span class="cx">             // FIXME: XMLHttpRequest quirks should be in XMLHttpRequest code, not in DocumentThreadableLoader.cpp.
</span><span class="cx">             didReceiveResponse(identifier, response, ResourceResponse::Tainting::Basic);
</span><del>-            didFinishLoading(identifier);
</del><ins>+            didFinishLoading(identifier, 0.0);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         logErrorAndFail(error);
</span><span class="lines">@@ -504,7 +504,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="cx">     if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) {
</span><del>-        ResourceTiming resourceTiming = ResourceTiming::fromSynchronousLoad(requestURL, m_options.initiator, loadTiming, response.deprecatedNetworkLoadMetrics(), response, securityOrigin());
</del><ins>+        ResourceTiming resourceTiming = ResourceTiming::fromSynchronousLoad(requestURL, m_options.initiator, loadTiming, response.networkLoadTiming(), response, securityOrigin());
</ins><span class="cx">         if (options().initiatorContext == InitiatorContext::Worker)
</span><span class="cx">             finishedTimingForWorkerLoad(resourceTiming);
</span><span class="cx">         else {
</span><span class="lines">@@ -514,7 +514,7 @@
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    didFinishLoading(identifier);
</del><ins>+    didFinishLoading(identifier, 0.0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool DocumentThreadableLoader::isAllowedByContentSecurityPolicy(const URL&amp; url, ContentSecurityPolicy::RedirectResponseReceived redirectResponseReceived)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentThreadableLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentThreadableLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx"> 
</span><span class="cx">         void didReceiveResponse(unsigned long identifier, const ResourceResponse&amp;, ResourceResponse::Tainting);
</span><span class="cx">         void didReceiveData(unsigned long identifier, const char* data, int dataLength);
</span><del>-        void didFinishLoading(unsigned long identifier);
</del><ins>+        void didFinishLoading(unsigned long identifier, double finishTime);
</ins><span class="cx">         void didFail(unsigned long identifier, const ResourceError&amp;);
</span><span class="cx">         void makeCrossOriginAccessRequest(ResourceRequest&amp;&amp;);
</span><span class="cx">         void makeSimpleCrossOriginAccessRequest(ResourceRequest&amp;&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNetscapePlugInStreamLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx">     ResourceLoader::didReceiveDataOrBuffer(data, length, WTFMove(buffer), encodedDataLength, dataPayloadType);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetscapePlugInStreamLoader::didFinishLoading(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void NetscapePlugInStreamLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     Ref&lt;NetscapePlugInStreamLoader&gt; protectedThis(*this);
</span><span class="cx"> 
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx">     notifyDone();
</span><span class="cx"> 
</span><span class="cx">     m_client-&gt;didFinishLoading(this);
</span><del>-    ResourceLoader::didFinishLoading(networkLoadMetrics);
</del><ins>+    ResourceLoader::didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetscapePlugInStreamLoader::didFail(const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNetscapePlugInStreamLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">     void didReceiveResponse(const ResourceResponse&amp;) override;
</span><span class="cx">     void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
</span><span class="cx">     void didReceiveBuffer(Ref&lt;SharedBuffer&gt;&amp;&amp;, long long encodedDataLength, DataPayloadType) override;
</span><del>-    void didFinishLoading(const NetworkLoadMetrics&amp;) override;
</del><ins>+    void didFinishLoading(double finishTime) override;
</ins><span class="cx">     void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     void releaseResources() override;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadNotifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoadNotifier.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoadNotifier.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceLoadNotifier.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -87,14 +87,11 @@
</span><span class="cx">     dispatchDidReceiveData(loader-&gt;documentLoader(), loader-&gt;identifier(), data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceLoadNotifier::didFinishLoad(ResourceLoader* loader, const NetworkLoadMetrics&amp;)
</del><ins>+void ResourceLoadNotifier::didFinishLoad(ResourceLoader* loader, double finishTime)
</ins><span class="cx"> {    
</span><span class="cx">     if (Page* page = m_frame.page())
</span><span class="cx">         page-&gt;progress().completeProgress(loader-&gt;identifier());
</span><del>-
-    // FIXME: Inspector should make use of NetworkLoadMetrics.
-
-    dispatchDidFinishLoading(loader-&gt;documentLoader(), loader-&gt;identifier());
</del><ins>+    dispatchDidFinishLoading(loader-&gt;documentLoader(), loader-&gt;identifier(), finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceLoadNotifier::didFailToLoad(ResourceLoader* loader, const ResourceError&amp; error)
</span><span class="lines">@@ -162,13 +159,13 @@
</span><span class="cx">     InspectorInstrumentation::didReceiveData(&amp;m_frame, identifier, data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceLoadNotifier::dispatchDidFinishLoading(DocumentLoader* loader, unsigned long identifier)
</del><ins>+void ResourceLoadNotifier::dispatchDidFinishLoading(DocumentLoader* loader, unsigned long identifier, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     // Notifying the FrameLoaderClient may cause the frame to be destroyed.
</span><span class="cx">     Ref&lt;Frame&gt; protect(m_frame);
</span><span class="cx">     m_frame.loader().client().dispatchDidFinishLoading(loader, identifier);
</span><span class="cx"> 
</span><del>-    InspectorInstrumentation::didFinishLoading(&amp;m_frame, loader, identifier);
</del><ins>+    InspectorInstrumentation::didFinishLoading(&amp;m_frame, loader, identifier, finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceLoadNotifier::dispatchDidFailLoading(DocumentLoader* loader, unsigned long identifier, const ResourceError&amp; error)
</span><span class="lines">@@ -197,7 +194,7 @@
</span><span class="cx">         dispatchDidReceiveData(loader, identifier, data, dataLength, encodedDataLength);
</span><span class="cx"> 
</span><span class="cx">     if (error.isNull())
</span><del>-        dispatchDidFinishLoading(loader, identifier);
</del><ins>+        dispatchDidFinishLoading(loader, identifier, 0);
</ins><span class="cx">     else
</span><span class="cx">         dispatchDidFailLoading(loader, identifier, error);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadNotifierh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoadNotifier.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoadNotifier.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceLoadNotifier.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -36,11 +36,11 @@
</span><span class="cx"> class AuthenticationChallenge;
</span><span class="cx"> class DocumentLoader;
</span><span class="cx"> class Frame;
</span><del>-class NetworkLoadMetrics;
</del><ins>+class Page;
</ins><span class="cx"> class ResourceError;
</span><span class="cx"> class ResourceLoader;
</span><ins>+class ResourceResponse;
</ins><span class="cx"> class ResourceRequest;
</span><del>-class ResourceResponse;
</del><span class="cx"> 
</span><span class="cx"> class ResourceLoadNotifier {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(ResourceLoadNotifier);
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     void willSendRequest(ResourceLoader*, ResourceRequest&amp;, const ResourceResponse&amp; redirectResponse);
</span><span class="cx">     void didReceiveResponse(ResourceLoader*, const ResourceResponse&amp;);
</span><span class="cx">     void didReceiveData(ResourceLoader*, const char*, int dataLength, int encodedDataLength);
</span><del>-    void didFinishLoad(ResourceLoader*, const NetworkLoadMetrics&amp;);
</del><ins>+    void didFinishLoad(ResourceLoader*, double finishTime);
</ins><span class="cx">     void didFailToLoad(ResourceLoader*, const ResourceError&amp;);
</span><span class="cx"> 
</span><span class="cx">     void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&amp;);
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&amp;, const ResourceResponse&amp; redirectResponse);
</span><span class="cx">     void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&amp;, ResourceLoader* = nullptr);
</span><span class="cx">     void dispatchDidReceiveData(DocumentLoader*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
</span><del>-    void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier);
</del><ins>+    void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier, double finishTime);
</ins><span class="cx">     void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&amp;);
</span><span class="cx"> 
</span><span class="cx">     void sendRemainingDelegateMessages(DocumentLoader*, unsigned long identifier, const ResourceRequest&amp;, const ResourceResponse&amp;, const char* data, int dataLength, int encodedDataLength, const ResourceError&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -181,8 +181,7 @@
</span><span class="cx">             return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    NetworkLoadMetrics emptyMetrics;
-    didFinishLoading(emptyMetrics);
</del><ins>+    didFinishLoading(0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceLoader::start()
</span><span class="lines">@@ -272,10 +271,8 @@
</span><span class="cx">         if (!protectedThis-&gt;reachedTerminalState() &amp;&amp; dataSize)
</span><span class="cx">             protectedThis-&gt;didReceiveBuffer(result.data.releaseNonNull(), dataSize, DataPayloadWholeResource);
</span><span class="cx"> 
</span><del>-        if (!protectedThis-&gt;reachedTerminalState()) {
-            NetworkLoadMetrics emptyMetrics;
-            protectedThis-&gt;didFinishLoading(emptyMetrics);
-        }
</del><ins>+        if (!protectedThis-&gt;reachedTerminalState())
+            protectedThis-&gt;didFinishLoading(currentTime());
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -491,9 +488,9 @@
</span><span class="cx">         frameLoader()-&gt;notifier().didReceiveData(this, buffer ? buffer-&gt;data() : data, buffer ? buffer-&gt;size() : length, static_cast&lt;int&gt;(encodedDataLength));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceLoader::didFinishLoading(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void ResourceLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><del>-    didFinishLoadingOnePart(networkLoadMetrics);
</del><ins>+    didFinishLoadingOnePart(finishTime);
</ins><span class="cx"> 
</span><span class="cx">     // If the load has been cancelled by a delegate in response to didFinishLoad(), do not release
</span><span class="cx">     // the resources a second time, they have been released by cancel.
</span><span class="lines">@@ -502,7 +499,7 @@
</span><span class="cx">     releaseResources();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceLoader::didFinishLoadingOnePart(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void ResourceLoader::didFinishLoadingOnePart(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     // If load has been cancelled after finishing (which could happen with a
</span><span class="cx">     // JavaScript that changes the window location), do nothing.
</span><span class="lines">@@ -514,7 +511,7 @@
</span><span class="cx">         return;
</span><span class="cx">     m_notifiedLoadComplete = true;
</span><span class="cx">     if (m_options.sendLoadCallbacks == SendCallbacks)
</span><del>-        frameLoader()-&gt;notifier().didFinishLoad(this, networkLoadMetrics);
</del><ins>+        frameLoader()-&gt;notifier().didFinishLoad(this, finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceLoader::didFail(const ResourceError&amp; error)
</span><span class="lines">@@ -648,10 +645,9 @@
</span><span class="cx">     didReceiveBuffer(WTFMove(buffer), encodedDataLength, DataPayloadBytes);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceLoader::didFinishLoading(ResourceHandle*)
</del><ins>+void ResourceLoader::didFinishLoading(ResourceHandle*, double finishTime)
</ins><span class="cx"> {
</span><del>-    NetworkLoadMetrics emptyMetrics;
-    didFinishLoading(emptyMetrics);
</del><ins>+    didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceLoader::didFail(ResourceHandle*, const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -50,7 +50,6 @@
</span><span class="cx"> class DocumentLoader;
</span><span class="cx"> class Frame;
</span><span class="cx"> class FrameLoader;
</span><del>-class NetworkLoadMetrics;
</del><span class="cx"> class QuickLookHandle;
</span><span class="cx"> class URL;
</span><span class="cx"> 
</span><span class="lines">@@ -103,7 +102,7 @@
</span><span class="cx">     virtual void didReceiveResponse(const ResourceResponse&amp;);
</span><span class="cx">     virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType);
</span><span class="cx">     virtual void didReceiveBuffer(Ref&lt;SharedBuffer&gt;&amp;&amp;, long long encodedDataLength, DataPayloadType);
</span><del>-    virtual void didFinishLoading(const NetworkLoadMetrics&amp;);
</del><ins>+    virtual void didFinishLoading(double finishTime);
</ins><span class="cx">     virtual void didFail(const ResourceError&amp;);
</span><span class="cx"> #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
</span><span class="cx">     virtual void didReceiveDataArray(CFArrayRef dataArray);
</span><span class="lines">@@ -153,7 +152,7 @@
</span><span class="cx"> protected:
</span><span class="cx">     ResourceLoader(Frame&amp;, ResourceLoaderOptions);
</span><span class="cx"> 
</span><del>-    void didFinishLoadingOnePart(const NetworkLoadMetrics&amp;);
</del><ins>+    void didFinishLoadingOnePart(double finishTime);
</ins><span class="cx">     void cleanupForError(const ResourceError&amp;);
</span><span class="cx"> 
</span><span class="cx">     bool wasCancelled() const { return m_cancellationStatus &gt;= Cancelled; }
</span><span class="lines">@@ -192,7 +191,7 @@
</span><span class="cx">     void didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp;) override;
</span><span class="cx">     void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
</span><span class="cx">     void didReceiveBuffer(ResourceHandle*, Ref&lt;SharedBuffer&gt;&amp;&amp;, int encodedDataLength) override;
</span><del>-    void didFinishLoading(ResourceHandle*) override;
</del><ins>+    void didFinishLoading(ResourceHandle*, double finishTime) override;
</ins><span class="cx">     void didFail(ResourceHandle*, const ResourceError&amp;) override;
</span><span class="cx">     void wasBlocked(ResourceHandle*) override;
</span><span class="cx">     void cannotShowURL(ResourceHandle*) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceTimingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceTiming.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceTiming.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceTiming.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -60,14 +60,14 @@
</span><span class="cx">     return ResourceTiming(url, initiator, loadTiming);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ResourceTiming ResourceTiming::fromLoad(CachedResource&amp; resource, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadMetrics&amp; networkLoadMetrics, const SecurityOrigin&amp; securityOrigin)
</del><ins>+ResourceTiming ResourceTiming::fromLoad(CachedResource&amp; resource, const String&amp; initiator, const LoadTiming&amp; loadTiming, const SecurityOrigin&amp; securityOrigin)
</ins><span class="cx"> {
</span><del>-    return ResourceTiming(resource, initiator, loadTiming, networkLoadMetrics, securityOrigin);
</del><ins>+    return ResourceTiming(resource, initiator, loadTiming, securityOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ResourceTiming ResourceTiming::fromSynchronousLoad(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadMetrics&amp; networkLoadMetrics, const ResourceResponse&amp; response, const SecurityOrigin&amp; securityOrigin)
</del><ins>+ResourceTiming ResourceTiming::fromSynchronousLoad(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadTiming&amp; networkLoadTiming, const ResourceResponse&amp; response, const SecurityOrigin&amp; securityOrigin)
</ins><span class="cx"> {
</span><del>-    return ResourceTiming(url, initiator, loadTiming, networkLoadMetrics, response, securityOrigin);
</del><ins>+    return ResourceTiming(url, initiator, loadTiming, networkLoadTiming, response, securityOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ResourceTiming::ResourceTiming(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming)
</span><span class="lines">@@ -78,20 +78,20 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ResourceTiming::ResourceTiming(CachedResource&amp; resource, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadMetrics&amp; networkLoadMetrics, const SecurityOrigin&amp; securityOrigin)
</del><ins>+ResourceTiming::ResourceTiming(CachedResource&amp; resource, const String&amp; initiator, const LoadTiming&amp; loadTiming, const SecurityOrigin&amp; securityOrigin)
</ins><span class="cx">     : m_url(resource.resourceRequest().url())
</span><span class="cx">     , m_initiator(initiator)
</span><span class="cx">     , m_loadTiming(loadTiming)
</span><del>-    , m_networkLoadMetrics(networkLoadMetrics)
</del><ins>+    , m_networkLoadTiming(resource.response().networkLoadTiming())
</ins><span class="cx">     , m_allowTimingDetails(passesTimingAllowCheck(resource.response(), securityOrigin))
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ResourceTiming::ResourceTiming(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadMetrics&amp; networkLoadMetrics, const ResourceResponse&amp; response, const SecurityOrigin&amp; securityOrigin)
</del><ins>+ResourceTiming::ResourceTiming(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadTiming&amp; networkLoadTiming, const ResourceResponse&amp; response, const SecurityOrigin&amp; securityOrigin)
</ins><span class="cx">     : m_url(url)
</span><span class="cx">     , m_initiator(initiator)
</span><span class="cx">     , m_loadTiming(loadTiming)
</span><del>-    , m_networkLoadMetrics(networkLoadMetrics)
</del><ins>+    , m_networkLoadTiming(networkLoadTiming)
</ins><span class="cx">     , m_allowTimingDetails(passesTimingAllowCheck(response, securityOrigin))
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx"> ResourceTiming ResourceTiming::isolatedCopy() const
</span><span class="cx"> {
</span><del>-    return ResourceTiming(m_url.isolatedCopy(), m_initiator.isolatedCopy(), m_loadTiming.isolatedCopy(), m_networkLoadMetrics.isolatedCopy(), m_allowTimingDetails);
</del><ins>+    return ResourceTiming(m_url.isolatedCopy(), m_initiator.isolatedCopy(), m_loadTiming.isolatedCopy(), m_networkLoadTiming.isolatedCopy(), m_allowTimingDetails);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceTimingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceTiming.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceTiming.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ResourceTiming.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;LoadTiming.h&quot;
</span><del>-#include &quot;NetworkLoadMetrics.h&quot;
</del><ins>+#include &quot;NetworkLoadTiming.h&quot;
</ins><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -39,13 +39,13 @@
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><span class="cx">     static ResourceTiming fromCache(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;);
</span><del>-    static ResourceTiming fromLoad(CachedResource&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadMetrics&amp;, const SecurityOrigin&amp;);
-    static ResourceTiming fromSynchronousLoad(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadMetrics&amp;, const ResourceResponse&amp;, const SecurityOrigin&amp;);
</del><ins>+    static ResourceTiming fromLoad(CachedResource&amp;, const String&amp; initiator, const LoadTiming&amp;, const SecurityOrigin&amp;);
+    static ResourceTiming fromSynchronousLoad(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadTiming&amp;, const ResourceResponse&amp;, const SecurityOrigin&amp;);
</ins><span class="cx"> 
</span><span class="cx">     URL url() const { return m_url; }
</span><span class="cx">     String initiator() const { return m_initiator; }
</span><span class="cx">     LoadTiming loadTiming() const { return m_loadTiming; }
</span><del>-    NetworkLoadMetrics networkLoadMetrics() const { return m_networkLoadMetrics; }
</del><ins>+    NetworkLoadTiming networkLoadTiming() const { return m_networkLoadTiming; }
</ins><span class="cx">     bool allowTimingDetails() const { return m_allowTimingDetails; }
</span><span class="cx"> 
</span><span class="cx">     ResourceTiming isolatedCopy() const;
</span><span class="lines">@@ -53,14 +53,14 @@
</span><span class="cx">     void overrideInitiatorName(const String&amp; name) { m_initiator = name; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    ResourceTiming(CachedResource&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadMetrics&amp;, const SecurityOrigin&amp;);
-    ResourceTiming(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadMetrics&amp;, const ResourceResponse&amp;, const SecurityOrigin&amp;);
</del><ins>+    ResourceTiming(CachedResource&amp;, const String&amp; initiator, const LoadTiming&amp;, const SecurityOrigin&amp;);
+    ResourceTiming(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;, const NetworkLoadTiming&amp;, const ResourceResponse&amp;, const SecurityOrigin&amp;);
</ins><span class="cx">     ResourceTiming(const URL&amp;, const String&amp; initiator, const LoadTiming&amp;);
</span><del>-    ResourceTiming(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadMetrics&amp; networkLoadMetrics, bool allowTimingDetails)
</del><ins>+    ResourceTiming(const URL&amp; url, const String&amp; initiator, const LoadTiming&amp; loadTiming, const NetworkLoadTiming&amp; networkLoadTiming, bool allowTimingDetails)
</ins><span class="cx">         : m_url(url)
</span><span class="cx">         , m_initiator(initiator)
</span><span class="cx">         , m_loadTiming(loadTiming)
</span><del>-        , m_networkLoadMetrics(networkLoadMetrics)
</del><ins>+        , m_networkLoadTiming(networkLoadTiming)
</ins><span class="cx">         , m_allowTimingDetails(allowTimingDetails)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">     URL m_url;
</span><span class="cx">     String m_initiator;
</span><span class="cx">     LoadTiming m_loadTiming;
</span><del>-    NetworkLoadMetrics m_networkLoadMetrics;
</del><ins>+    NetworkLoadTiming m_networkLoadTiming;
</ins><span class="cx">     bool m_allowTimingDetails { false };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderSubresourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/SubresourceLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -81,6 +81,7 @@
</span><span class="cx"> SubresourceLoader::SubresourceLoader(Frame&amp; frame, CachedResource&amp; resource, const ResourceLoaderOptions&amp; options)
</span><span class="cx">     : ResourceLoader(frame, options)
</span><span class="cx">     , m_resource(&amp;resource)
</span><ins>+    , m_loadingMultipartContent(false)
</ins><span class="cx">     , m_state(Uninitialized)
</span><span class="cx">     , m_requestCountTracker(std::in_place, frame.document()-&gt;cachedResourceLoader(), resource)
</span><span class="cx"> {
</span><span class="lines">@@ -191,8 +192,7 @@
</span><span class="cx">             opaqueRedirectedResponse.setURL(redirectResponse.url());
</span><span class="cx">             opaqueRedirectedResponse.setType(ResourceResponse::Type::Opaqueredirect);
</span><span class="cx">             m_resource-&gt;responseReceived(opaqueRedirectedResponse);
</span><del>-            NetworkLoadMetrics emptyMetrics;
-            didFinishLoading(emptyMetrics);
</del><ins>+            didFinishLoading(currentTime());
</ins><span class="cx">             return;
</span><span class="cx">         } else if (m_redirectCount++ &gt;= options().maxRedirectCount) {
</span><span class="cx">             cancel(ResourceError(String(), 0, request().url(), ASCIILiteral(&quot;Too many redirections&quot;), ResourceError::Type::General));
</span><span class="lines">@@ -283,12 +283,8 @@
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    // We want redirect responses to be processed through willSendRequestInternal.
-    // The only exception is redirection with no Location headers. Or in rare circumstances,
-    // cases of too many redirects from CFNetwork (&lt;rdar://problem/30610988&gt;).
-#if !PLATFORM(COCOA)
</del><ins>+    // We want redirect responses to be processed through willSendRequestInternal. The only exception is redirection with no Location headers.
</ins><span class="cx">     ASSERT(response.httpStatusCode() &lt; 300 || response.httpStatusCode() &gt;= 400 || response.httpStatusCode() == 304 || !response.httpHeaderField(HTTPHeaderName::Location));
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     // Reference the object in this method since the additional processing can do
</span><span class="cx">     // anything including removing the last reference to this object; one example of this is 3266216.
</span><span class="lines">@@ -351,9 +347,8 @@
</span><span class="cx">         clearResourceData();
</span><span class="cx">         // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once.
</span><span class="cx">         // After the first multipart section is complete, signal to delegates that this load is &quot;finished&quot;
</span><del>-        NetworkLoadMetrics emptyMetrics;
</del><span class="cx">         m_documentLoader-&gt;subresourceLoaderFinishedLoadingOnePart(this);
</span><del>-        didFinishLoadingOnePart(emptyMetrics);
</del><ins>+        didFinishLoadingOnePart(0);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     checkForHTTPStatusCodeError();
</span><span class="lines">@@ -515,7 +510,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SubresourceLoader::didFinishLoading(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void SubresourceLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx">     if (auto quickLookHandle = m_quickLookHandle.get()) {
</span><span class="lines">@@ -536,21 +531,23 @@
</span><span class="cx">     Ref&lt;SubresourceLoader&gt; protectedThis(*this);
</span><span class="cx">     CachedResourceHandle&lt;CachedResource&gt; protectResource(m_resource);
</span><span class="cx"> 
</span><del>-    // FIXME: Remove this with deprecatedNetworkLoadMetrics.
-    m_loadTiming.setResponseEnd(MonotonicTime::now());
</del><ins>+    // FIXME: &lt;https://webkit.org/b/168351&gt; [Resource Timing] Gather timing information with reliable responseEnd time
+    // The finishTime that is passed in is from the NetworkProcess and is more accurate.
+    // However, all other load times are generated from the web process or offsets.
+    // Mixing times from different processes can cause the finish time to be earlier than
+    // the response received time due to inter-process communication lag. This could be solved
+    // by gathering NetworkLoadTiming information at completion time instead of at
+    // didReceiveResponse time.
+    UNUSED_PARAM(finishTime);
+    MonotonicTime responseEndTime = MonotonicTime::now();
+    m_loadTiming.setResponseEnd(responseEndTime);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    if (networkLoadMetrics.isComplete())
-        reportResourceTiming(networkLoadMetrics);
-    else {
-        // This is the legacy path for platforms (and ResourceHandle paths) that do not provide
-        // complete load metrics in didFinishLoad. In those cases, fall back to the possibility
-        // that they populated partial load timing information on the ResourceResponse.
-        reportResourceTiming(m_resource-&gt;response().deprecatedNetworkLoadMetrics());
-    }
</del><ins>+    reportResourceTiming();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     m_state = Finishing;
</span><ins>+    m_resource-&gt;setLoadFinishTime(responseEndTime.secondsSinceEpoch().seconds()); // FIXME: Users of the loadFinishTime should use the LoadTiming struct instead.
</ins><span class="cx">     m_resource-&gt;finishLoading(resourceData());
</span><span class="cx"> 
</span><span class="cx">     if (wasCancelled())
</span><span class="lines">@@ -557,7 +554,7 @@
</span><span class="cx">         return;
</span><span class="cx">     m_resource-&gt;finish();
</span><span class="cx">     ASSERT(!reachedTerminalState());
</span><del>-    didFinishLoadingOnePart(m_resource-&gt;response().deprecatedNetworkLoadMetrics());
</del><ins>+    didFinishLoadingOnePart(responseEndTime.secondsSinceEpoch().seconds());
</ins><span class="cx">     notifyDone();
</span><span class="cx">     if (reachedTerminalState())
</span><span class="cx">         return;
</span><span class="lines">@@ -665,7 +662,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-void SubresourceLoader::reportResourceTiming(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void SubresourceLoader::reportResourceTiming()
</ins><span class="cx"> {
</span><span class="cx">     if (!RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled())
</span><span class="cx">         return;
</span><span class="lines">@@ -676,9 +673,9 @@
</span><span class="cx">     Document* document = m_documentLoader-&gt;cachedResourceLoader().document();
</span><span class="cx">     if (!document)
</span><span class="cx">         return;
</span><del>-
</del><ins>+    
</ins><span class="cx">     SecurityOrigin&amp; origin = m_origin ? *m_origin : document-&gt;securityOrigin();
</span><del>-    ResourceTiming resourceTiming = ResourceTiming::fromLoad(*m_resource, m_resource-&gt;initiatorName(), m_loadTiming, networkLoadMetrics, origin);
</del><ins>+    ResourceTiming resourceTiming = ResourceTiming::fromLoad(*m_resource, m_resource-&gt;initiatorName(), m_loadTiming, origin);
</ins><span class="cx"> 
</span><span class="cx">     // Worker resources loaded here are all CachedRawResources loaded through WorkerThreadableLoader.
</span><span class="cx">     // Pass the ResourceTiming information on so that WorkerThreadableLoader may add them to the
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderSubresourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/SubresourceLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/SubresourceLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/SubresourceLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;FrameLoaderTypes.h&quot;
</span><span class="cx"> #include &quot;ResourceLoader.h&quot;
</span><ins>+
</ins><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx">  
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -36,7 +37,7 @@
</span><span class="cx"> 
</span><span class="cx"> class CachedResource;
</span><span class="cx"> class CachedResourceLoader;
</span><del>-class NetworkLoadMetrics;
</del><ins>+class Document;
</ins><span class="cx"> class ResourceRequest;
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> 
</span><span class="lines">@@ -70,7 +71,7 @@
</span><span class="cx">     void didReceiveResponse(const ResourceResponse&amp;) override;
</span><span class="cx">     void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
</span><span class="cx">     void didReceiveBuffer(Ref&lt;SharedBuffer&gt;&amp;&amp;, long long encodedDataLength, DataPayloadType) override;
</span><del>-    void didFinishLoading(const NetworkLoadMetrics&amp;) override;
</del><ins>+    void didFinishLoading(double finishTime) override;
</ins><span class="cx">     void didFail(const ResourceError&amp;) override;
</span><span class="cx">     void willCancel(const ResourceError&amp;) override;
</span><span class="cx">     void didCancel(const ResourceError&amp;) override;
</span><span class="lines">@@ -102,7 +103,7 @@
</span><span class="cx">     void notifyDone();
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    void reportResourceTiming(const NetworkLoadMetrics&amp;);
</del><ins>+    void reportResourceTiming();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="lines">@@ -134,11 +135,11 @@
</span><span class="cx">     ResourceRequest m_iOSOriginalRequest;
</span><span class="cx"> #endif
</span><span class="cx">     CachedResource* m_resource;
</span><ins>+    bool m_loadingMultipartContent;
</ins><span class="cx">     SubresourceLoaderState m_state;
</span><span class="cx">     std::optional&lt;RequestCountTracker&gt; m_requestCountTracker;
</span><span class="cx">     RefPtr&lt;SecurityOrigin&gt; m_origin;
</span><span class="cx">     unsigned m_redirectCount { 0 };
</span><del>-    bool m_loadingMultipartContent { false };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderThreadableLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ThreadableLoaderClient.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ThreadableLoaderClient.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ThreadableLoaderClient.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx">         virtual void didReceiveResponse(unsigned long /*identifier*/, const ResourceResponse&amp;) { }
</span><span class="cx">         virtual void didReceiveData(const char*, int /*dataLength*/) { }
</span><del>-        virtual void didFinishLoading(unsigned long /*identifier*/) { }
</del><ins>+        virtual void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/) { }
</ins><span class="cx">         virtual void didFail(const ResourceError&amp;) { }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderThreadableLoaderClientWrapperh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ThreadableLoaderClientWrapper.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ThreadableLoaderClientWrapper.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ThreadableLoaderClientWrapper.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -73,11 +73,11 @@
</span><span class="cx">             m_client-&gt;didReceiveData(data, dataLength);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void didFinishLoading(unsigned long identifier)
</del><ins>+    void didFinishLoading(unsigned long identifier, double finishTime)
</ins><span class="cx">     {
</span><span class="cx">         m_done = true;
</span><span class="cx">         if (m_client)
</span><del>-            m_client-&gt;didFinishLoading(identifier);
</del><ins>+            m_client-&gt;didFinishLoading(identifier, finishTime);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void didFail(const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -201,12 +201,12 @@
</span><span class="cx">     }, m_taskMode);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WorkerThreadableLoader::MainThreadBridge::didFinishLoading(unsigned long identifier)
</del><ins>+void WorkerThreadableLoader::MainThreadBridge::didFinishLoading(unsigned long identifier, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     m_loadingFinished = true;
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = makeRef(*m_workerClientWrapper), identifier] (ScriptExecutionContext&amp; context) mutable {
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = makeRef(*m_workerClientWrapper), identifier, finishTime] (ScriptExecutionContext&amp; context) mutable {
</ins><span class="cx">         ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><del>-        protectedWorkerClientWrapper-&gt;didFinishLoading(identifier);
</del><ins>+        protectedWorkerClientWrapper-&gt;didFinishLoading(identifier, finishTime);
</ins><span class="cx">     }, m_taskMode);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">             void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
</span><span class="cx">             void didReceiveResponse(unsigned long identifier, const ResourceResponse&amp;) override;
</span><span class="cx">             void didReceiveData(const char*, int dataLength) override;
</span><del>-            void didFinishLoading(unsigned long identifier) override;
</del><ins>+            void didFinishLoading(unsigned long identifier, double finishTime) override;
</ins><span class="cx">             void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderappcacheApplicationCacheGroupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -570,9 +570,9 @@
</span><span class="cx">     m_currentResource-&gt;data().append(data, length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle)
</del><ins>+void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle, double finishTime)
</ins><span class="cx"> {
</span><del>-    InspectorInstrumentation::didFinishLoading(m_frame, m_frame-&gt;loader().documentLoader(), m_currentResourceIdentifier);
</del><ins>+    InspectorInstrumentation::didFinishLoading(m_frame, m_frame-&gt;loader().documentLoader(), m_currentResourceIdentifier, finishTime);
</ins><span class="cx"> 
</span><span class="cx">     if (handle == m_manifestHandle) {
</span><span class="cx">         didFinishLoadingManifest();
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderappcacheApplicationCacheGrouph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -108,10 +108,9 @@
</span><span class="cx">     // the existing client callback cannot be used, so assume that any client that enables application cache also wants it to use credential storage.
</span><span class="cx">     bool shouldUseCredentialStorage(ResourceHandle*) override { return true; }
</span><span class="cx"> 
</span><del>-    // ResourceHandleClient
</del><span class="cx">     void didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp;) override;
</span><span class="cx">     void didReceiveData(ResourceHandle*, const char*, unsigned length, int encodedDataLength) override;
</span><del>-    void didFinishLoading(ResourceHandle*) override;
</del><ins>+    void didFinishLoading(ResourceHandle*, double finishTime) override;
</ins><span class="cx">     void didFail(ResourceHandle*, const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     void didReceiveManifestResponse(const ResourceResponse&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedResourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedResource.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -260,6 +260,9 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void didRetrieveDerivedDataFromCache(const String&amp; /* type */, SharedBuffer&amp;) { }
</span><span class="cx"> 
</span><ins>+    void setLoadFinishTime(double finishTime) { m_loadFinishTime = finishTime; }
+    double loadFinishTime() const { return m_loadFinishTime; }
+
</ins><span class="cx"> #if USE(FOUNDATION) || USE(SOUP)
</span><span class="cx">     WEBCORE_EXPORT void tryReplaceEncodedData(SharedBuffer&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -320,6 +323,7 @@
</span><span class="cx">     AtomicString m_initiatorName;
</span><span class="cx"> 
</span><span class="cx">     double m_lastDecodedAccessTime { 0 }; // Used as a &quot;thrash guard&quot; in the cache
</span><ins>+    double m_loadFinishTime { 0 };
</ins><span class="cx"> 
</span><span class="cx">     unsigned m_encodedSize { 0 };
</span><span class="cx">     unsigned m_decodedSize { 0 };
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderiosQuickLookmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ios/QuickLook.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ios/QuickLook.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/loader/ios/QuickLook.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -40,7 +40,6 @@
</span><span class="cx"> #import &quot;ResourceLoader.h&quot;
</span><span class="cx"> #import &quot;ResourceRequest.h&quot;
</span><span class="cx"> #import &quot;SharedBuffer.h&quot;
</span><del>-#import &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #import &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #import &lt;wtf/Vector.h&gt;
</span><span class="cx"> #import &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -231,9 +230,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT_UNUSED(connection, !connection);
</span><span class="cx">     ASSERT(_hasSentDidReceiveResponse);
</span><del>-
-    NetworkLoadMetrics emptyMetrics;
-    _resourceLoader-&gt;didFinishLoading(emptyMetrics);
</del><ins>+    _resourceLoader-&gt;didFinishLoading(0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool isQuickLookPasswordError(NSError *error)
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventSource.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventSource.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/EventSource.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx">     parseEventStream();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void EventSource::didFinishLoading(unsigned long)
</del><ins>+void EventSource::didFinishLoading(unsigned long, double)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_state == OPEN);
</span><span class="cx">     ASSERT(m_requestInFlight);
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventSource.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventSource.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/EventSource.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx">     // ThreadableLoaderClient
</span><span class="cx">     void didReceiveResponse(unsigned long, const ResourceResponse&amp;) final;
</span><span class="cx">     void didReceiveData(const char*, int) final;
</span><del>-    void didFinishLoading(unsigned long) final;
</del><ins>+    void didFinishLoading(unsigned long, double) final;
</ins><span class="cx">     void didFail(const ResourceError&amp;) final;
</span><span class="cx"> 
</span><span class="cx">     void stop() final;
</span></span></pre></div>
<a id="trunkSourceWebCorepagePerformanceResourceTimingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PerformanceResourceTiming.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PerformanceResourceTiming.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/PerformanceResourceTiming.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,5 +1,4 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2017 Apple Inc. All rights reserved.
</del><span class="cx">  * Copyright (C) 2012 Google Inc. All rights reserved.
</span><span class="cx">  * Copyright (C) 2012 Intel Inc. All rights reserved.
</span><span class="cx">  *
</span><span class="lines">@@ -54,21 +53,6 @@
</span><span class="cx">     return Performance::reduceTimeResolution(seconds).milliseconds();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static double entryStartTime(MonotonicTime timeOrigin, const ResourceTiming&amp; resourceTiming)
-{
-    return monotonicTimeToDOMHighResTimeStamp(timeOrigin, resourceTiming.loadTiming().startTime());
-}
-
-static double entryEndTime(MonotonicTime timeOrigin, const ResourceTiming&amp; resourceTiming)
-{
-    if (resourceTiming.networkLoadMetrics().isComplete()) {
-        Seconds endTime = (resourceTiming.loadTiming().fetchStart() + resourceTiming.networkLoadMetrics().responseEnd) - timeOrigin;
-        return Performance::reduceTimeResolution(endTime).milliseconds();
-    }
-
-    return monotonicTimeToDOMHighResTimeStamp(timeOrigin, resourceTiming.loadTiming().responseEnd());
-}
-
</del><span class="cx"> Ref&lt;PerformanceResourceTiming&gt; PerformanceResourceTiming::create(MonotonicTime timeOrigin, ResourceTiming&amp;&amp; resourceTiming)
</span><span class="cx"> {
</span><span class="cx">     return adoptRef(*new PerformanceResourceTiming(timeOrigin, WTFMove(resourceTiming)));
</span><span class="lines">@@ -75,11 +59,11 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PerformanceResourceTiming::PerformanceResourceTiming(MonotonicTime timeOrigin, ResourceTiming&amp;&amp; resourceTiming)
</span><del>-    : PerformanceEntry(PerformanceEntry::Type::Resource, resourceTiming.url().string(), ASCIILiteral(&quot;resource&quot;), entryStartTime(timeOrigin, resourceTiming), entryEndTime(timeOrigin, resourceTiming))
</del><ins>+    : PerformanceEntry(PerformanceEntry::Type::Resource, resourceTiming.url().string(), ASCIILiteral(&quot;resource&quot;), monotonicTimeToDOMHighResTimeStamp(timeOrigin, resourceTiming.loadTiming().startTime()), monotonicTimeToDOMHighResTimeStamp(timeOrigin, resourceTiming.loadTiming().responseEnd()))
</ins><span class="cx">     , m_initiatorType(resourceTiming.initiator())
</span><span class="cx">     , m_timeOrigin(timeOrigin)
</span><span class="cx">     , m_loadTiming(resourceTiming.loadTiming())
</span><del>-    , m_networkLoadMetrics(resourceTiming.networkLoadMetrics())
</del><ins>+    , m_networkLoadTiming(resourceTiming.networkLoadTiming())
</ins><span class="cx">     , m_shouldReportDetails(resourceTiming.allowTimingDetails())
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -88,11 +72,6 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String PerformanceResourceTiming::nextHopProtocol() const
-{
-    return m_networkLoadMetrics.protocol;
-}
-
</del><span class="cx"> double PerformanceResourceTiming::workerStart() const
</span><span class="cx"> {
</span><span class="cx">     return 0.0;
</span><span class="lines">@@ -127,10 +106,10 @@
</span><span class="cx">     if (!m_shouldReportDetails)
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.domainLookupStart &lt;= 0_ms)
</del><ins>+    if (m_networkLoadTiming.domainLookupStart &lt;= 0)
</ins><span class="cx">         return fetchStart();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.domainLookupStart);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.domainLookupStart);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::domainLookupEnd() const
</span><span class="lines">@@ -138,10 +117,10 @@
</span><span class="cx">     if (!m_shouldReportDetails)
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.domainLookupEnd &lt;= 0_ms)
</del><ins>+    if (m_networkLoadTiming.domainLookupEnd &lt;= 0)
</ins><span class="cx">         return domainLookupStart();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.domainLookupEnd);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.domainLookupEnd);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::connectStart() const
</span><span class="lines">@@ -149,10 +128,16 @@
</span><span class="cx">     if (!m_shouldReportDetails)
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.connectStart &lt;= 0_ms)
</del><ins>+    // connectStart will be -1 when a network request is not made.
+    if (m_networkLoadTiming.connectStart &lt;= 0)
</ins><span class="cx">         return domainLookupEnd();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.connectStart);
</del><ins>+    // connectStart includes any DNS time, so we may need to trim that off.
+    double connectStart = m_networkLoadTiming.connectStart;
+    if (m_networkLoadTiming.domainLookupEnd &gt;= 0)
+        connectStart = m_networkLoadTiming.domainLookupEnd;
+
+    return networkLoadTimeToDOMHighResTimeStamp(connectStart);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::connectEnd() const
</span><span class="lines">@@ -160,10 +145,11 @@
</span><span class="cx">     if (!m_shouldReportDetails)
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.connectEnd &lt;= 0_ms)
</del><ins>+    // connectStart will be -1 when a network request is not made.
+    if (m_networkLoadTiming.connectEnd &lt;= 0)
</ins><span class="cx">         return connectStart();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.connectEnd);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.connectEnd);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::secureConnectionStart() const
</span><span class="lines">@@ -171,10 +157,10 @@
</span><span class="cx">     if (!m_shouldReportDetails)
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.secureConnectionStart &lt;= 0_ms)
</del><ins>+    if (m_networkLoadTiming.secureConnectionStart &lt; 0) // Secure connection not negotiated.
</ins><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.secureConnectionStart);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.secureConnectionStart);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::requestStart() const
</span><span class="lines">@@ -183,10 +169,10 @@
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><span class="cx">     // requestStart is 0 when a network request is not made.
</span><del>-    if (m_networkLoadMetrics.requestStart &lt;= 0_ms)
</del><ins>+    if (m_networkLoadTiming.requestStart &lt;= 0)
</ins><span class="cx">         return connectEnd();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.requestStart);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.requestStart);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::responseStart() const
</span><span class="lines">@@ -195,43 +181,26 @@
</span><span class="cx">         return 0.0;
</span><span class="cx"> 
</span><span class="cx">     // responseStart is 0 when a network request is not made.
</span><del>-    if (m_networkLoadMetrics.responseStart &lt;= 0_ms)
</del><ins>+    if (m_networkLoadTiming.responseStart &lt;= 0)
</ins><span class="cx">         return requestStart();
</span><span class="cx"> 
</span><del>-    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.responseStart);
</del><ins>+    return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadTiming.responseStart);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double PerformanceResourceTiming::responseEnd() const
</span><span class="cx"> {
</span><span class="cx">     // responseEnd is a required property.
</span><del>-    ASSERT(m_networkLoadMetrics.isComplete() || m_loadTiming.responseEnd());
</del><ins>+    ASSERT(m_loadTiming.responseEnd());
</ins><span class="cx"> 
</span><del>-    if (m_networkLoadMetrics.isComplete()) {
-        // responseEnd is 0 when a network request is not made.
-        // This should mean all other properties are empty.
-        if (m_networkLoadMetrics.responseEnd &lt;= 0_ms) {
-            ASSERT(m_networkLoadMetrics.responseStart &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.requestStart &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.requestStart &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.secureConnectionStart &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.connectEnd &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.connectStart &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.domainLookupEnd &lt;= 0_ms);
-            ASSERT(m_networkLoadMetrics.domainLookupStart &lt;= 0_ms);
-            return fetchStart();
-        }
-
-        return networkLoadTimeToDOMHighResTimeStamp(m_networkLoadMetrics.responseEnd);
-    }
-
</del><span class="cx">     return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadTiming.responseEnd());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-double PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp(Seconds delta) const
</del><ins>+double PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp(double deltaMilliseconds) const
</ins><span class="cx"> {
</span><del>-    ASSERT(delta);
-    Seconds final = (m_loadTiming.fetchStart() + delta) - m_timeOrigin;
-    return Performance::reduceTimeResolution(final).milliseconds();
</del><ins>+    ASSERT(deltaMilliseconds);
+    MonotonicTime combined = m_loadTiming.fetchStart() + Seconds::fromMilliseconds(deltaMilliseconds);
+    Seconds delta = combined - m_timeOrigin;
+    return Performance::reduceTimeResolution(delta).milliseconds();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepagePerformanceResourceTimingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PerformanceResourceTiming.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PerformanceResourceTiming.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/PerformanceResourceTiming.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;LoadTiming.h&quot;
</span><del>-#include &quot;NetworkLoadMetrics.h&quot;
</del><ins>+#include &quot;NetworkLoadTiming.h&quot;
</ins><span class="cx"> #include &quot;PerformanceEntry.h&quot;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -48,7 +48,6 @@
</span><span class="cx">     static Ref&lt;PerformanceResourceTiming&gt; create(MonotonicTime timeOrigin, ResourceTiming&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     AtomicString initiatorType() const { return m_initiatorType; }
</span><del>-    String nextHopProtocol() const;
</del><span class="cx"> 
</span><span class="cx">     double workerStart() const;
</span><span class="cx">     double redirectStart() const;
</span><span class="lines">@@ -67,12 +66,12 @@
</span><span class="cx">     PerformanceResourceTiming(MonotonicTime timeOrigin, ResourceTiming&amp;&amp;);
</span><span class="cx">     ~PerformanceResourceTiming();
</span><span class="cx"> 
</span><del>-    double networkLoadTimeToDOMHighResTimeStamp(Seconds) const;
</del><ins>+    double networkLoadTimeToDOMHighResTimeStamp(double deltaMilliseconds) const;
</ins><span class="cx"> 
</span><span class="cx">     AtomicString m_initiatorType;
</span><span class="cx">     MonotonicTime m_timeOrigin;
</span><span class="cx">     LoadTiming m_loadTiming;
</span><del>-    NetworkLoadMetrics m_networkLoadMetrics;
</del><ins>+    NetworkLoadTiming m_networkLoadTiming;
</ins><span class="cx">     bool m_shouldReportDetails;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagePerformanceResourceTimingidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PerformanceResourceTiming.idl (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PerformanceResourceTiming.idl        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/PerformanceResourceTiming.idl        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -38,7 +38,6 @@
</span><span class="cx">     Exposed=(Window,Worker),
</span><span class="cx"> ] interface PerformanceResourceTiming : PerformanceEntry {
</span><span class="cx">     readonly attribute DOMString initiatorType;
</span><del>-    readonly attribute DOMString nextHopProtocol;
</del><span class="cx"> 
</span><span class="cx">     readonly attribute DOMHighResTimeStamp workerStart;
</span><span class="cx">     readonly attribute DOMHighResTimeStamp redirectStart;
</span></span></pre></div>
<a id="trunkSourceWebCorepagePerformanceTimingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PerformanceTiming.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PerformanceTiming.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/PerformanceTiming.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;FrameLoader.h&quot;
</span><span class="cx"> #include &quot;LoadTiming.h&quot;
</span><del>-#include &quot;NetworkLoadMetrics.h&quot;
</del><ins>+#include &quot;NetworkLoadTiming.h&quot;
</ins><span class="cx"> #include &quot;Performance.h&quot;
</span><span class="cx"> #include &quot;ResourceResponse.h&quot;
</span><span class="cx"> #include &lt;wtf/CurrentTime.h&gt;
</span><span class="lines">@@ -123,11 +123,11 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return fetchStart();
</span><span class="cx">     
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><span class="cx">     // This will be -1 when a DNS request is not performed.
</span><span class="cx">     // Rather than exposing a special value that indicates no DNS, we &quot;backfill&quot; with fetchStart.
</span><del>-    if (timing.domainLookupStart &lt; 0_ms)
</del><ins>+    if (timing.domainLookupStart &lt; 0)
</ins><span class="cx">         return fetchStart();
</span><span class="cx"> 
</span><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.domainLookupStart);
</span><span class="lines">@@ -139,11 +139,11 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return domainLookupStart();
</span><span class="cx">     
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><span class="cx">     // This will be -1 when a DNS request is not performed.
</span><span class="cx">     // Rather than exposing a special value that indicates no DNS, we &quot;backfill&quot; with domainLookupStart.
</span><del>-    if (timing.domainLookupEnd &lt; 0_ms)
</del><ins>+    if (timing.domainLookupEnd &lt; 0)
</ins><span class="cx">         return domainLookupStart();
</span><span class="cx"> 
</span><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.domainLookupEnd);
</span><span class="lines">@@ -155,17 +155,17 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return domainLookupEnd();
</span><span class="cx"> 
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><span class="cx">     // connectStart will be -1 when a network request is not made.
</span><span class="cx">     // Rather than exposing a special value that indicates no new connection, we &quot;backfill&quot; with domainLookupEnd.
</span><del>-    Seconds connectStart = timing.connectStart;
-    if (connectStart &lt; 0_ms)
</del><ins>+    double connectStart = timing.connectStart;
+    if (connectStart &lt; 0)
</ins><span class="cx">         return domainLookupEnd();
</span><span class="cx"> 
</span><del>-    // NetworkLoadMetrics's connect phase includes DNS, however Navigation Timing's
</del><ins>+    // NetworkLoadTiming's connect phase includes DNS, however Navigation Timing's
</ins><span class="cx">     // connect phase should not. So if there is DNS time, trim it from the start.
</span><del>-    if (timing.domainLookupEnd &gt;= 0_ms &amp;&amp; timing.domainLookupEnd &gt; connectStart)
</del><ins>+    if (timing.domainLookupEnd &gt;= 0 &amp;&amp; timing.domainLookupEnd &gt; connectStart)
</ins><span class="cx">         connectStart = timing.domainLookupEnd;
</span><span class="cx"> 
</span><span class="cx">     return resourceLoadTimeRelativeToFetchStart(connectStart);
</span><span class="lines">@@ -177,11 +177,11 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return connectStart();
</span><span class="cx"> 
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><span class="cx">     // connectEnd will be -1 when a network request is not made.
</span><span class="cx">     // Rather than exposing a special value that indicates no new connection, we &quot;backfill&quot; with connectStart.
</span><del>-    if (timing.connectEnd &lt; 0_ms)
</del><ins>+    if (timing.connectEnd &lt; 0)
</ins><span class="cx">         return connectStart();
</span><span class="cx"> 
</span><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.connectEnd);
</span><span class="lines">@@ -193,9 +193,9 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return 0;
</span><span class="cx"> 
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><del>-    if (timing.secureConnectionStart &lt; 0_ms)
</del><ins>+    if (timing.secureConnectionStart &lt; 0)
</ins><span class="cx">         return 0;
</span><span class="cx"> 
</span><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.secureConnectionStart);
</span><span class="lines">@@ -207,9 +207,9 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return connectEnd();
</span><span class="cx">     
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><del>-    ASSERT(timing.requestStart &gt;= 0_ms);
</del><ins>+    ASSERT(timing.requestStart &gt;= 0);
</ins><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.requestStart);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -219,9 +219,9 @@
</span><span class="cx">     if (!loader)
</span><span class="cx">         return requestStart();
</span><span class="cx"> 
</span><del>-    const NetworkLoadMetrics&amp; timing = loader-&gt;response().deprecatedNetworkLoadMetrics();
</del><ins>+    const NetworkLoadTiming&amp; timing = loader-&gt;response().networkLoadTiming();
</ins><span class="cx">     
</span><del>-    ASSERT(timing.responseStart &gt;= 0_ms);
</del><ins>+    ASSERT(timing.responseStart &gt;= 0);
</ins><span class="cx">     return resourceLoadTimeRelativeToFetchStart(timing.responseStart);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -326,9 +326,9 @@
</span><span class="cx">     return &amp;loader-&gt;timing();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned long long PerformanceTiming::resourceLoadTimeRelativeToFetchStart(Seconds delta) const
</del><ins>+unsigned long long PerformanceTiming::resourceLoadTimeRelativeToFetchStart(double relativeMilliseconds) const
</ins><span class="cx"> {
</span><del>-    ASSERT(delta &gt;= 0_ms);
</del><ins>+    ASSERT(relativeMilliseconds &gt;= 0);
</ins><span class="cx"> 
</span><span class="cx">     LoadTiming* timing = loadTiming();
</span><span class="cx">     if (!timing)
</span><span class="lines">@@ -335,7 +335,7 @@
</span><span class="cx">         return 0;
</span><span class="cx"> 
</span><span class="cx">     WallTime fetchStart = timing-&gt;monotonicTimeToPseudoWallTime(timing-&gt;fetchStart());
</span><del>-    WallTime combined = fetchStart + delta;
</del><ins>+    WallTime combined = fetchStart + Seconds::fromMilliseconds(relativeMilliseconds);
</ins><span class="cx">     Seconds reduced = Performance::reduceTimeResolution(combined.secondsSinceEpoch());
</span><span class="cx">     return static_cast&lt;unsigned long long&gt;(reduced.milliseconds());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorepagePerformanceTimingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PerformanceTiming.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PerformanceTiming.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/page/PerformanceTiming.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">     const DocumentTiming* documentTiming() const;
</span><span class="cx">     DocumentLoader* documentLoader() const;
</span><span class="cx">     LoadTiming* loadTiming() const;
</span><del>-    unsigned long long resourceLoadTimeRelativeToFetchStart(Seconds) const;
</del><ins>+    unsigned long long resourceLoadTimeRelativeToFetchStart(double) const;
</ins><span class="cx">     unsigned long long monotonicTimeToIntegerMilliseconds(MonotonicTime) const;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerWebKitWebSourceGStreamercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx">         void didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp;) override;
</span><span class="cx">         void didReceiveData(ResourceHandle*, const char*, unsigned, int) override;
</span><span class="cx">         void didReceiveBuffer(ResourceHandle*, Ref&lt;SharedBuffer&gt;&amp;&amp;, int encodedLength) override;
</span><del>-        void didFinishLoading(ResourceHandle*) override;
</del><ins>+        void didFinishLoading(ResourceHandle*, double /*finishTime*/) override;
</ins><span class="cx">         void didFail(ResourceHandle*, const ResourceError&amp;) override;
</span><span class="cx">         void wasBlocked(ResourceHandle*) override;
</span><span class="cx">         void cannotShowURL(ResourceHandle*) override;
</span><span class="lines">@@ -1172,7 +1172,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ResourceHandleStreamingClient::didFinishLoading(ResourceHandle*)
</del><ins>+void ResourceHandleStreamingClient::didFinishLoading(ResourceHandle*, double)
</ins><span class="cx"> {
</span><span class="cx">     handleNotifyFinished();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkBlobResourceHandlecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -621,7 +621,7 @@
</span><span class="cx">     if (!handle.client())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    handle.client()-&gt;didFinishLoading(&amp;handle);
</del><ins>+    handle.client()-&gt;didFinishLoading(&amp;handle, 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void BlobResourceHandle::notifyFinish()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkNetworkLoadMetricsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,158 +0,0 @@
</span><del>-/*
- * Copyright (C) 2010 Google, Inc. All Rights Reserved.
- * Copyright (C) 2014-2017 Apple, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include &lt;wtf/Seconds.h&gt;
-#include &lt;wtf/text/WTFString.h&gt;
-
-#if PLATFORM(COCOA)
-OBJC_CLASS NSDictionary;
-#endif
-
-namespace WebCore {
-
-class NetworkLoadMetrics {
-public:
-    NetworkLoadMetrics()
-    {
-        reset();
-    }
-
-    NetworkLoadMetrics isolatedCopy() const
-    {
-        NetworkLoadMetrics copy;
-
-        copy.domainLookupStart = domainLookupStart;
-        copy.domainLookupEnd = domainLookupEnd;
-        copy.connectStart = connectStart;
-        copy.secureConnectionStart = secureConnectionStart;
-        copy.connectEnd = connectEnd;
-        copy.requestStart = requestStart;
-        copy.responseStart = responseStart;
-        copy.responseEnd = responseEnd;
-        copy.complete = complete;
-        copy.protocol = protocol.isolatedCopy();
-
-        return copy;
-    }
-
-    void reset()
-    {
-        domainLookupStart = Seconds(-1);
-        domainLookupEnd = Seconds(-1);
-        connectStart = Seconds(-1);
-        secureConnectionStart = Seconds(-1);
-        connectEnd = Seconds(-1);
-        requestStart = Seconds(0);
-        responseStart = Seconds(0);
-        responseEnd = Seconds(0);
-        protocol = String();
-        complete = false;
-    }
-
-    bool operator==(const NetworkLoadMetrics&amp; other) const
-    {
-        return domainLookupStart == other.domainLookupStart
-            &amp;&amp; domainLookupEnd == other.domainLookupEnd
-            &amp;&amp; connectStart == other.connectStart
-            &amp;&amp; secureConnectionStart == other.secureConnectionStart
-            &amp;&amp; connectEnd == other.connectEnd
-            &amp;&amp; requestStart == other.requestStart
-            &amp;&amp; responseStart == other.responseStart
-            &amp;&amp; responseEnd == other.responseEnd
-            &amp;&amp; complete == other.complete
-            &amp;&amp; protocol == other.protocol;
-    }
-
-    bool operator!=(const NetworkLoadMetrics&amp; other) const
-    {
-        return !(*this == other);
-    }
-
-    bool isComplete() const { return complete; }
-    void markComplete() { complete = true; }
-
-    template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
-    template&lt;class Decoder&gt; static bool decode(Decoder&amp;, NetworkLoadMetrics&amp;);
-
-    // These should be treated as deltas to LoadTiming's fetchStart.
-    // They should be in ascending order as listed here.
-    Seconds domainLookupStart;     // -1 if no DNS.
-    Seconds domainLookupEnd;       // -1 if no DNS.
-    Seconds connectStart;          // -1 if reused connection.
-    Seconds secureConnectionStart; // -1 if no secure connection.
-    Seconds connectEnd;            // -1 if reused connection.
-    Seconds requestStart;
-    Seconds responseStart;
-    Seconds responseEnd;
-
-    // Whether or not all of the properties (0 or otherwise) have been set.
-    bool complete { false };
-
-    // ALPN Protocol ID: https://w3c.github.io/resource-timing/#bib-RFC7301
-    String protocol;
-};
-
-#if PLATFORM(COCOA)
-WEBCORE_EXPORT void copyTimingData(NSDictionary *timingData, NetworkLoadMetrics&amp;);
-#endif
-
-#if PLATFORM(COCOA) &amp;&amp; !HAVE(TIMINGDATAOPTIONS)
-WEBCORE_EXPORT void setCollectsTimingData();
-#endif
-
-template&lt;class Encoder&gt;
-void NetworkLoadMetrics::encode(Encoder&amp; encoder) const
-{
-    encoder &lt;&lt; domainLookupStart;
-    encoder &lt;&lt; domainLookupEnd;
-    encoder &lt;&lt; connectStart;
-    encoder &lt;&lt; secureConnectionStart;
-    encoder &lt;&lt; connectEnd;
-    encoder &lt;&lt; requestStart;
-    encoder &lt;&lt; responseStart;
-    encoder &lt;&lt; responseEnd;
-    encoder &lt;&lt; complete;
-    encoder &lt;&lt; protocol;
-}
-
-template&lt;class Decoder&gt;
-bool NetworkLoadMetrics::decode(Decoder&amp; decoder, NetworkLoadMetrics&amp; timing)
-{
-    return decoder.decode(timing.domainLookupStart)
-        &amp;&amp; decoder.decode(timing.domainLookupEnd)
-        &amp;&amp; decoder.decode(timing.connectStart)
-        &amp;&amp; decoder.decode(timing.secureConnectionStart)
-        &amp;&amp; decoder.decode(timing.connectEnd)
-        &amp;&amp; decoder.decode(timing.requestStart)
-        &amp;&amp; decoder.decode(timing.responseStart)
-        &amp;&amp; decoder.decode(timing.responseEnd)
-        &amp;&amp; decoder.decode(timing.complete)
-        &amp;&amp; decoder.decode(timing.protocol);
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkNetworkLoadTiminghfromrev212988trunkSourceWebCoreplatformnetworkNetworkLoadMetricsh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/platform/network/NetworkLoadTiming.h (from rev 212988, trunk/Source/WebCore/platform/network/NetworkLoadMetrics.h) (0 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/NetworkLoadTiming.h                                (rev 0)
+++ trunk/Source/WebCore/platform/network/NetworkLoadTiming.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -0,0 +1,138 @@
</span><ins>+/*
+ * Copyright (C) 2010 Google, Inc. All Rights Reserved.
+ * Copyright (C) 2014 Apple, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if PLATFORM(COCOA)
+OBJC_CLASS NSDictionary;
+#endif
+
+namespace WebCore {
+    
+class NetworkLoadTiming {
+public:
+    NetworkLoadTiming()
+        : domainLookupStart(-1)
+        , domainLookupEnd(-1)
+        , connectStart(-1)
+        , connectEnd(-1)
+        , requestStart(0)
+        , responseStart(0)
+        , secureConnectionStart(-1)
+    {
+    }
+
+    NetworkLoadTiming(const NetworkLoadTiming&amp; other)
+        : domainLookupStart(other.domainLookupStart)
+        , domainLookupEnd(other.domainLookupEnd)
+        , connectStart(other.connectStart)
+        , connectEnd(other.connectEnd)
+        , requestStart(other.requestStart)
+        , responseStart(other.responseStart)
+        , secureConnectionStart(other.secureConnectionStart)
+    {
+    }
+
+    NetworkLoadTiming&amp; operator=(const NetworkLoadTiming&amp; other)
+    {
+        domainLookupStart = other.domainLookupStart;
+        domainLookupEnd = other.domainLookupEnd;
+        connectStart = other.connectStart;
+        connectEnd = other.connectEnd;
+        requestStart = other.requestStart;
+        responseStart = other.responseStart;
+        secureConnectionStart = other.secureConnectionStart;
+        return *this;
+    }
+
+    NetworkLoadTiming isolatedCopy() const
+    {
+        // There are currently no members that need isolated copies, so we can use the copy constructor.
+        return *this;
+    }
+    
+    bool operator==(const NetworkLoadTiming&amp; other) const
+    {
+        return domainLookupStart == other.domainLookupStart
+            &amp;&amp; domainLookupEnd == other.domainLookupEnd
+            &amp;&amp; connectStart == other.connectStart
+            &amp;&amp; connectEnd == other.connectEnd
+            &amp;&amp; requestStart == other.requestStart
+            &amp;&amp; responseStart == other.responseStart
+            &amp;&amp; secureConnectionStart == other.secureConnectionStart;
+    }
+
+    bool operator!=(const NetworkLoadTiming&amp; other) const
+    {
+        return !(*this == other);
+    }
+
+    template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
+    template&lt;class Decoder&gt; static bool decode(Decoder&amp;, NetworkLoadTiming&amp;);
+
+    // These are millisecond deltas from the start time.
+    double domainLookupStart;
+    double domainLookupEnd;
+    double connectStart;
+    double connectEnd;
+    double requestStart;
+    double responseStart;
+    double secureConnectionStart;
+};
+
+#if PLATFORM(COCOA)
+WEBCORE_EXPORT void copyTimingData(NSDictionary *timingData, NetworkLoadTiming&amp;);
+#endif
+
+#if PLATFORM(COCOA) &amp;&amp; !HAVE(TIMINGDATAOPTIONS)
+WEBCORE_EXPORT void setCollectsTimingData();
+#endif
+    
+template&lt;class Encoder&gt;
+void NetworkLoadTiming::encode(Encoder&amp; encoder) const
+{
+    encoder &lt;&lt; domainLookupStart;
+    encoder &lt;&lt; domainLookupEnd;
+    encoder &lt;&lt; connectStart;
+    encoder &lt;&lt; connectEnd;
+    encoder &lt;&lt; requestStart;
+    encoder &lt;&lt; responseStart;
+    encoder &lt;&lt; secureConnectionStart;
+}
+
+template&lt;class Decoder&gt;
+bool NetworkLoadTiming::decode(Decoder&amp; decoder, NetworkLoadTiming&amp; timing)
+{
+    return decoder.decode(timing.domainLookupStart)
+        &amp;&amp; decoder.decode(timing.domainLookupEnd)
+        &amp;&amp; decoder.decode(timing.connectStart)
+        &amp;&amp; decoder.decode(timing.connectEnd)
+        &amp;&amp; decoder.decode(timing.requestStart)
+        &amp;&amp; decoder.decode(timing.responseStart)
+        &amp;&amp; decoder.decode(timing.secureConnectionStart);
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkPingHandleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/PingHandle.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/PingHandle.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/PingHandle.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     }
</span><span class="cx">     void didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp;) final { delete this; }
</span><span class="cx">     void didReceiveBuffer(ResourceHandle*, Ref&lt;SharedBuffer&gt;&amp;&amp;, int) final { delete this; };
</span><del>-    void didFinishLoading(ResourceHandle*) final { delete this; }
</del><ins>+    void didFinishLoading(ResourceHandle*, double) final { delete this; }
</ins><span class="cx">     void didFail(ResourceHandle*, const ResourceError&amp;) final { delete this; }
</span><span class="cx">     bool shouldUseCredentialStorage(ResourceHandle*) final { return m_shouldUseCredentialStorage; }
</span><span class="cx">     bool usesAsyncCallbacks() final { return m_usesAsyncCallbacks == UsesAsyncCallbacks::Yes; }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkResourceHandleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ResourceHandle.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ResourceHandle.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/ResourceHandle.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx"> class ResourceError;
</span><span class="cx"> class ResourceHandleClient;
</span><span class="cx"> class ResourceHandleInternal;
</span><del>-class NetworkLoadMetrics;
</del><ins>+class NetworkLoadTiming;
</ins><span class="cx"> class ResourceRequest;
</span><span class="cx"> class ResourceResponse;
</span><span class="cx"> class SoupNetworkSession;
</span><span class="lines">@@ -132,9 +132,9 @@
</span><span class="cx">         
</span><span class="cx"> #if PLATFORM(COCOA) &amp;&amp; ENABLE(WEB_TIMING)
</span><span class="cx"> #if USE(CFURLCONNECTION)
</span><del>-    static void getConnectionTimingData(CFURLConnectionRef, NetworkLoadMetrics&amp;);
</del><ins>+    static void getConnectionTimingData(CFURLConnectionRef, NetworkLoadTiming&amp;);
</ins><span class="cx"> #else
</span><del>-    static void getConnectionTimingData(NSURLConnection *, NetworkLoadMetrics&amp;);
</del><ins>+    static void getConnectionTimingData(NSURLConnection *, NetworkLoadTiming&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx">         
</span><span class="lines">@@ -178,7 +178,7 @@
</span><span class="cx">     void ensureReadBuffer();
</span><span class="cx">     size_t currentStreamPosition() const;
</span><span class="cx">     void didStartRequest();
</span><del>-    MonotonicTime m_requestTime;
</del><ins>+    double m_requestTime;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     bool hasAuthenticationChallenge() const;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkResourceHandleClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ResourceHandleClient.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ResourceHandleClient.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/ResourceHandleClient.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">         virtual void didReceiveData(ResourceHandle*, const char*, unsigned, int /*encodedDataLength*/) { }
</span><span class="cx">         WEBCORE_EXPORT virtual void didReceiveBuffer(ResourceHandle*, Ref&lt;SharedBuffer&gt;&amp;&amp;, int encodedDataLength);
</span><span class="cx">         
</span><del>-        virtual void didFinishLoading(ResourceHandle*) { }
</del><ins>+        virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/) { }
</ins><span class="cx">         virtual void didFail(ResourceHandle*, const ResourceError&amp;) { }
</span><span class="cx">         virtual void wasBlocked(ResourceHandle*) { }
</span><span class="cx">         virtual void cannotShowURL(ResourceHandle*) { }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkResourceResponseBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     data.httpVersion = httpVersion().isolatedCopy();
</span><span class="cx"> 
</span><span class="cx">     data.httpHeaderFields = httpHeaderFields().isolatedCopy();
</span><del>-    data.networkLoadMetrics = m_networkLoadMetrics.isolatedCopy();
</del><ins>+    data.networkLoadTiming = m_networkLoadTiming.isolatedCopy();
</ins><span class="cx">     data.type = m_type;
</span><span class="cx">     data.isRedirected = m_isRedirected;
</span><span class="cx"> 
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx">     response.setHTTPVersion(data.httpVersion);
</span><span class="cx"> 
</span><span class="cx">     response.m_httpHeaderFields = WTFMove(data.httpHeaderFields);
</span><del>-    response.m_networkLoadMetrics = data.networkLoadMetrics;
</del><ins>+    response.m_networkLoadTiming = data.networkLoadTiming;
</ins><span class="cx">     response.m_type = data.type;
</span><span class="cx">     response.m_isRedirected = data.isRedirected;
</span><span class="cx"> 
</span><span class="lines">@@ -595,7 +595,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (a.httpHeaderFields() != b.httpHeaderFields())
</span><span class="cx">         return false;
</span><del>-    if (a.deprecatedNetworkLoadMetrics() != b.deprecatedNetworkLoadMetrics())
</del><ins>+    if (a.networkLoadTiming() != b.networkLoadTiming())
</ins><span class="cx">         return false;
</span><span class="cx">     return ResourceResponse::platformCompare(a, b);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkResourceResponseBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ResourceResponseBase.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #include &quot;CacheValidation.h&quot;
</span><span class="cx"> #include &quot;CertificateInfo.h&quot;
</span><span class="cx"> #include &quot;HTTPHeaderMap.h&quot;
</span><del>-#include &quot;NetworkLoadMetrics.h&quot;
</del><ins>+#include &quot;NetworkLoadTiming.h&quot;
</ins><span class="cx"> #include &quot;ParsedContentRange.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;wtf/SHA1.h&gt;
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">         String httpStatusText;
</span><span class="cx">         String httpVersion;
</span><span class="cx">         HTTPHeaderMap httpHeaderFields;
</span><del>-        NetworkLoadMetrics networkLoadMetrics;
</del><ins>+        NetworkLoadTiming networkLoadTiming;
</ins><span class="cx">         Type type;
</span><span class="cx">         bool isRedirected;
</span><span class="cx">     };
</span><span class="lines">@@ -140,10 +140,7 @@
</span><span class="cx">     const std::optional&lt;SHA1::Digest&gt;&amp; cacheBodyKey() const { return m_cacheBodyKey; }
</span><span class="cx">     void setCacheBodyKey(const SHA1::Digest&amp; key) { m_cacheBodyKey = key; }
</span><span class="cx"> 
</span><del>-    // FIXME: This should be eliminated from ResourceResponse.
-    // Network loading metrics should be delivered via didFinishLoad
-    // and should not be part of the ResourceResponse.
-    NetworkLoadMetrics&amp; deprecatedNetworkLoadMetrics() const { return m_networkLoadMetrics; }
</del><ins>+    NetworkLoadTiming&amp; networkLoadTiming() const { return m_networkLoadTiming; }
</ins><span class="cx"> 
</span><span class="cx">     // The ResourceResponse subclass may &quot;shadow&quot; this method to provide platform-specific memory usage information
</span><span class="cx">     unsigned memoryUsage() const
</span><span class="lines">@@ -195,7 +192,7 @@
</span><span class="cx">     AtomicString m_httpStatusText;
</span><span class="cx">     AtomicString m_httpVersion;
</span><span class="cx">     HTTPHeaderMap m_httpHeaderFields;
</span><del>-    mutable NetworkLoadMetrics m_networkLoadMetrics;
</del><ins>+    mutable NetworkLoadTiming m_networkLoadTiming;
</ins><span class="cx"> 
</span><span class="cx">     mutable std::optional&lt;CertificateInfo&gt; m_certificateInfo;
</span><span class="cx"> 
</span><span class="lines">@@ -243,10 +240,10 @@
</span><span class="cx">     encoder &lt;&lt; m_httpVersion;
</span><span class="cx">     encoder &lt;&lt; m_httpHeaderFields;
</span><span class="cx"> 
</span><del>-    // We don't want to put the networkLoadMetrics info
</del><ins>+    // We don't want to put the networkLoadTiming info
</ins><span class="cx">     // into the disk cache, because we will never use the old info.
</span><span class="cx">     if (Encoder::isIPCEncoder)
</span><del>-        encoder &lt;&lt; m_networkLoadMetrics;
</del><ins>+        encoder &lt;&lt; m_networkLoadTiming;
</ins><span class="cx"> 
</span><span class="cx">     encoder &lt;&lt; m_httpStatusCode;
</span><span class="cx">     encoder &lt;&lt; m_certificateInfo;
</span><span class="lines">@@ -282,8 +279,8 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(response.m_httpHeaderFields))
</span><span class="cx">         return false;
</span><del>-    // The networkLoadMetrics info is only send over IPC and not stored in disk cache.
-    if (Decoder::isIPCDecoder &amp;&amp; !decoder.decode(response.m_networkLoadMetrics))
</del><ins>+    // The networkLoadTiming info is only send over IPC and not stored in disk cache.
+    if (Decoder::isIPCDecoder &amp;&amp; !decoder.decode(response.m_networkLoadTiming))
</ins><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(response.m_httpStatusCode))
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkSynchronousLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     m_data.append(data, length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SynchronousLoaderClient::didFinishLoading(ResourceHandle*)
</del><ins>+void SynchronousLoaderClient::didFinishLoading(ResourceHandle*, double)
</ins><span class="cx"> {
</span><span class="cx">     m_isDone = true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkSynchronousLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">     void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&amp;) override;
</span><span class="cx">     void didReceiveResponse(ResourceHandle*, ResourceResponse&amp;&amp;) override;
</span><span class="cx">     void didReceiveData(ResourceHandle*, const char*, unsigned, int /*encodedDataLength*/) override;
</span><del>-    void didFinishLoading(ResourceHandle*) override;
</del><ins>+    void didFinishLoading(ResourceHandle*, double /*finishTime*/) override;
</ins><span class="cx">     void didFail(ResourceHandle*, const ResourceError&amp;) override;
</span><span class="cx"> #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
</span><span class="cx">     bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcfResourceHandleCFURLConnectionDelegateWithOperationQueuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -156,7 +156,7 @@
</span><span class="cx">         
</span><span class="cx">         ResourceResponse resourceResponse(cfResponse);
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-        ResourceHandle::getConnectionTimingData(connection, resourceResponse.deprecatedNetworkLoadMetrics());
</del><ins>+        ResourceHandle::getConnectionTimingData(connection, resourceResponse.networkLoadTiming());
</ins><span class="cx"> #else
</span><span class="cx">         UNUSED_PARAM(connection);
</span><span class="cx"> #endif
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx"> 
</span><span class="cx">         LOG(Network, &quot;CFNet - ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading(handle=%p) (%s)&quot;, m_handle, m_handle-&gt;firstRequest().url().string().utf8().data());
</span><span class="cx"> 
</span><del>-        m_handle-&gt;client()-&gt;didFinishLoading(m_handle);
</del><ins>+        m_handle-&gt;client()-&gt;didFinishLoading(m_handle, 0);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcfSynchronousResourceHandleCFURLConnectionDelegatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -171,7 +171,7 @@
</span><span class="cx"> 
</span><span class="cx">     ResourceResponse resourceResponse(cfResponse);
</span><span class="cx"> #if PLATFORM(COCOA) &amp;&amp; ENABLE(WEB_TIMING)
</span><del>-    ResourceHandle::getConnectionTimingData(connection, resourceResponse.deprecatedNetworkLoadMetrics());
</del><ins>+    ResourceHandle::getConnectionTimingData(connection, resourceResponse.networkLoadTiming());
</ins><span class="cx"> #else
</span><span class="cx">     UNUSED_PARAM(connection);
</span><span class="cx"> #endif
</span><span class="lines">@@ -192,7 +192,7 @@
</span><span class="cx">     LOG(Network, &quot;CFNet - SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading(handle=%p) (%s)&quot;, m_handle, m_handle-&gt;firstRequest().url().string().utf8().data());
</span><span class="cx"> 
</span><span class="cx">     if (ResourceHandleClient* client = m_handle-&gt;client())
</span><del>-        client-&gt;didFinishLoading(m_handle);
</del><ins>+        client-&gt;didFinishLoading(m_handle, 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SynchronousResourceHandleCFURLConnectionDelegate::didFail(CFErrorRef error)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcocoaNetworkLoadMetricsmm"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,79 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Apple, Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import &quot;config.h&quot;
-#import &quot;NetworkLoadMetrics.h&quot;
-
-#import &lt;WebCore/NSURLConnectionSPI.h&gt;
-
-namespace WebCore {
-
-static double timingValue(NSDictionary *timingData, NSString *key)
-{
-    if (id object = [timingData objectForKey:key])
-        return [object doubleValue];
-    return 0.0;
-}
-    
-void copyTimingData(NSDictionary *timingData, NetworkLoadMetrics&amp; timing)
-{
-    if (!timingData)
-        return;
-    
-    // This is not the navigationStart time in monotonic time, but the other times are relative to this time
-    // and only the differences between times are stored.
-    double referenceStart = timingValue(timingData, @&quot;_kCFNTimingDataFetchStart&quot;);
-    
-    double domainLookupStart = timingValue(timingData, @&quot;_kCFNTimingDataDomainLookupStart&quot;);
-    double domainLookupEnd = timingValue(timingData, @&quot;_kCFNTimingDataDomainLookupEnd&quot;);
-    double connectStart = timingValue(timingData, @&quot;_kCFNTimingDataConnectStart&quot;);
-    double secureConnectionStart = timingValue(timingData, @&quot;_kCFNTimingDataSecureConnectionStart&quot;);
-    double connectEnd = timingValue(timingData, @&quot;_kCFNTimingDataConnectEnd&quot;);
-    double requestStart = timingValue(timingData, @&quot;_kCFNTimingDataRequestStart&quot;);
-    double responseStart = timingValue(timingData, @&quot;_kCFNTimingDataResponseStart&quot;);
-    
-    timing.domainLookupStart = Seconds(domainLookupStart &lt;= 0 ? Seconds(-1) : Seconds::fromMilliseconds(domainLookupStart - referenceStart));
-    timing.domainLookupEnd = Seconds(domainLookupEnd &lt;= 0 ? Seconds(-1) : Seconds::fromMilliseconds(domainLookupEnd - referenceStart));
-    timing.connectStart = Seconds(connectStart &lt;= 0 ? Seconds(-1) : Seconds::fromMilliseconds(connectStart - referenceStart));
-    timing.secureConnectionStart = Seconds(secureConnectionStart &lt;= 0 ? Seconds(-1) : Seconds::fromMilliseconds(secureConnectionStart - referenceStart));
-    timing.connectEnd = Seconds(connectEnd &lt;= 0 ? Seconds(-1) : Seconds::fromMilliseconds(connectEnd - referenceStart));
-    timing.requestStart = Seconds(requestStart &lt;= 0 ? Seconds(0) : Seconds::fromMilliseconds(requestStart - referenceStart));
-    timing.responseStart = Seconds(responseStart &lt;= 0 ? Seconds(0) : Seconds::fromMilliseconds(responseStart - referenceStart));
-
-    // NOTE: responseEnd is not populated in this code path.
-}
-
-#if !HAVE(TIMINGDATAOPTIONS)
-void setCollectsTimingData()
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&amp;onceToken, ^{
-        [NSURLConnection _setCollectsTimingData:YES];
-        [NSURLConnection _collectTimingDataWithOptions:TimingDataCollectionNStatsOff | TimingDataCollectionConnectionDataOff];
-    });
-}
-#endif
-    
-}
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcocoaNetworkLoadTimingmmfromrev212988trunkSourceWebCoreplatformnetworkcocoaNetworkLoadMetricsmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm (from rev 212988, trunk/Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm) (0 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm                                (rev 0)
+++ trunk/Source/WebCore/platform/network/cocoa/NetworkLoadTiming.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;NetworkLoadTiming.h&quot;
+
+#import &lt;WebCore/NSURLConnectionSPI.h&gt;
+
+namespace WebCore {
+
+static double timingValue(NSDictionary *timingData, NSString *key)
+{
+    if (id object = [timingData objectForKey:key])
+        return [object doubleValue];
+    return 0.0;
+}
+    
+void copyTimingData(NSDictionary *timingData, NetworkLoadTiming&amp; timing)
+{
+    if (!timingData)
+        return;
+    
+    // This is not the navigationStart time in monotonic time, but the other times are relative to this time
+    // and only the differences between times are stored.
+    double referenceStart = timingValue(timingData, @&quot;_kCFNTimingDataFetchStart&quot;);
+    
+    double domainLookupStart = timingValue(timingData, @&quot;_kCFNTimingDataDomainLookupStart&quot;);
+    double domainLookupEnd = timingValue(timingData, @&quot;_kCFNTimingDataDomainLookupEnd&quot;);
+    double connectStart = timingValue(timingData, @&quot;_kCFNTimingDataConnectStart&quot;);
+    double secureConnectionStart = timingValue(timingData, @&quot;_kCFNTimingDataSecureConnectionStart&quot;);
+    double connectEnd = timingValue(timingData, @&quot;_kCFNTimingDataConnectEnd&quot;);
+    double requestStart = timingValue(timingData, @&quot;_kCFNTimingDataRequestStart&quot;);
+    double responseStart = timingValue(timingData, @&quot;_kCFNTimingDataResponseStart&quot;);
+    
+    timing.domainLookupStart = domainLookupStart &lt;= 0 ? -1 : (domainLookupStart - referenceStart) * 1000;
+    timing.domainLookupEnd = domainLookupEnd &lt;= 0 ? -1 : (domainLookupEnd - referenceStart) * 1000;
+    timing.connectStart = connectStart &lt;= 0 ? -1 : (connectStart - referenceStart) * 1000;
+    timing.secureConnectionStart = secureConnectionStart &lt;= 0 ? -1 : (secureConnectionStart - referenceStart) * 1000;
+    timing.connectEnd = connectEnd &lt;= 0 ? -1 : (connectEnd - referenceStart) * 1000;
+    timing.requestStart = requestStart &lt;= 0 ? 0 : (requestStart - referenceStart) * 1000;
+    timing.responseStart = responseStart &lt;= 0 ? 0 : (responseStart - referenceStart) * 1000;
+}
+
+#if !HAVE(TIMINGDATAOPTIONS)
+void setCollectsTimingData()
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&amp;onceToken, ^{
+        [NSURLConnection _setCollectsTimingData:YES];
+        [NSURLConnection _collectTimingDataWithOptions:TimingDataCollectionNStatsOff | TimingDataCollectionConnectionDataOff];
+    });
+}
+#endif
+    
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlResourceHandleCurlcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&amp;);
</span><span class="cx">     virtual void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength);
</span><del>-    virtual void didFinishLoading(ResourceHandle*);
</del><ins>+    virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/);
</ins><span class="cx">     virtual void didFail(ResourceHandle*, const ResourceError&amp;);
</span><span class="cx"> 
</span><span class="cx">     ResourceResponse resourceResponse() const { return m_response; }
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     m_data.append(data, length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebCoreSynchronousLoader::didFinishLoading(ResourceHandle*)
</del><ins>+void WebCoreSynchronousLoader::didFinishLoading(ResourceHandle*, double)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlResourceHandleManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -170,8 +170,14 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><ins>+static double milisecondsSinceRequest(double requestTime)
+{
+    return (monotonicallyIncreasingTime() - requestTime) * 1000.0;
+}
+
</ins><span class="cx"> static void calculateWebTimingInformations(ResourceHandleInternal* d)
</span><span class="cx"> {
</span><ins>+    double startTransfertTime = 0;
</ins><span class="cx">     double preTransferTime = 0;
</span><span class="cx">     double dnslookupTime = 0;
</span><span class="cx">     double connectTime = 0;
</span><span class="lines">@@ -180,19 +186,20 @@
</span><span class="cx">     curl_easy_getinfo(d-&gt;m_handle, CURLINFO_NAMELOOKUP_TIME, &amp;dnslookupTime);
</span><span class="cx">     curl_easy_getinfo(d-&gt;m_handle, CURLINFO_CONNECT_TIME, &amp;connectTime);
</span><span class="cx">     curl_easy_getinfo(d-&gt;m_handle, CURLINFO_APPCONNECT_TIME, &amp;appConnectTime);
</span><ins>+    curl_easy_getinfo(d-&gt;m_handle, CURLINFO_STARTTRANSFER_TIME, &amp;startTransfertTime);
</ins><span class="cx">     curl_easy_getinfo(d-&gt;m_handle, CURLINFO_PRETRANSFER_TIME, &amp;preTransferTime);
</span><span class="cx"> 
</span><del>-    d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupStart = Seconds(0);
-    d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupEnd = Seconds(dnslookupTime);
</del><ins>+    d-&gt;m_response.networkLoadTiming().domainLookupStart = 0;
+    d-&gt;m_response.networkLoadTiming().domainLookupEnd = dnslookupTime * 1000;
</ins><span class="cx"> 
</span><del>-    d-&gt;m_response.deprecatedNetworkLoadMetrics().connectStart = Seconds(dnslookupTime);
-    d-&gt;m_response.deprecatedNetworkLoadMetrics().connectEnd = Seconds(connectTime);
</del><ins>+    d-&gt;m_response.networkLoadTiming().connectStart = dnslookupTime * 1000;
+    d-&gt;m_response.networkLoadTiming().connectEnd = connectTime * 1000;
</ins><span class="cx"> 
</span><del>-    d-&gt;m_response.deprecatedNetworkLoadMetrics().requestStart = Seconds(connectTime);
-    d-&gt;m_response.deprecatedNetworkLoadMetrics().responseStart = Seconds(preTransferTime);
</del><ins>+    d-&gt;m_response.networkLoadTiming().requestStart = connectTime * 1000;
+    d-&gt;m_response.networkLoadTiming().responseStart = preTransferTime * 1000;
</ins><span class="cx"> 
</span><span class="cx">     if (appConnectTime)
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().secureConnectionStart = Seconds(connectTime);
</del><ins>+        d-&gt;m_response.networkLoadTiming().secureConnectionStart = connectTime * 1000;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -670,7 +677,7 @@
</span><span class="cx">         // find the node which has same d-&gt;m_handle as completed transfer
</span><span class="cx">         CURL* handle = msg-&gt;easy_handle;
</span><span class="cx">         ASSERT(handle);
</span><del>-        ResourceHandle* job = nullptr;
</del><ins>+        ResourceHandle* job = 0;
</ins><span class="cx">         CURLcode err = curl_easy_getinfo(handle, CURLINFO_PRIVATE, &amp;job);
</span><span class="cx">         ASSERT_UNUSED(err, CURLE_OK == err);
</span><span class="cx">         ASSERT(job);
</span><span class="lines">@@ -704,7 +711,7 @@
</span><span class="cx">                 d-&gt;m_multipartHandle-&gt;contentEnded();
</span><span class="cx"> 
</span><span class="cx">             if (d-&gt;client()) {
</span><del>-                d-&gt;client()-&gt;didFinishLoading(job);
</del><ins>+                d-&gt;client()-&gt;didFinishLoading(job, 0);
</ins><span class="cx">                 CurlCacheManager::getInstance().didFinishLoading(*job);
</span><span class="cx">             }
</span><span class="cx">         } else {
</span><span class="lines">@@ -965,7 +972,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (handle-&gt;client())
</span><del>-        handle-&gt;client()-&gt;didFinishLoading(handle);
</del><ins>+        handle-&gt;client()-&gt;didFinishLoading(handle, 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ResourceHandleManager::dispatchSynchronousJob(ResourceHandle* job)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkmacResourceHandleMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -736,7 +736,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(CFURLCONNECTION)
</span><span class="cx">     
</span><del>-void ResourceHandle::getConnectionTimingData(CFURLConnectionRef connection, NetworkLoadMetrics&amp; timing)
</del><ins>+void ResourceHandle::getConnectionTimingData(CFURLConnectionRef connection, NetworkLoadTiming&amp; timing)
</ins><span class="cx"> {
</span><span class="cx">     copyTimingData((__bridge NSDictionary*)adoptCF(_CFURLConnectionCopyTimingData(connection)).get(), timing);
</span><span class="cx"> }
</span><span class="lines">@@ -743,7 +743,7 @@
</span><span class="cx">     
</span><span class="cx"> #else
</span><span class="cx">     
</span><del>-void ResourceHandle::getConnectionTimingData(NSURLConnection *connection, NetworkLoadMetrics&amp; timing)
</del><ins>+void ResourceHandle::getConnectionTimingData(NSURLConnection *connection, NetworkLoadTiming&amp; timing)
</ins><span class="cx"> {
</span><span class="cx">     copyTimingData([connection _timingData], timing);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkmacWebCoreResourceHandleAsDelegatemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx">     ResourceResponse resourceResponse(response);
</span><span class="cx">     resourceResponse.setSource(ResourceResponse::Source::Network);
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    ResourceHandle::getConnectionTimingData(connection, resourceResponse.deprecatedNetworkLoadMetrics());
</del><ins>+    ResourceHandle::getConnectionTimingData(connection, resourceResponse.networkLoadTiming());
</ins><span class="cx"> #else
</span><span class="cx">     UNUSED_PARAM(connection);
</span><span class="cx"> #endif
</span><span class="lines">@@ -215,7 +215,7 @@
</span><span class="cx">     if (!m_handle || !m_handle-&gt;client())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_handle-&gt;client()-&gt;didFinishLoading(m_handle);
</del><ins>+    m_handle-&gt;client()-&gt;didFinishLoading(m_handle, 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkmacWebCoreResourceHandleAsOperationQueueDelegatemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx">         
</span><span class="cx">         ResourceResponse resourceResponse(r);
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-        ResourceHandle::getConnectionTimingData(connection, resourceResponse.deprecatedNetworkLoadMetrics());
</del><ins>+        ResourceHandle::getConnectionTimingData(connection, resourceResponse.networkLoadTiming());
</ins><span class="cx"> #else
</span><span class="cx">         UNUSED_PARAM(connection);
</span><span class="cx"> #endif
</span><span class="lines">@@ -274,7 +274,7 @@
</span><span class="cx">         if (!m_handle || !m_handle-&gt;client())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        m_handle-&gt;client()-&gt;didFinishLoading(m_handle);
</del><ins>+        m_handle-&gt;client()-&gt;didFinishLoading(m_handle, 0);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupResourceHandleSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -68,6 +68,9 @@
</span><span class="cx"> static void cleanupSoupRequestOperation(ResourceHandle*, bool isDestroying = false);
</span><span class="cx"> static void sendRequestCallback(GObject*, GAsyncResult*, gpointer);
</span><span class="cx"> static void readCallback(GObject*, GAsyncResult*, gpointer);
</span><ins>+#if ENABLE(WEB_TIMING)
+static double milisecondsSinceRequest(double requestTime);
+#endif
</ins><span class="cx"> static void continueAfterDidReceiveResponse(ResourceHandle*);
</span><span class="cx"> 
</span><span class="cx"> ResourceHandleInternal::~ResourceHandleInternal()
</span><span class="lines">@@ -244,7 +247,7 @@
</span><span class="cx">     if (!handle || handle-&gt;cancelledOrClientless())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    handle-&gt;m_requestTime = MonotonicTime::now();
</del><ins>+    handle-&gt;m_requestTime = monotonicallyIncreasingTime();
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -465,7 +468,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!d-&gt;m_inputStream) {
</span><del>-        handle-&gt;client()-&gt;didFinishLoading(handle.get());
</del><ins>+        handle-&gt;client()-&gt;didFinishLoading(handle.get(), 0);
</ins><span class="cx">         cleanupSoupRequestOperation(handle.get());
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -527,7 +530,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    d-&gt;m_response.deprecatedNetworkLoadMetrics().responseStart = MonotonicTime::now() - handle-&gt;m_requestTime;
</del><ins>+    d-&gt;m_response.networkLoadTiming().responseStart = milisecondsSinceRequest(handle-&gt;m_requestTime);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (soupMessage &amp;&amp; d-&gt;m_response.isMultipart())
</span><span class="lines">@@ -564,9 +567,14 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><ins>+static double milisecondsSinceRequest(double requestTime)
+{
+    return (monotonicallyIncreasingTime() - requestTime) * 1000.0;
+}
+
</ins><span class="cx"> void ResourceHandle::didStartRequest()
</span><span class="cx"> {
</span><del>-    getInternal()-&gt;m_response.deprecatedNetworkLoadMetrics().requestStart = MonotonicTime::now() - m_requestTime;
</del><ins>+    getInternal()-&gt;m_response.networkLoadTiming().requestStart = milisecondsSinceRequest(m_requestTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if SOUP_CHECK_VERSION(2, 49, 91)
</span><span class="lines">@@ -586,24 +594,24 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ResourceHandleInternal* d = handle-&gt;getInternal();
</span><del>-    Seconds deltaTime = MonotonicTime::now() - handle-&gt;m_requestTime;
</del><ins>+    double deltaTime = milisecondsSinceRequest(handle-&gt;m_requestTime);
</ins><span class="cx">     switch (event) {
</span><span class="cx">     case G_SOCKET_CLIENT_RESOLVING:
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupStart = deltaTime;
</del><ins>+        d-&gt;m_response.networkLoadTiming().domainLookupStart = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_RESOLVED:
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupEnd = deltaTime;
</del><ins>+        d-&gt;m_response.networkLoadTiming().domainLookupEnd = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_CONNECTING:
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().connectStart = deltaTime;
-        if (d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupStart != Seconds(-1)) {
</del><ins>+        d-&gt;m_response.networkLoadTiming().connectStart = deltaTime;
+        if (d-&gt;m_response.networkLoadTiming().domainLookupStart != -1) {
</ins><span class="cx">             // WebCore/inspector/front-end/RequestTimingView.js assumes
</span><span class="cx">             // that DNS time is included in connection time so must
</span><span class="cx">             // substract here the DNS delta that will be added later (see
</span><span class="cx">             // WebInspector.RequestTimingView.createTimingTable in the
</span><span class="cx">             // file above for more details).
</span><del>-            d-&gt;m_response.deprecatedNetworkLoadMetrics().connectStart -=
-                d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupEnd - d-&gt;m_response.deprecatedNetworkLoadMetrics().domainLookupStart;
</del><ins>+            d-&gt;m_response.networkLoadTiming().connectStart -=
+                d-&gt;m_response.networkLoadTiming().domainLookupEnd - d-&gt;m_response.networkLoadTiming().domainLookupStart;
</ins><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_CONNECTED:
</span><span class="lines">@@ -615,12 +623,12 @@
</span><span class="cx">     case G_SOCKET_CLIENT_PROXY_NEGOTIATED:
</span><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_TLS_HANDSHAKING:
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().secureConnectionStart = deltaTime;
</del><ins>+        d-&gt;m_response.networkLoadTiming().secureConnectionStart = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_TLS_HANDSHAKED:
</span><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_COMPLETE:
</span><del>-        d-&gt;m_response.deprecatedNetworkLoadMetrics().connectEnd = deltaTime;
</del><ins>+        d-&gt;m_response.networkLoadTiming().connectEnd = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     default:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="lines">@@ -768,7 +776,7 @@
</span><span class="cx"> void ResourceHandle::sendPendingRequest()
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    m_requestTime = MonotonicTime::now();
</del><ins>+    m_requestTime = monotonicallyIncreasingTime();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (d-&gt;m_firstRequest.timeoutInterval() &gt; 0)
</span><span class="lines">@@ -1012,7 +1020,7 @@
</span><span class="cx"> 
</span><span class="cx">         g_input_stream_close(d-&gt;m_inputStream.get(), 0, 0);
</span><span class="cx"> 
</span><del>-        handle-&gt;client()-&gt;didFinishLoading(handle.get());
</del><ins>+        handle-&gt;client()-&gt;didFinishLoading(handle.get(), 0);
</ins><span class="cx">         cleanupSoupRequestOperation(handle.get());
</span><span class="cx">         return;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerScriptLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerScriptLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerScriptLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -144,7 +144,7 @@
</span><span class="cx">     m_script.append(m_decoder-&gt;decode(data, len));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WorkerScriptLoader::didFinishLoading(unsigned long identifier)
</del><ins>+void WorkerScriptLoader::didFinishLoading(unsigned long identifier, double)
</ins><span class="cx"> {
</span><span class="cx">     if (m_failed) {
</span><span class="cx">         notifyError();
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerScriptLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerScriptLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerScriptLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> 
</span><span class="cx">         void didReceiveResponse(unsigned long identifier, const ResourceResponse&amp;) override;
</span><span class="cx">         void didReceiveData(const char* data, int dataLength) override;
</span><del>-        void didFinishLoading(unsigned long identifier) override;
</del><ins>+        void didFinishLoading(unsigned long identifier, double) override;
</ins><span class="cx">         void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     private:
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1029,7 +1029,7 @@
</span><span class="cx">     networkError();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void XMLHttpRequest::didFinishLoading(unsigned long identifier)
</del><ins>+void XMLHttpRequest::didFinishLoading(unsigned long identifier, double)
</ins><span class="cx"> {
</span><span class="cx">     if (m_error)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">     void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
</span><span class="cx">     void didReceiveResponse(unsigned long identifier, const ResourceResponse&amp;) override;
</span><span class="cx">     void didReceiveData(const char* data, int dataLength) override;
</span><del>-    void didFinishLoading(unsigned long identifier) override;
</del><ins>+    void didFinishLoading(unsigned long identifier, double finishTime) override;
</ins><span class="cx">     void didFail(const ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     bool responseIsXML() const;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/ChangeLog        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-02-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r212944.
+
+        Caused a lot of failures on the debug bots
+
+        Reverted changeset:
+
+        &quot;[Resource Timing] Gather timing information with reliable
+        responseEnd time&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=168351
+        http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, fix the internal build
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     m_download.didReceiveData(buffer-&gt;size());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void BlobDownloadClient::didFinishLoading(ResourceHandle*)
</del><ins>+void BlobDownloadClient::didFinishLoading(ResourceHandle*, double)
</ins><span class="cx"> {
</span><span class="cx">     closeFile(m_destinationFile);
</span><span class="cx">     m_download.didFinish();
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsBlobDownloadClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/BlobDownloadClient.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     // ResourceHandleClient
</span><span class="cx">     void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&amp;&amp;) final;
</span><span class="cx">     void didReceiveBuffer(WebCore::ResourceHandle*, Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) final;
</span><del>-    void didFinishLoading(WebCore::ResourceHandle*) final;
</del><ins>+    void didFinishLoading(WebCore::ResourceHandle*, double finishTime) final;
</ins><span class="cx">     void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&amp;) final;
</span><span class="cx">     bool usesAsyncCallbacks() final { return true; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessDownloadsPendingDownloadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx">     void willSendRedirectedRequest(WebCore::ResourceRequest&amp;&amp;, WebCore::ResourceRequest&amp;&amp; redirectRequest, WebCore::ResourceResponse&amp;&amp; redirectResponse) override;
</span><span class="cx">     ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&amp;&amp;) override { return ShouldContinueDidReceiveResponse::No; };
</span><span class="cx">     void didReceiveBuffer(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) override { };
</span><del>-    void didFinishLoading(const WebCore::NetworkLoadMetrics&amp;) override { };
</del><ins>+    void didFinishLoading(double finishTime) override { };
</ins><span class="cx">     void didFailLoading(const WebCore::ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     // MessageSender.
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkDataTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #include &quot;SandboxExtension.h&quot;
</span><span class="cx"> #include &lt;WebCore/Credential.h&gt;
</span><span class="cx"> #include &lt;WebCore/FrameLoaderTypes.h&gt;
</span><del>-#include &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #include &lt;WebCore/ResourceHandleTypes.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceLoaderOptions.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceRequest.h&gt;
</span><span class="lines">@@ -64,17 +63,11 @@
</span><span class="cx">     virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp;) = 0;
</span><span class="cx">     virtual void didReceiveResponseNetworkSession(WebCore::ResourceResponse&amp;&amp;, ResponseCompletionHandler&amp;&amp;) = 0;
</span><span class="cx">     virtual void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;) = 0;
</span><del>-    virtual void didCompleteWithError(const WebCore::ResourceError&amp;, const WebCore::NetworkLoadMetrics&amp;) = 0;
</del><ins>+    virtual void didCompleteWithError(const WebCore::ResourceError&amp;) = 0;
</ins><span class="cx">     virtual void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) = 0;
</span><span class="cx">     virtual void wasBlocked() = 0;
</span><span class="cx">     virtual void cannotShowURL() = 0;
</span><del>-
-    void didCompleteWithError(const WebCore::ResourceError&amp; error)
-    {
-        WebCore::NetworkLoadMetrics emptyMetrics;
-        didCompleteWithError(error, emptyMetrics);
-    }
-
</del><ins>+    
</ins><span class="cx">     virtual ~NetworkDataTaskClient() { }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -199,8 +199,7 @@
</span><span class="cx">     auto redirectCompletionHandler = std::exchange(m_redirectCompletionHandler, nullptr);
</span><span class="cx">     ASSERT(redirectCompletionHandler);
</span><span class="cx">     if (m_currentRequest.isNull()) {
</span><del>-        NetworkLoadMetrics emptyMetrics;
-        didCompleteWithError(cancelledError(m_currentRequest), emptyMetrics);
</del><ins>+        didCompleteWithError(cancelledError(m_currentRequest));
</ins><span class="cx">         if (redirectCompletionHandler)
</span><span class="cx">             redirectCompletionHandler({ });
</span><span class="cx">         return;
</span><span class="lines">@@ -409,7 +408,7 @@
</span><span class="cx">     m_client.get().didReceiveBuffer(WTFMove(buffer), size);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkLoad::didCompleteWithError(const ResourceError&amp; error, const WebCore::NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void NetworkLoad::didCompleteWithError(const ResourceError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_throttle);
</span><span class="cx"> 
</span><span class="lines">@@ -419,7 +418,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (error.isNull())
</span><del>-        m_client.get().didFinishLoading(networkLoadMetrics);
</del><ins>+        m_client.get().didFinishLoading(WTF::monotonicallyIncreasingTime());
</ins><span class="cx">     else
</span><span class="cx">         m_client.get().didFailLoading(error);
</span><span class="cx"> }
</span><span class="lines">@@ -470,11 +469,10 @@
</span><span class="cx">     m_client.get().didReceiveBuffer(WTFMove(buffer), reportedEncodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkLoad::didFinishLoading(ResourceHandle* handle)
</del><ins>+void NetworkLoad::didFinishLoading(ResourceHandle* handle, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT_UNUSED(handle, handle == m_handle);
</span><del>-    NetworkLoadMetrics emptyMetrics;
-    m_client.get().didFinishLoading(emptyMetrics);
</del><ins>+    m_client.get().didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkLoad::didFail(ResourceHandle* handle, const ResourceError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&amp;&amp;) final;
</span><span class="cx">     void didReceiveData(WebCore::ResourceHandle*, const char*, unsigned, int encodedDataLength) final;
</span><span class="cx">     void didReceiveBuffer(WebCore::ResourceHandle*, Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) final;
</span><del>-    void didFinishLoading(WebCore::ResourceHandle*) final;
</del><ins>+    void didFinishLoading(WebCore::ResourceHandle*, double finishTime) final;
</ins><span class="cx">     void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&amp;) final;
</span><span class="cx">     void wasBlocked(WebCore::ResourceHandle*) final;
</span><span class="cx">     void cannotShowURL(WebCore::ResourceHandle*) final;
</span><span class="lines">@@ -133,7 +133,7 @@
</span><span class="cx">     void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp;) final;
</span><span class="cx">     void didReceiveResponseNetworkSession(WebCore::ResourceResponse&amp;&amp;, ResponseCompletionHandler&amp;&amp;) final;
</span><span class="cx">     void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;) final;
</span><del>-    void didCompleteWithError(const WebCore::ResourceError&amp;, const WebCore::NetworkLoadMetrics&amp;) final;
</del><ins>+    void didCompleteWithError(const WebCore::ResourceError&amp;) final;
</ins><span class="cx">     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;
</span><span class="cx">     void wasBlocked() final;
</span><span class="cx">     void cannotShowURL() final;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoadClient.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoadClient.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoadClient.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><del>-class NetworkLoadMetrics;
</del><span class="cx"> class ProtectionSpace;
</span><span class="cx"> class SharedBuffer;
</span><span class="cx"> }
</span><span class="lines">@@ -56,7 +55,7 @@
</span><span class="cx">     enum class ShouldContinueDidReceiveResponse { No, Yes };
</span><span class="cx">     virtual ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&amp;&amp;) = 0;
</span><span class="cx">     virtual void didReceiveBuffer(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) = 0;
</span><del>-    virtual void didFinishLoading(const WebCore::NetworkLoadMetrics&amp;) = 0;
</del><ins>+    virtual void didFinishLoading(double finishTime) = 0;
</ins><span class="cx">     virtual void didFailLoading(const WebCore::ResourceError&amp;) = 0;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx"> #include &lt;WebCore/CertificateInfo.h&gt;
</span><span class="cx"> #include &lt;WebCore/DiagnosticLoggingKeys.h&gt;
</span><span class="cx"> #include &lt;WebCore/HTTPHeaderNames.h&gt;
</span><del>-#include &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #include &lt;WebCore/ProtectionSpace.h&gt;
</span><span class="cx"> #include &lt;WebCore/SharedBuffer.h&gt;
</span><span class="cx"> #include &lt;WebCore/SynchronousLoaderClient.h&gt;
</span><span class="lines">@@ -391,7 +390,7 @@
</span><span class="cx">     sendBuffer(buffer, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkResourceLoader::didFinishLoading(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void NetworkResourceLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     RELEASE_LOG_IF_ALLOWED(&quot;didFinishLoading: (pageID = %&quot; PRIu64 &quot;, frameID = %&quot; PRIu64 &quot;, resourceID = %&quot; PRIu64 &quot;)&quot;, m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier);
</span><span class="cx"> 
</span><span class="lines">@@ -412,7 +411,7 @@
</span><span class="cx">             // FIXME: Pass a real value or remove the encoded data size feature.
</span><span class="cx">             sendBuffer(*m_bufferedData, -1);
</span><span class="cx">         }
</span><del>-        send(Messages::WebResourceLoader::DidFinishResourceLoad(networkLoadMetrics));
</del><ins>+        send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(NETWORK_CACHE)
</span><span class="lines">@@ -607,16 +606,13 @@
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><span class="cx">     if (!entry-&gt;shareableResourceHandle().isNull()) {
</span><del>-        send(Messages::WebResourceLoader::DidReceiveResource(entry-&gt;shareableResourceHandle()));
</del><ins>+        send(Messages::WebResourceLoader::DidReceiveResource(entry-&gt;shareableResourceHandle(), currentTime()));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    WebCore::NetworkLoadMetrics networkLoadMetrics;
-    networkLoadMetrics.markComplete();
-
</del><span class="cx">     sendBuffer(*entry-&gt;buffer(), entry-&gt;buffer()-&gt;size());
</span><del>-    send(Messages::WebResourceLoader::DidFinishResourceLoad(networkLoadMetrics));
</del><ins>+    send(Messages::WebResourceLoader::DidFinishResourceLoad(currentTime()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkResourceLoader::validateCacheEntry(std::unique_ptr&lt;NetworkCache::Entry&gt; entry)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">     void willSendRedirectedRequest(WebCore::ResourceRequest&amp;&amp;, WebCore::ResourceRequest&amp;&amp; redirectRequest, WebCore::ResourceResponse&amp;&amp;) override;
</span><span class="cx">     ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&amp;&amp;) override;
</span><span class="cx">     void didReceiveBuffer(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) override;
</span><del>-    void didFinishLoading(const WebCore::NetworkLoadMetrics&amp;) override;
</del><ins>+    void didFinishLoading(double finishTime) override;
</ins><span class="cx">     void didFailLoading(const WebCore::ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     void convertToDownload(DownloadID, const WebCore::ResourceRequest&amp;, const WebCore::ResourceResponse&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessPingLoadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/PingLoad.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/PingLoad.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/PingLoad.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">         delete this;
</span><span class="cx">     }
</span><span class="cx">     void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;) final { ASSERT_NOT_REACHED(); }
</span><del>-    void didCompleteWithError(const WebCore::ResourceError&amp;, const WebCore::NetworkLoadMetrics&amp;) final { delete this; }
</del><ins>+    void didCompleteWithError(const WebCore::ResourceError&amp;) final { delete this; }
</ins><span class="cx">     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final { }
</span><span class="cx">     void wasBlocked() final { delete this; }
</span><span class="cx">     void cannotShowURL() final { delete this; }
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SpeculativeLoad::didFinishLoading(const WebCore::NetworkLoadMetrics&amp;)
</del><ins>+void SpeculativeLoad::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     if (m_didComplete)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">     void willSendRedirectedRequest(WebCore::ResourceRequest&amp;&amp;, WebCore::ResourceRequest&amp;&amp; redirectRequest, WebCore::ResourceResponse&amp;&amp; redirectResponse) override;
</span><span class="cx">     ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&amp;&amp;) override;
</span><span class="cx">     void didReceiveBuffer(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;, int reportedEncodedDataLength) override;
</span><del>-    void didFinishLoading(const WebCore::NetworkLoadMetrics&amp;) override;
</del><ins>+    void didFinishLoading(double finishTime) override;
</ins><span class="cx">     void didFailLoading(const WebCore::ResourceError&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     void didComplete();
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;NetworkDataTask.h&quot;
</span><del>-#include &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> OBJC_CLASS NSURLSessionDataTask;
</span><span class="lines">@@ -51,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx">     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend);
</span><span class="cx">     void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp;);
</span><del>-    void didCompleteWithError(const WebCore::ResourceError&amp;, const WebCore::NetworkLoadMetrics&amp;);
</del><ins>+    void didCompleteWithError(const WebCore::ResourceError&amp;);
</ins><span class="cx">     void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     void willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp;, RedirectCompletionHandler&amp;&amp;);
</span><span class="lines">@@ -68,8 +67,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp;) override;
</span><span class="cx"> 
</span><del>-    WebCore::NetworkLoadMetrics&amp; networkLoadMetrics() { return m_networkLoadMetrics; }
-
</del><span class="cx"> private:
</span><span class="cx">     NetworkDataTaskCocoa(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
</span><span class="cx"> 
</span><span class="lines">@@ -77,7 +74,6 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;SandboxExtension&gt; m_sandboxExtension;
</span><span class="cx">     RetainPtr&lt;NSURLSessionDataTask&gt; m_task;
</span><del>-    WebCore::NetworkLoadMetrics m_networkLoadMetrics;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebCore::Credential serverTrustCredential(const WebCore::AuthenticationChallenge&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -150,10 +150,10 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError&amp; error, const WebCore::NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><del>-        m_client-&gt;didCompleteWithError(error, networkLoadMetrics);
</del><ins>+        m_client-&gt;didCompleteWithError(error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskCocoa::didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp; data)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> #include &quot;DownloadID.h&quot;
</span><span class="cx"> #include &quot;NetworkDataTaskCocoa.h&quot;
</span><span class="cx"> #include &quot;NetworkSession.h&quot;
</span><del>-#include &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -41,6 +41,7 @@
</span><span class="cx"> #import &lt;WebCore/CFNetworkSPI.h&gt;
</span><span class="cx"> #import &lt;WebCore/Credential.h&gt;
</span><span class="cx"> #import &lt;WebCore/FrameLoaderTypes.h&gt;
</span><ins>+#import &lt;WebCore/NetworkLoadTiming.h&gt;
</ins><span class="cx"> #import &lt;WebCore/NetworkStorageSession.h&gt;
</span><span class="cx"> #import &lt;WebCore/NotImplemented.h&gt;
</span><span class="cx"> #import &lt;WebCore/ResourceError.h&gt;
</span><span class="lines">@@ -241,7 +242,7 @@
</span><span class="cx">     LOG(NetworkSession, &quot;%llu didCompleteWithError %@&quot;, task.taskIdentifier, error);
</span><span class="cx">     auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
</span><span class="cx">     if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier, storedCredentials))
</span><del>-        networkDataTask-&gt;didCompleteWithError(error, networkDataTask-&gt;networkLoadMetrics());
</del><ins>+        networkDataTask-&gt;didCompleteWithError(error);
</ins><span class="cx">     else if (error) {
</span><span class="cx">         auto downloadID = _session-&gt;takeDownloadID(task.taskIdentifier);
</span><span class="cx">         if (downloadID.downloadID()) {
</span><span class="lines">@@ -261,39 +262,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
-{
-    if (!_session)
-        return;
-
-    LOG(NetworkSession, &quot;%llu didFinishCollectingMetrics&quot;, task.taskIdentifier);
-    auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
-    if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier, storedCredentials)) {
-        NSURLSessionTaskTransactionMetrics *m = metrics.transactionMetrics.lastObject;
-        NSDate *fetchStartDate = m.fetchStartDate;
-        NSTimeInterval domainLookupStartInterval = m.domainLookupStartDate ? [m.domainLookupStartDate timeIntervalSinceDate:fetchStartDate] : -1;
-        NSTimeInterval domainLookupEndInterval = m.domainLookupEndDate ? [m.domainLookupEndDate timeIntervalSinceDate:fetchStartDate] : -1;
-        NSTimeInterval connectStartInterval = m.connectStartDate ? [m.connectStartDate timeIntervalSinceDate:fetchStartDate] : -1;
-        NSTimeInterval secureConnectionStartInterval = m.secureConnectionStartDate ? [m.secureConnectionStartDate timeIntervalSinceDate:fetchStartDate] : -1;
-        NSTimeInterval connectEndInterval = m.connectEndDate ? [m.connectEndDate timeIntervalSinceDate:fetchStartDate] : -1;
-        NSTimeInterval requestStartInterval = [m.requestStartDate timeIntervalSinceDate:fetchStartDate];
-        NSTimeInterval responseStartInterval = [m.responseStartDate timeIntervalSinceDate:fetchStartDate];
-        NSTimeInterval responseEndInterval = [m.responseEndDate timeIntervalSinceDate:fetchStartDate];
-
-        auto&amp; networkLoadMetrics = networkDataTask-&gt;networkLoadMetrics();
-        networkLoadMetrics.domainLookupStart = Seconds(domainLookupStartInterval);
-        networkLoadMetrics.domainLookupEnd = Seconds(domainLookupEndInterval);
-        networkLoadMetrics.connectStart = Seconds(connectStartInterval);
-        networkLoadMetrics.secureConnectionStart = Seconds(secureConnectionStartInterval);
-        networkLoadMetrics.connectEnd = Seconds(connectEndInterval);
-        networkLoadMetrics.requestStart = Seconds(requestStartInterval);
-        networkLoadMetrics.responseStart = Seconds(responseStartInterval);
-        networkLoadMetrics.responseEnd = Seconds(responseEndInterval);
-        networkLoadMetrics.markComplete();
-        networkLoadMetrics.protocol = String(m.networkProtocolName);
-    }
-}
-
</del><span class="cx"> - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
</span><span class="cx"> {
</span><span class="cx">     if (!_session) {
</span><span class="lines">@@ -319,10 +287,7 @@
</span><span class="cx">         // all the fields when sending the response to the WebContent process over IPC.
</span><span class="cx">         resourceResponse.disableLazyInitialization();
</span><span class="cx"> 
</span><del>-        // FIXME: This cannot be eliminated until other code no longer relies on ResourceResponse's
-        // NetworkLoadMetrics. For example, PerformanceTiming.
-        copyTimingData([dataTask _timingData], resourceResponse.deprecatedNetworkLoadMetrics());
-
</del><ins>+        copyTimingData([dataTask _timingData], resourceResponse.networkLoadTiming());
</ins><span class="cx">         auto completionHandlerCopy = Block_copy(completionHandler);
</span><span class="cx">         networkDataTask-&gt;didReceiveResponse(WTFMove(resourceResponse), [completionHandlerCopy, taskIdentifier](WebCore::PolicyAction policyAction) {
</span><span class="cx">             LOG(NetworkSession, &quot;%llu didReceiveResponse completionHandler (%d)&quot;, taskIdentifier, policyAction);
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     auto request = requestWithCredentials;
</span><span class="cx">     if (request.url().protocolIsInHTTPFamily()) {
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-        m_startTime = MonotonicTime::now();
</del><ins>+        m_startTime = monotonicallyIncreasingTimeMS();
</ins><span class="cx"> #endif
</span><span class="cx">         auto url = request.url();
</span><span class="cx">         if (m_storedCredentials == AllowStoredCredentials) {
</span><span class="lines">@@ -283,7 +283,7 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</span><span class="cx">     invalidateAndCancel();
</span><del>-    dispatchDidCompleteWithError(ResourceError::timeoutError(m_firstRequest.url()));
</del><ins>+    m_client-&gt;didCompleteWithError(ResourceError::timeoutError(m_firstRequest.url()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::startTimeout()
</span><span class="lines">@@ -341,7 +341,7 @@
</span><span class="cx">             m_inputStream = WTFMove(inputStream);
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-        m_networkLoadMetrics.responseStart = MonotonicTime::now() - m_startTime;
</del><ins>+        m_response.networkLoadTiming().responseStart = monotonicallyIncreasingTimeMS() - m_startTime;
</ins><span class="cx"> #endif
</span><span class="cx">     } else {
</span><span class="cx">         m_response.setURL(m_firstRequest.url());
</span><span class="lines">@@ -362,19 +362,6 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_response.isNull());
</span><span class="cx"> 
</span><del>-#if ENABLE(WEB_TIMING)
-    // FIXME: Remove this once nobody depends on deprecatedNetworkLoadMetrics.
-    NetworkLoadMetrics&amp; deprecatedResponseMetrics = m_response.deprecatedNetworkLoadMetrics();
-    deprecatedResponseMetrics.responseStart = m_networkLoadMetrics.responseStart;
-    deprecatedResponseMetrics.domainLookupStart = m_networkLoadMetrics.domainLookupStart;
-    deprecatedResponseMetrics.domainLookupEnd = m_networkLoadMetrics.domainLookupEnd;
-    deprecatedResponseMetrics.connectStart = m_networkLoadMetrics.connectStart;
-    deprecatedResponseMetrics.secureConnectionStart = m_networkLoadMetrics.secureConnectionStart;
-    deprecatedResponseMetrics.connectEnd = m_networkLoadMetrics.connectEnd;
-    deprecatedResponseMetrics.requestStart = m_networkLoadMetrics.requestStart;
-    deprecatedResponseMetrics.responseStart = m_networkLoadMetrics.responseStart;
-#endif
-
</del><span class="cx">     didReceiveResponse(ResourceResponse(m_response), [this, protectedThis = makeRef(*this)](PolicyAction policyAction) {
</span><span class="cx">         if (m_state == State::Canceling || m_state == State::Completed) {
</span><span class="cx">             clearRequest();
</span><span class="lines">@@ -401,16 +388,6 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTaskSoup::dispatchDidCompleteWithError(const ResourceError&amp; error)
-{
-#if ENABLE(WEB_TIMING)
-    m_networkLoadMetrics.responseEnd = MonotonicTime::now() - m_startTime;
-    m_networkLoadMetrics.markComplete();
-#endif
-
-    m_client-&gt;didCompleteWithError(error, m_networkLoadMetrics);
-}
-
</del><span class="cx"> void NetworkDataTaskSoup::tlsErrorsChangedCallback(SoupMessage* soupMessage, GParamSpec*, NetworkDataTaskSoup* task)
</span><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="lines">@@ -431,7 +408,7 @@
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</span><span class="cx">         invalidateAndCancel();
</span><del>-        dispatchDidCompleteWithError(error);
</del><ins>+        m_client-&gt;didCompleteWithError(error);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -683,10 +660,8 @@
</span><span class="cx">         auto request = newRequest;
</span><span class="cx">         if (request.url().protocolIsInHTTPFamily()) {
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-            if (isCrossOrigin) {
-                m_startTime = MonotonicTime::now();
-                m_networkLoadMetrics.reset();
-            }
</del><ins>+            if (isCrossOrigin)
+                m_startTime = monotonicallyIncreasingTimeMS();
</ins><span class="cx"> #endif
</span><span class="cx">             applyAuthenticationToRequest(request);
</span><span class="cx">         }
</span><span class="lines">@@ -762,7 +737,7 @@
</span><span class="cx"> 
</span><span class="cx">     clearRequest();
</span><span class="cx">     ASSERT(m_client);
</span><del>-    dispatchDidCompleteWithError({ });
</del><ins>+    m_client-&gt;didCompleteWithError({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::requestNextPartCallback(SoupMultipartInputStream* multipartInputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
</span><span class="lines">@@ -815,7 +790,7 @@
</span><span class="cx">     ASSERT(m_multipartInputStream);
</span><span class="cx">     g_input_stream_close(G_INPUT_STREAM(m_multipartInputStream.get()), nullptr, nullptr);
</span><span class="cx">     clearRequest();
</span><del>-    dispatchDidCompleteWithError({ });
</del><ins>+    m_client-&gt;didCompleteWithError({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::gotHeadersCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
</span><span class="lines">@@ -999,7 +974,7 @@
</span><span class="cx">     clearRequest();
</span><span class="cx">     cleanDownloadFiles();
</span><span class="cx">     if (m_client)
</span><del>-        dispatchDidCompleteWithError(error);
</del><ins>+        m_client-&gt;didCompleteWithError(error);
</ins><span class="cx">     else {
</span><span class="cx">         auto* download = NetworkProcess::singleton().downloadManager().download(m_pendingDownloadID);
</span><span class="cx">         ASSERT(download);
</span><span class="lines">@@ -1028,7 +1003,7 @@
</span><span class="cx"> 
</span><span class="cx">     clearRequest();
</span><span class="cx">     ASSERT(m_client);
</span><del>-    dispatchDidCompleteWithError(error);
</del><ins>+    m_client-&gt;didCompleteWithError(error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="lines">@@ -1043,16 +1018,17 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::networkEvent(GSocketClientEvent event)
</span><span class="cx"> {
</span><del>-    Seconds deltaTime = MonotonicTime::now() - m_startTime;
</del><ins>+    double deltaTime = monotonicallyIncreasingTimeMS() - m_startTime;
+    auto&amp; loadTiming = m_response.networkLoadTiming();
</ins><span class="cx">     switch (event) {
</span><span class="cx">     case G_SOCKET_CLIENT_RESOLVING:
</span><del>-        m_networkLoadMetrics.domainLookupStart = deltaTime;
</del><ins>+        loadTiming.domainLookupStart = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_RESOLVED:
</span><del>-        m_networkLoadMetrics.domainLookupEnd = deltaTime;
</del><ins>+        loadTiming.domainLookupEnd = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_CONNECTING:
</span><del>-        m_networkLoadMetrics.connectStart = deltaTime;
</del><ins>+        loadTiming.connectStart = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_CONNECTED:
</span><span class="cx">         // Web Timing considers that connection time involves dns, proxy &amp; TLS negotiation...
</span><span class="lines">@@ -1063,12 +1039,12 @@
</span><span class="cx">     case G_SOCKET_CLIENT_PROXY_NEGOTIATED:
</span><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_TLS_HANDSHAKING:
</span><del>-        m_networkLoadMetrics.secureConnectionStart = deltaTime;
</del><ins>+        loadTiming.secureConnectionStart = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_TLS_HANDSHAKED:
</span><span class="cx">         break;
</span><span class="cx">     case G_SOCKET_CLIENT_COMPLETE:
</span><del>-        m_networkLoadMetrics.connectEnd = deltaTime;
</del><ins>+        loadTiming.connectEnd = deltaTime;
</ins><span class="cx">         break;
</span><span class="cx">     default:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="lines">@@ -1101,7 +1077,7 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::didStartRequest()
</span><span class="cx"> {
</span><del>-    m_networkLoadMetrics.requestStart = MonotonicTime::now() - m_startTime;
</del><ins>+    m_response.networkLoadTiming().requestStart = monotonicallyIncreasingTimeMS() - m_startTime;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::restartedCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
</span><span class="lines">@@ -1117,8 +1093,7 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkDataTaskSoup::didRestart()
</span><span class="cx"> {
</span><del>-    m_startTime = MonotonicTime::now();
-    m_networkLoadMetrics.reset();
</del><ins>+    m_startTime = monotonicallyIncreasingTimeMS();
</ins><span class="cx"> }
</span><span class="cx"> #endif // ENABLE(WEB_TIMING)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSouph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;NetworkDataTask.h&quot;
</span><del>-#include &lt;WebCore/NetworkLoadMetrics.h&gt;
</del><span class="cx"> #include &lt;WebCore/ProtectionSpace.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceResponse.h&gt;
</span><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span><span class="lines">@@ -64,7 +63,6 @@
</span><span class="cx">     static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTaskSoup*);
</span><span class="cx">     void didSendRequest(GRefPtr&lt;GInputStream&gt;&amp;&amp;);
</span><span class="cx">     void dispatchDidReceiveResponse();
</span><del>-    void dispatchDidCompleteWithError(const WebCore::ResourceError&amp;);
</del><span class="cx"> 
</span><span class="cx">     static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTaskSoup*);
</span><span class="cx">     void tlsErrorsChanged();
</span><span class="lines">@@ -138,8 +136,7 @@
</span><span class="cx">     GRefPtr&lt;GOutputStream&gt; m_downloadOutputStream;
</span><span class="cx">     bool m_allowOverwriteDownload { false };
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-    WebCore::NetworkLoadMetrics m_networkLoadMetrics;
-    MonotonicTime m_startTime;
</del><ins>+    double m_startTime { 0 };
</ins><span class="cx"> #endif
</span><span class="cx">     RunLoop::Timer&lt;NetworkDataTaskSoup&gt; m_timeoutSource;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessNetworkWebResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -143,16 +143,12 @@
</span><span class="cx">     m_coreLoader-&gt;didRetrieveDerivedDataFromCache(type, buffer.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebResourceLoader::didFinishResourceLoad(const NetworkLoadMetrics&amp; networkLoadMetrics)
</del><ins>+void WebResourceLoader::didFinishResourceLoad(double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didFinishResourceLoad for '%s'&quot;, m_coreLoader-&gt;url().string().latin1().data());
</span><span class="cx">     RELEASE_LOG_IF_ALLOWED(&quot;didFinishResourceLoad: (pageID = %&quot; PRIu64 &quot;, frameID = %&quot; PRIu64 &quot;, resourceID = %&quot; PRIu64 &quot;)&quot;, m_trackingParameters.pageID, m_trackingParameters.frameID, m_trackingParameters.resourceID);
</span><span class="cx"> 
</span><del>-#if USE(NETWORK_SESSION)
-    ASSERT(networkLoadMetrics.isComplete());
-#endif
-
-    m_coreLoader-&gt;didFinishLoading(networkLoadMetrics);
</del><ins>+    m_coreLoader-&gt;didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebResourceLoader::didFailResourceLoad(const ResourceError&amp; error)
</span><span class="lines">@@ -166,7 +162,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><del>-void WebResourceLoader::didReceiveResource(const ShareableResource::Handle&amp; handle)
</del><ins>+void WebResourceLoader::didReceiveResource(const ShareableResource::Handle&amp; handle, double finishTime)
</ins><span class="cx"> {
</span><span class="cx">     LOG(Network, &quot;(WebProcess) WebResourceLoader::didReceiveResource for '%s'&quot;, m_coreLoader-&gt;url().string().latin1().data());
</span><span class="cx">     RELEASE_LOG_IF_ALLOWED(&quot;didReceiveResource: (pageID = %&quot; PRIu64 &quot;, frameID = %&quot; PRIu64 &quot;, resourceID = %&quot; PRIu64 &quot;)&quot;, m_trackingParameters.pageID, m_trackingParameters.frameID, m_trackingParameters.resourceID);
</span><span class="lines">@@ -193,8 +189,7 @@
</span><span class="cx">     if (!m_coreLoader)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    NetworkLoadMetrics emptyMetrics;
-    m_coreLoader-&gt;didFinishLoading(emptyMetrics);
</del><ins>+    m_coreLoader-&gt;didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessNetworkWebResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -23,7 +23,8 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#pragma once
</del><ins>+#ifndef WebResourceLoader_h
+#define WebResourceLoader_h
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;Connection.h&quot;
</span><span class="cx"> #include &quot;MessageSender.h&quot;
</span><span class="lines">@@ -36,7 +37,6 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><del>-class NetworkLoadMetrics;
</del><span class="cx"> class ResourceError;
</span><span class="cx"> class ResourceLoader;
</span><span class="cx"> class ResourceRequest;
</span><span class="lines">@@ -79,10 +79,10 @@
</span><span class="cx">     void didReceiveResponse(const WebCore::ResourceResponse&amp;, bool needsContinueDidReceiveResponseMessage);
</span><span class="cx">     void didReceiveData(const IPC::DataReference&amp;, int64_t encodedDataLength);
</span><span class="cx">     void didRetrieveDerivedData(const String&amp; type, const IPC::DataReference&amp;);
</span><del>-    void didFinishResourceLoad(const WebCore::NetworkLoadMetrics&amp;);
</del><ins>+    void didFinishResourceLoad(double finishTime);
</ins><span class="cx">     void didFailResourceLoad(const WebCore::ResourceError&amp;);
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><del>-    void didReceiveResource(const ShareableResource::Handle&amp;);
</del><ins>+    void didReceiveResource(const ShareableResource::Handle&amp;, double finishTime);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;WebCore::ResourceLoader&gt; m_coreLoader;
</span><span class="lines">@@ -91,3 +91,5 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><ins>+
+#endif // WebResourceLoader_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2WebProcessNetworkWebResourceLoadermessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.messages.in (212988 => 212989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.messages.in        2017-02-25 03:24:59 UTC (rev 212988)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.messages.in        2017-02-25 03:34:33 UTC (rev 212989)
</span><span class="lines">@@ -25,12 +25,12 @@
</span><span class="cx">     DidSendData(uint64_t bytesSent, uint64_t totalBytesToBeSent)
</span><span class="cx">     DidReceiveResponse(WebCore::ResourceResponse response, bool needsContinueDidReceiveResponseMessage)
</span><span class="cx">     DidReceiveData(IPC::DataReference data, int64_t encodedDataLength)
</span><del>-    DidFinishResourceLoad(WebCore::NetworkLoadMetrics networkLoadMetrics)
</del><ins>+    DidFinishResourceLoad(double finishTime)
</ins><span class="cx">     DidRetrieveDerivedData(String type, IPC::DataReference data)
</span><span class="cx">     DidFailResourceLoad(WebCore::ResourceError error)
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><span class="cx">     // DidReceiveResource is for when we have the entire resource data available at once, such as when the resource is cached in memory
</span><del>-    DidReceiveResource(WebKit::ShareableResource::Handle resource)
</del><ins>+    DidReceiveResource(WebKit::ShareableResource::Handle resource, double finishTime)
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>