@@ -53,10 +53,11 @@ - (id)initWithSession:(WebCoreNSURLSession *)session identifier:(NSUInteger)iden
5353- (void )_restart ;
5454- (void )_cancel ;
5555- (void )_finish ;
56+ - (void )_setDefersLoading : (BOOL )defers ;
5657@property (assign ) WebCoreNSURLSession * _Nullable session;
5758
5859- (void )resource : (PlatformMediaResource&)resource sentBytes : (unsigned long long )bytesSent totalBytesToBeSent : (unsigned long long )totalBytesToBeSent ;
59- - (void )resource : (PlatformMediaResource&)resource receivedResponse : (const ResourceResponse&)response completionHandler : (CompletionHandler<void(ShouldContinue)>&&) completionHandler ;
60+ - (void )resource : (PlatformMediaResource&)resource receivedResponse : (const ResourceResponse&)response ;
6061- (BOOL )resource : (PlatformMediaResource&)resource shouldCacheResponse : (const ResourceResponse&)response ;
6162- (void )resource : (PlatformMediaResource&)resource receivedData : (const char *)data length : (int )length ;
6263- (void )resource : (PlatformMediaResource&)resource receivedRedirect : (const ResourceResponse&)response request : (ResourceRequest&&)request completionHandler : (CompletionHandler<void(ResourceRequest&&)>&&)completionHandler ;
@@ -381,7 +382,7 @@ - (BOOL)isKindOfClass:(Class)aClass
381382
382383 void clearTask ();
383384
384- void responseReceived (PlatformMediaResource&, const ResourceResponse&, CompletionHandler< void (ShouldContinue)>&& ) override ;
385+ void responseReceived (PlatformMediaResource&, const ResourceResponse&) override ;
385386 void redirectReceived (PlatformMediaResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void (ResourceRequest&&)>&&) override ;
386387 bool shouldCacheResponse (PlatformMediaResource&, const ResourceResponse&) override ;
387388 void dataSent (PlatformMediaResource&, unsigned long long , unsigned long long ) override ;
@@ -410,13 +411,13 @@ - (BOOL)isKindOfClass:(Class)aClass
410411 [m_task resource: resource sentBytes: bytesSent totalBytesToBeSent: totalBytesToBeSent];
411412}
412413
413- void WebCoreNSURLSessionDataTaskClient::responseReceived (PlatformMediaResource& resource, const ResourceResponse& response, CompletionHandler< void (ShouldContinue)>&& completionHandler )
414+ void WebCoreNSURLSessionDataTaskClient::responseReceived (PlatformMediaResource& resource, const ResourceResponse& response)
414415{
415416 LockHolder locker (m_taskLock);
416417 if (!m_task)
417- return completionHandler (ShouldContinue::No) ;
418+ return ;
418419
419- [m_task resource: resource receivedResponse: response completionHandler: WTFMove (completionHandler) ];
420+ [m_task resource: resource receivedResponse: response];
420421}
421422
422423bool WebCoreNSURLSessionDataTaskClient::shouldCacheResponse (PlatformMediaResource& resource, const ResourceResponse& response)
@@ -543,6 +544,13 @@ - (void)_finish
543544 [self resourceFinished: *_resource];
544545}
545546
547+ - (void )_setDefersLoading : (BOOL )defers
548+ {
549+ ASSERT (isMainThread ());
550+ if (_resource)
551+ _resource->setDefersLoading (defers);
552+ }
553+
546554#pragma mark - NSURLSession API
547555@synthesize session=_session;
548556@synthesize taskIdentifier=_taskIdentifier;
@@ -627,37 +635,39 @@ - (void)resource:(PlatformMediaResource&)resource sentBytes:(unsigned long long)
627635 // No-op.
628636}
629637
630- - (void )resource : (PlatformMediaResource&)resource receivedResponse : (const ResourceResponse&)response completionHandler : (CompletionHandler<void(ShouldContinue)>&&) completionHandler
638+ - (void )resource : (PlatformMediaResource&)resource receivedResponse : (const ResourceResponse&)response
631639{
632640 ASSERT (response.source () == ResourceResponse::Source::Network || response.source () == ResourceResponse::Source::DiskCache || response.source () == ResourceResponse::Source::DiskCacheAfterValidation || response.source () == ResourceResponse::Source::ServiceWorker);
633641 ASSERT_UNUSED (resource, &resource == _resource);
634642 ASSERT (isMainThread ());
635643 [self .session task: self didReceiveResponseFromOrigin:SecurityOrigin: :create (response.url ())];
636644 [self .session task: self didReceiveCORSAccessCheckResult: resource.didPassAccessControlCheck ()];
637645 self.countOfBytesExpectedToReceive = response.expectedContentLength ();
646+ [self _setDefersLoading: YES ];
638647 RetainPtr<NSURLResponse > strongResponse { response.nsURLResponse () };
639648 RetainPtr<WebCoreNSURLSessionDataTask> strongSelf { self };
640- [self .session addDelegateOperation: [strongSelf, strongResponse, completionHandler = WTFMove (completionHandler)] () mutable {
649+ [self .session addDelegateOperation: [strongSelf, strongResponse] {
641650 strongSelf->_response = strongResponse.get ();
642651
643652 id <NSURLSessionDataDelegate > dataDelegate = (id <NSURLSessionDataDelegate >)strongSelf.get ().session .delegate ;
644653 if (![dataDelegate respondsToSelector: @selector (URLSession:dataTask:didReceiveResponse:completionHandler: )]) {
645- callOnMainThread ([strongSelf, completionHandler = WTFMove (completionHandler)] () mutable {
646- completionHandler (ShouldContinue::Yes) ;
654+ callOnMainThread ([strongSelf] {
655+ [strongSelf _setDefersLoading: NO ] ;
647656 });
648657 return ;
649658 }
650659
651- [dataDelegate URLSession: (NSURLSession *)strongSelf.get ().session dataTask: (NSURLSessionDataTask *)strongSelf.get () didReceiveResponse: strongResponse.get () completionHandler: makeBlockPtr ([strongSelf, completionHandler = WTFMove (completionHandler)] (NSURLSessionResponseDisposition disposition) mutable {
652- callOnMainThread ([strongSelf, disposition, completionHandler = WTFMove (completionHandler)] () mutable {
653- if (disposition == NSURLSessionResponseCancel )
654- completionHandler (ShouldContinue::No);
655- else {
656- ASSERT (disposition == NSURLSessionResponseAllow );
657- completionHandler (ShouldContinue::Yes);
658- }
660+ [dataDelegate URLSession: (NSURLSession *)strongSelf.get ().session dataTask: (NSURLSessionDataTask *)strongSelf.get () didReceiveResponse: strongResponse.get () completionHandler: [strongSelf] (NSURLSessionResponseDisposition disposition) {
661+ if (disposition == NSURLSessionResponseCancel )
662+ [strongSelf cancel ];
663+ else if (disposition == NSURLSessionResponseAllow )
664+ [strongSelf resume ];
665+ else
666+ ASSERT_NOT_REACHED ();
667+ callOnMainThread ([strongSelf] {
668+ [strongSelf _setDefersLoading: NO ];
659669 });
660- }). get () ];
670+ }];
661671 }];
662672}
663673
0 commit comments