Diff
Modified: trunk/Source/WebCore/ChangeLog (241443 => 241444)
--- trunk/Source/WebCore/ChangeLog 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/ChangeLog 2019-02-13 19:00:30 UTC (rev 241444)
@@ -1,3 +1,26 @@
+2019-02-13 Alex Christensen <achristen...@webkit.org>
+
+ Stop using setDefersLoading from WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=194315
+
+ Reviewed by Jer Noble.
+
+ That is what CompletionHandlers are for.
+
+ * loader/MediaResourceLoader.cpp:
+ (WebCore::MediaResource::responseReceived):
+ (WebCore::MediaResource::setDefersLoading): Deleted.
+ * loader/MediaResourceLoader.h:
+ * platform/graphics/PlatformMediaResourceLoader.h:
+ (WebCore::PlatformMediaResourceClient::responseReceived):
+ (WebCore::PlatformMediaResource::stop):
+ (WebCore::PlatformMediaResource::setDefersLoading): Deleted.
+ * platform/network/cocoa/WebCoreNSURLSession.mm:
+ (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
+ (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):
+ (-[WebCoreNSURLSessionDataTask _setDefersLoading:]): Deleted.
+ (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]): Deleted.
+
2019-02-13 Jer Noble <jer.no...@apple.com>
[Cocoa] Switch to CVPixelBufferGetBytesPerRow() for calculating CVPixelBuffer base address size.
Modified: trunk/Source/WebCore/loader/MediaResourceLoader.cpp (241443 => 241444)
--- trunk/Source/WebCore/loader/MediaResourceLoader.cpp 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.cpp 2019-02-13 19:00:30 UTC (rev 241444)
@@ -151,12 +151,6 @@
m_resource = nullptr;
}
-void MediaResource::setDefersLoading(bool defersLoading)
-{
- if (m_resource)
- m_resource->setDefersLoading(defersLoading);
-}
-
void MediaResource::responseReceived(CachedResource& resource, const ResourceResponse& response, CompletionHandler<void()>&& completionHandler)
{
ASSERT_UNUSED(resource, &resource == m_resource);
@@ -178,7 +172,12 @@
m_didPassAccessControlCheck = m_resource->options().mode == FetchOptions::Mode::Cors;
if (m_client)
- m_client->responseReceived(*this, response);
+ m_client->responseReceived(*this, response, [this, protectedThis = makeRef(*this), completionHandler = completionHandlerCaller.release()] (ShouldContinue shouldContinue) mutable {
+ if (completionHandler)
+ completionHandler();
+ if (shouldContinue == ShouldContinue::No)
+ stop();
+ });
m_loader->addResponseForTesting(response);
}
Modified: trunk/Source/WebCore/loader/MediaResourceLoader.h (241443 => 241444)
--- trunk/Source/WebCore/loader/MediaResourceLoader.h 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.h 2019-02-13 19:00:30 UTC (rev 241444)
@@ -75,7 +75,6 @@
// PlatformMediaResource
void stop() override;
- void setDefersLoading(bool) override;
bool didPassAccessControlCheck() const override { return m_didPassAccessControlCheck; }
// CachedRawResourceClient
Modified: trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h (241443 => 241444)
--- trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h 2019-02-13 19:00:30 UTC (rev 241444)
@@ -27,6 +27,7 @@
#if ENABLE(VIDEO)
+#include "PolicyChecker.h"
#include <wtf/CompletionHandler.h>
#include <wtf/Noncopyable.h>
#include <wtf/RefCounted.h>
@@ -43,7 +44,7 @@
public:
virtual ~PlatformMediaResourceClient() = default;
- virtual void responseReceived(PlatformMediaResource&, const ResourceResponse&) { }
+ virtual void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&& completionHandler) { completionHandler(ShouldContinue::Yes); }
virtual void redirectReceived(PlatformMediaResource&, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
virtual bool shouldCacheResponse(PlatformMediaResource&, const ResourceResponse&) { return true; }
virtual void dataSent(PlatformMediaResource&, unsigned long long, unsigned long long) { }
@@ -76,7 +77,6 @@
PlatformMediaResource() = default;
virtual ~PlatformMediaResource() = default;
virtual void stop() { }
- virtual void setDefersLoading(bool) { }
virtual bool didPassAccessControlCheck() const { return false; }
void setClient(std::unique_ptr<PlatformMediaResourceClient>&& client) { m_client = WTFMove(client); }
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp (241443 => 241444)
--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2019-02-13 19:00:30 UTC (rev 241444)
@@ -50,7 +50,7 @@
void checkUpdateBlocksize(uint64_t bytesRead);
// PlatformMediaResourceClient virtual methods.
- void responseReceived(PlatformMediaResource&, const ResourceResponse&) override;
+ void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&&) override;
void dataReceived(PlatformMediaResource&, const char*, int) override;
void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override;
void loadFailed(PlatformMediaResource&, const ResourceError&) override;
@@ -683,11 +683,7 @@
priv->paused = false;
GRefPtr<WebKitWebSrc> protector = WTF::ensureGRef(src);
- priv->notifier->notify(MainThreadSourceNotification::NeedData, [protector] {
- WebKitWebSrcPrivate* priv = protector->priv;
- if (priv->resource)
- priv->resource->setDefersLoading(false);
- });
+ priv->notifier->notify(MainThreadSourceNotification::NeedData, [protector] { });
}
static void webKitWebSrcEnoughData(WebKitWebSrc* src)
@@ -704,7 +700,7 @@
priv->notifier->notify(MainThreadSourceNotification::EnoughData, [protector] {
WebKitWebSrcPrivate* priv = protector->priv;
if (priv->resource)
- priv->resource->setDefersLoading(true);
+ priv->resource->stop();
});
}
@@ -785,7 +781,7 @@
}
}
-void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response)
+void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response, CompletionHandler<void(ShouldContinue)>&& completionHandler)
{
WebKitWebSrc* src = ""
WebKitWebSrcPrivate* priv = src->priv;
@@ -804,12 +800,12 @@
GST_ELEMENT_ERROR(src, RESOURCE, READ, ("Received %d HTTP error code", response.httpStatusCode()), (nullptr));
gst_app_src_end_of_stream(priv->appsrc);
webKitWebSrcStop(src);
- return;
+ return completionHandler(ShouldContinue::No);
}
if (priv->isSeeking) {
GST_DEBUG_OBJECT(src, "Seek in progress, ignoring response");
- return;
+ return completionHandler(ShouldContinue::Yes);
}
if (priv->requestedOffset) {
@@ -822,7 +818,7 @@
GST_ELEMENT_ERROR(src, RESOURCE, READ, ("Received unexpected %d HTTP status code", response.httpStatusCode()), (nullptr));
gst_app_src_end_of_stream(priv->appsrc);
webKitWebSrcStop(src);
- return;
+ return completionHandler(ShouldContinue::No);
}
}
@@ -886,6 +882,8 @@
gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_element(GST_OBJECT_CAST(src),
gst_structure_copy(httpHeaders)));
gst_pad_push_event(GST_BASE_SRC_PAD(priv->appsrc), gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, httpHeaders));
+
+ completionHandler(ShouldContinue::Yes);
}
void CachedResourceStreamingClient::dataReceived(PlatformMediaResource&, const char* data, int length)
Modified: trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm (241443 => 241444)
--- trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm 2019-02-13 18:54:32 UTC (rev 241443)
+++ trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm 2019-02-13 19:00:30 UTC (rev 241444)
@@ -53,11 +53,10 @@
- (void)_restart;
- (void)_cancel;
- (void)_finish;
-- (void)_setDefersLoading:(BOOL)defers;
@property (assign) WebCoreNSURLSession * _Nullable session;
- (void)resource:(PlatformMediaResource&)resource sentBytes:(unsigned long long)bytesSent totalBytesToBeSent:(unsigned long long)totalBytesToBeSent;
-- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response;
+- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response completionHandler:(CompletionHandler<void(ShouldContinue)>&&)completionHandler;
- (BOOL)resource:(PlatformMediaResource&)resource shouldCacheResponse:(const ResourceResponse&)response;
- (void)resource:(PlatformMediaResource&)resource receivedData:(const char*)data length:(int)length;
- (void)resource:(PlatformMediaResource&)resource receivedRedirect:(const ResourceResponse&)response request:(ResourceRequest&&)request completionHandler:(CompletionHandler<void(ResourceRequest&&)>&&)completionHandler;
@@ -382,7 +381,7 @@
void clearTask();
- void responseReceived(PlatformMediaResource&, const ResourceResponse&) override;
+ void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&&) override;
void redirectReceived(PlatformMediaResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) override;
bool shouldCacheResponse(PlatformMediaResource&, const ResourceResponse&) override;
void dataSent(PlatformMediaResource&, unsigned long long, unsigned long long) override;
@@ -411,13 +410,13 @@
[m_task resource:resource sentBytes:bytesSent totalBytesToBeSent:totalBytesToBeSent];
}
-void WebCoreNSURLSessionDataTaskClient::responseReceived(PlatformMediaResource& resource, const ResourceResponse& response)
+void WebCoreNSURLSessionDataTaskClient::responseReceived(PlatformMediaResource& resource, const ResourceResponse& response, CompletionHandler<void(ShouldContinue)>&& completionHandler)
{
LockHolder locker(m_taskLock);
if (!m_task)
- return;
+ return completionHandler(ShouldContinue::No);
- [m_task resource:resource receivedResponse:response];
+ [m_task resource:resource receivedResponse:response completionHandler:WTFMove(completionHandler)];
}
bool WebCoreNSURLSessionDataTaskClient::shouldCacheResponse(PlatformMediaResource& resource, const ResourceResponse& response)
@@ -544,13 +543,6 @@
[self resourceFinished:*_resource];
}
-- (void)_setDefersLoading:(BOOL)defers
-{
- ASSERT(isMainThread());
- if (_resource)
- _resource->setDefersLoading(defers);
-}
-
#pragma mark - NSURLSession API
@synthesize session=_session;
@synthesize taskIdentifier=_taskIdentifier;
@@ -635,7 +627,7 @@
// No-op.
}
-- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response
+- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response completionHandler:(CompletionHandler<void(ShouldContinue)>&&)completionHandler
{
ASSERT(response.source() == ResourceResponse::Source::Network || response.source() == ResourceResponse::Source::DiskCache || response.source() == ResourceResponse::Source::DiskCacheAfterValidation || response.source() == ResourceResponse::Source::ServiceWorker);
ASSERT_UNUSED(resource, &resource == _resource);
@@ -643,31 +635,31 @@
[self.session task:self didReceiveResponseFromOrigin:SecurityOrigin::create(response.url())];
[self.session task:self didReceiveCORSAccessCheckResult:resource.didPassAccessControlCheck()];
self.countOfBytesExpectedToReceive = response.expectedContentLength();
- [self _setDefersLoading:YES];
RetainPtr<NSURLResponse> strongResponse { response.nsURLResponse() };
RetainPtr<WebCoreNSURLSessionDataTask> strongSelf { self };
- [self.session addDelegateOperation:[strongSelf, strongResponse] {
+ if (!self.session)
+ return completionHandler(ShouldContinue::No);
+ [self.session addDelegateOperation:[strongSelf, strongResponse, completionHandler = WTFMove(completionHandler)] () mutable {
strongSelf->_response = strongResponse.get();
id<NSURLSessionDataDelegate> dataDelegate = (id<NSURLSessionDataDelegate>)strongSelf.get().session.delegate;
if (![dataDelegate respondsToSelector:@selector(URLSession:dataTask:didReceiveResponse:completionHandler:)]) {
- callOnMainThread([strongSelf] {
- [strongSelf _setDefersLoading:NO];
+ callOnMainThread([strongSelf, completionHandler = WTFMove(completionHandler)] () mutable {
+ completionHandler(ShouldContinue::Yes);
});
return;
}
- [dataDelegate URLSession:(NSURLSession *)strongSelf.get().session dataTask:(NSURLSessionDataTask *)strongSelf.get() didReceiveResponse:strongResponse.get() completionHandler:[strongSelf] (NSURLSessionResponseDisposition disposition) {
- if (disposition == NSURLSessionResponseCancel)
- [strongSelf cancel];
- else if (disposition == NSURLSessionResponseAllow)
- [strongSelf resume];
- else
- ASSERT_NOT_REACHED();
- callOnMainThread([strongSelf] {
- [strongSelf _setDefersLoading:NO];
+ [dataDelegate URLSession:(NSURLSession *)strongSelf.get().session dataTask:(NSURLSessionDataTask *)strongSelf.get() didReceiveResponse:strongResponse.get() completionHandler:makeBlockPtr([strongSelf, completionHandler = WTFMove(completionHandler)] (NSURLSessionResponseDisposition disposition) mutable {
+ callOnMainThread([strongSelf, disposition, completionHandler = WTFMove(completionHandler)] () mutable {
+ if (disposition == NSURLSessionResponseCancel)
+ completionHandler(ShouldContinue::No);
+ else {
+ ASSERT(disposition == NSURLSessionResponseAllow);
+ completionHandler(ShouldContinue::Yes);
+ }
});
- }];
+ }).get()];
}];
}