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()];
+ }];
}];
}