<!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>[205052] trunk/Source/WebKit2</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/205052">205052</a></dd>
<dt>Author</dt> <dd>andersca@apple.com</dd>
<dt>Date</dt> <dd>2016-08-26 15:16:36 -0700 (Fri, 26 Aug 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Get rid of NetworkResourceLoader::sendAbortingOnFailure
https://bugs.webkit.org/show_bug.cgi?id=161267

Reviewed by Dan Bernstein.

NetworkResourceLoader::sendAbortingOnFailure sends an IPC message, and if IPC::Connection::send returns false,
it will abort the network resource load.

IPC::Connection::send will only return false if the connection is invalid, and when it becomes invalidated the
connection client member function &quot;didClose&quot; is invoked. For the network process, this will call abort on all outstanding
network loads.

Auditing all the sendAbortingOnFailure call sites, shows that none of them can be called with an invalid connection,
so replace sendAbortingOnFailure with send.

* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::didReceiveResponse):
This is a NetworkLoadClient function which won't be called if the load has been aborted.

(WebKit::NetworkResourceLoader::didReceiveBuffer):
Ditto.

(WebKit::NetworkResourceLoader::didFinishLoading):
Ditto. Also, update a call to sendBufferMaybeAborting to sendBuffer.

(WebKit::NetworkResourceLoader::willSendRedirectedRequest):
This is another NetworkLoadClient function.

(WebKit::NetworkResourceLoader::bufferingTimerFired):
The buffering timer is stopped when abort() is called.

(WebKit::NetworkResourceLoader::sendBuffer):
Rename this from sendBufferMaybeAborting. It has three call sites:
- didReceiveBuffer and didFinishLoading are both NetworkLoadClient functions.
- didRetrieveCacheEntry is called from didFinishLoading (a NetworkLoadClient function) and from
  the completion function of retrieveCacheEntry, which has an early return for when the loader has been aborted.

(WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
This is called from the retrieveCacheEntry completion function, which has an early return for when the loader has been aborted.

(WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
Ditto.

(WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.
* NetworkProcess/NetworkResourceLoader.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</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>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (205051 => 205052)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-08-26 22:07:04 UTC (rev 205051)
+++ trunk/Source/WebKit2/ChangeLog        2016-08-26 22:16:36 UTC (rev 205052)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-08-26  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Get rid of NetworkResourceLoader::sendAbortingOnFailure
+        https://bugs.webkit.org/show_bug.cgi?id=161267
+
+        Reviewed by Dan Bernstein.
+
+        NetworkResourceLoader::sendAbortingOnFailure sends an IPC message, and if IPC::Connection::send returns false,
+        it will abort the network resource load.
+
+        IPC::Connection::send will only return false if the connection is invalid, and when it becomes invalidated the
+        connection client member function &quot;didClose&quot; is invoked. For the network process, this will call abort on all outstanding
+        network loads.
+
+        Auditing all the sendAbortingOnFailure call sites, shows that none of them can be called with an invalid connection,
+        so replace sendAbortingOnFailure with send.
+
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::didReceiveResponse):
+        This is a NetworkLoadClient function which won't be called if the load has been aborted.
+
+        (WebKit::NetworkResourceLoader::didReceiveBuffer):
+        Ditto.
+
+        (WebKit::NetworkResourceLoader::didFinishLoading):
+        Ditto. Also, update a call to sendBufferMaybeAborting to sendBuffer.
+
+        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
+        This is another NetworkLoadClient function.
+
+        (WebKit::NetworkResourceLoader::bufferingTimerFired):
+        The buffering timer is stopped when abort() is called.
+
+        (WebKit::NetworkResourceLoader::sendBuffer):
+        Rename this from sendBufferMaybeAborting. It has three call sites:
+        - didReceiveBuffer and didFinishLoading are both NetworkLoadClient functions.
+        - didRetrieveCacheEntry is called from didFinishLoading (a NetworkLoadClient function) and from
+          the completion function of retrieveCacheEntry, which has an early return for when the loader has been aborted.
+
+        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
+        This is called from the retrieveCacheEntry completion function, which has an early return for when the loader has been aborted.
+
+        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
+        Ditto.
+
+        (WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.
+        * NetworkProcess/NetworkResourceLoader.h:
+
</ins><span class="cx"> 2016-08-26  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Cocoa] Infinite recursion calling -charValue on a WKNSNumber
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (205051 => 205052)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp        2016-08-26 22:07:04 UTC (rev 205051)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp        2016-08-26 22:16:36 UTC (rev 205052)
</span><span class="lines">@@ -323,10 +323,7 @@
</span><span class="cx">             m_synchronousLoadData-&gt;response = m_response;
</span><span class="cx">         else {
</span><span class="cx">             RELEASE_LOG_IF_ALLOWED(&quot;Sending didReceiveResponse message to the WebContent process: loader = %p, pageID = %llu, frameID = %llu, isMainResource = %d, isSynchronous = %d&quot;, this, static_cast&lt;unsigned long long&gt;(m_parameters.webPageID), static_cast&lt;unsigned long long&gt;(m_parameters.webFrameID), isMainResource(), isSynchronous());
</span><del>-            if (!sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(m_response, shouldWaitContinueDidReceiveResponse))) {
-                RELEASE_LOG_ERROR_IF_ALLOWED(&quot;Failed to send the didReceiveResponse IPC message to the WebContent process: loader = %p, pageID = %llu, frameID = %llu, isMainResource = %d, isSynchronous = %d&quot;, this, static_cast&lt;unsigned long long&gt;(m_parameters.webPageID), static_cast&lt;unsigned long long&gt;(m_parameters.webFrameID), isMainResource(), isSynchronous());
-                return ShouldContinueDidReceiveResponse::No;
-            }
</del><ins>+            send(Messages::WebResourceLoader::DidReceiveResponse(m_response, shouldWaitContinueDidReceiveResponse));
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -369,7 +366,7 @@
</span><span class="cx">         startBufferingTimerIfNeeded();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    sendBufferMaybeAborting(buffer, encodedDataLength);
</del><ins>+    sendBuffer(buffer, encodedDataLength);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkResourceLoader::didFinishLoading(double finishTime)
</span><span class="lines">@@ -391,9 +388,7 @@
</span><span class="cx">     else {
</span><span class="cx">         if (m_bufferedData &amp;&amp; !m_bufferedData-&gt;isEmpty()) {
</span><span class="cx">             // FIXME: Pass a real value or remove the encoded data size feature.
</span><del>-            bool shouldContinue = sendBufferMaybeAborting(*m_bufferedData, -1);
-            if (!shouldContinue)
-                return;
</del><ins>+            sendBuffer(*m_bufferedData, -1);
</ins><span class="cx">         }
</span><span class="cx">         send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime));
</span><span class="cx">     }
</span><span class="lines">@@ -441,7 +436,7 @@
</span><span class="cx">         continueWillSendRequest(WTFMove(overridenRequest));
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    sendAbortingOnFailure(Messages::WebResourceLoader::WillSendRequest(redirectRequest, redirectResponse));
</del><ins>+    send(Messages::WebResourceLoader::WillSendRequest(redirectRequest, redirectResponse));
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(NETWORK_CACHE)
</span><span class="cx">     if (canUseCachedRedirect(request))
</span><span class="lines">@@ -510,15 +505,15 @@
</span><span class="cx">     m_bufferedData = SharedBuffer::create();
</span><span class="cx">     m_bufferedDataEncodedDataLength = 0;
</span><span class="cx"> 
</span><del>-    sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedLength));
</del><ins>+    send(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedLength));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool NetworkResourceLoader::sendBufferMaybeAborting(SharedBuffer&amp; buffer, size_t encodedDataLength)
</del><ins>+void NetworkResourceLoader::sendBuffer(SharedBuffer&amp; buffer, size_t encodedDataLength)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!isSynchronous());
</span><span class="cx"> 
</span><span class="cx">     IPC::SharedBufferDataReference dataReference(&amp;buffer);
</span><del>-    return sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedDataLength));
</del><ins>+    send(Messages::WebResourceLoader::DidReceiveData(dataReference, encodedDataLength));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(NETWORK_CACHE)
</span><span class="lines">@@ -546,7 +541,7 @@
</span><span class="cx">         sendReplyToSynchronousRequest(*m_synchronousLoadData, entry-&gt;buffer());
</span><span class="cx">     } else {
</span><span class="cx">         bool needsContinueDidReceiveResponseMessage = isMainResource();
</span><del>-        sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(entry-&gt;response(), needsContinueDidReceiveResponseMessage));
</del><ins>+        send(Messages::WebResourceLoader::DidReceiveResponse(entry-&gt;response(), needsContinueDidReceiveResponseMessage));
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><span class="cx">         if (!entry-&gt;shareableResourceHandle().isNull())
</span><span class="lines">@@ -553,9 +548,7 @@
</span><span class="cx">             send(Messages::WebResourceLoader::DidReceiveResource(entry-&gt;shareableResourceHandle(), currentTime()));
</span><span class="cx">         else {
</span><span class="cx"> #endif
</span><del>-            bool shouldContinue = sendBufferMaybeAborting(*entry-&gt;buffer(), entry-&gt;buffer()-&gt;size());
-            if (!shouldContinue)
-                return;
</del><ins>+            sendBuffer(*entry-&gt;buffer(), entry-&gt;buffer()-&gt;size());
</ins><span class="cx">             send(Messages::WebResourceLoader::DidFinishResourceLoad(currentTime()));
</span><span class="cx"> #if ENABLE(SHAREABLE_RESOURCE)
</span><span class="cx">         }
</span><span class="lines">@@ -592,7 +585,7 @@
</span><span class="cx">     LOG(NetworkCache, &quot;(NetworkProcess) Executing cached redirect&quot;);
</span><span class="cx"> 
</span><span class="cx">     ++m_redirectCount;
</span><del>-    sendAbortingOnFailure(Messages::WebResourceLoader::WillSendRequest(*entry-&gt;redirectRequest(), entry-&gt;response()));
</del><ins>+    send(Messages::WebResourceLoader::WillSendRequest(*entry-&gt;redirectRequest(), entry-&gt;response()));
</ins><span class="cx">     m_isWaitingContinueWillSendRequestForCachedRedirect = true;
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="lines">@@ -634,15 +627,6 @@
</span><span class="cx">     m_fileReferences.clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt;
-bool NetworkResourceLoader::sendAbortingOnFailure(T&amp;&amp; message, OptionSet&lt;IPC::SendOption&gt; sendOption)
-{
-    bool result = messageSenderConnection()-&gt;send(std::forward&lt;T&gt;(message), messageSenderDestinationID(), sendOption);
-    if (!result)
-        abort();
-    return result;
-}
-
</del><span class="cx"> void NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync(const ProtectionSpace&amp; protectionSpace)
</span><span class="cx"> {
</span><span class="cx"> #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkResourceLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (205051 => 205052)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h        2016-08-26 22:07:04 UTC (rev 205051)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h        2016-08-26 22:16:36 UTC (rev 205052)
</span><span class="lines">@@ -129,13 +129,11 @@
</span><span class="cx"> 
</span><span class="cx">     void startBufferingTimerIfNeeded();
</span><span class="cx">     void bufferingTimerFired();
</span><del>-    bool sendBufferMaybeAborting(WebCore::SharedBuffer&amp;, size_t encodedDataLength);
</del><ins>+    void sendBuffer(WebCore::SharedBuffer&amp;, size_t encodedDataLength);
</ins><span class="cx"> 
</span><span class="cx">     void consumeSandboxExtensions();
</span><span class="cx">     void invalidateSandboxExtensions();
</span><span class="cx"> 
</span><del>-    template&lt;typename T&gt; bool sendAbortingOnFailure(T&amp;&amp; message, OptionSet&lt;IPC::SendOption&gt; sendOption = { });
-
</del><span class="cx">     const NetworkResourceLoadParameters m_parameters;
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;NetworkConnectionToWebProcess&gt; m_connection;
</span></span></pre>
</div>
</div>

</body>
</html>