Changeset 203174 in webkit


Ignore:
Timestamp:
Jul 13, 2016, 1:01:11 PM (9 years ago)
Author:
Chris Dumez
Message:

WebKit2 shouldn't signal custom protocol clients from the NSURLConnection loader thread.
https://bugs.webkit.org/show_bug.cgi?id=159725
<rdar://problem/27323131>

Reviewed by Andy Estes.

WebKit2 shouldn't signal custom protocol clients from the NSURLConnection
loader thread. Instead, use the RunLoop the WKCustomProtocol was initialized
on.

  • NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:

(-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
(WebKit::dispatchOnInitializationRunLoop):
(WebKit::CustomProtocolManager::didFailWithError):
(WebKit::CustomProtocolManager::didLoadData):
(WebKit::CustomProtocolManager::didReceiveResponse):
(WebKit::CustomProtocolManager::didFinishLoading):
(WebKit::CustomProtocolManager::wasRedirectedToRequest):
(WebKit::dispatchOnResourceLoaderRunLoop): Deleted.

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r203169 r203174  
     12016-07-13  Chris Dumez  <cdumez@apple.com>
     2
     3        WebKit2 shouldn't signal custom protocol clients from the NSURLConnection loader thread.
     4        https://bugs.webkit.org/show_bug.cgi?id=159725
     5        <rdar://problem/27323131>
     6
     7        Reviewed by Andy Estes.
     8
     9        WebKit2 shouldn't signal custom protocol clients from the NSURLConnection
     10        loader thread. Instead, use the RunLoop the WKCustomProtocol was initialized
     11        on.
     12
     13        * NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
     14        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
     15        (WebKit::dispatchOnInitializationRunLoop):
     16        (WebKit::CustomProtocolManager::didFailWithError):
     17        (WebKit::CustomProtocolManager::didLoadData):
     18        (WebKit::CustomProtocolManager::didReceiveResponse):
     19        (WebKit::CustomProtocolManager::didFinishLoading):
     20        (WebKit::CustomProtocolManager::wasRedirectedToRequest):
     21        (WebKit::dispatchOnResourceLoaderRunLoop): Deleted.
     22
    1232016-07-13  Enrica Casucci  <enrica@apple.com>
    224
  • trunk/Source/WebKit2/NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm

    r195005 r203174  
    5858@private
    5959    uint64_t _customProtocolID;
     60    RetainPtr<CFRunLoopRef> _initializationRunLoop;
    6061}
    6162@property (nonatomic, readonly) uint64_t customProtocolID;
     63@property (nonatomic, readonly) CFRunLoopRef initializationRunLoop;
    6264@end
    6365
     
    9092   
    9193    _customProtocolID = generateCustomProtocolID();
     94    _initializationRunLoop = CFRunLoopGetCurrent();
    9295    if (auto* customProtocolManager = NetworkProcess::singleton().supplement<CustomProtocolManager>())
    9396        customProtocolManager->addCustomProtocol(self);
    9497    return self;
     98}
     99
     100- (CFRunLoopRef)initializationRunLoop
     101{
     102    return _initializationRunLoop.get();
    95103}
    96104
     
    184192}
    185193
    186 static inline void dispatchOnResourceLoaderRunLoop(void (^block)())
    187 {
    188     CFRunLoopPerformBlock([NSURLConnection resourceLoaderRunLoop], kCFRunLoopDefaultMode, block);
    189     CFRunLoopWakeUp([NSURLConnection resourceLoaderRunLoop]);
     194static inline void dispatchOnInitializationRunLoop(WKCustomProtocol* protocol, void (^block)())
     195{
     196    CFRunLoopRef runloop = protocol.initializationRunLoop;
     197    CFRunLoopPerformBlock(runloop, kCFRunLoopDefaultMode, block);
     198    CFRunLoopWakeUp(runloop);
    190199}
    191200
     
    198207    RetainPtr<NSError> nsError = error.nsError();
    199208
    200     dispatchOnResourceLoaderRunLoop(^ {
     209    dispatchOnInitializationRunLoop(protocol.get(), ^ {
    201210        [[protocol client] URLProtocol:protocol.get() didFailWithError:nsError.get()];
    202211    });
     
    213222    RetainPtr<NSData> nsData = adoptNS([[NSData alloc] initWithBytes:data.data() length:data.size()]);
    214223
    215     dispatchOnResourceLoaderRunLoop(^ {
     224    dispatchOnInitializationRunLoop(protocol.get(), ^ {
    216225        [[protocol client] URLProtocol:protocol.get() didLoadData:nsData.get()];
    217226    });
     
    226235    RetainPtr<NSURLResponse> nsResponse = response.nsURLResponse();
    227236
    228     dispatchOnResourceLoaderRunLoop(^ {
     237    dispatchOnInitializationRunLoop(protocol.get(), ^ {
    229238        [[protocol client] URLProtocol:protocol.get() didReceiveResponse:nsResponse.get() cacheStoragePolicy:static_cast<NSURLCacheStoragePolicy>(cacheStoragePolicy)];
    230239    });
     
    237246        return;
    238247
    239     dispatchOnResourceLoaderRunLoop(^ {
     248    dispatchOnInitializationRunLoop(protocol.get(), ^ {
    240249        [[protocol client] URLProtocolDidFinishLoading:protocol.get()];
    241250    });
     
    253262    RetainPtr<NSURLResponse> nsRedirectResponse = redirectResponse.nsURLResponse();
    254263
    255     dispatchOnResourceLoaderRunLoop([protocol, nsRequest, nsRedirectResponse]() {
     264    dispatchOnInitializationRunLoop(protocol.get(), [protocol, nsRequest, nsRedirectResponse]() {
    256265        [[protocol client] URLProtocol:protocol.get() wasRedirectedToRequest:nsRequest.get() redirectResponse:nsRedirectResponse.get()];
    257266    });
Note: See TracChangeset for help on using the changeset viewer.