Changeset 224373 in webkit


Ignore:
Timestamp:
Nov 2, 2017 7:54:36 PM (6 years ago)
Author:
achristensen@apple.com
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):

Location:
trunk/Source
Files:
45 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r224371 r224373  
     12017-11-02  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use CompletionHandlers for redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=179163
     5
     6        Reviewed by Tim Horton.
     7
     8        Having functions sometimes have to remember to call client->continueWillSendRequest is fragile.
     9        CompletionHandler asserts if it's not called once before destruction, and that's what we need here.
     10        This will prevent future bugs, and make ResourceHandle look more like NetworkDataTask.
     11
     12        No change in behavior.
     13
     14        * loader/NetscapePlugInStreamLoader.cpp:
     15        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
     16        * loader/NetscapePlugInStreamLoader.h:
     17        * loader/ResourceLoader.cpp:
     18        (WebCore::ResourceLoader::willSendRequest):
     19        (WebCore::ResourceLoader::willSendRequestAsync):
     20        * loader/ResourceLoader.h:
     21        * loader/appcache/ApplicationCacheGroup.cpp:
     22        (WebCore::ApplicationCacheGroup::willSendRequestAsync):
     23        * loader/appcache/ApplicationCacheGroup.h:
     24        * platform/network/BlobResourceHandle.cpp:
     25        * platform/network/PingHandle.h:
     26        * platform/network/ResourceHandle.h:
     27        * platform/network/ResourceHandleClient.h:
     28        * platform/network/SynchronousLoaderClient.cpp:
     29        (WebCore::SynchronousLoaderClient::willSendRequestAsync):
     30        * platform/network/SynchronousLoaderClient.h:
     31        * platform/network/cf/ResourceHandleCFNet.cpp:
     32        (WebCore::ResourceHandle::willSendRequest):
     33        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
     34        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
     35        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
     36        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
     37        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest): Deleted.
     38        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
     39        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
     40        (WebCore::ResourceHandleCurlDelegate::willSendRequest):
     41        * platform/network/mac/ResourceHandleMac.mm:
     42        (WebCore::ResourceHandle::willSendRequest):
     43        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
     44        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
     45        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
     46        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
     47        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]): Deleted.
     48        * platform/network/soup/ResourceHandleSoup.cpp:
     49        (WebCore::doRedirect):
     50        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
     51
    1522017-11-02  Christopher Reid  <chris.reid@sony.com>
    253
  • trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp

    r223728 r224373  
    3333#include "FrameLoader.h"
    3434#include "FrameLoaderClient.h"
     35#include <wtf/CompletionHandler.h>
    3536#include <wtf/Ref.h>
    3637
     
    8788}
    8889
    89 void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)
     90void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback)
    9091{
    91     RefPtr<NetscapePlugInStreamLoader> protectedThis(this);
    92 
    93     m_client->willSendRequest(this, WTFMove(request), redirectResponse, [protectedThis, redirectResponse, callback = WTFMove(callback)](ResourceRequest request) {
     92    m_client->willSendRequest(this, WTFMove(request), redirectResponse, [protectedThis = makeRef(*this), redirectResponse, callback = WTFMove(callback)](ResourceRequest request) mutable {
    9493        if (!request.isNull())
    9594            protectedThis->willSendRequestInternal(request, redirectResponse);
  • trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h

    r223728 r224373  
    3939class NetscapePlugInStreamLoaderClient {
    4040public:
    41     virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) = 0;
     41    virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) = 0;
    4242    virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) = 0;
    4343    virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) = 0;
     
    6060    bool init(const ResourceRequest&) override;
    6161
    62     void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback) override;
     62    void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback) override;
    6363    void didReceiveResponse(const ResourceResponse&) override;
    6464    void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
  • trunk/Source/WebCore/loader/ResourceLoader.cpp

    r224299 r224373  
    5151#include "SecurityOrigin.h"
    5252#include "SharedBuffer.h"
     53#include <wtf/CompletionHandler.h>
    5354#include <wtf/Ref.h>
    5455
     
    421422}
    422423
    423 void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)
     424void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback)
    424425{
    425426    willSendRequestInternal(request, redirectResponse);
     
    639640}
    640641
    641 void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse)
     642void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    642643{
    643644    RefPtr<ResourceHandle> protectedHandle(handle);
    644645    if (documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(this, request, redirectResponse)) {
    645         handle->continueWillSendRequest(WTFMove(request));
     646        completionHandler(WTFMove(request));
    646647        return;
    647648    }
    648649    willSendRequestInternal(request, redirectResponse);
    649     handle->continueWillSendRequest(WTFMove(request));
     650    completionHandler(WTFMove(request));
    650651}
    651652
  • trunk/Source/WebCore/loader/ResourceLoader.h

    r224299 r224373  
    9999    virtual bool isSubresourceLoader();
    100100
    101     virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback);
     101    virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback);
    102102    virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
    103103    virtual void didReceiveResponse(const ResourceResponse&);
     
    188188    void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
    189189    void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) override;
    190     void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override;
     190    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override;
    191191    void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
    192192    void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedDataLength) override;
  • trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp

    r224299 r224373  
    4949#include "SecurityOrigin.h"
    5050#include "Settings.h"
     51#include <wtf/CompletionHandler.h>
    5152#include <wtf/HashMap.h>
    5253#include <wtf/MainThread.h>
     
    563564}
    564565
    565 void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
    566 {
    567     handle->continueWillSendRequest(WTFMove(request));
     566void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
     567{
     568    completionHandler(WTFMove(request));
    568569}
    569570
  • trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h

    r224267 r224373  
    111111    // ResourceHandleClient
    112112    void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final;
    113     void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) final;
     113    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final;
    114114#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
    115115    void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final;
  • trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp

    r224299 r224373  
    4646#include "ResourceResponse.h"
    4747#include "SharedBuffer.h"
     48#include <wtf/CompletionHandler.h>
    4849#include <wtf/MainThread.h>
    4950#include <wtf/Ref.h>
     
    7778    void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final;
    7879    void didFail(ResourceHandle*, const ResourceError&) final;
    79     void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) final;
     80    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final;
    8081#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
    8182    void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final;
     
    9596}
    9697
    97 void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
     98void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    9899{
    99100    ASSERT_NOT_REACHED();
    100     handle->continueWillSendRequest(WTFMove(request));
     101    completionHandler(WTFMove(request));
    101102}
    102103
  • trunk/Source/WebCore/platform/network/PingHandle.h

    r224299 r224373  
    5858
    5959private:
    60     void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&) final
     60    void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final
    6161    {
    6262        m_currentRequest = WTFMove(request);
    6363        if (m_shouldFollowRedirects) {
    64             m_handle->continueWillSendRequest(ResourceRequest { m_currentRequest });
     64            completionHandler(ResourceRequest { m_currentRequest });
    6565            return;
    6666        }
    67         m_handle->continueWillSendRequest({ });
     67        completionHandler({ });
    6868        pingLoadComplete(ResourceError { String(), 0, m_currentRequest.url(), ASCIILiteral("Not allowed to follow redirects"), ResourceError::Type::AccessControl });
    6969    }
  • trunk/Source/WebCore/platform/network/ResourceHandle.h

    r224299 r224373  
    105105
    106106#if PLATFORM(COCOA) || USE(CFURLCONNECTION)
    107     ResourceRequest willSendRequest(ResourceRequest&&, ResourceResponse&&);
     107    void willSendRequest(ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&);
    108108#endif
    109109
     
    194194    WEBCORE_EXPORT void clearClient();
    195195
    196     // Called in response to ResourceHandleClient::willSendRequestAsync().
    197     WEBCORE_EXPORT void continueWillSendRequest(ResourceRequest&&);
    198 
    199196    // Called in response to ResourceHandleClient::didReceiveResponseAsync().
    200197    WEBCORE_EXPORT virtual void continueDidReceiveResponse();
  • trunk/Source/WebCore/platform/network/ResourceHandleClient.h

    r224267 r224373  
    2727
    2828#include "PlatformExportMacros.h"
     29#include <wtf/Forward.h>
    2930#include <wtf/Ref.h>
    3031
     
    7677    virtual bool loadingSynchronousXHR() { return false; }
    7778
    78     // Client will pass an updated request using ResourceHandle::continueWillSendRequest() when ready.
    79     WEBCORE_EXPORT virtual void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) = 0;
     79    WEBCORE_EXPORT virtual void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) = 0;
    8080
    8181    // Client will call ResourceHandle::continueDidReceiveResponse() when ready.
  • trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp

    r224267 r224373  
    3030#include "ResourceHandle.h"
    3131#include "ResourceRequest.h"
     32#include <wtf/CompletionHandler.h>
    3233
    3334namespace WebCore {
     
    3536SynchronousLoaderClient::~SynchronousLoaderClient() = default;
    3637
    37 void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)
     38void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    3839{
    3940    // FIXME: This needs to be fixed to follow the redirect correctly even for cross-domain requests.
    4041    if (protocolHostAndPortAreEqual(handle->firstRequest().url(), request.url())) {
    41         handle->continueWillSendRequest(WTFMove(request));
     42        completionHandler(WTFMove(request));
    4243        return;
    4344    }
     
    4546    ASSERT(m_error.isNull());
    4647    m_error = platformBadResponseError();
    47     handle->continueWillSendRequest({ });
     48    completionHandler({ });
    4849}
    4950
  • trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h

    r224267 r224373  
    4747
    4848private:
    49     void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&) override;
     49    void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override;
    5050    bool shouldUseCredentialStorage(ResourceHandle*) override;
    5151    void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) override;
  • trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp

    r224299 r224373  
    4949#include <sys/stat.h>
    5050#include <sys/types.h>
     51#include <wtf/CompletionHandler.h>
    5152#include <wtf/HashMap.h>
    5253#include <wtf/NeverDestroyed.h>
     
    286287}
    287288
    288 ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)
     289void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    289290{
    290291    const URL& url = request.url();
     
    315316    }
    316317
    317     Ref<ResourceHandle> protectedThis(*this);
    318     client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse));
    319     return { };
     318    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request) mutable {
     319        if (!request.isNull())
     320            request.setStorageSession(d->m_storageSession.get());
     321        completionHandler(WTFMove(request));
     322    });
    320323}
    321324
     
    664667}
    665668
    666 void ResourceHandle::continueWillSendRequest(ResourceRequest&& request)
    667 {
    668     if (!request.isNull())
    669         request.setStorageSession(d->m_storageSession.get());
    670     d->m_connectionDelegate->continueWillSendRequest(request.cfURLRequest(UpdateHTTPBody));
    671 }
    672 
    673669void ResourceHandle::continueDidReceiveResponse()
    674670{
  • trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h

    r215280 r224373  
    4747    virtual void releaseHandle();
    4848
    49     virtual void continueWillSendRequest(CFURLRequestRef) = 0;
    5049    virtual void continueDidReceiveResponse() = 0;
    5150    virtual void continueWillCacheResponse(CFCachedURLResponseRef) = 0;
  • trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp

    r224267 r224373  
    4141#endif
    4242#include <pal/spi/cf/CFNetworkSPI.h>
     43#include <wtf/CompletionHandler.h>
    4344#include <wtf/MainThread.h>
    4445#include <wtf/Threading.h>
     
    153154    ASSERT(!isMainThread());
    154155   
    155     auto work = [protectedThis = makeRef(*this), cfRequest = RetainPtr<CFURLRequestRef>(cfRequest), originalRedirectResponse = RetainPtr<CFURLResponseRef>(originalRedirectResponse)] () {
    156         auto& handle = protectedThis->m_handle;
    157        
    158         if (!protectedThis->hasHandle()) {
    159             protectedThis->continueWillSendRequest(nullptr);
     156    auto work = [this, protectedThis = makeRef(*this), cfRequest = RetainPtr<CFURLRequestRef>(cfRequest), originalRedirectResponse = RetainPtr<CFURLResponseRef>(originalRedirectResponse)] () mutable {
     157        auto& handle = protectedThis->m_handle;
     158        auto completionHandler = [this, protectedThis = WTFMove(protectedThis)] (ResourceRequest&& request) {
     159            m_requestResult = request.cfURLRequest(UpdateHTTPBody);
     160            m_semaphore.signal();
     161        };
     162
     163        if (!hasHandle()) {
     164            completionHandler({ });
    160165            return;
    161166        }
     
    163168        LOG(Network, "CFNet - ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest(handle=%p) (%s)", handle, handle->firstRequest().url().string().utf8().data());
    164169
    165         RetainPtr<CFURLResponseRef> redirectResponse = protectedThis->synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get());
     170        RetainPtr<CFURLResponseRef> redirectResponse = synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get());
    166171        ASSERT(redirectResponse);
    167172
    168         ResourceRequest request = protectedThis->createResourceRequest(cfRequest.get(), redirectResponse.get());
    169         handle->willSendRequest(WTFMove(request), redirectResponse.get());
    170     };
    171    
     173        ResourceRequest request = createResourceRequest(cfRequest.get(), redirectResponse.get());
     174        handle->willSendRequest(WTFMove(request), redirectResponse.get(), WTFMove(completionHandler));
     175    };
     176
    172177    if (m_messageQueue)
    173178        m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work)));
     
    406411#endif // USE(PROTECTION_SPACE_AUTH_CALLBACK)
    407412
    408 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest(CFURLRequestRef request)
    409 {
    410     m_requestResult = request;
    411     m_semaphore.signal();
    412 }
    413 
    414413void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse()
    415414{
  • trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h

    r224267 r224373  
    5959    Boolean shouldUseCredentialStorage() override;
    6060
    61     void continueWillSendRequest(CFURLRequestRef) override;
    6261    void continueDidReceiveResponse() override;
    6362    void continueWillCacheResponse(CFCachedURLResponseRef) override;
  • trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp

    r224267 r224373  
    4242#include "SharedBuffer.h"
    4343#include "TextEncoding.h"
     44#include <wtf/CompletionHandler.h>
    4445#include <wtf/text/Base64.h>
    4546
     
    364365
    365366    ResourceResponse responseCopy = response();
    366     m_handle->client()->willSendRequestAsync(m_handle, WTFMove(newRequest), WTFMove(responseCopy));
     367    m_handle->client()->willSendRequestAsync(m_handle, WTFMove(newRequest), WTFMove(responseCopy), [this, protectedThis = makeRef(*this)] (ResourceRequest&& request) {
     368        continueWillSendRequest(WTFMove(request));
     369    });
    367370}
    368371
  • trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm

    r224299 r224373  
    5050#import <pal/spi/cocoa/NSURLConnectionSPI.h>
    5151#import <wtf/BlockObjCExceptions.h>
     52#import <wtf/CompletionHandler.h>
    5253#import <wtf/Ref.h>
    5354#import <wtf/SchedulePair.h>
     
    436437}
    437438
    438 ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)
     439void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    439440{
    440441    ASSERT(!redirectResponse.isNull());
     
    484485    }
    485486
    486     client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse));
    487     return { };
    488 }
    489 
    490 void ResourceHandle::continueWillSendRequest(ResourceRequest&& newRequest)
    491 {
    492     // Client call may not preserve the session, especially if the request is sent over IPC.
    493     if (!newRequest.isNull())
    494         newRequest.setStorageSession(d->m_storageSession.get());
    495     [(id)delegate() continueWillSendRequest:newRequest.nsURLRequest(UpdateHTTPBody)];
     487    client()->willSendRequestAsync(this, WTFMove(request), WTFMove(redirectResponse), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (ResourceRequest&& request) mutable {
     488        // Client call may not preserve the session, especially if the request is sent over IPC.
     489        if (!request.isNull())
     490            request.setStorageSession(d->m_storageSession.get());
     491        completionHandler(WTFMove(request));
     492    });
    496493}
    497494
  • trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h

    r224267 r224373  
    5050- (void)detachHandle;
    5151- (id)initWithHandle:(WebCore::ResourceHandle*)handle messageQueue:(MessageQueue<Function<void()>>*)messageQueue;
    52 - (void)continueWillSendRequest:(NSURLRequest *)newRequest;
    5352- (void)continueDidReceiveResponse;
    5453- (void)continueCanAuthenticateAgainstProtectionSpace:(BOOL)canAuthenticate;
  • trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm

    r224348 r224373  
    7575}
    7676
    77 - (void)continueWillSendRequest:(NSURLRequest *)newRequest
    78 {
    79     m_requestResult = newRequest;
    80     dispatch_semaphore_signal(m_semaphore);
    81 }
    82 
    8377- (void)continueDidReceiveResponse
    8478{
     
    123117        }
    124118
    125         m_handle->willSendRequest(newRequest.get(), redirectResponse.get());
    126     };
    127 
    128    
     119        m_handle->willSendRequest(newRequest.get(), redirectResponse.get(), [self, protectedSelf = WTFMove(protectedSelf)](ResourceRequest&& request) {
     120            m_requestResult = request.nsURLRequest(UpdateHTTPBody);
     121            dispatch_semaphore_signal(m_semaphore);
     122        });
     123    };
     124
    129125    if (m_messageQueue)
    130126        m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work)));
  • trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp

    r224299 r224373  
    5757#include <unistd.h>
    5858#endif
     59#include <wtf/CompletionHandler.h>
    5960#include <wtf/CurrentTime.h>
    6061#include <wtf/glib/GRefPtr.h>
     
    354355
    355356    ResourceResponse responseCopy = d->m_response;
    356     d->client()->willSendRequestAsync(handle, WTFMove(newRequest), WTFMove(responseCopy));
     357    d->client()->willSendRequestAsync(handle, WTFMove(newRequest), WTFMove(responseCopy), [handle = makeRef(*handle)] (ResourceRequest&& request) {
     358        continueAfterWillSendRequest(handle.ptr(), WTFMove(request));
     359    });
    357360}
    358361
     
    10251028}
    10261029
    1027 void ResourceHandle::continueWillSendRequest(ResourceRequest&& request)
    1028 {
    1029     continueAfterWillSendRequest(this, WTFMove(request));
    1030 }
    1031 
    10321030void ResourceHandle::continueDidReceiveResponse()
    10331031{
  • trunk/Source/WebKit/ChangeLog

    r224371 r224373  
     12017-11-02  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use CompletionHandlers for redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=179163
     5
     6        Reviewed by Tim Horton.
     7
     8        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
     9        (WebKit::BlobDownloadClient::willSendRequestAsync):
     10        * NetworkProcess/Downloads/BlobDownloadClient.h:
     11        * NetworkProcess/NetworkDataTask.h:
     12        * NetworkProcess/NetworkLoad.cpp:
     13        (WebKit::NetworkLoad::~NetworkLoad):
     14        (WebKit::NetworkLoad::continueWillSendRequest):
     15        (WebKit::NetworkLoad::willSendRequestAsync):
     16        * NetworkProcess/NetworkLoad.h:
     17        * NetworkProcess/NetworkLoadClient.h:
     18        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     19        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
     20        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
     21        * UIProcess/API/APIDownloadClient.h:
     22        (API::DownloadClient::willSendRequest):
     23        * UIProcess/API/C/WKContext.cpp:
     24        (WKContextSetDownloadClient):
     25        * UIProcess/Cocoa/DownloadClient.h:
     26        * UIProcess/Cocoa/DownloadClient.mm:
     27        (WebKit::DownloadClient::willSendRequest):
     28        * WebProcess/Network/WebResourceLoader.cpp:
     29        (WebKit::WebResourceLoader::willSendRequest):
     30        * WebProcess/Plugins/PluginView.cpp:
     31        (WebKit::PluginView::Stream::~Stream):
     32        (WebKit::PluginView::Stream::continueLoad):
     33        (WebKit::PluginView::Stream::willSendRequest):
     34        * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
     35
    1362017-11-02  Christopher Reid  <chris.reid@sony.com>
    237
  • trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.cpp

    r224371 r224373  
    3636#include <WebCore/ResourceResponse.h>
    3737#include <WebCore/SharedBuffer.h>
     38#include <wtf/CompletionHandler.h>
    3839
    3940namespace WebKit {
     
    7273}
    7374
    74 void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&)
     75void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
    7576{
    7677    ASSERT_NOT_REACHED();
     78    completionHandler(WTFMove(request));
    7779}
    7880
  • trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.h

    r224371 r224373  
    5050    void didFinishLoading(WebCore::ResourceHandle*) final;
    5151    void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&) final;
    52     void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&&) final;
     52    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
    5353#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
    5454    void canAuthenticateAgainstProtectionSpaceAsync(WebCore::ResourceHandle*, const WebCore::ProtectionSpace&) final;
  • trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h

    r222667 r224373  
    5555enum class AuthenticationChallengeDisposition;
    5656
    57 using RedirectCompletionHandler = CompletionHandler<void(const WebCore::ResourceRequest&)>;
     57using RedirectCompletionHandler = CompletionHandler<void(WebCore::ResourceRequest&&)>;
    5858using ChallengeCompletionHandler = CompletionHandler<void(AuthenticationChallengeDisposition, const WebCore::Credential&)>;
    5959using ResponseCompletionHandler = CompletionHandler<void(WebCore::PolicyAction)>;
  • trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp

    r224299 r224373  
    134134{
    135135    ASSERT(RunLoop::isMain());
     136    if (m_redirectCompletionHandler)
     137        m_redirectCompletionHandler({ });
    136138#if USE(NETWORK_SESSION)
    137139    if (m_responseCompletionHandler)
    138140        m_responseCompletionHandler(PolicyAction::Ignore);
    139     if (m_redirectCompletionHandler)
    140         m_redirectCompletionHandler({ });
    141141#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
    142142    if (m_challengeCompletionHandler)
     
    212212
    213213    if (redirectCompletionHandler)
    214         redirectCompletionHandler(m_currentRequest);
     214        redirectCompletionHandler(ResourceRequest(m_currentRequest));
    215215#else
    216216    if (m_currentRequest.isNull()) {
     
    220220    } else if (m_handle) {
    221221        auto currentRequestCopy = m_currentRequest;
    222         m_handle->continueWillSendRequest(WTFMove(currentRequestCopy));
     222        auto redirectCompletionHandler = std::exchange(m_redirectCompletionHandler, nullptr);
     223        ASSERT(redirectCompletionHandler);
     224        redirectCompletionHandler(WTFMove(currentRequestCopy));
    223225    }
    224226#endif
     
    491493}
    492494
    493 void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse)
    494 {
     495void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)
     496{
     497    ASSERT(!m_redirectCompletionHandler);
     498    m_redirectCompletionHandler = WTFMove(completionHandler);
    495499    ASSERT_UNUSED(handle, handle == m_handle);
    496500    sharedWillSendRedirectedRequest(WTFMove(request), WTFMove(redirectResponse));
  • trunk/Source/WebKit/NetworkProcess/NetworkLoad.h

    r224267 r224373  
    2424 */
    2525
    26 #ifndef NetworkLoad_h
    27 #define NetworkLoad_h
     26#pragma once
    2827
    2928#include "NetworkLoadClient.h"
     
    3130#include "RemoteNetworkingContext.h"
    3231#include <WebCore/ResourceHandleClient.h>
     32#include <wtf/CompletionHandler.h>
    3333#include <wtf/Optional.h>
    3434
     
    116116#if !USE(NETWORK_SESSION)
    117117    // ResourceHandleClient
    118     void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse) final;
     118    void willSendRequestAsync(WebCore::ResourceHandle*, WebCore::ResourceRequest&&, WebCore::ResourceResponse&& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
    119119    void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
    120120    void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&&) final;
     
    148148    std::reference_wrapper<NetworkLoadClient> m_client;
    149149    const NetworkLoadParameters m_parameters;
     150    CompletionHandler<void(WebCore::ResourceRequest&&)> m_redirectCompletionHandler;
    150151#if USE(NETWORK_SESSION)
    151152    RefPtr<NetworkDataTask> m_task;
     
    155156#endif
    156157    ResponseCompletionHandler m_responseCompletionHandler;
    157     RedirectCompletionHandler m_redirectCompletionHandler;
    158158   
    159159    struct Throttle;
     
    174174
    175175} // namespace WebKit
    176 
    177 #endif // NetworkLoad_h
  • trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h

    r224134 r224373  
    3131#include <wtf/Forward.h>
    3232
    33 #if PLATFORM(COCOA)
    34 typedef const struct _CFCachedURLResponse* CFCachedURLResponseRef;
    35 #endif
    36 
    3733namespace WebCore {
    3834class NetworkLoadMetrics;
  • trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r224371 r224373  
    173173    if (auto* networkDataTask = [self existingTask:task]) {
    174174        auto completionHandlerCopy = Block_copy(completionHandler);
    175         networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto& request) {
     175        networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto&& request) {
    176176#if !LOG_DISABLED
    177177            LOG(NetworkSession, "%llu willPerformHTTPRedirection completionHandler (%s)", taskIdentifier, request.url().string().utf8().data());
     
    195195    if (auto* networkDataTask = [self existingTask:task]) {
    196196        auto completionHandlerCopy = Block_copy(completionHandler);
    197         networkDataTask->willPerformHTTPRedirection(WebCore::synthesizeRedirectResponseIfNecessary([task currentRequest], request, nil), request, [completionHandlerCopy, taskIdentifier](auto& request) {
     197        networkDataTask->willPerformHTTPRedirection(WebCore::synthesizeRedirectResponseIfNecessary([task currentRequest], request, nil), request, [completionHandlerCopy, taskIdentifier](auto&& request) {
    198198#if !LOG_DISABLED
    199199            LOG(NetworkSession, "%llu _schemeUpgraded completionHandler (%s)", taskIdentifier, request.url().string().utf8().data());
  • trunk/Source/WebKit/UIProcess/API/APIDownloadClient.h

    r223730 r224373  
    2626#pragma once
    2727
    28 #include <wtf/Function.h>
     28#include <wtf/CompletionHandler.h>
    2929#include <wtf/text/WTFString.h>
    3030
     
    6363    virtual void didCancel(WebKit::WebProcessPool&, WebKit::DownloadProxy&) { }
    6464    virtual void processDidCrash(WebKit::WebProcessPool&, WebKit::DownloadProxy&) { }
    65     virtual void willSendRequest(WebKit::WebProcessPool&, WebKit::DownloadProxy&, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
     65    virtual void willSendRequest(WebKit::WebProcessPool&, WebKit::DownloadProxy&, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
    6666};
    6767
  • trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp

    r224250 r224373  
    265265        }
    266266
    267         void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, Function<void(ResourceRequest&&)>&& callback) final
     267        void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final
    268268        {
    269269            if (m_client.didReceiveServerRedirect)
    270270                m_client.didReceiveServerRedirect(toAPI(&processPool), toAPI(&downloadProxy), toURLRef(request.url().string().impl()), m_client.base.clientInfo);
    271271
    272             callback(WTFMove(request));
     272            completionHandler(WTFMove(request));
    273273        }
    274274
  • trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.h

    r223790 r224373  
    5555    void didFail(WebProcessPool&, DownloadProxy&, const WebCore::ResourceError&) final;
    5656    void didCancel(WebProcessPool&, DownloadProxy&) final;
    57     void willSendRequest(WebProcessPool&, DownloadProxy&, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&&) final;
     57    void willSendRequest(WebProcessPool&, DownloadProxy&, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
    5858    void didReceiveAuthenticationChallenge(WebProcessPool&, DownloadProxy&, AuthenticationChallengeProxy&) final;
    5959#if !USE(NETWORK_SESSION)
  • trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm

    r223790 r224373  
    186186}
    187187
    188 void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&& callback)
     188void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& completionHandler)
    189189{
    190190    if (m_delegateMethods.downloadDidReceiveServerRedirectToURL)
    191191        [m_delegate _download:wrapper(downloadProxy) didReceiveServerRedirectToURL:[NSURL _web_URLWithWTFString:request.url().string()]];
    192192
    193     callback(WTFMove(request));
     193    completionHandler(WTFMove(request));
    194194}
    195195
  • trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp

    r224134 r224373  
    4444#include <WebCore/ResourceLoader.h>
    4545#include <WebCore/SubresourceLoader.h>
     46#include <wtf/CompletionHandler.h>
    4647
    4748using namespace WebCore;
     
    8687    RELEASE_LOG_IF_ALLOWED("willSendRequest: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", m_trackingParameters.pageID, m_trackingParameters.frameID, m_trackingParameters.resourceID);
    8788
    88     RefPtr<WebResourceLoader> protectedThis(this);
    89 
    9089    if (m_coreLoader->documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(m_coreLoader.get(), proposedRequest, redirectResponse))
    9190        return;
    9291
    93     m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis](ResourceRequest&& request) {
     92    m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis = makeRef(*this)](ResourceRequest&& request) {
    9493        if (!protectedThis->m_coreLoader)
    9594            return;
  • trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp

    r223264 r224373  
    7171#include <WebCore/UserGestureIndicator.h>
    7272#include <bindings/ScriptValue.h>
     73#include <wtf/CompletionHandler.h>
    7374#include <wtf/text/StringBuilder.h>
    7475
     
    134135
    135136    // NetscapePluginStreamLoaderClient
    136     void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) override;
     137    void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
    137138    void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
    138139    void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
     
    143144    uint64_t m_streamID;
    144145    ResourceRequest m_request;
    145     WTF::Function<void (ResourceRequest)> m_loadCallback;
     146    CompletionHandler<void(ResourceRequest&&)> m_loadCallback;
    146147
    147148    // True if the stream was explicitly cancelled by calling cancel().
     
    154155PluginView::Stream::~Stream()
    155156{
     157    if (m_loadCallback)
     158        m_loadCallback({ });
    156159    ASSERT(!m_pluginView);
    157160}
     
    182185    ASSERT(m_loadCallback);
    183186
    184     m_loadCallback(m_request);
     187    m_loadCallback(ResourceRequest(m_request));
    185188}
    186189
     
    222225}
    223226
    224 void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&& decisionHandler)
     227void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& decisionHandler)
    225228{
    226229    const URL& requestURL = request.url();
  • trunk/Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp

    r218750 r224373  
    3434#include <WebCore/ResourceError.h>
    3535#include <WebCore/ResourceLoader.h>
     36#include <wtf/CompletionHandler.h>
    3637#include <wtf/CurrentTime.h>
    3738
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r224371 r224373  
     12017-11-02  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use CompletionHandlers for redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=179163
     5
     6        Reviewed by Tim Horton.
     7
     8        * Plugins/Hosted/HostedNetscapePluginStream.h:
     9        * Plugins/Hosted/HostedNetscapePluginStream.mm:
     10        (WebKit::HostedNetscapePluginStream::willSendRequest):
     11        * Plugins/WebNetscapePluginStream.h:
     12        * Plugins/WebNetscapePluginStream.mm:
     13        (WebNetscapePluginStream::willSendRequest):
     14
    1152017-11-02  Christopher Reid  <chris.reid@sony.com>
    216
  • trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.h

    r218457 r224373  
    8787
    8888    // NetscapePlugInStreamLoaderClient methods.
    89     void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, WTF::Function<void (WebCore::ResourceRequest&&)>&&) override;
     89    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) override;
    9090    void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override;
    9191    bool wantsAllStreams() const override;
  • trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.mm

    r222896 r224373  
    4646#import <WebCore/WebCoreURLResponse.h>
    4747#import <pal/spi/cf/CFNetworkSPI.h>
     48#import <wtf/CompletionHandler.h>
    4849#import <wtf/RefCountedLeakCounter.h>
    4950
     
    131132}
    132133
    133 void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
     134void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
    134135{
    135136    // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
  • trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.h

    r218457 r224373  
    9898
    9999    // NetscapePlugInStreamLoaderClient methods.
    100     void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, WTF::Function<void (WebCore::ResourceRequest&&)>&&) override;
     100    void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) override;
    101101    void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override;
    102102    void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&) override;
  • trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.mm

    r222896 r224373  
    5454#import <pal/spi/cf/CFNetworkSPI.h>
    5555#import <runtime/JSLock.h>
     56#import <wtf/CompletionHandler.h>
    5657#import <wtf/HashMap.h>
    5758#import <wtf/NeverDestroyed.h>
     
    302303}
    303304
    304 void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
     305void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
    305306{
    306307    // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r224371 r224373  
     12017-11-02  Alex Christensen  <achristensen@webkit.org>
     2
     3        Use CompletionHandlers for redirects
     4        https://bugs.webkit.org/show_bug.cgi?id=179163
     5
     6        Reviewed by Tim Horton.
     7
     8        * Plugins/PluginStream.cpp:
     9        (WebCore::PluginStream::willSendRequest):
     10        * Plugins/PluginStream.h:
     11        (WebCore::PluginStreamClient::~PluginStreamClient):
     12        (WebCore::PluginStreamClient::streamDidFinishLoading):
     13        (WebCore::PluginStream::create):
     14        (WebCore::PluginStream::setLoadManually):
     15
    1162017-11-02  Christopher Reid  <chris.reid@sony.com>
    217
  • trunk/Source/WebKitLegacy/win/Plugins/PluginStream.cpp

    r224371 r224373  
    3636#include "SubresourceLoader.h"
    3737#include "WebResourceLoadScheduler.h"
     38#include <wtf/CompletionHandler.h>
    3839#include <wtf/StringExtras.h>
    3940#include <wtf/text/CString.h>
     
    405406}
    406407
    407 void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void (WebCore::ResourceRequest&&)>&& callback)
     408void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback)
    408409{
    409410    // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
  • trunk/Source/WebKitLegacy/win/Plugins/PluginStream.h

    r224371 r224373  
    2525 */
    2626
    27 #ifndef PluginStream_h
    28 #define PluginStream_h
     27#pragma once
    2928
    3029#include "FileSystem.h"
     
    4443
    4544namespace WebCore {
    46     class Frame;
    47     class PluginStream;
     45class Frame;
     46class PluginStream;
    4847
    49     enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
     48enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
    5049
    51     class PluginStreamClient {
    52     public:
    53         virtual ~PluginStreamClient() {}
    54         virtual void streamDidFinishLoading(PluginStream*) {}
    55     };
     50class PluginStreamClient {
     51public:
     52    virtual ~PluginStreamClient() { }
     53    virtual void streamDidFinishLoading(PluginStream*) { }
     54};
    5655
    57     class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient {
    58     public:
    59         static Ref<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks)
    60         {
    61             return adoptRef(*new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks));
    62         }
    63         virtual ~PluginStream();
    64        
    65         void start();
    66         void stop();
     56class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient {
     57public:
     58    static Ref<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks)
     59    {
     60        return adoptRef(*new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks));
     61    }
     62    virtual ~PluginStream();
     63   
     64    void start();
     65    void stop();
    6766
    68         void startStream();
     67    void startStream();
    6968
    70         void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
     69    void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
    7170
    72         void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString);
    73         void cancelAndDestroyStream(NPReason);
     71    void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString);
     72    void cancelAndDestroyStream(NPReason);
    7473
    75         static NPP ownerForStream(NPStream*);
     74    static NPP ownerForStream(NPStream*);
    7675
    77     private:
    78         PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
     76private:
     77    PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
    7978
    80         void deliverData();
    81         void destroyStream(NPReason);
    82         void destroyStream();
     79    void deliverData();
     80    void destroyStream(NPReason);
     81    void destroyStream();
    8382
    84         // NetscapePlugInStreamLoaderClient
    85         void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void (ResourceRequest&&)>&&) override;
    86         void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
    87         void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
    88         void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
    89         void didFinishLoading(NetscapePlugInStreamLoader*) override;
    90         bool wantsAllStreams() const override;
     83    // NetscapePlugInStreamLoaderClient
     84    void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
     85    void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
     86    void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
     87    void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
     88    void didFinishLoading(NetscapePlugInStreamLoader*) override;
     89    bool wantsAllStreams() const override;
    9190
    92         ResourceRequest m_resourceRequest;
    93         ResourceResponse m_resourceResponse;
     91    ResourceRequest m_resourceRequest;
     92    ResourceResponse m_resourceResponse;
    9493
    95         PluginStreamClient* m_client;
    96         Frame* m_frame;
    97         RefPtr<NetscapePlugInStreamLoader> m_loader;
    98         void* m_notifyData;
    99         bool m_sendNotification;
    100         PluginStreamState m_streamState;
    101         bool m_loadManually;
     94    PluginStreamClient* m_client;
     95    Frame* m_frame;
     96    RefPtr<NetscapePlugInStreamLoader> m_loader;
     97    void* m_notifyData;
     98    bool m_sendNotification;
     99    PluginStreamState m_streamState;
     100    bool m_loadManually;
    102101
    103         Timer m_delayDeliveryTimer;
    104         void delayDeliveryTimerFired();
     102    Timer m_delayDeliveryTimer;
     103    void delayDeliveryTimerFired();
    105104
    106         std::unique_ptr<Vector<char>> m_deliveryData;
     105    std::unique_ptr<Vector<char>> m_deliveryData;
    107106
    108         FileSystem::PlatformFileHandle m_tempFileHandle;
     107    FileSystem::PlatformFileHandle m_tempFileHandle;
    109108
    110         const NPPluginFuncs* m_pluginFuncs;
    111         NPP m_instance;
    112         uint16_t m_transferMode;
    113         int32_t m_offset;
    114         CString m_headers;
    115         String m_path;
    116         NPReason m_reason;
    117         NPStream m_stream;
    118         PluginQuirkSet m_quirks;
     109    const NPPluginFuncs* m_pluginFuncs;
     110    NPP m_instance;
     111    uint16_t m_transferMode;
     112    int32_t m_offset;
     113    CString m_headers;
     114    String m_path;
     115    NPReason m_reason;
     116    NPStream m_stream;
     117    PluginQuirkSet m_quirks;
    119118
    120         friend class PluginView;
    121     };
     119    friend class PluginView;
     120};
    122121
    123122} // namespace WebCore
    124 
    125 #endif
Note: See TracChangeset for help on using the changeset viewer.