Changeset 203174 in webkit
- Timestamp:
- Jul 13, 2016, 1:01:11 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r203169 r203174 1 2016-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 1 23 2016-07-13 Enrica Casucci <enrica@apple.com> 2 24 -
trunk/Source/WebKit2/NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm
r195005 r203174 58 58 @private 59 59 uint64_t _customProtocolID; 60 RetainPtr<CFRunLoopRef> _initializationRunLoop; 60 61 } 61 62 @property (nonatomic, readonly) uint64_t customProtocolID; 63 @property (nonatomic, readonly) CFRunLoopRef initializationRunLoop; 62 64 @end 63 65 … … 90 92 91 93 _customProtocolID = generateCustomProtocolID(); 94 _initializationRunLoop = CFRunLoopGetCurrent(); 92 95 if (auto* customProtocolManager = NetworkProcess::singleton().supplement<CustomProtocolManager>()) 93 96 customProtocolManager->addCustomProtocol(self); 94 97 return self; 98 } 99 100 - (CFRunLoopRef)initializationRunLoop 101 { 102 return _initializationRunLoop.get(); 95 103 } 96 104 … … 184 192 } 185 193 186 static inline void dispatchOnResourceLoaderRunLoop(void (^block)()) 187 { 188 CFRunLoopPerformBlock([NSURLConnection resourceLoaderRunLoop], kCFRunLoopDefaultMode, block); 189 CFRunLoopWakeUp([NSURLConnection resourceLoaderRunLoop]); 194 static inline void dispatchOnInitializationRunLoop(WKCustomProtocol* protocol, void (^block)()) 195 { 196 CFRunLoopRef runloop = protocol.initializationRunLoop; 197 CFRunLoopPerformBlock(runloop, kCFRunLoopDefaultMode, block); 198 CFRunLoopWakeUp(runloop); 190 199 } 191 200 … … 198 207 RetainPtr<NSError> nsError = error.nsError(); 199 208 200 dispatchOn ResourceLoaderRunLoop(^ {209 dispatchOnInitializationRunLoop(protocol.get(), ^ { 201 210 [[protocol client] URLProtocol:protocol.get() didFailWithError:nsError.get()]; 202 211 }); … … 213 222 RetainPtr<NSData> nsData = adoptNS([[NSData alloc] initWithBytes:data.data() length:data.size()]); 214 223 215 dispatchOn ResourceLoaderRunLoop(^ {224 dispatchOnInitializationRunLoop(protocol.get(), ^ { 216 225 [[protocol client] URLProtocol:protocol.get() didLoadData:nsData.get()]; 217 226 }); … … 226 235 RetainPtr<NSURLResponse> nsResponse = response.nsURLResponse(); 227 236 228 dispatchOn ResourceLoaderRunLoop(^ {237 dispatchOnInitializationRunLoop(protocol.get(), ^ { 229 238 [[protocol client] URLProtocol:protocol.get() didReceiveResponse:nsResponse.get() cacheStoragePolicy:static_cast<NSURLCacheStoragePolicy>(cacheStoragePolicy)]; 230 239 }); … … 237 246 return; 238 247 239 dispatchOn ResourceLoaderRunLoop(^ {248 dispatchOnInitializationRunLoop(protocol.get(), ^ { 240 249 [[protocol client] URLProtocolDidFinishLoading:protocol.get()]; 241 250 }); … … 253 262 RetainPtr<NSURLResponse> nsRedirectResponse = redirectResponse.nsURLResponse(); 254 263 255 dispatchOn ResourceLoaderRunLoop([protocol, nsRequest, nsRedirectResponse]() {264 dispatchOnInitializationRunLoop(protocol.get(), [protocol, nsRequest, nsRedirectResponse]() { 256 265 [[protocol client] URLProtocol:protocol.get() wasRedirectedToRequest:nsRequest.get() redirectResponse:nsRedirectResponse.get()]; 257 266 });
Note:
See TracChangeset
for help on using the changeset viewer.