Title: [241350] trunk/Source/WebCore
Revision
241350
Author
[email protected]
Date
2019-02-13 00:26:23 -0800 (Wed, 13 Feb 2019)

Log Message

Unreviewed, rolling out r241273.
https://bugs.webkit.org/show_bug.cgi?id=194579

This change is causing a flaky assertion failure crash in High
Sierra Debug (Requested by ShawnRoberts on #webkit).

Reverted changeset:

"Stop using setDefersLoading from WebCore"
https://bugs.webkit.org/show_bug.cgi?id=194315
https://trac.webkit.org/changeset/241273

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (241349 => 241350)


--- trunk/Source/WebCore/ChangeLog	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/ChangeLog	2019-02-13 08:26:23 UTC (rev 241350)
@@ -1,3 +1,17 @@
+2019-02-13  Commit Queue  <[email protected]>
+
+        Unreviewed, rolling out r241273.
+        https://bugs.webkit.org/show_bug.cgi?id=194579
+
+        This change is causing a flaky assertion failure crash in High
+        Sierra Debug (Requested by ShawnRoberts on #webkit).
+
+        Reverted changeset:
+
+        "Stop using setDefersLoading from WebCore"
+        https://bugs.webkit.org/show_bug.cgi?id=194315
+        https://trac.webkit.org/changeset/241273
+
 2019-02-12  Mark Lam  <[email protected]>
 
         Remove unnecessary null check in bindings.

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.cpp (241349 => 241350)


--- trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2019-02-13 08:26:23 UTC (rev 241350)
@@ -151,6 +151,12 @@
     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);
@@ -172,12 +178,7 @@
 
     m_didPassAccessControlCheck = m_resource->options().mode == FetchOptions::Mode::Cors;
     if (m_client)
-        m_client->responseReceived(*this, response, [this, protectedThis = makeRef(*this), completionHandler = completionHandlerCaller.release()] (ShouldContinue shouldContinue) mutable {
-            if (completionHandler)
-                completionHandler();
-            if (shouldContinue == ShouldContinue::No)
-                stop();
-        });
+        m_client->responseReceived(*this, response);
 
     m_loader->addResponseForTesting(response);
 }

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.h (241349 => 241350)


--- trunk/Source/WebCore/loader/MediaResourceLoader.h	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.h	2019-02-13 08:26:23 UTC (rev 241350)
@@ -75,6 +75,7 @@
 
     // PlatformMediaResource
     void stop() override;
+    void setDefersLoading(bool) override;
     bool didPassAccessControlCheck() const override { return m_didPassAccessControlCheck; }
 
     // CachedRawResourceClient

Modified: trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h (241349 => 241350)


--- trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h	2019-02-13 08:26:23 UTC (rev 241350)
@@ -27,7 +27,6 @@
 
 #if ENABLE(VIDEO)
 
-#include "PolicyChecker.h"
 #include <wtf/CompletionHandler.h>
 #include <wtf/Noncopyable.h>
 #include <wtf/RefCounted.h>
@@ -44,7 +43,7 @@
 public:
     virtual ~PlatformMediaResourceClient() = default;
 
-    virtual void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&& completionHandler) { completionHandler(ShouldContinue::Yes); }
+    virtual void responseReceived(PlatformMediaResource&, const ResourceResponse&) { }
     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) { }
@@ -77,6 +76,7 @@
     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 (241349 => 241350)


--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp	2019-02-13 08:26:23 UTC (rev 241350)
@@ -50,7 +50,7 @@
     void checkUpdateBlocksize(uint64_t bytesRead);
 
     // PlatformMediaResourceClient virtual methods.
-    void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&&) override;
+    void responseReceived(PlatformMediaResource&, const ResourceResponse&) override;
     void dataReceived(PlatformMediaResource&, const char*, int) override;
     void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override;
     void loadFailed(PlatformMediaResource&, const ResourceError&) override;
@@ -683,7 +683,11 @@
     priv->paused = false;
 
     GRefPtr<WebKitWebSrc> protector = WTF::ensureGRef(src);
-    priv->notifier->notify(MainThreadSourceNotification::NeedData, [protector] { });
+    priv->notifier->notify(MainThreadSourceNotification::NeedData, [protector] {
+        WebKitWebSrcPrivate* priv = protector->priv;
+        if (priv->resource)
+            priv->resource->setDefersLoading(false);
+    });
 }
 
 static void webKitWebSrcEnoughData(WebKitWebSrc* src)
@@ -700,7 +704,7 @@
     priv->notifier->notify(MainThreadSourceNotification::EnoughData, [protector] {
         WebKitWebSrcPrivate* priv = protector->priv;
         if (priv->resource)
-            priv->resource->stop();
+            priv->resource->setDefersLoading(true);
     });
 }
 
@@ -781,7 +785,7 @@
     }
 }
 
-void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response, CompletionHandler<void(ShouldContinue)>&& completionHandler)
+void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response)
 {
     WebKitWebSrc* src = ""
     WebKitWebSrcPrivate* priv = src->priv;
@@ -800,12 +804,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 completionHandler(ShouldContinue::No);
+        return;
     }
 
     if (priv->isSeeking) {
         GST_DEBUG_OBJECT(src, "Seek in progress, ignoring response");
-        return completionHandler(ShouldContinue::Yes);
+        return;
     }
 
     if (priv->requestedOffset) {
@@ -818,7 +822,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 completionHandler(ShouldContinue::No);
+            return;
         }
     }
 
@@ -882,8 +886,6 @@
     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 (241349 => 241350)


--- trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm	2019-02-13 07:36:30 UTC (rev 241349)
+++ trunk/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm	2019-02-13 08:26:23 UTC (rev 241350)
@@ -53,10 +53,11 @@
 - (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 completionHandler:(CompletionHandler<void(ShouldContinue)>&&)completionHandler;
+- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response;
 - (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;
@@ -381,7 +382,7 @@
 
     void clearTask();
 
-    void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinue)>&&) override;
+    void responseReceived(PlatformMediaResource&, const ResourceResponse&) 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;
@@ -410,13 +411,13 @@
     [m_task resource:resource sentBytes:bytesSent totalBytesToBeSent:totalBytesToBeSent];
 }
 
-void WebCoreNSURLSessionDataTaskClient::responseReceived(PlatformMediaResource& resource, const ResourceResponse& response, CompletionHandler<void(ShouldContinue)>&& completionHandler)
+void WebCoreNSURLSessionDataTaskClient::responseReceived(PlatformMediaResource& resource, const ResourceResponse& response)
 {
     LockHolder locker(m_taskLock);
     if (!m_task)
-        return completionHandler(ShouldContinue::No);
+        return;
 
-    [m_task resource:resource receivedResponse:response completionHandler:WTFMove(completionHandler)];
+    [m_task resource:resource receivedResponse:response];
 }
 
 bool WebCoreNSURLSessionDataTaskClient::shouldCacheResponse(PlatformMediaResource& resource, const ResourceResponse& response)
@@ -543,6 +544,13 @@
         [self resourceFinished:*_resource];
 }
 
+- (void)_setDefersLoading:(BOOL)defers
+{
+    ASSERT(isMainThread());
+    if (_resource)
+        _resource->setDefersLoading(defers);
+}
+
 #pragma mark - NSURLSession API
 @synthesize session=_session;
 @synthesize taskIdentifier=_taskIdentifier;
@@ -627,7 +635,7 @@
     // No-op.
 }
 
-- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response completionHandler:(CompletionHandler<void(ShouldContinue)>&&)completionHandler
+- (void)resource:(PlatformMediaResource&)resource receivedResponse:(const ResourceResponse&)response
 {
     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);
@@ -635,29 +643,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, completionHandler = WTFMove(completionHandler)] () mutable {
+    [self.session addDelegateOperation:[strongSelf, strongResponse] {
         strongSelf->_response = strongResponse.get();
 
         id<NSURLSessionDataDelegate> dataDelegate = (id<NSURLSessionDataDelegate>)strongSelf.get().session.delegate;
         if (![dataDelegate respondsToSelector:@selector(URLSession:dataTask:didReceiveResponse:completionHandler:)]) {
-            callOnMainThread([strongSelf, completionHandler = WTFMove(completionHandler)] () mutable {
-                completionHandler(ShouldContinue::Yes);
+            callOnMainThread([strongSelf] {
+                [strongSelf _setDefersLoading:NO];
             });
             return;
         }
 
-        [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);
-                }
+        [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];
             });
-        }).get()];
+        }];
     }];
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to