Title: [241444] trunk/Source/WebCore
Revision
241444
Author
achristen...@apple.com
Date
2019-02-13 11:00:30 -0800 (Wed, 13 Feb 2019)

Log Message

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.

Modified Paths

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()];
     }];
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to