Changeset 224373 in webkit
- Timestamp:
- Nov 2, 2017 7:54:36 PM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 45 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r224371 r224373 1 2017-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 1 52 2017-11-02 Christopher Reid <chris.reid@sony.com> 2 53 -
trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp
r223728 r224373 33 33 #include "FrameLoader.h" 34 34 #include "FrameLoaderClient.h" 35 #include <wtf/CompletionHandler.h> 35 36 #include <wtf/Ref.h> 36 37 … … 87 88 } 88 89 89 void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)90 void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback) 90 91 { 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 { 94 93 if (!request.isNull()) 95 94 protectedThis->willSendRequestInternal(request, redirectResponse); -
trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.h
r223728 r224373 39 39 class NetscapePlugInStreamLoaderClient { 40 40 public: 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; 42 42 virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) = 0; 43 43 virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) = 0; … … 60 60 bool init(const ResourceRequest&) override; 61 61 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; 63 63 void didReceiveResponse(const ResourceResponse&) override; 64 64 void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override; -
trunk/Source/WebCore/loader/ResourceLoader.cpp
r224299 r224373 51 51 #include "SecurityOrigin.h" 52 52 #include "SharedBuffer.h" 53 #include <wtf/CompletionHandler.h> 53 54 #include <wtf/Ref.h> 54 55 … … 421 422 } 422 423 423 void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& callback)424 void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback) 424 425 { 425 426 willSendRequestInternal(request, redirectResponse); … … 639 640 } 640 641 641 void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse )642 void ResourceLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 642 643 { 643 644 RefPtr<ResourceHandle> protectedHandle(handle); 644 645 if (documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(this, request, redirectResponse)) { 645 handle->continueWillSendRequest(WTFMove(request));646 completionHandler(WTFMove(request)); 646 647 return; 647 648 } 648 649 willSendRequestInternal(request, redirectResponse); 649 handle->continueWillSendRequest(WTFMove(request));650 completionHandler(WTFMove(request)); 650 651 } 651 652 -
trunk/Source/WebCore/loader/ResourceLoader.h
r224299 r224373 99 99 virtual bool isSubresourceLoader(); 100 100 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); 102 102 virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent); 103 103 virtual void didReceiveResponse(const ResourceResponse&); … … 188 188 void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override; 189 189 void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) override; 190 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&& ) override;190 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override; 191 191 void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override; 192 192 void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedDataLength) override; -
trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp
r224299 r224373 49 49 #include "SecurityOrigin.h" 50 50 #include "Settings.h" 51 #include <wtf/CompletionHandler.h> 51 52 #include <wtf/HashMap.h> 52 53 #include <wtf/MainThread.h> … … 563 564 } 564 565 565 void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)566 { 567 handle->continueWillSendRequest(WTFMove(request));566 void ApplicationCacheGroup::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 567 { 568 completionHandler(WTFMove(request)); 568 569 } 569 570 -
trunk/Source/WebCore/loader/appcache/ApplicationCacheGroup.h
r224267 r224373 111 111 // ResourceHandleClient 112 112 void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final; 113 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&& ) final;113 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final; 114 114 #if USE(PROTECTION_SPACE_AUTH_CALLBACK) 115 115 void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final; -
trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp
r224299 r224373 46 46 #include "ResourceResponse.h" 47 47 #include "SharedBuffer.h" 48 #include <wtf/CompletionHandler.h> 48 49 #include <wtf/MainThread.h> 49 50 #include <wtf/Ref.h> … … 77 78 void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&) final; 78 79 void didFail(ResourceHandle*, const ResourceError&) final; 79 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&& ) final;80 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) final; 80 81 #if USE(PROTECTION_SPACE_AUTH_CALLBACK) 81 82 void canAuthenticateAgainstProtectionSpaceAsync(ResourceHandle*, const ProtectionSpace&) final; … … 95 96 } 96 97 97 void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&)98 void BlobResourceSynchronousLoader::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 98 99 { 99 100 ASSERT_NOT_REACHED(); 100 handle->continueWillSendRequest(WTFMove(request));101 completionHandler(WTFMove(request)); 101 102 } 102 103 -
trunk/Source/WebCore/platform/network/PingHandle.h
r224299 r224373 58 58 59 59 private: 60 void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&& ) final60 void willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final 61 61 { 62 62 m_currentRequest = WTFMove(request); 63 63 if (m_shouldFollowRedirects) { 64 m_handle->continueWillSendRequest(ResourceRequest { m_currentRequest });64 completionHandler(ResourceRequest { m_currentRequest }); 65 65 return; 66 66 } 67 m_handle->continueWillSendRequest({ });67 completionHandler({ }); 68 68 pingLoadComplete(ResourceError { String(), 0, m_currentRequest.url(), ASCIILiteral("Not allowed to follow redirects"), ResourceError::Type::AccessControl }); 69 69 } -
trunk/Source/WebCore/platform/network/ResourceHandle.h
r224299 r224373 105 105 106 106 #if PLATFORM(COCOA) || USE(CFURLCONNECTION) 107 ResourceRequest willSendRequest(ResourceRequest&&, ResourceResponse&&);107 void willSendRequest(ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&); 108 108 #endif 109 109 … … 194 194 WEBCORE_EXPORT void clearClient(); 195 195 196 // Called in response to ResourceHandleClient::willSendRequestAsync().197 WEBCORE_EXPORT void continueWillSendRequest(ResourceRequest&&);198 199 196 // Called in response to ResourceHandleClient::didReceiveResponseAsync(). 200 197 WEBCORE_EXPORT virtual void continueDidReceiveResponse(); -
trunk/Source/WebCore/platform/network/ResourceHandleClient.h
r224267 r224373 27 27 28 28 #include "PlatformExportMacros.h" 29 #include <wtf/Forward.h> 29 30 #include <wtf/Ref.h> 30 31 … … 76 77 virtual bool loadingSynchronousXHR() { return false; } 77 78 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; 80 80 81 81 // Client will call ResourceHandle::continueDidReceiveResponse() when ready. -
trunk/Source/WebCore/platform/network/SynchronousLoaderClient.cpp
r224267 r224373 30 30 #include "ResourceHandle.h" 31 31 #include "ResourceRequest.h" 32 #include <wtf/CompletionHandler.h> 32 33 33 34 namespace WebCore { … … 35 36 SynchronousLoaderClient::~SynchronousLoaderClient() = default; 36 37 37 void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& )38 void SynchronousLoaderClient::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 38 39 { 39 40 // FIXME: This needs to be fixed to follow the redirect correctly even for cross-domain requests. 40 41 if (protocolHostAndPortAreEqual(handle->firstRequest().url(), request.url())) { 41 handle->continueWillSendRequest(WTFMove(request));42 completionHandler(WTFMove(request)); 42 43 return; 43 44 } … … 45 46 ASSERT(m_error.isNull()); 46 47 m_error = platformBadResponseError(); 47 handle->continueWillSendRequest({ });48 completionHandler({ }); 48 49 } 49 50 -
trunk/Source/WebCore/platform/network/SynchronousLoaderClient.h
r224267 r224373 47 47 48 48 private: 49 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&& ) override;49 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override; 50 50 bool shouldUseCredentialStorage(ResourceHandle*) override; 51 51 void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) override; -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
r224299 r224373 49 49 #include <sys/stat.h> 50 50 #include <sys/types.h> 51 #include <wtf/CompletionHandler.h> 51 52 #include <wtf/HashMap.h> 52 53 #include <wtf/NeverDestroyed.h> … … 286 287 } 287 288 288 ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)289 void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 289 290 { 290 291 const URL& url = request.url(); … … 315 316 } 316 317 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 }); 320 323 } 321 324 … … 664 667 } 665 668 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 673 669 void ResourceHandle::continueDidReceiveResponse() 674 670 { -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegate.h
r215280 r224373 47 47 virtual void releaseHandle(); 48 48 49 virtual void continueWillSendRequest(CFURLRequestRef) = 0;50 49 virtual void continueDidReceiveResponse() = 0; 51 50 virtual void continueWillCacheResponse(CFCachedURLResponseRef) = 0; -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp
r224267 r224373 41 41 #endif 42 42 #include <pal/spi/cf/CFNetworkSPI.h> 43 #include <wtf/CompletionHandler.h> 43 44 #include <wtf/MainThread.h> 44 45 #include <wtf/Threading.h> … … 153 154 ASSERT(!isMainThread()); 154 155 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({ }); 160 165 return; 161 166 } … … 163 168 LOG(Network, "CFNet - ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest(handle=%p) (%s)", handle, handle->firstRequest().url().string().utf8().data()); 164 169 165 RetainPtr<CFURLResponseRef> redirectResponse = protectedThis->synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get());170 RetainPtr<CFURLResponseRef> redirectResponse = synthesizeRedirectResponseIfNecessary(cfRequest.get(), originalRedirectResponse.get()); 166 171 ASSERT(redirectResponse); 167 172 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 172 177 if (m_messageQueue) 173 178 m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work))); … … 406 411 #endif // USE(PROTECTION_SPACE_AUTH_CALLBACK) 407 412 408 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest(CFURLRequestRef request)409 {410 m_requestResult = request;411 m_semaphore.signal();412 }413 414 413 void ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse() 415 414 { -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h
r224267 r224373 59 59 Boolean shouldUseCredentialStorage() override; 60 60 61 void continueWillSendRequest(CFURLRequestRef) override;62 61 void continueDidReceiveResponse() override; 63 62 void continueWillCacheResponse(CFCachedURLResponseRef) override; -
trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp
r224267 r224373 42 42 #include "SharedBuffer.h" 43 43 #include "TextEncoding.h" 44 #include <wtf/CompletionHandler.h> 44 45 #include <wtf/text/Base64.h> 45 46 … … 364 365 365 366 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 }); 367 370 } 368 371 -
trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
r224299 r224373 50 50 #import <pal/spi/cocoa/NSURLConnectionSPI.h> 51 51 #import <wtf/BlockObjCExceptions.h> 52 #import <wtf/CompletionHandler.h> 52 53 #import <wtf/Ref.h> 53 54 #import <wtf/SchedulePair.h> … … 436 437 } 437 438 438 ResourceRequest ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse)439 void ResourceHandle::willSendRequest(ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 439 440 { 440 441 ASSERT(!redirectResponse.isNull()); … … 484 485 } 485 486 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 }); 496 493 } 497 494 -
trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h
r224267 r224373 50 50 - (void)detachHandle; 51 51 - (id)initWithHandle:(WebCore::ResourceHandle*)handle messageQueue:(MessageQueue<Function<void()>>*)messageQueue; 52 - (void)continueWillSendRequest:(NSURLRequest *)newRequest;53 52 - (void)continueDidReceiveResponse; 54 53 - (void)continueCanAuthenticateAgainstProtectionSpace:(BOOL)canAuthenticate; -
trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm
r224348 r224373 75 75 } 76 76 77 - (void)continueWillSendRequest:(NSURLRequest *)newRequest78 {79 m_requestResult = newRequest;80 dispatch_semaphore_signal(m_semaphore);81 }82 83 77 - (void)continueDidReceiveResponse 84 78 { … … 123 117 } 124 118 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 129 125 if (m_messageQueue) 130 126 m_messageQueue->append(std::make_unique<Function<void()>>(WTFMove(work))); -
trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
r224299 r224373 57 57 #include <unistd.h> 58 58 #endif 59 #include <wtf/CompletionHandler.h> 59 60 #include <wtf/CurrentTime.h> 60 61 #include <wtf/glib/GRefPtr.h> … … 354 355 355 356 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 }); 357 360 } 358 361 … … 1025 1028 } 1026 1029 1027 void ResourceHandle::continueWillSendRequest(ResourceRequest&& request)1028 {1029 continueAfterWillSendRequest(this, WTFMove(request));1030 }1031 1032 1030 void ResourceHandle::continueDidReceiveResponse() 1033 1031 { -
trunk/Source/WebKit/ChangeLog
r224371 r224373 1 2017-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 1 36 2017-11-02 Christopher Reid <chris.reid@sony.com> 2 37 -
trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.cpp
r224371 r224373 36 36 #include <WebCore/ResourceResponse.h> 37 37 #include <WebCore/SharedBuffer.h> 38 #include <wtf/CompletionHandler.h> 38 39 39 40 namespace WebKit { … … 72 73 } 73 74 74 void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&& , ResourceResponse&&)75 void BlobDownloadClient::willSendRequestAsync(ResourceHandle*, ResourceRequest&& request, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 75 76 { 76 77 ASSERT_NOT_REACHED(); 78 completionHandler(WTFMove(request)); 77 79 } 78 80 -
trunk/Source/WebKit/NetworkProcess/Downloads/BlobDownloadClient.h
r224371 r224373 50 50 void didFinishLoading(WebCore::ResourceHandle*) final; 51 51 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; 53 53 #if USE(PROTECTION_SPACE_AUTH_CALLBACK) 54 54 void canAuthenticateAgainstProtectionSpaceAsync(WebCore::ResourceHandle*, const WebCore::ProtectionSpace&) final; -
trunk/Source/WebKit/NetworkProcess/NetworkDataTask.h
r222667 r224373 55 55 enum class AuthenticationChallengeDisposition; 56 56 57 using RedirectCompletionHandler = CompletionHandler<void( const WebCore::ResourceRequest&)>;57 using RedirectCompletionHandler = CompletionHandler<void(WebCore::ResourceRequest&&)>; 58 58 using ChallengeCompletionHandler = CompletionHandler<void(AuthenticationChallengeDisposition, const WebCore::Credential&)>; 59 59 using ResponseCompletionHandler = CompletionHandler<void(WebCore::PolicyAction)>; -
trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp
r224299 r224373 134 134 { 135 135 ASSERT(RunLoop::isMain()); 136 if (m_redirectCompletionHandler) 137 m_redirectCompletionHandler({ }); 136 138 #if USE(NETWORK_SESSION) 137 139 if (m_responseCompletionHandler) 138 140 m_responseCompletionHandler(PolicyAction::Ignore); 139 if (m_redirectCompletionHandler)140 m_redirectCompletionHandler({ });141 141 #if USE(PROTECTION_SPACE_AUTH_CALLBACK) 142 142 if (m_challengeCompletionHandler) … … 212 212 213 213 if (redirectCompletionHandler) 214 redirectCompletionHandler( m_currentRequest);214 redirectCompletionHandler(ResourceRequest(m_currentRequest)); 215 215 #else 216 216 if (m_currentRequest.isNull()) { … … 220 220 } else if (m_handle) { 221 221 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)); 223 225 } 224 226 #endif … … 491 493 } 492 494 493 void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse) 494 { 495 void NetworkLoad::willSendRequestAsync(ResourceHandle* handle, ResourceRequest&& request, ResourceResponse&& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) 496 { 497 ASSERT(!m_redirectCompletionHandler); 498 m_redirectCompletionHandler = WTFMove(completionHandler); 495 499 ASSERT_UNUSED(handle, handle == m_handle); 496 500 sharedWillSendRedirectedRequest(WTFMove(request), WTFMove(redirectResponse)); -
trunk/Source/WebKit/NetworkProcess/NetworkLoad.h
r224267 r224373 24 24 */ 25 25 26 #ifndef NetworkLoad_h 27 #define NetworkLoad_h 26 #pragma once 28 27 29 28 #include "NetworkLoadClient.h" … … 31 30 #include "RemoteNetworkingContext.h" 32 31 #include <WebCore/ResourceHandleClient.h> 32 #include <wtf/CompletionHandler.h> 33 33 #include <wtf/Optional.h> 34 34 … … 116 116 #if !USE(NETWORK_SESSION) 117 117 // 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; 119 119 void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final; 120 120 void didReceiveResponseAsync(WebCore::ResourceHandle*, WebCore::ResourceResponse&&) final; … … 148 148 std::reference_wrapper<NetworkLoadClient> m_client; 149 149 const NetworkLoadParameters m_parameters; 150 CompletionHandler<void(WebCore::ResourceRequest&&)> m_redirectCompletionHandler; 150 151 #if USE(NETWORK_SESSION) 151 152 RefPtr<NetworkDataTask> m_task; … … 155 156 #endif 156 157 ResponseCompletionHandler m_responseCompletionHandler; 157 RedirectCompletionHandler m_redirectCompletionHandler;158 158 159 159 struct Throttle; … … 174 174 175 175 } // namespace WebKit 176 177 #endif // NetworkLoad_h -
trunk/Source/WebKit/NetworkProcess/NetworkLoadClient.h
r224134 r224373 31 31 #include <wtf/Forward.h> 32 32 33 #if PLATFORM(COCOA)34 typedef const struct _CFCachedURLResponse* CFCachedURLResponseRef;35 #endif36 37 33 namespace WebCore { 38 34 class NetworkLoadMetrics; -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r224371 r224373 173 173 if (auto* networkDataTask = [self existingTask:task]) { 174 174 auto completionHandlerCopy = Block_copy(completionHandler); 175 networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto& request) {175 networkDataTask->willPerformHTTPRedirection(response, request, [completionHandlerCopy, taskIdentifier](auto&& request) { 176 176 #if !LOG_DISABLED 177 177 LOG(NetworkSession, "%llu willPerformHTTPRedirection completionHandler (%s)", taskIdentifier, request.url().string().utf8().data()); … … 195 195 if (auto* networkDataTask = [self existingTask:task]) { 196 196 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) { 198 198 #if !LOG_DISABLED 199 199 LOG(NetworkSession, "%llu _schemeUpgraded completionHandler (%s)", taskIdentifier, request.url().string().utf8().data()); -
trunk/Source/WebKit/UIProcess/API/APIDownloadClient.h
r223730 r224373 26 26 #pragma once 27 27 28 #include <wtf/ Function.h>28 #include <wtf/CompletionHandler.h> 29 29 #include <wtf/text/WTFString.h> 30 30 … … 63 63 virtual void didCancel(WebKit::WebProcessPool&, WebKit::DownloadProxy&) { } 64 64 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)); } 66 66 }; 67 67 -
trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp
r224250 r224373 265 265 } 266 266 267 void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, Function<void(ResourceRequest&&)>&& callback) final267 void willSendRequest(WebProcessPool& processPool, DownloadProxy& downloadProxy, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final 268 268 { 269 269 if (m_client.didReceiveServerRedirect) 270 270 m_client.didReceiveServerRedirect(toAPI(&processPool), toAPI(&downloadProxy), toURLRef(request.url().string().impl()), m_client.base.clientInfo); 271 271 272 c allback(WTFMove(request));272 completionHandler(WTFMove(request)); 273 273 } 274 274 -
trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.h
r223790 r224373 55 55 void didFail(WebProcessPool&, DownloadProxy&, const WebCore::ResourceError&) final; 56 56 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; 58 58 void didReceiveAuthenticationChallenge(WebProcessPool&, DownloadProxy&, AuthenticationChallengeProxy&) final; 59 59 #if !USE(NETWORK_SESSION) -
trunk/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm
r223790 r224373 186 186 } 187 187 188 void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, Function<void(WebCore::ResourceRequest&&)>&& callback)188 void DownloadClient::willSendRequest(WebProcessPool&, DownloadProxy& downloadProxy, WebCore::ResourceRequest&& request, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& completionHandler) 189 189 { 190 190 if (m_delegateMethods.downloadDidReceiveServerRedirectToURL) 191 191 [m_delegate _download:wrapper(downloadProxy) didReceiveServerRedirectToURL:[NSURL _web_URLWithWTFString:request.url().string()]]; 192 192 193 c allback(WTFMove(request));193 completionHandler(WTFMove(request)); 194 194 } 195 195 -
trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp
r224134 r224373 44 44 #include <WebCore/ResourceLoader.h> 45 45 #include <WebCore/SubresourceLoader.h> 46 #include <wtf/CompletionHandler.h> 46 47 47 48 using namespace WebCore; … … 86 87 RELEASE_LOG_IF_ALLOWED("willSendRequest: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", m_trackingParameters.pageID, m_trackingParameters.frameID, m_trackingParameters.resourceID); 87 88 88 RefPtr<WebResourceLoader> protectedThis(this);89 90 89 if (m_coreLoader->documentLoader()->applicationCacheHost().maybeLoadFallbackForRedirect(m_coreLoader.get(), proposedRequest, redirectResponse)) 91 90 return; 92 91 93 m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis ](ResourceRequest&& request) {92 m_coreLoader->willSendRequest(WTFMove(proposedRequest), redirectResponse, [protectedThis = makeRef(*this)](ResourceRequest&& request) { 94 93 if (!protectedThis->m_coreLoader) 95 94 return; -
trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp
r223264 r224373 71 71 #include <WebCore/UserGestureIndicator.h> 72 72 #include <bindings/ScriptValue.h> 73 #include <wtf/CompletionHandler.h> 73 74 #include <wtf/text/StringBuilder.h> 74 75 … … 134 135 135 136 // 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; 137 138 void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override; 138 139 void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override; … … 143 144 uint64_t m_streamID; 144 145 ResourceRequest m_request; 145 WTF::Function<void (ResourceRequest)> m_loadCallback;146 CompletionHandler<void(ResourceRequest&&)> m_loadCallback; 146 147 147 148 // True if the stream was explicitly cancelled by calling cancel(). … … 154 155 PluginView::Stream::~Stream() 155 156 { 157 if (m_loadCallback) 158 m_loadCallback({ }); 156 159 ASSERT(!m_pluginView); 157 160 } … … 182 185 ASSERT(m_loadCallback); 183 186 184 m_loadCallback( m_request);187 m_loadCallback(ResourceRequest(m_request)); 185 188 } 186 189 … … 222 225 } 223 226 224 void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&& decisionHandler)227 void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& decisionHandler) 225 228 { 226 229 const URL& requestURL = request.url(); -
trunk/Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp
r218750 r224373 34 34 #include <WebCore/ResourceError.h> 35 35 #include <WebCore/ResourceLoader.h> 36 #include <wtf/CompletionHandler.h> 36 37 #include <wtf/CurrentTime.h> 37 38 -
trunk/Source/WebKitLegacy/mac/ChangeLog
r224371 r224373 1 2017-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 1 15 2017-11-02 Christopher Reid <chris.reid@sony.com> 2 16 -
trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.h
r218457 r224373 87 87 88 88 // 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; 90 90 void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override; 91 91 bool wantsAllStreams() const override; -
trunk/Source/WebKitLegacy/mac/Plugins/Hosted/HostedNetscapePluginStream.mm
r222896 r224373 46 46 #import <WebCore/WebCoreURLResponse.h> 47 47 #import <pal/spi/cf/CFNetworkSPI.h> 48 #import <wtf/CompletionHandler.h> 48 49 #import <wtf/RefCountedLeakCounter.h> 49 50 … … 131 132 } 132 133 133 void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void(WebCore::ResourceRequest&&)>&& callback)134 void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback) 134 135 { 135 136 // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here. -
trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.h
r218457 r224373 98 98 99 99 // 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; 101 101 void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override; 102 102 void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&) override; -
trunk/Source/WebKitLegacy/mac/Plugins/WebNetscapePluginStream.mm
r222896 r224373 54 54 #import <pal/spi/cf/CFNetworkSPI.h> 55 55 #import <runtime/JSLock.h> 56 #import <wtf/CompletionHandler.h> 56 57 #import <wtf/HashMap.h> 57 58 #import <wtf/NeverDestroyed.h> … … 302 303 } 303 304 304 void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void(WebCore::ResourceRequest&&)>&& callback)305 void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback) 305 306 { 306 307 // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here. -
trunk/Source/WebKitLegacy/win/ChangeLog
r224371 r224373 1 2017-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 1 16 2017-11-02 Christopher Reid <chris.reid@sony.com> 2 17 -
trunk/Source/WebKitLegacy/win/Plugins/PluginStream.cpp
r224371 r224373 36 36 #include "SubresourceLoader.h" 37 37 #include "WebResourceLoadScheduler.h" 38 #include <wtf/CompletionHandler.h> 38 39 #include <wtf/StringExtras.h> 39 40 #include <wtf/text/CString.h> … … 405 406 } 406 407 407 void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, WTF::Function<void(WebCore::ResourceRequest&&)>&& callback)408 void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&& callback) 408 409 { 409 410 // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here. -
trunk/Source/WebKitLegacy/win/Plugins/PluginStream.h
r224371 r224373 25 25 */ 26 26 27 #ifndef PluginStream_h 28 #define PluginStream_h 27 #pragma once 29 28 30 29 #include "FileSystem.h" … … 44 43 45 44 namespace WebCore { 46 47 45 class Frame; 46 class PluginStream; 48 47 49 48 enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped }; 50 49 51 52 53 virtual ~PluginStreamClient() {}54 virtual void streamDidFinishLoading(PluginStream*) {}55 50 class PluginStreamClient { 51 public: 52 virtual ~PluginStreamClient() { } 53 virtual void streamDidFinishLoading(PluginStream*) { } 54 }; 56 55 57 58 59 60 61 62 63 64 65 66 56 class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient { 57 public: 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(); 67 66 68 67 void startStream(); 69 68 70 69 void setLoadManually(bool loadManually) { m_loadManually = loadManually; } 71 70 72 73 71 void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString); 72 void cancelAndDestroyStream(NPReason); 74 73 75 74 static NPP ownerForStream(NPStream*); 76 75 77 78 76 private: 77 PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&); 79 78 80 81 82 79 void deliverData(); 80 void destroyStream(NPReason); 81 void destroyStream(); 83 82 84 85 void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, WTF::Function<void(ResourceRequest&&)>&&) override;86 87 88 89 90 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; 91 90 92 93 91 ResourceRequest m_resourceRequest; 92 ResourceResponse m_resourceResponse; 94 93 95 96 97 98 99 100 101 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; 102 101 103 104 102 Timer m_delayDeliveryTimer; 103 void delayDeliveryTimerFired(); 105 104 106 105 std::unique_ptr<Vector<char>> m_deliveryData; 107 106 108 107 FileSystem::PlatformFileHandle m_tempFileHandle; 109 108 110 111 112 113 114 115 116 117 118 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; 119 118 120 121 119 friend class PluginView; 120 }; 122 121 123 122 } // namespace WebCore 124 125 #endif
Note: See TracChangeset
for help on using the changeset viewer.