<!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:
"[Resource Timing] Gather timing information with reliable
responseEnd time"
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 <cdumez@apple.com>
+
+ Unreviewed, rolling out r212944.
+
+ Caused a lot of failures on the debug bots
+
+ Reverted changeset:
+
+ "[Resource Timing] Gather timing information with reliable
+ responseEnd time"
+ https://bugs.webkit.org/show_bug.cgi?id=168351
+ http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24 Jon Lee <jonlee@apple.com>
</span><span class="cx">
</span><span class="cx"> Alias "system-ui" 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 <cdumez@apple.com>
+
+ Unreviewed, rolling out r212944.
+
+ Caused a lot of failures on the debug bots
+
+ Reverted changeset:
+
+ "[Resource Timing] Gather timing information with reliable
+ responseEnd time"
+ https://bugs.webkit.org/show_bug.cgi?id=168351
+ http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24 Alex Christensen <achristensen@webkit.org>
</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>-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-<title>Resource Timing - nextHopProtocol</title>
-<meta name="author" title="JosephPecoraro" href="mailto:joepeck@webkit.org">
-<meta name="assert" content="Resource Timing nextHopProtocol">
-<link rel="help" href="https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-nexthopprotocol">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/rt-utilities.js"></script>
-</head>
-<body>
-<h1>Resource Timing: nextHopProtocol</h1>
-<div id="log"></div>
-<script src="rt-nextHopProtocol.js"></script>
-</body>
-</html>
</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, "http/1.1");
- });
-}, "nextHopProtocol is expected to be 'http1/1'", {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("/resources/testharness.js");
-importScripts("resources/rt-utilities.js");
-
-(function() {
- if (!testNecessaryPerformanceFeatures()) {
- done();
- return;
- }
-
- importScripts("rt-nextHopProtocol.js");
-
- 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 "initiatorType" in PerformanceResourceTiming.prototype is true
</span><del>-PASS "nextHopProtocol" in PerformanceResourceTiming.prototype is true
</del><ins>+FAIL "nextHopProtocol" in PerformanceResourceTiming.prototype should be true. Was false.
</ins><span class="cx"> PASS "workerStart" in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS "redirectStart" in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS "redirectEnd" 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] "initiatorType" in PerformanceResourceTiming.prototype is true
</span><del>-PASS [Worker] "nextHopProtocol" in PerformanceResourceTiming.prototype is true
</del><ins>+FAIL [Worker] "nextHopProtocol" in PerformanceResourceTiming.prototype should be true. Was false.
</ins><span class="cx"> PASS [Worker] "workerStart" in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS [Worker] "redirectStart" in PerformanceResourceTiming.prototype is true
</span><span class="cx"> PASS [Worker] "redirectEnd" 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("PerformanceResourceTiming");
</span><span class="cx"> shouldBeDefined("PerformanceResourceTiming");
</span><span class="cx"> shouldBeTrue(`"initiatorType" in PerformanceResourceTiming.prototype`);
</span><del>-shouldBeTrue(`"nextHopProtocol" in PerformanceResourceTiming.prototype`);
</del><ins>+shouldBeTrue(`"nextHopProtocol" in PerformanceResourceTiming.prototype`); // Not yet implemented.
</ins><span class="cx"> shouldBeTrue(`"workerStart" in PerformanceResourceTiming.prototype`);
</span><span class="cx"> shouldBeTrue(`"redirectStart" in PerformanceResourceTiming.prototype`);
</span><span class="cx"> shouldBeTrue(`"redirectEnd" 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>-# <rdar://problem/30610988>
-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 ]
-
-# <rdar://problem/30610988>
-[ 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 <cdumez@apple.com>
+
+ Unreviewed, rolling out r212944.
+
+ Caused a lot of failures on the debug bots
+
+ Reverted changeset:
+
+ "[Resource Timing] Gather timing information with reliable
+ responseEnd time"
+ https://bugs.webkit.org/show_bug.cgi?id=168351
+ http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24 Keith Miller <keith_miller@apple.com>
</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 <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> #include <wtf/SHA1.h>
</span><del>-#include <wtf/Seconds.h>
</del><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx"> #include <wtf/persistence/Decoder.h>
</span><span class="cx"> #include <wtf/persistence/Encoder.h>
</span><span class="lines">@@ -279,23 +278,6 @@
</span><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-template<> struct Coder<Seconds> {
- static void encode(Encoder& encoder, const Seconds& seconds)
- {
- encoder << seconds.value();
- }
-
- static bool decode(Decoder& decoder, Seconds& result)
- {
- double value;
- if (!decoder.decode(value))
- return false;
-
- result = Seconds(value);
- return true;
- }
-};
-
</del><span class="cx"> template<> struct Coder<AtomicString> {
</span><span class="cx"> WTF_EXPORT_PRIVATE static void encode(Encoder&, const AtomicString&);
</span><span class="cx"> WTF_EXPORT_PRIVATE static bool decode(Decoder&, AtomicString&);
</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 <cdumez@apple.com>
</span><span class="cx">
</span><ins>+ Unreviewed, rolling out r212944.
+
+ Caused a lot of failures on the debug bots
+
+ Reverted changeset:
+
+ "[Resource Timing] Gather timing information with reliable
+ responseEnd time"
+ https://bugs.webkit.org/show_bug.cgi?id=168351
+ http://trac.webkit.org/changeset/212944
+
+2017-02-24 Chris Dumez <cdumez@apple.com>
+
</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->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&) 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&) 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 = "<group>"; };
</span><span class="cx">                 5C6E65401D5CEDC900F7862E /* URLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLParser.h; sourceTree = "<group>"; };
</span><span class="cx">                 5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketProvider.h; sourceTree = "<group>"; };
</span><del>-                5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkLoadMetrics.mm; sourceTree = "<group>"; };
</del><ins>+                5C9B860B1C21E3C600110F36 /* NetworkLoadTiming.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkLoadTiming.mm; sourceTree = "<group>"; };
</ins><span class="cx">                 5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPathGrammar.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 5C9EF1701DFF719900A452E3 /* XPathGrammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPathGrammar.h; sourceTree = "<group>"; };
</span><span class="cx">                 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMock.cpp; sourceTree = "<group>"; };
</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 = "<group>"; };
</span><span class="cx">                 8A7CC96A12076D73001D4588 /* PendingScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PendingScript.h; sourceTree = "<group>"; };
</span><span class="cx">                 8A7CC96F12076F8A001D4588 /* PendingScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PendingScript.cpp; sourceTree = "<group>"; };
</span><del>-                8A81BF8411DCFD9000DA2B98 /* NetworkLoadMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadMetrics.h; sourceTree = "<group>"; };
</del><ins>+                8A81BF8411DCFD9000DA2B98 /* NetworkLoadTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLoadTiming.h; sourceTree = "<group>"; };
</ins><span class="cx">                 8A844D0211D3C18E0014065C /* Performance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = "<group>"; };
</span><span class="cx">                 8A844D0311D3C18E0014065C /* Performance.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Performance.idl; sourceTree = "<group>"; };
</span><span class="cx">                 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceNavigation.cpp; sourceTree = "<group>"; };
</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->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 && m_totalBytes > m_bytesLoaded) {
</span><span class="cx"> RefPtr<ArrayBuffer> newData = m_rawData->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&) 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&) 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->didReceiveData(identifier, data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader)
</del><ins>+void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents& 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->didFinishLoading(identifier, *loader);
</del><ins>+ networkAgent->didFinishLoading(identifier, *loader, finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void InspectorInstrumentation::didFailLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceError& 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&, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
</span><span class="cx"> static void didReceiveThreadableLoaderResponse(DocumentThreadableLoader&, 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&);
</span><span class="cx"> static void continueAfterXFrameOptionsDenied(Frame&, unsigned long identifier, DocumentLoader&, const ResourceResponse&);
</span><span class="cx"> static void continueWithPolicyDownload(Frame&, unsigned long identifier, DocumentLoader&, const ResourceResponse&);
</span><span class="lines">@@ -327,7 +327,7 @@
</span><span class="cx"> static void didReceiveResourceResponseImpl(InstrumentingAgents&, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
</span><span class="cx"> static void didReceiveThreadableLoaderResponseImpl(InstrumentingAgents&, DocumentThreadableLoader&, unsigned long identifier);
</span><span class="cx"> static void didReceiveDataImpl(InstrumentingAgents&, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
</span><del>- static void didFinishLoadingImpl(InstrumentingAgents&, unsigned long identifier, DocumentLoader*);
</del><ins>+ static void didFinishLoadingImpl(InstrumentingAgents&, unsigned long identifier, DocumentLoader*, double finishTime);
</ins><span class="cx"> static void didFailLoadingImpl(InstrumentingAgents&, unsigned long identifier, DocumentLoader*, const ResourceError&);
</span><span class="cx"> static void didFinishXHRLoadingImpl(InstrumentingAgents&, unsigned long identifier, std::optional<String> decodedText, const String& url, const String& sendURL, unsigned sendLineNumber, unsigned sendColumnNumber);
</span><span class="cx"> static void willLoadXHRSynchronouslyImpl(InstrumentingAgents&);
</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& 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->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->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<Inspector::Protocol::Network::ResourceTiming> InspectorNetworkAgent::buildObjectForTiming(const NetworkLoadMetrics& timing, ResourceLoader& resourceLoader)
</del><ins>+Ref<Inspector::Protocol::Network::ResourceTiming> InspectorNetworkAgent::buildObjectForTiming(const NetworkLoadTiming& timing, ResourceLoader& resourceLoader)
</ins><span class="cx"> {
</span><span class="cx"> MonotonicTime startTime = resourceLoader.loadTiming().startTime();
</span><span class="cx"> double startTimeInInspector = m_environment.executionStopwatch()->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->setFromDiskCache(response.source() == ResourceResponse::Source::DiskCache || response.source() == ResourceResponse::Source::DiskCacheAfterValidation);
</span><span class="cx"> if (resourceLoader)
</span><del>- responseObject->setTiming(buildObjectForTiming(response.deprecatedNetworkLoadMetrics(), *resourceLoader));
</del><ins>+ responseObject->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->dataReceived(requestId, timestamp(), dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void InspectorNetworkAgent::didFinishLoading(unsigned long identifier, DocumentLoader& loader)
</del><ins>+void InspectorNetworkAgent::didFinishLoading(unsigned long identifier, DocumentLoader& 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->resourceType(requestId) == InspectorPageAgent::DocumentResource)
</span><span class="cx"> m_resourcesData->addResourceSharedBuffer(requestId, loader.frameLoader()->documentLoader()->mainResourceData(), loader.frame()->document()->encoding());
</span><span class="lines">@@ -394,6 +391,8 @@
</span><span class="cx">
</span><span class="cx"> m_resourcesData->maybeDecodeDataToContent(requestId);
</span><span class="cx">
</span><ins>+ double elapsedFinishTime = finishTime ? m_environment.executionStopwatch()->elapsedTimeSince(MonotonicTime::fromRawSeconds(finishTime)) : timestamp();
+
</ins><span class="cx"> String sourceMappingURL;
</span><span class="cx"> NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->data(requestId);
</span><span class="cx"> if (resourceData && resourceData->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&, const ResourceResponse&, 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&);
</del><ins>+ void didFinishLoading(unsigned long identifier, DocumentLoader&, double finishTime);
</ins><span class="cx"> void didFailLoading(unsigned long identifier, DocumentLoader&, const ResourceError&);
</span><span class="cx"> void didLoadResourceFromMemoryCache(DocumentLoader&, CachedResource&);
</span><span class="cx"> void didReceiveThreadableLoaderResponse(unsigned long identifier, DocumentThreadableLoader&);
</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<Inspector::Protocol::Network::ResourceTiming> buildObjectForTiming(const NetworkLoadMetrics&, ResourceLoader&);
</del><ins>+ Ref<Inspector::Protocol::Network::ResourceTiming> buildObjectForTiming(const NetworkLoadTiming&, ResourceLoader&);
</ins><span class="cx"> RefPtr<Inspector::Protocol::Network::Response> buildObjectForResourceResponse(const ResourceResponse&, ResourceLoader*);
</span><span class="cx"> Ref<Inspector::Protocol::Network::CachedResource> 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->loader().documentLoader(), response, nullptr);
</span><del>- InspectorInstrumentation::didFinishLoading(frame, frame->loader().documentLoader(), identifier);
</del><ins>+ InspectorInstrumentation::didFinishLoading(frame, frame->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 == &resource);
</span><span class="cx"> ASSERT(m_mainResource);
</span><span class="cx"> if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) {
</span><del>- finishedLoading();
</del><ins>+ finishedLoading(m_mainResource->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->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 <rdar://problem/6304600> 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()->notifier().dispatchDidFinishLoading(this, identifier);
</del><ins>+ frameLoader()->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 && content->size())
</span><span class="cx"> dataReceived(content->data(), content->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 ? "text/html" : frameLoader()->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&, const ResourceResponse&);
</span><del>- void finishedLoading();
</del><ins>+ void finishedLoading(double finishTime);
</ins><span class="cx"> void mainReceivedError(const ResourceError&);
</span><span class="cx"> WEBCORE_EXPORT void redirectReceived(CachedResource&, ResourceRequest&, const ResourceResponse&) override;
</span><span class="cx"> WEBCORE_EXPORT void responseReceived(CachedResource&, const ResourceResponse&) 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->didFinishLoading(identifier);
</del><ins>+ m_client->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->errorOccurred())
</span><span class="cx"> didFail(m_resource->identifier(), m_resource->resourceError());
</span><span class="cx"> else
</span><del>- didFinishLoading(m_resource->identifier());
</del><ins>+ didFinishLoading(m_resource->identifier(), m_resource->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->didFinishLoading(identifier);
</del><ins>+ m_client->didFinishLoading(identifier, finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DocumentThreadableLoader::didFail(unsigned long, const ResourceError& 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 <rdar://problem/4962298>.
</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& 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&, 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&);
</span><span class="cx"> void makeCrossOriginAccessRequest(ResourceRequest&&);
</span><span class="cx"> void makeSimpleCrossOriginAccessRequest(ResourceRequest&&);
</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& networkLoadMetrics)
</del><ins>+void NetscapePlugInStreamLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx"> Ref<NetscapePlugInStreamLoader> 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->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& 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&) override;
</span><span class="cx"> void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
</span><span class="cx"> void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;
</span><del>- void didFinishLoading(const NetworkLoadMetrics&) override;
</del><ins>+ void didFinishLoading(double finishTime) override;
</ins><span class="cx"> void didFail(const ResourceError&) 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->documentLoader(), loader->identifier(), data, dataLength, encodedDataLength);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void ResourceLoadNotifier::didFinishLoad(ResourceLoader* loader, const NetworkLoadMetrics&)
</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->progress().completeProgress(loader->identifier());
</span><del>-
- // FIXME: Inspector should make use of NetworkLoadMetrics.
-
- dispatchDidFinishLoading(loader->documentLoader(), loader->identifier());
</del><ins>+ dispatchDidFinishLoading(loader->documentLoader(), loader->identifier(), finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ResourceLoadNotifier::didFailToLoad(ResourceLoader* loader, const ResourceError& error)
</span><span class="lines">@@ -162,13 +159,13 @@
</span><span class="cx"> InspectorInstrumentation::didReceiveData(&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<Frame> protect(m_frame);
</span><span class="cx"> m_frame.loader().client().dispatchDidFinishLoading(loader, identifier);
</span><span class="cx">
</span><del>- InspectorInstrumentation::didFinishLoading(&m_frame, loader, identifier);
</del><ins>+ InspectorInstrumentation::didFinishLoading(&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& 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&, const ResourceResponse& redirectResponse);
</span><span class="cx"> void didReceiveResponse(ResourceLoader*, const ResourceResponse&);
</span><span class="cx"> void didReceiveData(ResourceLoader*, const char*, int dataLength, int encodedDataLength);
</span><del>- void didFinishLoad(ResourceLoader*, const NetworkLoadMetrics&);
</del><ins>+ void didFinishLoad(ResourceLoader*, double finishTime);
</ins><span class="cx"> void didFailToLoad(ResourceLoader*, const ResourceError&);
</span><span class="cx">
</span><span class="cx"> void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
</span><span class="cx"> void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&, 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&);
</span><span class="cx">
</span><span class="cx"> void sendRemainingDelegateMessages(DocumentLoader*, unsigned long identifier, const ResourceRequest&, const ResourceResponse&, const char* data, int dataLength, int encodedDataLength, const ResourceError&);
</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->reachedTerminalState() && dataSize)
</span><span class="cx"> protectedThis->didReceiveBuffer(result.data.releaseNonNull(), dataSize, DataPayloadWholeResource);
</span><span class="cx">
</span><del>- if (!protectedThis->reachedTerminalState()) {
- NetworkLoadMetrics emptyMetrics;
- protectedThis->didFinishLoading(emptyMetrics);
- }
</del><ins>+ if (!protectedThis->reachedTerminalState())
+ protectedThis->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()->notifier().didReceiveData(this, buffer ? buffer->data() : data, buffer ? buffer->size() : length, static_cast<int>(encodedDataLength));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void ResourceLoader::didFinishLoading(const NetworkLoadMetrics& 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& 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()->notifier().didFinishLoad(this, networkLoadMetrics);
</del><ins>+ frameLoader()->notifier().didFinishLoad(this, finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ResourceLoader::didFail(const ResourceError& 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& 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&);
</span><span class="cx"> virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType);
</span><span class="cx"> virtual void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType);
</span><del>- virtual void didFinishLoading(const NetworkLoadMetrics&);
</del><ins>+ virtual void didFinishLoading(double finishTime);
</ins><span class="cx"> virtual void didFail(const ResourceError&);
</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&, ResourceLoaderOptions);
</span><span class="cx">
</span><del>- void didFinishLoadingOnePart(const NetworkLoadMetrics&);
</del><ins>+ void didFinishLoadingOnePart(double finishTime);
</ins><span class="cx"> void cleanupForError(const ResourceError&);
</span><span class="cx">
</span><span class="cx"> bool wasCancelled() const { return m_cancellationStatus >= Cancelled; }
</span><span class="lines">@@ -192,7 +191,7 @@
</span><span class="cx"> void didReceiveResponse(ResourceHandle*, ResourceResponse&&) override;
</span><span class="cx"> void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
</span><span class="cx"> void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, 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&) 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& resource, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, const SecurityOrigin& securityOrigin)
</del><ins>+ResourceTiming ResourceTiming::fromLoad(CachedResource& resource, const String& initiator, const LoadTiming& loadTiming, const SecurityOrigin& 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& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, const ResourceResponse& response, const SecurityOrigin& securityOrigin)
</del><ins>+ResourceTiming ResourceTiming::fromSynchronousLoad(const URL& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadTiming& networkLoadTiming, const ResourceResponse& response, const SecurityOrigin& 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& url, const String& initiator, const LoadTiming& 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& resource, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, const SecurityOrigin& securityOrigin)
</del><ins>+ResourceTiming::ResourceTiming(CachedResource& resource, const String& initiator, const LoadTiming& loadTiming, const SecurityOrigin& 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& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, const ResourceResponse& response, const SecurityOrigin& securityOrigin)
</del><ins>+ResourceTiming::ResourceTiming(const URL& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadTiming& networkLoadTiming, const ResourceResponse& response, const SecurityOrigin& 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 "LoadTiming.h"
</span><del>-#include "NetworkLoadMetrics.h"
</del><ins>+#include "NetworkLoadTiming.h"
</ins><span class="cx"> #include "URL.h"
</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&, const String& initiator, const LoadTiming&);
</span><del>- static ResourceTiming fromLoad(CachedResource&, const String& initiator, const LoadTiming&, const NetworkLoadMetrics&, const SecurityOrigin&);
- static ResourceTiming fromSynchronousLoad(const URL&, const String& initiator, const LoadTiming&, const NetworkLoadMetrics&, const ResourceResponse&, const SecurityOrigin&);
</del><ins>+ static ResourceTiming fromLoad(CachedResource&, const String& initiator, const LoadTiming&, const SecurityOrigin&);
+ static ResourceTiming fromSynchronousLoad(const URL&, const String& initiator, const LoadTiming&, const NetworkLoadTiming&, const ResourceResponse&, const SecurityOrigin&);
</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& name) { m_initiator = name; }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- ResourceTiming(CachedResource&, const String& initiator, const LoadTiming&, const NetworkLoadMetrics&, const SecurityOrigin&);
- ResourceTiming(const URL&, const String& initiator, const LoadTiming&, const NetworkLoadMetrics&, const ResourceResponse&, const SecurityOrigin&);
</del><ins>+ ResourceTiming(CachedResource&, const String& initiator, const LoadTiming&, const SecurityOrigin&);
+ ResourceTiming(const URL&, const String& initiator, const LoadTiming&, const NetworkLoadTiming&, const ResourceResponse&, const SecurityOrigin&);
</ins><span class="cx"> ResourceTiming(const URL&, const String& initiator, const LoadTiming&);
</span><del>- ResourceTiming(const URL& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadMetrics& networkLoadMetrics, bool allowTimingDetails)
</del><ins>+ ResourceTiming(const URL& url, const String& initiator, const LoadTiming& loadTiming, const NetworkLoadTiming& 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& frame, CachedResource& resource, const ResourceLoaderOptions& options)
</span><span class="cx"> : ResourceLoader(frame, options)
</span><span class="cx"> , m_resource(&resource)
</span><ins>+ , m_loadingMultipartContent(false)
</ins><span class="cx"> , m_state(Uninitialized)
</span><span class="cx"> , m_requestCountTracker(std::in_place, frame.document()->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->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++ >= options().maxRedirectCount) {
</span><span class="cx"> cancel(ResourceError(String(), 0, request().url(), ASCIILiteral("Too many redirections"), 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 (<rdar://problem/30610988>).
-#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() < 300 || response.httpStatusCode() >= 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 "finished"
</span><del>- NetworkLoadMetrics emptyMetrics;
</del><span class="cx"> m_documentLoader->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& 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<SubresourceLoader> protectedThis(*this);
</span><span class="cx"> CachedResourceHandle<CachedResource> protectResource(m_resource);
</span><span class="cx">
</span><del>- // FIXME: Remove this with deprecatedNetworkLoadMetrics.
- m_loadTiming.setResponseEnd(MonotonicTime::now());
</del><ins>+ // FIXME: <https://webkit.org/b/168351> [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->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->setLoadFinishTime(responseEndTime.secondsSinceEpoch().seconds()); // FIXME: Users of the loadFinishTime should use the LoadTiming struct instead.
</ins><span class="cx"> m_resource->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->finish();
</span><span class="cx"> ASSERT(!reachedTerminalState());
</span><del>- didFinishLoadingOnePart(m_resource->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& 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->cachedResourceLoader().document();
</span><span class="cx"> if (!document)
</span><span class="cx"> return;
</span><del>-
</del><ins>+
</ins><span class="cx"> SecurityOrigin& origin = m_origin ? *m_origin : document->securityOrigin();
</span><del>- ResourceTiming resourceTiming = ResourceTiming::fromLoad(*m_resource, m_resource->initiatorName(), m_loadTiming, networkLoadMetrics, origin);
</del><ins>+ ResourceTiming resourceTiming = ResourceTiming::fromLoad(*m_resource, m_resource->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 "FrameLoaderTypes.h"
</span><span class="cx"> #include "ResourceLoader.h"
</span><ins>+
</ins><span class="cx"> #include <wtf/text/WTFString.h>
</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&) override;
</span><span class="cx"> void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
</span><span class="cx"> void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;
</span><del>- void didFinishLoading(const NetworkLoadMetrics&) override;
</del><ins>+ void didFinishLoading(double finishTime) override;
</ins><span class="cx"> void didFail(const ResourceError&) override;
</span><span class="cx"> void willCancel(const ResourceError&) override;
</span><span class="cx"> void didCancel(const ResourceError&) 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&);
</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<RequestCountTracker> m_requestCountTracker;
</span><span class="cx"> RefPtr<SecurityOrigin> 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&) { }
</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&) { }
</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->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->didFinishLoading(identifier);
</del><ins>+ m_client->didFinishLoading(identifier, finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void didFail(const ResourceError& 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& context) mutable {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([protectedWorkerClientWrapper = makeRef(*m_workerClientWrapper), identifier, finishTime] (ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><del>- protectedWorkerClientWrapper->didFinishLoading(identifier);
</del><ins>+ protectedWorkerClientWrapper->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&) 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&) 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->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->loader().documentLoader(), m_currentResourceIdentifier);
</del><ins>+ InspectorInstrumentation::didFinishLoading(m_frame, m_frame->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&&) 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&) override;
</span><span class="cx">
</span><span class="cx"> void didReceiveManifestResponse(const ResourceResponse&);
</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& /* type */, SharedBuffer&) { }
</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&);
</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 "thrash guard" 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 "ResourceLoader.h"
</span><span class="cx"> #import "ResourceRequest.h"
</span><span class="cx"> #import "SharedBuffer.h"
</span><del>-#import <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #import <wtf/NeverDestroyed.h>
</span><span class="cx"> #import <wtf/Vector.h>
</span><span class="cx"> #import <wtf/text/WTFString.h>
</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->didFinishLoading(emptyMetrics);
</del><ins>+ _resourceLoader->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&) 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&) 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& resourceTiming)
-{
- return monotonicTimeToDOMHighResTimeStamp(timeOrigin, resourceTiming.loadTiming().startTime());
-}
-
-static double entryEndTime(MonotonicTime timeOrigin, const ResourceTiming& 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<PerformanceResourceTiming> PerformanceResourceTiming::create(MonotonicTime timeOrigin, ResourceTiming&& 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&& resourceTiming)
</span><del>- : PerformanceEntry(PerformanceEntry::Type::Resource, resourceTiming.url().string(), ASCIILiteral("resource"), entryStartTime(timeOrigin, resourceTiming), entryEndTime(timeOrigin, resourceTiming))
</del><ins>+ : PerformanceEntry(PerformanceEntry::Type::Resource, resourceTiming.url().string(), ASCIILiteral("resource"), 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 <= 0_ms)
</del><ins>+ if (m_networkLoadTiming.domainLookupStart <= 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 <= 0_ms)
</del><ins>+ if (m_networkLoadTiming.domainLookupEnd <= 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 <= 0_ms)
</del><ins>+ // connectStart will be -1 when a network request is not made.
+ if (m_networkLoadTiming.connectStart <= 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 >= 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 <= 0_ms)
</del><ins>+ // connectStart will be -1 when a network request is not made.
+ if (m_networkLoadTiming.connectEnd <= 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 <= 0_ms)
</del><ins>+ if (m_networkLoadTiming.secureConnectionStart < 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 <= 0_ms)
</del><ins>+ if (m_networkLoadTiming.requestStart <= 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 <= 0_ms)
</del><ins>+ if (m_networkLoadTiming.responseStart <= 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 <= 0_ms) {
- ASSERT(m_networkLoadMetrics.responseStart <= 0_ms);
- ASSERT(m_networkLoadMetrics.requestStart <= 0_ms);
- ASSERT(m_networkLoadMetrics.requestStart <= 0_ms);
- ASSERT(m_networkLoadMetrics.secureConnectionStart <= 0_ms);
- ASSERT(m_networkLoadMetrics.connectEnd <= 0_ms);
- ASSERT(m_networkLoadMetrics.connectStart <= 0_ms);
- ASSERT(m_networkLoadMetrics.domainLookupEnd <= 0_ms);
- ASSERT(m_networkLoadMetrics.domainLookupStart <= 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 "LoadTiming.h"
</span><del>-#include "NetworkLoadMetrics.h"
</del><ins>+#include "NetworkLoadTiming.h"
</ins><span class="cx"> #include "PerformanceEntry.h"
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="lines">@@ -48,7 +48,6 @@
</span><span class="cx"> static Ref<PerformanceResourceTiming> create(MonotonicTime timeOrigin, ResourceTiming&&);
</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&&);
</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 "Frame.h"
</span><span class="cx"> #include "FrameLoader.h"
</span><span class="cx"> #include "LoadTiming.h"
</span><del>-#include "NetworkLoadMetrics.h"
</del><ins>+#include "NetworkLoadTiming.h"
</ins><span class="cx"> #include "Performance.h"
</span><span class="cx"> #include "ResourceResponse.h"
</span><span class="cx"> #include <wtf/CurrentTime.h>
</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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->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 "backfill" with fetchStart.
</span><del>- if (timing.domainLookupStart < 0_ms)
</del><ins>+ if (timing.domainLookupStart < 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->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 "backfill" with domainLookupStart.
</span><del>- if (timing.domainLookupEnd < 0_ms)
</del><ins>+ if (timing.domainLookupEnd < 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->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 "backfill" with domainLookupEnd.
</span><del>- Seconds connectStart = timing.connectStart;
- if (connectStart < 0_ms)
</del><ins>+ double connectStart = timing.connectStart;
+ if (connectStart < 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 >= 0_ms && timing.domainLookupEnd > connectStart)
</del><ins>+ if (timing.domainLookupEnd >= 0 && timing.domainLookupEnd > 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->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 "backfill" with connectStart.
</span><del>- if (timing.connectEnd < 0_ms)
</del><ins>+ if (timing.connectEnd < 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
</ins><span class="cx">
</span><del>- if (timing.secureConnectionStart < 0_ms)
</del><ins>+ if (timing.secureConnectionStart < 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
</ins><span class="cx">
</span><del>- ASSERT(timing.requestStart >= 0_ms);
</del><ins>+ ASSERT(timing.requestStart >= 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& timing = loader->response().deprecatedNetworkLoadMetrics();
</del><ins>+ const NetworkLoadTiming& timing = loader->response().networkLoadTiming();
</ins><span class="cx">
</span><del>- ASSERT(timing.responseStart >= 0_ms);
</del><ins>+ ASSERT(timing.responseStart >= 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 &loader->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 >= 0_ms);
</del><ins>+ ASSERT(relativeMilliseconds >= 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->monotonicTimeToPseudoWallTime(timing->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<unsigned long long>(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&&) override;
</span><span class="cx"> void didReceiveData(ResourceHandle*, const char*, unsigned, int) override;
</span><span class="cx"> void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, 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&) 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()->didFinishLoading(&handle);
</del><ins>+ handle.client()->didFinishLoading(&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 <wtf/Seconds.h>
-#include <wtf/text/WTFString.h>
-
-#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& other) const
- {
- return domainLookupStart == other.domainLookupStart
- && domainLookupEnd == other.domainLookupEnd
- && connectStart == other.connectStart
- && secureConnectionStart == other.secureConnectionStart
- && connectEnd == other.connectEnd
- && requestStart == other.requestStart
- && responseStart == other.responseStart
- && responseEnd == other.responseEnd
- && complete == other.complete
- && protocol == other.protocol;
- }
-
- bool operator!=(const NetworkLoadMetrics& other) const
- {
- return !(*this == other);
- }
-
- bool isComplete() const { return complete; }
- void markComplete() { complete = true; }
-
- template<class Encoder> void encode(Encoder&) const;
- template<class Decoder> static bool decode(Decoder&, NetworkLoadMetrics&);
-
- // 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&);
-#endif
-
-#if PLATFORM(COCOA) && !HAVE(TIMINGDATAOPTIONS)
-WEBCORE_EXPORT void setCollectsTimingData();
-#endif
-
-template<class Encoder>
-void NetworkLoadMetrics::encode(Encoder& encoder) const
-{
- encoder << domainLookupStart;
- encoder << domainLookupEnd;
- encoder << connectStart;
- encoder << secureConnectionStart;
- encoder << connectEnd;
- encoder << requestStart;
- encoder << responseStart;
- encoder << responseEnd;
- encoder << complete;
- encoder << protocol;
-}
-
-template<class Decoder>
-bool NetworkLoadMetrics::decode(Decoder& decoder, NetworkLoadMetrics& timing)
-{
- return decoder.decode(timing.domainLookupStart)
- && decoder.decode(timing.domainLookupEnd)
- && decoder.decode(timing.connectStart)
- && decoder.decode(timing.secureConnectionStart)
- && decoder.decode(timing.connectEnd)
- && decoder.decode(timing.requestStart)
- && decoder.decode(timing.responseStart)
- && decoder.decode(timing.responseEnd)
- && decoder.decode(timing.complete)
- && 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& other)
+ : domainLookupStart(other.domainLookupStart)
+ , domainLookupEnd(other.domainLookupEnd)
+ , connectStart(other.connectStart)
+ , connectEnd(other.connectEnd)
+ , requestStart(other.requestStart)
+ , responseStart(other.responseStart)
+ , secureConnectionStart(other.secureConnectionStart)
+ {
+ }
+
+ NetworkLoadTiming& operator=(const NetworkLoadTiming& 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& other) const
+ {
+ return domainLookupStart == other.domainLookupStart
+ && domainLookupEnd == other.domainLookupEnd
+ && connectStart == other.connectStart
+ && connectEnd == other.connectEnd
+ && requestStart == other.requestStart
+ && responseStart == other.responseStart
+ && secureConnectionStart == other.secureConnectionStart;
+ }
+
+ bool operator!=(const NetworkLoadTiming& other) const
+ {
+ return !(*this == other);
+ }
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static bool decode(Decoder&, NetworkLoadTiming&);
+
+ // 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&);
+#endif
+
+#if PLATFORM(COCOA) && !HAVE(TIMINGDATAOPTIONS)
+WEBCORE_EXPORT void setCollectsTimingData();
+#endif
+
+template<class Encoder>
+void NetworkLoadTiming::encode(Encoder& encoder) const
+{
+ encoder << domainLookupStart;
+ encoder << domainLookupEnd;
+ encoder << connectStart;
+ encoder << connectEnd;
+ encoder << requestStart;
+ encoder << responseStart;
+ encoder << secureConnectionStart;
+}
+
+template<class Decoder>
+bool NetworkLoadTiming::decode(Decoder& decoder, NetworkLoadTiming& timing)
+{
+ return decoder.decode(timing.domainLookupStart)
+ && decoder.decode(timing.domainLookupEnd)
+ && decoder.decode(timing.connectStart)
+ && decoder.decode(timing.connectEnd)
+ && decoder.decode(timing.requestStart)
+ && decoder.decode(timing.responseStart)
+ && 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&&) final { delete this; }
</span><span class="cx"> void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, 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&) 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) && ENABLE(WEB_TIMING)
</span><span class="cx"> #if USE(CFURLCONNECTION)
</span><del>- static void getConnectionTimingData(CFURLConnectionRef, NetworkLoadMetrics&);
</del><ins>+ static void getConnectionTimingData(CFURLConnectionRef, NetworkLoadTiming&);
</ins><span class="cx"> #else
</span><del>- static void getConnectionTimingData(NSURLConnection *, NetworkLoadMetrics&);
</del><ins>+ static void getConnectionTimingData(NSURLConnection *, NetworkLoadTiming&);
</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<SharedBuffer>&&, 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&) { }
</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 "CacheValidation.h"
</span><span class="cx"> #include "CertificateInfo.h"
</span><span class="cx"> #include "HTTPHeaderMap.h"
</span><del>-#include "NetworkLoadMetrics.h"
</del><ins>+#include "NetworkLoadTiming.h"
</ins><span class="cx"> #include "ParsedContentRange.h"
</span><span class="cx"> #include "URL.h"
</span><span class="cx"> #include <wtf/SHA1.h>
</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<SHA1::Digest>& cacheBodyKey() const { return m_cacheBodyKey; }
</span><span class="cx"> void setCacheBodyKey(const SHA1::Digest& 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& deprecatedNetworkLoadMetrics() const { return m_networkLoadMetrics; }
</del><ins>+ NetworkLoadTiming& networkLoadTiming() const { return m_networkLoadTiming; }
</ins><span class="cx">
</span><span class="cx"> // The ResourceResponse subclass may "shadow" 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<CertificateInfo> m_certificateInfo;
</span><span class="cx">
</span><span class="lines">@@ -243,10 +240,10 @@
</span><span class="cx"> encoder << m_httpVersion;
</span><span class="cx"> encoder << 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 << m_networkLoadMetrics;
</del><ins>+ encoder << m_networkLoadTiming;
</ins><span class="cx">
</span><span class="cx"> encoder << m_httpStatusCode;
</span><span class="cx"> encoder << 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 && !decoder.decode(response.m_networkLoadMetrics))
</del><ins>+ // The networkLoadTiming info is only send over IPC and not stored in disk cache.
+ if (Decoder::isIPCDecoder && !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&) override;
</span><span class="cx"> void didReceiveResponse(ResourceHandle*, ResourceResponse&&) 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&) override;
</span><span class="cx"> #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
</span><span class="cx"> bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace&) 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, "CFNet - ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading(handle=%p) (%s)", m_handle, m_handle->firstRequest().url().string().utf8().data());
</span><span class="cx">
</span><del>- m_handle->client()->didFinishLoading(m_handle);
</del><ins>+ m_handle->client()->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) && 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, "CFNet - SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading(handle=%p) (%s)", m_handle, m_handle->firstRequest().url().string().utf8().data());
</span><span class="cx">
</span><span class="cx"> if (ResourceHandleClient* client = m_handle->client())
</span><del>- client->didFinishLoading(m_handle);
</del><ins>+ client->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 "config.h"
-#import "NetworkLoadMetrics.h"
-
-#import <WebCore/NSURLConnectionSPI.h>
-
-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& 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, @"_kCFNTimingDataFetchStart");
-
- double domainLookupStart = timingValue(timingData, @"_kCFNTimingDataDomainLookupStart");
- double domainLookupEnd = timingValue(timingData, @"_kCFNTimingDataDomainLookupEnd");
- double connectStart = timingValue(timingData, @"_kCFNTimingDataConnectStart");
- double secureConnectionStart = timingValue(timingData, @"_kCFNTimingDataSecureConnectionStart");
- double connectEnd = timingValue(timingData, @"_kCFNTimingDataConnectEnd");
- double requestStart = timingValue(timingData, @"_kCFNTimingDataRequestStart");
- double responseStart = timingValue(timingData, @"_kCFNTimingDataResponseStart");
-
- timing.domainLookupStart = Seconds(domainLookupStart <= 0 ? Seconds(-1) : Seconds::fromMilliseconds(domainLookupStart - referenceStart));
- timing.domainLookupEnd = Seconds(domainLookupEnd <= 0 ? Seconds(-1) : Seconds::fromMilliseconds(domainLookupEnd - referenceStart));
- timing.connectStart = Seconds(connectStart <= 0 ? Seconds(-1) : Seconds::fromMilliseconds(connectStart - referenceStart));
- timing.secureConnectionStart = Seconds(secureConnectionStart <= 0 ? Seconds(-1) : Seconds::fromMilliseconds(secureConnectionStart - referenceStart));
- timing.connectEnd = Seconds(connectEnd <= 0 ? Seconds(-1) : Seconds::fromMilliseconds(connectEnd - referenceStart));
- timing.requestStart = Seconds(requestStart <= 0 ? Seconds(0) : Seconds::fromMilliseconds(requestStart - referenceStart));
- timing.responseStart = Seconds(responseStart <= 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(&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 "config.h"
+#import "NetworkLoadTiming.h"
+
+#import <WebCore/NSURLConnectionSPI.h>
+
+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& 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, @"_kCFNTimingDataFetchStart");
+
+ double domainLookupStart = timingValue(timingData, @"_kCFNTimingDataDomainLookupStart");
+ double domainLookupEnd = timingValue(timingData, @"_kCFNTimingDataDomainLookupEnd");
+ double connectStart = timingValue(timingData, @"_kCFNTimingDataConnectStart");
+ double secureConnectionStart = timingValue(timingData, @"_kCFNTimingDataSecureConnectionStart");
+ double connectEnd = timingValue(timingData, @"_kCFNTimingDataConnectEnd");
+ double requestStart = timingValue(timingData, @"_kCFNTimingDataRequestStart");
+ double responseStart = timingValue(timingData, @"_kCFNTimingDataResponseStart");
+
+ timing.domainLookupStart = domainLookupStart <= 0 ? -1 : (domainLookupStart - referenceStart) * 1000;
+ timing.domainLookupEnd = domainLookupEnd <= 0 ? -1 : (domainLookupEnd - referenceStart) * 1000;
+ timing.connectStart = connectStart <= 0 ? -1 : (connectStart - referenceStart) * 1000;
+ timing.secureConnectionStart = secureConnectionStart <= 0 ? -1 : (secureConnectionStart - referenceStart) * 1000;
+ timing.connectEnd = connectEnd <= 0 ? -1 : (connectEnd - referenceStart) * 1000;
+ timing.requestStart = requestStart <= 0 ? 0 : (requestStart - referenceStart) * 1000;
+ timing.responseStart = responseStart <= 0 ? 0 : (responseStart - referenceStart) * 1000;
+}
+
+#if !HAVE(TIMINGDATAOPTIONS)
+void setCollectsTimingData()
+{
+ static dispatch_once_t onceToken;
+ dispatch_once(&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&);
</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&);
</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->m_handle, CURLINFO_NAMELOOKUP_TIME, &dnslookupTime);
</span><span class="cx"> curl_easy_getinfo(d->m_handle, CURLINFO_CONNECT_TIME, &connectTime);
</span><span class="cx"> curl_easy_getinfo(d->m_handle, CURLINFO_APPCONNECT_TIME, &appConnectTime);
</span><ins>+ curl_easy_getinfo(d->m_handle, CURLINFO_STARTTRANSFER_TIME, &startTransfertTime);
</ins><span class="cx"> curl_easy_getinfo(d->m_handle, CURLINFO_PRETRANSFER_TIME, &preTransferTime);
</span><span class="cx">
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().domainLookupStart = Seconds(0);
- d->m_response.deprecatedNetworkLoadMetrics().domainLookupEnd = Seconds(dnslookupTime);
</del><ins>+ d->m_response.networkLoadTiming().domainLookupStart = 0;
+ d->m_response.networkLoadTiming().domainLookupEnd = dnslookupTime * 1000;
</ins><span class="cx">
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().connectStart = Seconds(dnslookupTime);
- d->m_response.deprecatedNetworkLoadMetrics().connectEnd = Seconds(connectTime);
</del><ins>+ d->m_response.networkLoadTiming().connectStart = dnslookupTime * 1000;
+ d->m_response.networkLoadTiming().connectEnd = connectTime * 1000;
</ins><span class="cx">
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().requestStart = Seconds(connectTime);
- d->m_response.deprecatedNetworkLoadMetrics().responseStart = Seconds(preTransferTime);
</del><ins>+ d->m_response.networkLoadTiming().requestStart = connectTime * 1000;
+ d->m_response.networkLoadTiming().responseStart = preTransferTime * 1000;
</ins><span class="cx">
</span><span class="cx"> if (appConnectTime)
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().secureConnectionStart = Seconds(connectTime);
</del><ins>+ d->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->m_handle as completed transfer
</span><span class="cx"> CURL* handle = msg->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, &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->m_multipartHandle->contentEnded();
</span><span class="cx">
</span><span class="cx"> if (d->client()) {
</span><del>- d->client()->didFinishLoading(job);
</del><ins>+ d->client()->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->client())
</span><del>- handle->client()->didFinishLoading(handle);
</del><ins>+ handle->client()->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& timing)
</del><ins>+void ResourceHandle::getConnectionTimingData(CFURLConnectionRef connection, NetworkLoadTiming& 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& timing)
</del><ins>+void ResourceHandle::getConnectionTimingData(NSURLConnection *connection, NetworkLoadTiming& 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->client())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_handle->client()->didFinishLoading(m_handle);
</del><ins>+ m_handle->client()->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->client())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_handle->client()->didFinishLoading(m_handle);
</del><ins>+ m_handle->client()->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->cancelledOrClientless())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- handle->m_requestTime = MonotonicTime::now();
</del><ins>+ handle->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->m_inputStream) {
</span><del>- handle->client()->didFinishLoading(handle.get());
</del><ins>+ handle->client()->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->m_response.deprecatedNetworkLoadMetrics().responseStart = MonotonicTime::now() - handle->m_requestTime;
</del><ins>+ d->m_response.networkLoadTiming().responseStart = milisecondsSinceRequest(handle->m_requestTime);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (soupMessage && d->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()->m_response.deprecatedNetworkLoadMetrics().requestStart = MonotonicTime::now() - m_requestTime;
</del><ins>+ getInternal()->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->getInternal();
</span><del>- Seconds deltaTime = MonotonicTime::now() - handle->m_requestTime;
</del><ins>+ double deltaTime = milisecondsSinceRequest(handle->m_requestTime);
</ins><span class="cx"> switch (event) {
</span><span class="cx"> case G_SOCKET_CLIENT_RESOLVING:
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().domainLookupStart = deltaTime;
</del><ins>+ d->m_response.networkLoadTiming().domainLookupStart = deltaTime;
</ins><span class="cx"> break;
</span><span class="cx"> case G_SOCKET_CLIENT_RESOLVED:
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().domainLookupEnd = deltaTime;
</del><ins>+ d->m_response.networkLoadTiming().domainLookupEnd = deltaTime;
</ins><span class="cx"> break;
</span><span class="cx"> case G_SOCKET_CLIENT_CONNECTING:
</span><del>- d->m_response.deprecatedNetworkLoadMetrics().connectStart = deltaTime;
- if (d->m_response.deprecatedNetworkLoadMetrics().domainLookupStart != Seconds(-1)) {
</del><ins>+ d->m_response.networkLoadTiming().connectStart = deltaTime;
+ if (d->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->m_response.deprecatedNetworkLoadMetrics().connectStart -=
- d->m_response.deprecatedNetworkLoadMetrics().domainLookupEnd - d->m_response.deprecatedNetworkLoadMetrics().domainLookupStart;
</del><ins>+ d->m_response.networkLoadTiming().connectStart -=
+ d->m_response.networkLoadTiming().domainLookupEnd - d->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->m_response.deprecatedNetworkLoadMetrics().secureConnectionStart = deltaTime;
</del><ins>+ d->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->m_response.deprecatedNetworkLoadMetrics().connectEnd = deltaTime;
</del><ins>+ d->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->m_firstRequest.timeoutInterval() > 0)
</span><span class="lines">@@ -1012,7 +1020,7 @@
</span><span class="cx">
</span><span class="cx"> g_input_stream_close(d->m_inputStream.get(), 0, 0);
</span><span class="cx">
</span><del>- handle->client()->didFinishLoading(handle.get());
</del><ins>+ handle->client()->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->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&) 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&) 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&) 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&) 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 <cdumez@apple.com>
+
+ Unreviewed, rolling out r212944.
+
+ Caused a lot of failures on the debug bots
+
+ Reverted changeset:
+
+ "[Resource Timing] Gather timing information with reliable
+ responseEnd time"
+ https://bugs.webkit.org/show_bug.cgi?id=168351
+ http://trac.webkit.org/changeset/212944
+
</ins><span class="cx"> 2017-02-24 Wenson Hsieh <wenson_hsieh@apple.com>
</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->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&&) final;
</span><span class="cx"> void didReceiveBuffer(WebCore::ResourceHandle*, Ref<WebCore::SharedBuffer>&&, 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&) 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&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
</span><span class="cx"> ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override { return ShouldContinueDidReceiveResponse::No; };
</span><span class="cx"> void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
</span><del>- void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
</del><ins>+ void didFinishLoading(double finishTime) override { };
</ins><span class="cx"> void didFailLoading(const WebCore::ResourceError&) 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 "SandboxExtension.h"
</span><span class="cx"> #include <WebCore/Credential.h>
</span><span class="cx"> #include <WebCore/FrameLoaderTypes.h>
</span><del>-#include <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #include <WebCore/ResourceHandleTypes.h>
</span><span class="cx"> #include <WebCore/ResourceLoaderOptions.h>
</span><span class="cx"> #include <WebCore/ResourceRequest.h>
</span><span class="lines">@@ -64,17 +63,11 @@
</span><span class="cx"> virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&&) = 0;
</span><span class="cx"> virtual void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
</span><span class="cx"> virtual void didReceiveData(Ref<WebCore::SharedBuffer>&&) = 0;
</span><del>- virtual void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) = 0;
</del><ins>+ virtual void didCompleteWithError(const WebCore::ResourceError&) = 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& 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& error, const WebCore::NetworkLoadMetrics& networkLoadMetrics)
</del><ins>+void NetworkLoad::didCompleteWithError(const ResourceError& 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& 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&&) final;
</span><span class="cx"> void didReceiveData(WebCore::ResourceHandle*, const char*, unsigned, int encodedDataLength) final;
</span><span class="cx"> void didReceiveBuffer(WebCore::ResourceHandle*, Ref<WebCore::SharedBuffer>&&, 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&) 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&, ChallengeCompletionHandler&&) final;
</span><span class="cx"> void didReceiveResponseNetworkSession(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
</span><span class="cx"> void didReceiveData(Ref<WebCore::SharedBuffer>&&) final;
</span><del>- void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
</del><ins>+ void didCompleteWithError(const WebCore::ResourceError&) 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&&) = 0;
</span><span class="cx"> virtual void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) = 0;
</span><del>- virtual void didFinishLoading(const WebCore::NetworkLoadMetrics&) = 0;
</del><ins>+ virtual void didFinishLoading(double finishTime) = 0;
</ins><span class="cx"> virtual void didFailLoading(const WebCore::ResourceError&) = 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 <WebCore/CertificateInfo.h>
</span><span class="cx"> #include <WebCore/DiagnosticLoggingKeys.h>
</span><span class="cx"> #include <WebCore/HTTPHeaderNames.h>
</span><del>-#include <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #include <WebCore/ProtectionSpace.h>
</span><span class="cx"> #include <WebCore/SharedBuffer.h>
</span><span class="cx"> #include <WebCore/SynchronousLoaderClient.h>
</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& networkLoadMetrics)
</del><ins>+void NetworkResourceLoader::didFinishLoading(double finishTime)
</ins><span class="cx"> {
</span><span class="cx"> RELEASE_LOG_IF_ALLOWED("didFinishLoading: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", 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->shareableResourceHandle().isNull()) {
</span><del>- send(Messages::WebResourceLoader::DidReceiveResource(entry->shareableResourceHandle()));
</del><ins>+ send(Messages::WebResourceLoader::DidReceiveResource(entry->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->buffer(), entry->buffer()->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<NetworkCache::Entry> 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&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&) override;
</span><span class="cx"> ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
</span><span class="cx"> void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
</span><del>- void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
</del><ins>+ void didFinishLoading(double finishTime) override;
</ins><span class="cx"> void didFailLoading(const WebCore::ResourceError&) override;
</span><span class="cx">
</span><span class="cx"> void convertToDownload(DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
</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<WebCore::SharedBuffer>&&) final { ASSERT_NOT_REACHED(); }
</span><del>- void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final { delete this; }
</del><ins>+ void didCompleteWithError(const WebCore::ResourceError&) 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&)
</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&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
</span><span class="cx"> ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override;
</span><span class="cx"> void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override;
</span><del>- void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
</del><ins>+ void didFinishLoading(double finishTime) override;
</ins><span class="cx"> void didFailLoading(const WebCore::ResourceError&) 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 "NetworkDataTask.h"
</span><del>-#include <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #include <wtf/RetainPtr.h>
</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&, ChallengeCompletionHandler&&);
</span><del>- void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&);
</del><ins>+ void didCompleteWithError(const WebCore::ResourceError&);
</ins><span class="cx"> void didReceiveData(Ref<WebCore::SharedBuffer>&&);
</span><span class="cx">
</span><span class="cx"> void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
</span><span class="lines">@@ -68,8 +67,6 @@
</span><span class="cx">
</span><span class="cx"> bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&) override;
</span><span class="cx">
</span><del>- WebCore::NetworkLoadMetrics& networkLoadMetrics() { return m_networkLoadMetrics; }
-
</del><span class="cx"> private:
</span><span class="cx"> NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, 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<SandboxExtension> m_sandboxExtension;
</span><span class="cx"> RetainPtr<NSURLSessionDataTask> 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&);
</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& error, const WebCore::NetworkLoadMetrics& networkLoadMetrics)
</del><ins>+void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError& error)
</ins><span class="cx"> {
</span><span class="cx"> if (m_client)
</span><del>- m_client->didCompleteWithError(error, networkLoadMetrics);
</del><ins>+ m_client->didCompleteWithError(error);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void NetworkDataTaskCocoa::didReceiveData(Ref<WebCore::SharedBuffer>&& 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 "DownloadID.h"
</span><span class="cx"> #include "NetworkDataTaskCocoa.h"
</span><span class="cx"> #include "NetworkSession.h"
</span><del>-#include <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #include <wtf/HashMap.h>
</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 <WebCore/CFNetworkSPI.h>
</span><span class="cx"> #import <WebCore/Credential.h>
</span><span class="cx"> #import <WebCore/FrameLoaderTypes.h>
</span><ins>+#import <WebCore/NetworkLoadTiming.h>
</ins><span class="cx"> #import <WebCore/NetworkStorageSession.h>
</span><span class="cx"> #import <WebCore/NotImplemented.h>
</span><span class="cx"> #import <WebCore/ResourceError.h>
</span><span class="lines">@@ -241,7 +242,7 @@
</span><span class="cx"> LOG(NetworkSession, "%llu didCompleteWithError %@", task.taskIdentifier, error);
</span><span class="cx"> auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
</span><span class="cx"> if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier, storedCredentials))
</span><del>- networkDataTask->didCompleteWithError(error, networkDataTask->networkLoadMetrics());
</del><ins>+ networkDataTask->didCompleteWithError(error);
</ins><span class="cx"> else if (error) {
</span><span class="cx"> auto downloadID = _session->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, "%llu didFinishCollectingMetrics", task.taskIdentifier);
- auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
- if (auto* networkDataTask = _session->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& networkLoadMetrics = networkDataTask->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->didReceiveResponse(WTFMove(resourceResponse), [completionHandlerCopy, taskIdentifier](WebCore::PolicyAction policyAction) {
</span><span class="cx"> LOG(NetworkSession, "%llu didReceiveResponse completionHandler (%d)", 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<NetworkDataTaskSoup> protectedThis(this);
</span><span class="cx"> invalidateAndCancel();
</span><del>- dispatchDidCompleteWithError(ResourceError::timeoutError(m_firstRequest.url()));
</del><ins>+ m_client->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& 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& error)
-{
-#if ENABLE(WEB_TIMING)
- m_networkLoadMetrics.responseEnd = MonotonicTime::now() - m_startTime;
- m_networkLoadMetrics.markComplete();
-#endif
-
- m_client->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->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="lines">@@ -431,7 +408,7 @@
</span><span class="cx">
</span><span class="cx"> RefPtr<NetworkDataTaskSoup> protectedThis(this);
</span><span class="cx"> invalidateAndCancel();
</span><del>- dispatchDidCompleteWithError(error);
</del><ins>+ m_client->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->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->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->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->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& 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 & 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 "NetworkDataTask.h"
</span><del>-#include <WebCore/NetworkLoadMetrics.h>
</del><span class="cx"> #include <WebCore/ProtectionSpace.h>
</span><span class="cx"> #include <WebCore/ResourceResponse.h>
</span><span class="cx"> #include <wtf/RunLoop.h>
</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<GInputStream>&&);
</span><span class="cx"> void dispatchDidReceiveResponse();
</span><del>- void dispatchDidCompleteWithError(const WebCore::ResourceError&);
</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<GOutputStream> 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<NetworkDataTaskSoup> 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->didRetrieveDerivedDataFromCache(type, buffer.get());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebResourceLoader::didFinishResourceLoad(const NetworkLoadMetrics& networkLoadMetrics)
</del><ins>+void WebResourceLoader::didFinishResourceLoad(double finishTime)
</ins><span class="cx"> {
</span><span class="cx"> LOG(Network, "(WebProcess) WebResourceLoader::didFinishResourceLoad for '%s'", m_coreLoader->url().string().latin1().data());
</span><span class="cx"> RELEASE_LOG_IF_ALLOWED("didFinishResourceLoad: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", 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->didFinishLoading(networkLoadMetrics);
</del><ins>+ m_coreLoader->didFinishLoading(finishTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebResourceLoader::didFailResourceLoad(const ResourceError& 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& handle)
</del><ins>+void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& handle, double finishTime)
</ins><span class="cx"> {
</span><span class="cx"> LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResource for '%s'", m_coreLoader->url().string().latin1().data());
</span><span class="cx"> RELEASE_LOG_IF_ALLOWED("didReceiveResource: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", 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->didFinishLoading(emptyMetrics);
</del><ins>+ m_coreLoader->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 "Connection.h"
</span><span class="cx"> #include "MessageSender.h"
</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&, bool needsContinueDidReceiveResponseMessage);
</span><span class="cx"> void didReceiveData(const IPC::DataReference&, int64_t encodedDataLength);
</span><span class="cx"> void didRetrieveDerivedData(const String& type, const IPC::DataReference&);
</span><del>- void didFinishResourceLoad(const WebCore::NetworkLoadMetrics&);
</del><ins>+ void didFinishResourceLoad(double finishTime);
</ins><span class="cx"> void didFailResourceLoad(const WebCore::ResourceError&);
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><del>- void didReceiveResource(const ShareableResource::Handle&);
</del><ins>+ void didReceiveResource(const ShareableResource::Handle&, double finishTime);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> RefPtr<WebCore::ResourceLoader> 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>