Title: [224373] trunk/Source
Revision
224373
Author
[email protected]
Date
2017-11-02 19:54:36 -0700 (Thu, 02 Nov 2017)

Log Message

Use CompletionHandlers for redirects
https://bugs.webkit.org/show_bug.cgi?id=179163

Reviewed by Tim Horton.

Source/WebCore:

Having functions sometimes have to remember to call client->continueWillSendRequest is fragile.
CompletionHandler asserts if it's not called once before destruction, and that's what we need here.
This will prevent future bugs, and make ResourceHandle look more like NetworkDataTask.

No change in behavior.

* loader/NetscapePlugInStreamLoader.cpp:
(WebCore::NetscapePlugInStreamLoader::willSendRequest):
* loader/NetscapePlugInStreamLoader.h:
* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::willSendRequest):
(WebCore::ResourceLoader::willSendRequestAsync):
* loader/ResourceLoader.h:
* loader/appcache/ApplicationCacheGroup.cpp:
(WebCore::ApplicationCacheGroup::willSendRequestAsync):
* loader/appcache/ApplicationCacheGroup.h:
* platform/network/BlobResourceHandle.cpp:
* platform/network/PingHandle.h:
* platform/network/ResourceHandle.h:
* platform/network/ResourceHandleClient.h:
* platform/network/SynchronousLoaderClient.cpp:
(WebCore::SynchronousLoaderClient::willSendRequestAsync):
* platform/network/SynchronousLoaderClient.h:
* platform/network/cf/ResourceHandleCFNet.cpp:
(WebCore::ResourceHandle::willSendRequest):
(WebCore::ResourceHandle::continueWillSendRequest): Deleted.
* platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
* platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
(WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
(WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest): Deleted.
* platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
* platform/network/curl/ResourceHandleCurlDelegate.cpp:
(WebCore::ResourceHandleCurlDelegate::willSendRequest):
* platform/network/mac/ResourceHandleMac.mm:
(WebCore::ResourceHandle::willSendRequest):
(WebCore::ResourceHandle::continueWillSendRequest): Deleted.
* platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
* platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
(-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
(-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]): Deleted.
* platform/network/soup/ResourceHandleSoup.cpp:
(WebCore::doRedirect):
(WebCore::ResourceHandle::continueWillSendRequest): Deleted.

Source/WebKit:

* NetworkProcess/Downloads/BlobDownloadClient.cpp:
(WebKit::BlobDownloadClient::willSendRequestAsync):
* NetworkProcess/Downloads/BlobDownloadClient.h:
* NetworkProcess/NetworkDataTask.h:
* NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::~NetworkLoad):
(WebKit::NetworkLoad::continueWillSendRequest):
(WebKit::NetworkLoad::willSendRequestAsync):
* NetworkProcess/NetworkLoad.h:
* NetworkProcess/NetworkLoadClient.h:
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
(-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
* UIProcess/API/APIDownloadClient.h:
(API::DownloadClient::willSendRequest):
* UIProcess/API/C/WKContext.cpp:
(WKContextSetDownloadClient):
* UIProcess/Cocoa/DownloadClient.h:
* UIProcess/Cocoa/DownloadClient.mm:
(WebKit::DownloadClient::willSendRequest):
* WebProcess/Network/WebResourceLoader.cpp:
(WebKit::WebResourceLoader::willSendRequest):
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::Stream::~Stream):
(WebKit::PluginView::Stream::continueLoad):
(WebKit::PluginView::Stream::willSendRequest):
* WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:

Source/WebKitLegacy/mac:

* Plugins/Hosted/HostedNetscapePluginStream.h:
* Plugins/Hosted/HostedNetscapePluginStream.mm:
(WebKit::HostedNetscapePluginStream::willSendRequest):
* Plugins/WebNetscapePluginStream.h:
* Plugins/WebNetscapePluginStream.mm:
(WebNetscapePluginStream::willSendRequest):

Source/WebKitLegacy/win:

* Plugins/PluginStream.cpp:
(WebCore::PluginStream::willSendRequest):
* Plugins/PluginStream.h:
(WebCore::PluginStreamClient::~PluginStreamClient):
(WebCore::PluginStreamClient::streamDidFinishLoading):
(WebCore::PluginStream::create):
(WebCore::PluginStream::setLoadManually):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (224372 => 224373)


--- trunk/Source/WebCore/ChangeLog	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/ChangeLog	2017-11-03 02:54:36 UTC (rev 224373)
@@ -1,3 +1,54 @@
+2017-11-02  Alex Christensen  <[email protected]>
+
+        Use CompletionHandlers for redirects
+        https://bugs.webkit.org/show_bug.cgi?id=179163
+
+        Reviewed by Tim Horton.
+
+        Having functions sometimes have to remember to call client->continueWillSendRequest is fragile.
+        CompletionHandler asserts if it's not called once before destruction, and that's what we need here.
+        This will prevent future bugs, and make ResourceHandle look more like NetworkDataTask.
+
+        No change in behavior.
+
+        * loader/NetscapePlugInStreamLoader.cpp:
+        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
+        * loader/NetscapePlugInStreamLoader.h:
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::willSendRequest):
+        (WebCore::ResourceLoader::willSendRequestAsync):
+        * loader/ResourceLoader.h:
+        * loader/appcache/ApplicationCacheGroup.cpp:
+        (WebCore::ApplicationCacheGroup::willSendRequestAsync):
+        * loader/appcache/ApplicationCacheGroup.h:
+        * platform/network/BlobResourceHandle.cpp:
+        * platform/network/PingHandle.h:
+        * platform/network/ResourceHandle.h:
+        * platform/network/ResourceHandleClient.h:
+        * platform/network/SynchronousLoaderClient.cpp:
+        (WebCore::SynchronousLoaderClient::willSendRequestAsync):
+        * platform/network/SynchronousLoaderClient.h:
+        * platform/network/cf/ResourceHandleCFNet.cpp:
+        (WebCore::ResourceHandle::willSendRequest):
+        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
+        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
+        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
+        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
+        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest): Deleted.
+        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
+        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
+        (WebCore::ResourceHandleCurlDelegate::willSendRequest):
+        * platform/network/mac/ResourceHandleMac.mm:
+        (WebCore::ResourceHandle::willSendRequest):
+        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
+        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
+        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
+        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
+        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]): Deleted.
+        * platform/network/soup/ResourceHandleSoup.cpp:
+        (WebCore::doRedirect):
+        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
+
 2017-11-02  Christopher Reid  <[email protected]>
 
         Add a FileSystem namespace to FileSystem.cpp

Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp (224372 => 224373)


--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -32,6 +32,7 @@
 #include "DocumentLoader.h"
 #include "FrameLoader.h"
 #include "FrameLoaderClient.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/Ref.h>
 
 #if ENABLE(CONTENT_EXTENSIONS)
@@ -86,11 +87,9 @@
     return true;
 }
 
-void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)
+void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback)
 {
-    RefPtr<NetscapePlugInStreamLoader> protectedThis(this);
-
-    m_client->willSendRequest(this, WTFMove(request), redirectResponse, [protectedThis, redirectResponse, callback = WTFMove(callback)](ResourceRequest request) {
+    m_client->willSendRequest(this, WTFMove(request), redirectResponse, [protectedThis = makeRef(*this), redirectResponse, callback = WTFMove(callback)](ResourceRequest request) mutable {
         if (!request.isNull())
             protectedThis->willSendRequestInternal(request, redirectResponse);
 

Modified: trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h (224372 => 224373)


--- trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -38,7 +38,7 @@
 
 class NetscapePlugInStreamLoaderClient {
 public:
-    virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) = 0;
+    virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) = 0;
     virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) = 0;
     virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) = 0;
     virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&) = 0;
@@ -59,7 +59,7 @@
 private:
     bool init(const ResourceRequest&) override;
 
-    void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback) override;
+    void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback) override;
     void didReceiveResponse(const ResourceResponse&) override;
     void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
     void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;

Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (224372 => 224373)


--- trunk/Source/WebCore/loader/ResourceLoader.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -50,6 +50,7 @@
 #include "ResourceHandle.h"
 #include "SecurityOrigin.h"
 #include "SharedBuffer.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/Ref.h>
 
 #if ENABLE(CONTENT_EXTENSIONS)
@@ -420,7 +421,7 @@
     }
 }
 
-void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)
+void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback)
 {
     willSendRequestInternal(request, redirectResponse);
     callback(WTFMove(request));
@@ -638,15 +639,15 @@
     return frameLoader()->client().cannotShowURLError(m_request);
 }
 
-void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse)
+void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     RefPtr<ResourceHandle> protectedHandle(handle);
     if (documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(this, request, redirectResponse)) {
-        handle->continueWillSendRequest(WTFMove(request));
+        completionHandler(WTFMove(request));
         return;
     }
     willSendRequestInternal(request, redirectResponse);
-    handle->continueWillSendRequest(WTFMove(request));
+    completionHandler(WTFMove(request));
 }
 
 void ResourceLoader::didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)

Modified: trunk/Source/WebCore/loader/ResourceLoader.h (224372 => 224373)


--- trunk/Source/WebCore/loader/ResourceLoader.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/ResourceLoader.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -98,7 +98,7 @@
     
     virtual bool isSubresourceLoader();
 
-    virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback);
+    virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback);
     virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
     virtual void didReceiveResponse(const ResourceResponse&);
     virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType);
@@ -187,7 +187,7 @@
     // ResourceHandleClient
     void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
     void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) override;
-    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override;
+    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override;
     void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
     void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedDataLength) override;
     void didFinishLoading(ResourceHandle*) override;

Modified: trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp (224372 => 224373)


--- trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -48,6 +48,7 @@
 #include "ResourceHandle.h"
 #include "SecurityOrigin.h"
 #include "Settings.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/HashMap.h>
 #include <wtf/MainThread.h>
 
@@ -562,9 +563,9 @@
     handle->continueDidReceiveResponse();
 }
 
-void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
+void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
-    handle->continueWillSendRequest(WTFMove(request));
+    completionHandler(WTFMove(request));
 }
 
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h (224372 => 224373)


--- trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -110,7 +110,7 @@
 
     // ResourceHandleClient
     void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final;
-    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) final;
+    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final;
 #endif

Modified: trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -45,6 +45,7 @@
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
 #include "SharedBuffer.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/MainThread.h>
 #include <wtf/Ref.h>
 
@@ -76,7 +77,7 @@
 
     void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final;
     void didFail(ResourceHandle*, const ResourceError&) final;
-    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) final;
+    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final;
 #endif
@@ -94,10 +95,10 @@
 {
 }
 
-void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
+void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     ASSERT_NOT_REACHED();
-    handle->continueWillSendRequest(WTFMove(request));
+    completionHandler(WTFMove(request));
 }
 
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebCore/platform/network/PingHandle.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/PingHandle.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/PingHandle.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -57,14 +57,14 @@
     }
 
 private:
-    void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&) final
+    void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final
     {
         m_currentRequest = WTFMove(request);
         if (m_shouldFollowRedirects) {
-            m_handle->continueWillSendRequest(ResourceRequest { m_currentRequest });
+            completionHandler(ResourceRequest { m_currentRequest });
             return;
         }
-        m_handle->continueWillSendRequest({ });
+        completionHandler({ });
         pingLoadComplete(ResourceError { String(), 0, m_currentRequest.url(), ASCIILiteral("Not allowed to follow redirects"), ResourceError::Type::AccessControl });
     }
     void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&& response) final

Modified: trunk/Source/WebCore/platform/network/ResourceHandle.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/ResourceHandle.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/ResourceHandle.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -104,7 +104,7 @@
     WEBCORE_EXPORT virtual ~ResourceHandle();
 
 #if PLATFORM(COCOA) || USE(CFURLCONNECTION)
-    ResourceRequest willSendRequest(ResourceRequest&&, ResourceResponse&&);
+    void willSendRequest(ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&);
 #endif
 
     void didReceiveResponse(ResourceResponse&&);
@@ -193,9 +193,6 @@
     WEBCORE_EXPORT ResourceHandleClient* client() const;
     WEBCORE_EXPORT void clearClient();
 
-    // Called in response to ResourceHandleClient::willSendRequestAsync().
-    WEBCORE_EXPORT void continueWillSendRequest(ResourceRequest&&);
-
     // Called in response to ResourceHandleClient::didReceiveResponseAsync().
     WEBCORE_EXPORT virtual void continueDidReceiveResponse();
 

Modified: trunk/Source/WebCore/platform/network/ResourceHandleClient.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/ResourceHandleClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/ResourceHandleClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -26,6 +26,7 @@
 #pragma once
 
 #include "PlatformExportMacros.h"
+#include <wtf/Forward.h>
 #include <wtf/Ref.h>
 
 #if USE(CFURLCONNECTION)
@@ -75,8 +76,7 @@
 
     virtual bool loadingSynchronousXHR() { return false; }
 
-    // Client will pass an updated request using ResourceHandle::continueWillSendRequest() when ready.
-    WEBCORE_EXPORT virtual void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) = 0;
+    WEBCORE_EXPORT virtual void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) = 0;
 
     // Client will call ResourceHandle::continueDidReceiveResponse() when ready.
     WEBCORE_EXPORT virtual void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) = 0;

Modified: trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -29,22 +29,23 @@
 #include "AuthenticationChallenge.h"
 #include "ResourceHandle.h"
 #include "ResourceRequest.h"
+#include <wtf/CompletionHandler.h>
 
 namespace WebCore {
 
 SynchronousLoaderClient::~SynchronousLoaderClient() = default;
 
-void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
+void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     // FIXME: This needs to be fixed to follow the redirect correctly even for cross-domain requests.
     if (protocolHostAndPortAreEqual(handle->firstRequest().url(), request.url())) {
-        handle->continueWillSendRequest(WTFMove(request));
+        completionHandler(WTFMove(request));
         return;
     }
 
     ASSERT(m_error.isNull());
     m_error = platformBadResponseError();
-    handle->continueWillSendRequest({ });
+    completionHandler({ });
 }
 
 bool SynchronousLoaderClient::shouldUseCredentialStorage(ResourceHandle*)

Modified: trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -46,7 +46,7 @@
     WEBCORE_EXPORT static ResourceError platformBadResponseError();
 
 private:
-    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override;
+    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override;
     bool shouldUseCredentialStorage(ResourceHandle*) override;
     void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) override;
     void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) override;

Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -48,6 +48,7 @@
 #include <pal/spi/cf/CFNetworkSPI.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/HashMap.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/Ref.h>
@@ -285,7 +286,7 @@
     }
 }
 
-ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)
+void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     const URL& url = ""
     d->m_user = url.user();
@@ -314,9 +315,11 @@
         }
     }
 
-    Ref<ResourceHandle> protectedThis(*this);
-    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse));
-    return { };
+    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request) mutable {
+        if (!request.isNull())
+            request.setStorageSession(d->m_storageSession.get());
+        completionHandler(WTFMove(request));
+    });
 }
 
 bool ResourceHandle::shouldUseCredentialStorage()
@@ -663,13 +666,6 @@
     return d->m_currentRequest;
 }
 
-void ResourceHandle::continueWillSendRequest(ResourceRequest&& request)
-{
-    if (!request.isNull())
-        request.setStorageSession(d->m_storageSession.get());
-    d->m_connectionDelegate->continueWillSendRequest(request.cfURLRequest(UpdateHTTPBody));
-}
-
 void ResourceHandle::continueDidReceiveResponse()
 {
     d->m_connectionDelegate->continueDidReceiveResponse();

Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -46,7 +46,6 @@
     virtual void setupConnectionScheduling(CFURLConnectionRef) = 0;
     virtual void releaseHandle();
 
-    virtual void continueWillSendRequest(CFURLRequestRef) = 0;
     virtual void continueDidReceiveResponse() = 0;
     virtual void continueWillCacheResponse(CFCachedURLResponseRef) = 0;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -40,6 +40,7 @@
 #include "WebCoreURLResponse.h"
 #endif
 #include <pal/spi/cf/CFNetworkSPI.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/MainThread.h>
 #include <wtf/Threading.h>
 #include <wtf/text/CString.h>
@@ -152,23 +153,27 @@
 
     ASSERT(!isMainThread());
     
-    auto work = [protectedThis = makeRef(*this), cfRequest = RetainPtr<CFURLRequestRef>(cfRequest), originalRedirectResponse = RetainPtr<CFURLResponseRef>(originalRedirectResponse)] () {
+    auto work = [this, protectedThis = makeRef(*this), cfRequest = RetainPtr<CFURLRequestRef>(cfRequest), originalRedirectResponse = RetainPtr<CFURLResponseRef>(originalRedirectResponse)] () mutable {
         auto& handle = protectedThis->m_handle;
-        
-        if (!protectedThis->hasHandle()) {
-            protectedThis->continueWillSendRequest(nullptr);
+        auto completionHandler = [this, protectedThis = WTFMove(protectedThis)] (ResourceRequest&& request) {
+            m_requestResult = request.cfURLRequest(UpdateHTTPBody);
+            m_semaphore.signal();
+        };
+
+        if (!hasHandle()) {
+            completionHandler({ });
             return;
         }
 
         LOG(Network, "CFNet - ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest(handle=%p) (%s)", handle, handle->firstRequest().url().string().utf8().data());
 
-        RetainPtr<CFURLResponseRef> redirectResponse = protectedThis->synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get());
+        RetainPtr<CFURLResponseRef> redirectResponse = synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get());
         ASSERT(redirectResponse);
 
-        ResourceRequest request = protectedThis->createResourceRequest(cfRequest.get(), redirectResponse.get());
-        handle->willSendRequest(WTFMove(request), redirectResponse.get());
+        ResourceRequest request = createResourceRequest(cfRequest.get(), redirectResponse.get());
+        handle->willSendRequest(WTFMove(request), redirectResponse.get(), WTFMove(completionHandler));
     };
-    
+
     if (m_messageQueue)
         m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work)));
     else
@@ -405,12 +410,6 @@
 }
 #endif // USE(PROTECTION_SPACE_AUTH_CALLBACK)
 
-void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest(CFURLRequestRef request)
-{
-    m_requestResult = request;
-    m_semaphore.signal();
-}
-
 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse()
 {
     m_semaphore.signal();

Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -58,7 +58,6 @@
     void didSendBodyData(CFIndex totalBytesWritten, CFIndex totalBytesExpectedToWrite) override;
     Boolean shouldUseCredentialStorage() override;
 
-    void continueWillSendRequest(CFURLRequestRef) override;
     void continueDidReceiveResponse() override;
     void continueWillCacheResponse(CFCachedURLResponseRef) override;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -41,6 +41,7 @@
 #include "ResourceHandleInternal.h"
 #include "SharedBuffer.h"
 #include "TextEncoding.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/text/Base64.h>
 
 namespace WebCore {
@@ -363,7 +364,9 @@
     }
 
     ResourceResponse responseCopy = response();
-    m_handle->client()->willSendRequestAsync(m_handle, WTFMove(newRequest), WTFMove(responseCopy));
+    m_handle->client()->willSendRequestAsync(m_handle, WTFMove(newRequest), WTFMove(responseCopy), [this, protectedThis = makeRef(*this)] (ResourceRequest&& request) {
+        continueWillSendRequest(WTFMove(request));
+    });
 }
 
 void ResourceHandleCurlDelegate::continueWillSendRequest(ResourceRequest&& request)

Modified: trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm (224372 => 224373)


--- trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -49,6 +49,7 @@
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <pal/spi/cocoa/NSURLConnectionSPI.h>
 #import <wtf/BlockObjCExceptions.h>
+#import <wtf/CompletionHandler.h>
 #import <wtf/Ref.h>
 #import <wtf/SchedulePair.h>
 #import <wtf/text/Base64.h>
@@ -435,7 +436,7 @@
     data.swap(client.mutableData());
 }
 
-ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)
+void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     ASSERT(!redirectResponse.isNull());
 
@@ -483,18 +484,14 @@
         }
     }
 
-    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse));
-    return { };
+    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request) mutable {
+        // Client call may not preserve the session, especially if the request is sent over IPC.
+        if (!request.isNull())
+            request.setStorageSession(d->m_storageSession.get());
+        completionHandler(WTFMove(request));
+    });
 }
 
-void ResourceHandle::continueWillSendRequest(ResourceRequest&& newRequest)
-{
-    // Client call may not preserve the session, especially if the request is sent over IPC.
-    if (!newRequest.isNull())
-        newRequest.setStorageSession(d->m_storageSession.get());
-    [(id)delegate() continueWillSendRequest:newRequest.nsURLRequest(UpdateHTTPBody)];
-}
-
 void ResourceHandle::continueDidReceiveResponse()
 {
     [delegate() continueDidReceiveResponse];

Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h (224372 => 224373)


--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -49,7 +49,6 @@
 
 - (void)detachHandle;
 - (id)initWithHandle:(WebCore::ResourceHandle*)handle messageQueue:(MessageQueue<Function<void()>>*)messageQueue;
-- (void)continueWillSendRequest:(NSURLRequest *)newRequest;
 - (void)continueDidReceiveResponse;
 - (void)continueCanAuthenticateAgainstProtectionSpace:(BOOL)canAuthenticate;
 - (void)continueWillCacheResponse:(NSCachedURLResponse *)response;

Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm (224372 => 224373)


--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -74,12 +74,6 @@
     [super dealloc];
 }
 
-- (void)continueWillSendRequest:(NSURLRequest *)newRequest
-{
-    m_requestResult = newRequest;
-    dispatch_semaphore_signal(m_semaphore);
-}
-
 - (void)continueDidReceiveResponse
 {
     dispatch_semaphore_signal(m_semaphore);
@@ -122,10 +116,12 @@
             return;
         }
 
-        m_handle->willSendRequest(newRequest.get(), redirectResponse.get());
+        m_handle->willSendRequest(newRequest.get(), redirectResponse.get(), [self, protectedSelf = WTFMove(protectedSelf)](ResourceRequest&& request) {
+            m_requestResult = request.nsURLRequest(UpdateHTTPBody);
+            dispatch_semaphore_signal(m_semaphore);
+        });
     };
 
-    
     if (m_messageQueue)
         m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work)));
     else

Modified: trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp (224372 => 224373)


--- trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -56,6 +56,7 @@
 #if !COMPILER(MSVC)
 #include <unistd.h>
 #endif
+#include <wtf/CompletionHandler.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/glib/GRefPtr.h>
 #include <wtf/glib/RunLoopSourcePriority.h>
@@ -353,7 +354,9 @@
     cleanupSoupRequestOperation(handle);
 
     ResourceResponse responseCopy = d->m_response;
-    d->client()->willSendRequestAsync(handle, WTFMove(newRequest), WTFMove(responseCopy));
+    d->client()->willSendRequestAsync(handle, WTFMove(newRequest), WTFMove(responseCopy), [handle = makeRef(*handle)] (ResourceRequest&& request) {
+        continueAfterWillSendRequest(handle.ptr(), WTFMove(request));
+    });
 }
 
 static void redirectSkipCallback(GObject*, GAsyncResult* asyncResult, gpointer data)
@@ -1024,11 +1027,6 @@
         d->m_cancellable.get(), readCallback, handle.get());
 }
 
-void ResourceHandle::continueWillSendRequest(ResourceRequest&& request)
-{
-    continueAfterWillSendRequest(this, WTFMove(request));
-}
-
 void ResourceHandle::continueDidReceiveResponse()
 {
     continueAfterDidReceiveResponse(this);

Modified: trunk/Source/WebKit/ChangeLog (224372 => 224373)


--- trunk/Source/WebKit/ChangeLog	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/ChangeLog	2017-11-03 02:54:36 UTC (rev 224373)
@@ -1,3 +1,38 @@
+2017-11-02  Alex Christensen  <[email protected]>
+
+        Use CompletionHandlers for redirects
+        https://bugs.webkit.org/show_bug.cgi?id=179163
+
+        Reviewed by Tim Horton.
+
+        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
+        (WebKit::BlobDownloadClient::willSendRequestAsync):
+        * NetworkProcess/Downloads/BlobDownloadClient.h:
+        * NetworkProcess/NetworkDataTask.h:
+        * NetworkProcess/NetworkLoad.cpp:
+        (WebKit::NetworkLoad::~NetworkLoad):
+        (WebKit::NetworkLoad::continueWillSendRequest):
+        (WebKit::NetworkLoad::willSendRequestAsync):
+        * NetworkProcess/NetworkLoad.h:
+        * NetworkProcess/NetworkLoadClient.h:
+        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
+        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
+        * UIProcess/API/APIDownloadClient.h:
+        (API::DownloadClient::willSendRequest):
+        * UIProcess/API/C/WKContext.cpp:
+        (WKContextSetDownloadClient):
+        * UIProcess/Cocoa/DownloadClient.h:
+        * UIProcess/Cocoa/DownloadClient.mm:
+        (WebKit::DownloadClient::willSendRequest):
+        * WebProcess/Network/WebResourceLoader.cpp:
+        (WebKit::WebResourceLoader::willSendRequest):
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::Stream::~Stream):
+        (WebKit::PluginView::Stream::continueLoad):
+        (WebKit::PluginView::Stream::willSendRequest):
+        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
+
 2017-11-02  Christopher Reid  <[email protected]>
 
         Add a FileSystem namespace to FileSystem.cpp

Modified: trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.cpp (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -35,6 +35,7 @@
 #include <WebCore/ResourceError.h>
 #include <WebCore/ResourceResponse.h>
 #include <WebCore/SharedBuffer.h>
+#include <wtf/CompletionHandler.h>
 
 namespace WebKit {
 
@@ -71,9 +72,10 @@
     m_download.continueDidReceiveResponse();
 }
 
-void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&)
+void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
     ASSERT_NOT_REACHED();
+    completionHandler(WTFMove(request));
 }
 
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Modified: trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.h (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -49,7 +49,7 @@
     void didReceiveBuffer(WebCore::ResourceHandle*, Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) final;
     void didFinishLoading(WebCore::ResourceHandle*) final;
     void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&) final;
-    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&&) final;
+    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     void canAuthenticateAgainstProtectionSpaceAsync(WebCore::ResourceHandle*, const WebCore::ProtectionSpace&) final;
 #endif

Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -54,7 +54,7 @@
 class PendingDownload;
 enum class AuthenticationChallengeDisposition;
 
-using RedirectCompletionHandler = CompletionHandler<void(const WebCore::ResourceRequest&)>;
+using RedirectCompletionHandler = CompletionHandler<void(WebCore::ResourceRequest&&)>;
 using ChallengeCompletionHandler = CompletionHandler<void(AuthenticationChallengeDisposition, const WebCore::Credential&)>;
 using ResponseCompletionHandler = CompletionHandler<void(WebCore::PolicyAction)>;
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -133,11 +133,11 @@
 NetworkLoad::~NetworkLoad()
 {
     ASSERT(RunLoop::isMain());
+    if (m_redirectCompletionHandler)
+        m_redirectCompletionHandler({ });
 #if USE(NETWORK_SESSION)
     if (m_responseCompletionHandler)
         m_responseCompletionHandler(PolicyAction::Ignore);
-    if (m_redirectCompletionHandler)
-        m_redirectCompletionHandler({ });
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
     if (m_challengeCompletionHandler)
         m_challengeCompletionHandler(AuthenticationChallengeDisposition::Cancel, { });
@@ -211,7 +211,7 @@
     }
 
     if (redirectCompletionHandler)
-        redirectCompletionHandler(m_currentRequest);
+        redirectCompletionHandler(ResourceRequest(m_currentRequest));
 #else
     if (m_currentRequest.isNull()) {
         if (m_handle)
@@ -219,7 +219,9 @@
         didFail(m_handle.get(), cancelledError(m_currentRequest));
     } else if (m_handle) {
         auto currentRequestCopy = m_currentRequest;
-        m_handle->continueWillSendRequest(WTFMove(currentRequestCopy));
+        auto redirectCompletionHandler = std::exchange(m_redirectCompletionHandler, nullptr);
+        ASSERT(redirectCompletionHandler);
+        redirectCompletionHandler(WTFMove(currentRequestCopy));
     }
 #endif
 }
@@ -490,8 +492,10 @@
     m_client.get().didFailLoading(error);
 }
 
-void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse)
+void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
 {
+    ASSERT(!m_redirectCompletionHandler);
+    m_redirectCompletionHandler = WTFMove(completionHandler);
     ASSERT_UNUSED(handle, handle == m_handle);
     sharedWillSendRedirectedRequest(WTFMove(request), WTFMove(redirectResponse));
 }

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoad.h (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoad.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoad.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -23,13 +23,13 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef NetworkLoad_h
-#define NetworkLoad_h
+#pragma once
 
 #include "NetworkLoadClient.h"
 #include "NetworkLoadParameters.h"
 #include "RemoteNetworkingContext.h"
 #include <WebCore/ResourceHandleClient.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/Optional.h>
 
 #if USE(NETWORK_SESSION)
@@ -115,7 +115,7 @@
 
 #if !USE(NETWORK_SESSION)
     // ResourceHandleClient
-    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse) final;
+    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
     void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
     void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&&) final;
     void didReceiveData(WebCore::ResourceHandle*, const char*, unsigned, int encodedDataLength) final;
@@ -147,6 +147,7 @@
 
     std::reference_wrapper<NetworkLoadClient> m_client;
     const NetworkLoadParameters m_parameters;
+    CompletionHandler<void(WebCore::ResourceRequest&&)> m_redirectCompletionHandler;
 #if USE(NETWORK_SESSION)
     RefPtr<NetworkDataTask> m_task;
     std::optional<WebCore::AuthenticationChallenge> m_challenge;
@@ -154,7 +155,6 @@
     ChallengeCompletionHandler m_challengeCompletionHandler;
 #endif
     ResponseCompletionHandler m_responseCompletionHandler;
-    RedirectCompletionHandler m_redirectCompletionHandler;
     
     struct Throttle;
     std::unique_ptr<Throttle> m_throttle;
@@ -173,5 +173,3 @@
 };
 
 } // namespace WebKit
-
-#endif // NetworkLoad_h

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -30,10 +30,6 @@
 #include <WebCore/ResourceResponse.h>
 #include <wtf/Forward.h>
 
-#if PLATFORM(COCOA)
-typedef const struct _CFCachedURLResponse* CFCachedURLResponseRef;
-#endif
-
 namespace WebCore {
 class NetworkLoadMetrics;
 class ProtectionSpace;

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (224372 => 224373)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -172,7 +172,7 @@
 
     if (auto* networkDataTask = [self existingTask:task]) {
         auto completionHandlerCopy = Block_copy(completionHandler);
-        networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto& request) {
+        networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto&& request) {
 #if !LOG_DISABLED
             LOG(NetworkSession, "%llu willPerformHTTPRedirection completionHandler (%s)", taskIdentifier, request.url().string().utf8().data());
 #else
@@ -194,7 +194,7 @@
     
     if (auto* networkDataTask = [self existingTask:task]) {
         auto completionHandlerCopy = Block_copy(completionHandler);
-        networkDataTask->willPerformHTTPRedirection(WebCore::synthesizeRedirectResponseIfNecessary([task currentRequest], request, nil), request, [completionHandlerCopy, taskIdentifier](auto& request) {
+        networkDataTask->willPerformHTTPRedirection(WebCore::synthesizeRedirectResponseIfNecessary([task currentRequest], request, nil), request, [completionHandlerCopy, taskIdentifier](auto&& request) {
 #if !LOG_DISABLED
             LOG(NetworkSession, "%llu _schemeUpgraded completionHandler (%s)", taskIdentifier, request.url().string().utf8().data());
 #else

Modified: trunk/Source/WebKit/UIProcess/API/APIDownloadClient.h (224372 => 224373)


--- trunk/Source/WebKit/UIProcess/API/APIDownloadClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/UIProcess/API/APIDownloadClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -25,7 +25,7 @@
 
 #pragma once
 
-#include <wtf/Function.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -62,7 +62,7 @@
     virtual void didFail(WebKit::WebProcessPool&, WebKit::DownloadProxy&, const WebCore::ResourceError&) { }
     virtual void didCancel(WebKit::WebProcessPool&, WebKit::DownloadProxy&) { }
     virtual void processDidCrash(WebKit::WebProcessPool&, WebKit::DownloadProxy&) { }
-    virtual void willSendRequest(WebKit::WebProcessPool&, WebKit::DownloadProxy&, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
+    virtual void willSendRequest(WebKit::WebProcessPool&, WebKit::DownloadProxy&, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
 };
 
 } // namespace API

Modified: trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp (224372 => 224373)


--- trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -264,12 +264,12 @@
             m_client.processDidCrash(toAPI(&processPool), toAPI(&downloadProxy), m_client.base.clientInfo);
         }
 
-        void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, Function<void(ResourceRequest&&)>&& callback) final
+        void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final
         {
             if (m_client.didReceiveServerRedirect)
                 m_client.didReceiveServerRedirect(toAPI(&processPool), toAPI(&downloadProxy), toURLRef(request.url().string().impl()), m_client.base.clientInfo);
 
-            callback(WTFMove(request));
+            completionHandler(WTFMove(request));
         }
 
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.h (224372 => 224373)


--- trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -54,7 +54,7 @@
     void didFinish(WebProcessPool&, DownloadProxy&) final;
     void didFail(WebProcessPool&, DownloadProxy&, const WebCore::ResourceError&) final;
     void didCancel(WebProcessPool&, DownloadProxy&) final;
-    void willSendRequest(WebProcessPool&, DownloadProxy&, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&&) final;
+    void willSendRequest(WebProcessPool&, DownloadProxy&, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
     void didReceiveAuthenticationChallenge(WebProcessPool&, DownloadProxy&, AuthenticationChallengeProxy&) final;
 #if !USE(NETWORK_SESSION)
     bool shouldDecodeSourceDataOfMIMEType(WebProcessPool&, DownloadProxy&, const String&) final;

Modified: trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm (224372 => 224373)


--- trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -185,12 +185,12 @@
         [m_delegate _downloadDidCancel:wrapper(downloadProxy)];
 }
 
-void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&& callback)
+void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& completionHandler)
 {
     if (m_delegateMethods.downloadDidReceiveServerRedirectToURL)
         [m_delegate _download:wrapper(downloadProxy) didReceiveServerRedirectToURL:[NSURL _web_URLWithWTFString:request.url().string()]];
 
-    callback(WTFMove(request));
+    completionHandler(WTFMove(request));
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp (224372 => 224373)


--- trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -43,6 +43,7 @@
 #include <WebCore/ResourceError.h>
 #include <WebCore/ResourceLoader.h>
 #include <WebCore/SubresourceLoader.h>
+#include <wtf/CompletionHandler.h>
 
 using namespace WebCore;
 
@@ -85,12 +86,10 @@
     LOG(Network, "(WebProcess) WebResourceLoader::willSendRequest to '%s'", proposedRequest.url().string().latin1().data());
     RELEASE_LOG_IF_ALLOWED("willSendRequest: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", m_trackingParameters.pageID, m_trackingParameters.frameID, m_trackingParameters.resourceID);
 
-    RefPtr<WebResourceLoader> protectedThis(this);
-
     if (m_coreLoader->documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(m_coreLoader.get(), proposedRequest, redirectResponse))
         return;
 
-    m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis](ResourceRequest&& request) {
+    m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis = makeRef(*this)](ResourceRequest&& request) {
         if (!protectedThis->m_coreLoader)
             return;
 

Modified: trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp (224372 => 224373)


--- trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -70,6 +70,7 @@
 #include <WebCore/Settings.h>
 #include <WebCore/UserGestureIndicator.h>
 #include <bindings/ScriptValue.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/text/StringBuilder.h>
 
 #if PLATFORM(X11)
@@ -133,7 +134,7 @@
     }
 
     // NetscapePluginStreamLoaderClient
-    void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) override;
+    void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
     void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
     void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
     void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
@@ -142,7 +143,7 @@
     PluginView* m_pluginView;
     uint64_t m_streamID;
     ResourceRequest m_request;
-    WTF::Function<void (ResourceRequest)> m_loadCallback;
+    CompletionHandler<void(ResourceRequest&&)> m_loadCallback;
 
     // True if the stream was explicitly cancelled by calling cancel().
     // (As opposed to being cancelled by the user hitting the stop button for example.
@@ -153,6 +154,8 @@
 
 PluginView::Stream::~Stream()
 {
+    if (m_loadCallback)
+        m_loadCallback({ });
     ASSERT(!m_pluginView);
 }
     
@@ -181,7 +184,7 @@
     ASSERT(m_pluginView->m_plugin);
     ASSERT(m_loadCallback);
 
-    m_loadCallback(m_request);
+    m_loadCallback(ResourceRequest(m_request));
 }
 
 static String buildHTTPHeaders(const ResourceResponse& response, long long& expectedContentLength)
@@ -221,7 +224,7 @@
     return std::chrono::duration_cast<std::chrono::milliseconds>(lastModified.value().time_since_epoch()).count();
 }
 
-void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&& decisionHandler)
+void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& decisionHandler)
 {
     const URL& requestURL = request.url();
     const URL& redirectResponseURL = redirectResponse.url();

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp (224372 => 224373)


--- trunk/Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -33,6 +33,7 @@
 #include <WebCore/NetworkLoadMetrics.h>
 #include <WebCore/ResourceError.h>
 #include <WebCore/ResourceLoader.h>
+#include <wtf/CompletionHandler.h>
 #include <wtf/CurrentTime.h>
 
 using namespace WebCore;

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (224372 => 224373)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2017-11-03 02:54:36 UTC (rev 224373)
@@ -1,3 +1,17 @@
+2017-11-02  Alex Christensen  <[email protected]>
+
+        Use CompletionHandlers for redirects
+        https://bugs.webkit.org/show_bug.cgi?id=179163
+
+        Reviewed by Tim Horton.
+
+        * Plugins/Hosted/HostedNetscapePluginStream.h:
+        * Plugins/Hosted/HostedNetscapePluginStream.mm:
+        (WebKit::HostedNetscapePluginStream::willSendRequest):
+        * Plugins/WebNetscapePluginStream.h:
+        * Plugins/WebNetscapePluginStream.mm:
+        (WebNetscapePluginStream::willSendRequest):
+
 2017-11-02  Christopher Reid  <[email protected]>
 
         Add a FileSystem namespace to FileSystem.cpp

Modified: trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.h (224372 => 224373)


--- trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -86,7 +86,7 @@
     NSError *pluginCancelledConnectionError() const;
 
     // NetscapePlugInStreamLoaderClient methods.
-    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, WTF::Function<void (WebCore::ResourceRequest&&)>&&) override;
+    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) override;
     void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override;
     bool wantsAllStreams() const override;
     

Modified: trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.mm (224372 => 224373)


--- trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -45,6 +45,7 @@
 #import <WebCore/SecurityPolicy.h>
 #import <WebCore/WebCoreURLResponse.h>
 #import <pal/spi/cf/CFNetworkSPI.h>
+#import <wtf/CompletionHandler.h>
 #import <wtf/RefCountedLeakCounter.h>
 
 using namespace WebCore;
@@ -130,7 +131,7 @@
     m_instance->disconnectStream(this);
 }
 
-void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
+void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
 {
     // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
     callback(WTFMove(request));

Modified: trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.h (224372 => 224373)


--- trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -97,7 +97,7 @@
     NSError *pluginCancelledConnectionError() const;
 
     // NetscapePlugInStreamLoaderClient methods.
-    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, WTF::Function<void (WebCore::ResourceRequest&&)>&&) override;
+    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) override;
     void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override;
     void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&) override;
     bool wantsAllStreams() const override;

Modified: trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.mm (224372 => 224373)


--- trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.mm	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.mm	2017-11-03 02:54:36 UTC (rev 224373)
@@ -53,6 +53,7 @@
 #import <WebCore/WebCoreURLResponse.h>
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <runtime/JSLock.h>
+#import <wtf/CompletionHandler.h>
 #import <wtf/HashMap.h>
 #import <wtf/NeverDestroyed.h>
 #import <wtf/StdLibExtras.h>
@@ -301,7 +302,7 @@
         cancelLoadAndDestroyStreamWithError(m_loader->cancelledError());
 }
 
-void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
+void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
 {
     // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
     callback(WTFMove(request));

Modified: trunk/Source/WebKitLegacy/win/ChangeLog (224372 => 224373)


--- trunk/Source/WebKitLegacy/win/ChangeLog	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/win/ChangeLog	2017-11-03 02:54:36 UTC (rev 224373)
@@ -1,3 +1,18 @@
+2017-11-02  Alex Christensen  <[email protected]>
+
+        Use CompletionHandlers for redirects
+        https://bugs.webkit.org/show_bug.cgi?id=179163
+
+        Reviewed by Tim Horton.
+
+        * Plugins/PluginStream.cpp:
+        (WebCore::PluginStream::willSendRequest):
+        * Plugins/PluginStream.h:
+        (WebCore::PluginStreamClient::~PluginStreamClient):
+        (WebCore::PluginStreamClient::streamDidFinishLoading):
+        (WebCore::PluginStream::create):
+        (WebCore::PluginStream::setLoadManually):
+
 2017-11-02  Christopher Reid  <[email protected]>
 
         Add a FileSystem namespace to FileSystem.cpp

Modified: trunk/Source/WebKitLegacy/win/Plugins/PluginStream.cpp (224372 => 224373)


--- trunk/Source/WebKitLegacy/win/Plugins/PluginStream.cpp	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/win/Plugins/PluginStream.cpp	2017-11-03 02:54:36 UTC (rev 224373)
@@ -35,6 +35,7 @@
 #include "SharedBuffer.h"
 #include "SubresourceLoader.h"
 #include "WebResourceLoadScheduler.h"
+#include <wtf/CompletionHandler.h>
 #include <wtf/StringExtras.h>
 #include <wtf/text/CString.h>
 #include <wtf/text/StringBuilder.h>
@@ -404,7 +405,7 @@
     destroyStream(resultString.isNull() ? NPRES_NETWORK_ERR : NPRES_DONE);
 }
 
-void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
+void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
 {
     // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
     callback(WTFMove(request));

Modified: trunk/Source/WebKitLegacy/win/Plugins/PluginStream.h (224372 => 224373)


--- trunk/Source/WebKitLegacy/win/Plugins/PluginStream.h	2017-11-03 02:50:59 UTC (rev 224372)
+++ trunk/Source/WebKitLegacy/win/Plugins/PluginStream.h	2017-11-03 02:54:36 UTC (rev 224373)
@@ -24,8 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef PluginStream_h
-#define PluginStream_h
+#pragma once
 
 #include "FileSystem.h"
 #include "URL.h"
@@ -43,83 +42,81 @@
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
-    class Frame;
-    class PluginStream;
+class Frame;
+class PluginStream;
 
-    enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
+enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
 
-    class PluginStreamClient {
-    public:
-        virtual ~PluginStreamClient() {}
-        virtual void streamDidFinishLoading(PluginStream*) {}
-    };
+class PluginStreamClient {
+public:
+    virtual ~PluginStreamClient() { }
+    virtual void streamDidFinishLoading(PluginStream*) { }
+};
 
-    class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient {
-    public:
-        static Ref<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks)
-        {
-            return adoptRef(*new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks));
-        }
-        virtual ~PluginStream();
-        
-        void start();
-        void stop();
+class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient {
+public:
+    static Ref<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks)
+    {
+        return adoptRef(*new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks));
+    }
+    virtual ~PluginStream();
+    
+    void start();
+    void stop();
 
-        void startStream();
+    void startStream();
 
-        void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
+    void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
 
-        void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString);
-        void cancelAndDestroyStream(NPReason);
+    void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString);
+    void cancelAndDestroyStream(NPReason);
 
-        static NPP ownerForStream(NPStream*);
+    static NPP ownerForStream(NPStream*);
 
-    private:
-        PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
+private:
+    PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
 
-        void deliverData();
-        void destroyStream(NPReason);
-        void destroyStream();
+    void deliverData();
+    void destroyStream(NPReason);
+    void destroyStream();
 
-        // NetscapePlugInStreamLoaderClient
-        void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) override;
-        void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
-        void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
-        void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
-        void didFinishLoading(NetscapePlugInStreamLoader*) override;
-        bool wantsAllStreams() const override;
+    // NetscapePlugInStreamLoaderClient
+    void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
+    void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
+    void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
+    void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
+    void didFinishLoading(NetscapePlugInStreamLoader*) override;
+    bool wantsAllStreams() const override;
 
-        ResourceRequest m_resourceRequest;
-        ResourceResponse m_resourceResponse;
+    ResourceRequest m_resourceRequest;
+    ResourceResponse m_resourceResponse;
 
-        PluginStreamClient* m_client;
-        Frame* m_frame;
-        RefPtr<NetscapePlugInStreamLoader> m_loader;
-        void* m_notifyData;
-        bool m_sendNotification;
-        PluginStreamState m_streamState;
-        bool m_loadManually;
+    PluginStreamClient* m_client;
+    Frame* m_frame;
+    RefPtr<NetscapePlugInStreamLoader> m_loader;
+    void* m_notifyData;
+    bool m_sendNotification;
+    PluginStreamState m_streamState;
+    bool m_loadManually;
 
-        Timer m_delayDeliveryTimer;
-        void delayDeliveryTimerFired();
+    Timer m_delayDeliveryTimer;
+    void delayDeliveryTimerFired();
 
-        std::unique_ptr<Vector<char>> m_deliveryData;
+    std::unique_ptr<Vector<char>> m_deliveryData;
 
-        FileSystem::PlatformFileHandle m_tempFileHandle;
+    FileSystem::PlatformFileHandle m_tempFileHandle;
 
-        const NPPluginFuncs* m_pluginFuncs;
-        NPP m_instance;
-        uint16_t m_transferMode;
-        int32_t m_offset;
-        CString m_headers;
-        String m_path;
-        NPReason m_reason;
-        NPStream m_stream;
-        PluginQuirkSet m_quirks;
+    const NPPluginFuncs* m_pluginFuncs;
+    NPP m_instance;
+    uint16_t m_transferMode;
+    int32_t m_offset;
+    CString m_headers;
+    String m_path;
+    NPReason m_reason;
+    NPStream m_stream;
+    PluginQuirkSet m_quirks;
 
-        friend class PluginView;
-    };
+    friend class PluginView;
+};
 
 } // namespace WebCore
-
-#endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to