WebKit Bugzilla
Attachment 361883 Details for
Bug 194579
: REGRESSION(r241273): This change is causing a flaky assertion failure crash in High Sierra Debug (Requested by ShawnRoberts on #webkit).
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
ROLLOUT of r241273
bug-194579-20190212181047.patch (text/plain), 14.95 KB, created by
WebKit Commit Bot
on 2019-02-12 18:10:48 PST
(
hide
)
Description:
ROLLOUT of r241273
Filename:
MIME Type:
Creator:
WebKit Commit Bot
Created:
2019-02-12 18:10:48 PST
Size:
14.95 KB
patch
obsolete
>Subversion Revision: 241333 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 965769254d9f1c01161efc426bc0c593e49a257b..a19abe56daeb9cf8dcb4f7010bce09d564f87318 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,17 @@ >+2019-02-12 Commit Queue <commit-queue@webkit.org> >+ >+ 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 Rob Buis <rbuis@igalia.com> > > Align with Fetch on data: URLs >diff --git a/Source/WebCore/loader/MediaResourceLoader.cpp b/Source/WebCore/loader/MediaResourceLoader.cpp >index 1c7347ef307e1cefe430683621319830cd732459..bce269394c67925a57ca5f9f9e785d184f1cec4b 100644 >--- a/Source/WebCore/loader/MediaResourceLoader.cpp >+++ b/Source/WebCore/loader/MediaResourceLoader.cpp >@@ -151,6 +151,12 @@ void MediaResource::stop() > 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 @@ void MediaResource::responseReceived(CachedResource& resource, const ResourceRes > > 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); > } >diff --git a/Source/WebCore/loader/MediaResourceLoader.h b/Source/WebCore/loader/MediaResourceLoader.h >index 1b0e00bdb0b040fb382299143e4f2c80ad3cffdd..618458a128d426cf12b4b43f4a877066785731ea 100644 >--- a/Source/WebCore/loader/MediaResourceLoader.h >+++ b/Source/WebCore/loader/MediaResourceLoader.h >@@ -75,6 +75,7 @@ public: > > // PlatformMediaResource > void stop() override; >+ void setDefersLoading(bool) override; > bool didPassAccessControlCheck() const override { return m_didPassAccessControlCheck; } > > // CachedRawResourceClient >diff --git a/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h b/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h >index 51615ef6065dd36fa55018f666848b21ca9b9780..37396d29d70e5e7f0ac0f9e9d68970edb9f20d18 100644 >--- a/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h >+++ b/Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h >@@ -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 @@ class PlatformMediaResourceClient { > 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 @@ public: > 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); } >diff --git a/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp >index 52aa83633302b439704b813b551438c510e99434..43ae0cca7f69e2af6d615c8da30326f5c4448ab8 100644 >--- a/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp >+++ b/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp >@@ -50,7 +50,7 @@ private: > 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 @@ static void webKitWebSrcNeedData(WebKitWebSrc* src) > 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 @@ static void webKitWebSrcEnoughData(WebKitWebSrc* src) > 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::checkUpdateBlocksize(uint64_t bytesRead) > } > } > >-void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response, CompletionHandler<void(ShouldContinue)>&& completionHandler) >+void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, const ResourceResponse& response) > { > WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); > WebKitWebSrcPrivate* priv = src->priv; >@@ -800,12 +804,12 @@ void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, con > 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 @@ void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, con > 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 @@ void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, con > 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) >diff --git a/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm b/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm >index 74d5c4a6c77d433b53c9066acacd683b6ffd8262..9bcefac3b5c0dc9f76619e39dbdb29e603df2eb2 100644 >--- a/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm >+++ b/Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm >@@ -53,10 +53,11 @@ NS_ASSUME_NONNULL_BEGIN > - (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 @@ public: > > 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 @@ void WebCoreNSURLSessionDataTaskClient::dataSent(PlatformMediaResource& resource > [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 @@ void WebCoreNSURLSessionDataTaskClient::loadFinished(PlatformMediaResource& reso > [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 @@ void WebCoreNSURLSessionDataTaskClient::loadFinished(PlatformMediaResource& reso > // 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 @@ void WebCoreNSURLSessionDataTaskClient::loadFinished(PlatformMediaResource& reso > [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()]; >+ }]; > }]; > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194579
: 361883