Changeset 167207 in webkit
- Timestamp:
- Apr 13, 2014 7:57:33 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r167200 r167207 1 2014-04-13 Andy Estes <aestes@apple.com> 2 3 [QuickLook] Move file system-related code into WebKit 4 https://bugs.webkit.org/show_bug.cgi?id=131597 5 6 Reviewed by Dan Bernstein. 7 8 QuickLookHandle should not be responsible for saving a copy of the 9 original document to disk as it might be running in a process that 10 either can't write to disk or can only write into a sandboxed 11 container. To account for this, we need to separate the concern of 12 quick look conversion from that of original document saving so that 13 each activity can run in the appropriate process. 14 15 Created a new interface between WebCore and WebKit by adding a client 16 (QuickLookHandleClient) to QuickLookHandle which is notified of incoming 17 bytes. A new function on FrameLoaderClient tells WebKit when a new 18 QuickLookHandle is created, giving WebKit the opportunity to register a 19 handle client. Moved the existing file system-related code as well as 20 code only needed by WebKit1 in QuickLookHandle into a new WebKit1 21 QuickLookHandleClient subclass. 22 23 * WebCore.exp.in: 24 * WebCore.xcodeproj/project.pbxproj: Made QuickLookHandleClient.h Private. 25 * loader/FrameLoaderClient.h: 26 (WebCore::FrameLoaderClient::didCreateQuickLookHandle): Added. 27 * loader/ResourceLoader.cpp: 28 (WebCore::ResourceLoader::didCreateQuickLookHandle): Called FrameLoaderClient::didCreateQuickLookHandle(). 29 * loader/ResourceLoader.h: 30 * platform/network/ResourceHandle.h: Made m_quickLook a unique_ptr. 31 (WebCore::ResourceHandle::setQuickLookHandle): Changed to take a unique_ptr. 32 * platform/network/ResourceHandleClient.h: 33 (WebCore::ResourceHandleClient::didCreateQuickLookHandle): Added. 34 * platform/network/ios/QuickLook.h: Added m_client, gave m_converter a stronger type, and made m_nsResponse a RetainPtr. 35 (WebCore::QuickLookHandle::setClient): Added. 36 (WebCore::QuickLookHandle::firstRequestURL): Added. 37 (WebCore::QuickLookHandle::converter): Added. 38 * platform/network/ios/QuickLook.mm: 39 (WebCore::registerQLPreviewConverterIfNeeded): 40 (WebCore::createTemporaryFileForQuickLook): Made non-static. 41 (WebCore::emptyClient): Returned a shared empty QuickLookHandleClient. 42 (WebCore::QuickLookHandle::QuickLookHandle): Removed file system and WebKit1-only code. 43 (WebCore::QuickLookHandle::create): Changed to return a unique_ptr. 44 (WebCore::QuickLookHandle::nsResponse): 45 (WebCore::QuickLookHandle::didReceiveDataArray): Removed file system code and called QuickLookHandleClient::didReceiveDataArray() instead. 46 (WebCore::QuickLookHandle::didReceiveData): Removed file system code and called QuickLookHandleClient::didReceiveData() instead. 47 (WebCore::QuickLookHandle::didFinishLoading): Removed file system code and called QuickLookHandleClient::didFinishLoading() instead. 48 (WebCore::QuickLookHandle::didFail): Removed file system and WebKit1-only code, calling QuickLookHandleClient::didFail() instead. 49 (WebCore::QuickLookHandle::~QuickLookHandle): Removed file system and WebKit1-only code. Cleared our reference to m_client. 50 (WebCore::QuickLookHandle::previewFileName): Retrieved from m_converter. 51 (WebCore::QuickLookHandle::previewRequestURL): Ditto. 52 * platform/network/ios/QuickLookHandleClient.h: Added. 53 (WebCore::QuickLookHandleClient::~QuickLookHandleClient): 54 (WebCore::QuickLookHandleClient::didReceiveDataArray): 55 (WebCore::QuickLookHandleClient::didReceiveData): 56 (WebCore::QuickLookHandleClient::didFinishLoading): 57 (WebCore::QuickLookHandleClient::didFail): 58 1 59 2014-04-10 Pratik Solanki <psolanki@apple.com> 2 60 -
trunk/Source/WebCore/WebCore.exp.in
r167172 r167207 3219 3219 __ZN7WebCore27qlPreviewConverterUTIForURLEP5NSURL 3220 3220 __ZN7WebCore30removeQLPreviewConverterForURLEP5NSURL 3221 __ZN7WebCore31createTemporaryFileForQuickLookEP8NSString 3221 3222 __ZN7WebCore32qlPreviewConverterFileNameForURLEP5NSURL 3222 3223 __ZN7WebCore33QLPreviewGetSupportedMIMETypesSetEv 3223 3224 __ZN7WebCore34registerQLPreviewConverterIfNeededEP5NSURLP8NSStringP6NSData 3225 __ZN7WebCore35addQLPreviewConverterWithFileForURLEP5NSURLP11objc_objectP8NSString 3226 __ZNK7WebCore15QuickLookHandle15previewFileNameEv 3227 __ZNK7WebCore15QuickLookHandle17previewRequestURLEv 3224 3228 #endif 3225 3229 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r167145 r167207 3608 3608 A10BB5851484E3A700B2E87A /* RenderSVGRect.h in Headers */ = {isa = PBXBuildFile; fileRef = A10BB5831484E3A700B2E87A /* RenderSVGRect.h */; }; 3609 3609 A10BB58B1484E3B300B2E87A /* RenderSVGShape.h in Headers */ = {isa = PBXBuildFile; fileRef = A10BB5891484E3B300B2E87A /* RenderSVGShape.h */; }; 3610 A10DBF4718F92317000D70C6 /* QuickLookHandleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = A10DBF4618F92317000D70C6 /* QuickLookHandleClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3610 3611 A10DC76A14747BAB005E2471 /* StyleGridData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A10DC76814747BAB005E2471 /* StyleGridData.cpp */; }; 3611 3612 A10DC76B14747BAB005E2471 /* StyleGridData.h in Headers */ = {isa = PBXBuildFile; fileRef = A10DC76914747BAB005E2471 /* StyleGridData.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 10668 10669 A10BB5881484E3B300B2E87A /* RenderSVGShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGShape.cpp; sourceTree = "<group>"; }; 10669 10670 A10BB5891484E3B300B2E87A /* RenderSVGShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGShape.h; sourceTree = "<group>"; }; 10671 A10DBF4618F92317000D70C6 /* QuickLookHandleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickLookHandleClient.h; sourceTree = "<group>"; }; 10670 10672 A10DC76814747BAB005E2471 /* StyleGridData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StyleGridData.cpp; path = style/StyleGridData.cpp; sourceTree = "<group>"; }; 10671 10673 A10DC76914747BAB005E2471 /* StyleGridData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleGridData.h; path = style/StyleGridData.h; sourceTree = "<group>"; }; … … 15483 15485 442AF7A7102CDDEA008FD4D3 /* QuickLook.h */, 15484 15486 442AF7A8102CDDEA008FD4D3 /* QuickLook.mm */, 15487 A10DBF4618F92317000D70C6 /* QuickLookHandleClient.h */, 15485 15488 7E428CE413E3407F003B661C /* ResourceHandleIOS.mm */, 15486 15489 44A20DB80F84166C00B3E1FE /* WebCoreURLResponseIOS.h */, … … 25808 25811 B2227A570D00BF220071B782 /* SVGParserUtilities.h in Headers */, 25809 25812 2D3A0E3613A7D76100E85AF0 /* SVGParsingError.h in Headers */, 25813 A10DBF4718F92317000D70C6 /* QuickLookHandleClient.h in Headers */, 25810 25814 84C6784D1214814700A92902 /* SVGPathBlender.h in Headers */, 25811 25815 8476C9EB11DF6A2900555B02 /* SVGPathBuilder.h in Headers */, -
trunk/Source/WebCore/loader/FrameLoaderClient.h
r165676 r167207 98 98 class Widget; 99 99 100 #if USE(QUICK_LOOK) 101 class QuickLookHandle; 102 #endif 103 100 104 typedef std::function<void (PolicyAction)> FramePolicyFunction; 101 105 … … 335 339 // FIXME (bug 116233): We need to get rid of EmptyFrameLoaderClient completely, then this will no longer be needed. 336 340 virtual bool isEmptyFrameLoaderClient() { return false; } 341 342 #if USE(QUICK_LOOK) 343 virtual void didCreateQuickLookHandle(QuickLookHandle&) { } 344 #endif 337 345 }; 338 346 -
trunk/Source/WebCore/loader/ResourceLoader.cpp
r167183 r167207 607 607 #endif 608 608 609 } 609 #if USE(QUICK_LOOK) 610 void ResourceLoader::didCreateQuickLookHandle(QuickLookHandle& handle) 611 { 612 frameLoader()->client().didCreateQuickLookHandle(handle); 613 } 614 #endif 615 616 } -
trunk/Source/WebCore/loader/ResourceLoader.h
r167188 r167207 50 50 class ResourceBuffer; 51 51 52 #if USE(QUICK_LOOK) 53 class QuickLookHandle; 54 #endif 55 52 56 class ResourceLoader : public RefCounted<ResourceLoader>, protected ResourceHandleClient { 53 57 public: … … 147 151 #endif 148 152 153 #if USE(QUICK_LOOK) 154 virtual void didCreateQuickLookHandle(QuickLookHandle&) override; 155 #endif 156 149 157 const URL& url() const { return m_request.url(); } 150 158 ResourceHandle* handle() const { return m_handle.get(); } -
trunk/Source/WebCore/platform/network/ResourceHandle.h
r167190 r167207 151 151 #if USE(QUICK_LOOK) 152 152 QuickLookHandle* quickLookHandle() { return m_quickLook.get(); } 153 void setQuickLookHandle( PassOwnPtr<QuickLookHandle> handle) { m_quickLook = handle; }153 void setQuickLookHandle(std::unique_ptr<QuickLookHandle> handle) { m_quickLook = std::move(handle); } 154 154 #endif 155 155 … … 293 293 294 294 #if USE(QUICK_LOOK) 295 OwnPtr<QuickLookHandle> m_quickLook;295 std::unique_ptr<QuickLookHandle> m_quickLook; 296 296 #endif 297 297 }; -
trunk/Source/WebCore/platform/network/ResourceHandleClient.h
r165676 r167207 50 50 class ResourceResponse; 51 51 class SharedBuffer; 52 53 #if USE(QUICK_LOOK) 54 class QuickLookHandle; 55 #endif 52 56 53 57 enum CacheStoragePolicy { … … 125 129 #endif 126 130 131 #if USE(QUICK_LOOK) 132 virtual void didCreateQuickLookHandle(QuickLookHandle&) { } 133 #endif 127 134 }; 128 135 -
trunk/Source/WebCore/platform/network/ios/QuickLook.h
r167055 r167207 29 29 #if USE(QUICK_LOOK) 30 30 31 #import "QuickLookHandleClient.h" 31 32 #import "ResourceRequest.h" 32 33 #import <objc/objc-runtime.h> 33 34 #import <wtf/PassOwnPtr.h> 35 #import <wtf/RefPtr.h> 34 36 35 #ifdef __OBJC__ 36 @class NSData; 37 @class NSDictionary; 38 @class NSFileHandle; 39 @class NSSet; 40 @class NSString; 41 @class NSURL; 42 @class NSURLConnection; 43 @class NSURLResponse; 44 #else 45 class NSData; 46 class NSDictionary; 47 class NSFileHandle; 48 class NSSet; 49 class NSString; 50 class NSURL; 51 class NSURLConnection; 52 class NSURLResponse; 53 #endif 37 OBJC_CLASS NSData; 38 OBJC_CLASS NSDictionary; 39 OBJC_CLASS NSFileHandle; 40 OBJC_CLASS NSSet; 41 OBJC_CLASS NSString; 42 OBJC_CLASS NSURL; 43 OBJC_CLASS NSURLConnection; 44 OBJC_CLASS NSURLResponse; 45 OBJC_CLASS QLPreviewConverter; 54 46 55 47 #if USE(CFNETWORK) … … 60 52 namespace WebCore { 61 53 54 class QuickLookHandleClient; 62 55 class ResourceHandle; 63 56 class ResourceLoader; … … 85 78 const char* QLPreviewProtocol(); 86 79 80 NSString *createTemporaryFileForQuickLook(NSString *fileName); 87 81 88 82 class QuickLookHandle { 89 83 WTF_MAKE_NONCOPYABLE(QuickLookHandle); 90 84 public: 91 static PassOwnPtr<QuickLookHandle> create(ResourceHandle*, NSURLConnection *, NSURLResponse *, id delegate);85 static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, NSURLConnection *, NSURLResponse *, id delegate); 92 86 #if USE(CFNETWORK) 93 static PassOwnPtr<QuickLookHandle> create(ResourceHandle*, SynchronousResourceHandleCFURLConnectionDelegate*, CFURLResponseRef);87 static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, SynchronousResourceHandleCFURLConnectionDelegate*, CFURLResponseRef); 94 88 #endif 95 static PassOwnPtr<QuickLookHandle> create(ResourceLoader*, NSURLResponse *, id delegate);89 static std::unique_ptr<QuickLookHandle> create(ResourceLoader*, NSURLResponse *, id delegate); 96 90 ~QuickLookHandle(); 97 91 … … 106 100 #endif 107 101 102 void setClient(PassRefPtr<QuickLookHandleClient> client) { m_client = client; } 103 104 NSString *previewFileName() const; 105 NSURL *firstRequestURL() const { return m_firstRequestURL.get(); } 106 NSURL *previewRequestURL() const; 107 QLPreviewConverter *converter() const { return m_converter.get(); } 108 108 109 private: 109 110 QuickLookHandle(NSURL *, NSURLConnection *, NSURLResponse *, id delegate); 110 111 111 112 RetainPtr<NSURL> m_firstRequestURL; 112 RetainPtr< id> m_converter;113 RetainPtr<QLPreviewConverter> m_converter; 113 114 RetainPtr<id> m_delegate; 114 115 bool m_finishedLoadingDataIntoConverter; 115 116 RetainPtr<NSFileHandle *> m_quicklookFileHandle; 116 NSURLResponse *m_nsResponse; 117 RetainPtr<NSURLResponse> m_nsResponse; 118 RefPtr<QuickLookHandleClient> m_client; 117 119 }; 118 120 -
trunk/Source/WebCore/platform/network/ios/QuickLook.mm
r167055 r167207 196 196 197 197 RetainPtr<id> converter = adoptNS([[QLPreviewConverterClass() alloc] initWithData:data name:nil uti:uti.get() options:nil]); 198 NSURLRequest *request = [converter .get()previewRequest];198 NSURLRequest *request = [converter previewRequest]; 199 199 200 200 // We use [request URL] here instead of url since it will be … … 322 322 namespace WebCore { 323 323 324 staticNSString *createTemporaryFileForQuickLook(NSString *fileName)324 NSString *createTemporaryFileForQuickLook(NSString *fileName) 325 325 { 326 326 NSString *downloadDirectory = createTemporaryDirectory(@"QuickLookContent"); … … 340 340 } 341 341 342 static inline QuickLookHandleClient* emptyClient() 343 { 344 static NeverDestroyed<QuickLookHandleClient> emptyClient; 345 return &emptyClient.get(); 346 } 342 347 343 348 QuickLookHandle::QuickLookHandle(NSURL *firstRequestURL, NSURLConnection *connection, NSURLResponse *nsResponse, id delegate) 344 349 : m_firstRequestURL(firstRequestURL) 345 350 , m_converter(adoptNS([[QLPreviewConverterClass() alloc] initWithConnection:connection delegate:delegate response:nsResponse options:nil])) 346 , m_delegate( adoptNS([delegate retain]))351 , m_delegate(delegate) 347 352 , m_finishedLoadingDataIntoConverter(false) 348 , m_nsResponse([m_converter.get() previewResponse]) 349 { 350 NSURL *previewRequestURL = [[m_converter.get() previewRequest] URL]; 351 if (!applicationIsMobileSafari()) { 352 // This keeps the QLPreviewConverter alive to serve any subresource requests. 353 // It is removed by -[WebDataSource dealloc]. 354 addQLPreviewConverterWithFileForURL(previewRequestURL, m_converter.get(), nil); 355 return; 356 } 357 358 // QuickLook consumes the incoming data, we need to store it so that it can be opened in the handling application. 359 NSString *quicklookContentPath = createTemporaryFileForQuickLook([m_converter.get() previewFileName]); 360 LOG(Network, "QuickLookHandle::QuickLookHandle() - quicklookContentPath: %s", [quicklookContentPath UTF8String]); 361 362 if (quicklookContentPath) { 363 m_quicklookFileHandle = adoptNS([[NSFileHandle fileHandleForWritingAtPath:quicklookContentPath] retain]); 364 // We must use the generated URL from m_converter's NSURLRequest object 365 // so that it matches the URL removed from -[WebDataSource dealloc]. 366 addQLPreviewConverterWithFileForURL(previewRequestURL, m_converter.get(), quicklookContentPath); 367 } 368 } 369 370 PassOwnPtr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, NSURLConnection *connection, NSURLResponse *nsResponse, id delegate) 371 { 372 if (handle->firstRequest().isMainResourceRequest() && [WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[nsResponse MIMEType]]) 373 return adoptPtr(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, nsResponse, delegate)); 374 375 return nullptr; 353 , m_nsResponse([m_converter previewResponse]) 354 , m_client(emptyClient()) 355 { 356 LOG(Network, "QuickLookHandle::QuickLookHandle() - previewFileName: %s", [m_converter previewFileName]); 357 } 358 359 std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, NSURLConnection *connection, NSURLResponse *nsResponse, id delegate) 360 { 361 ASSERT_ARG(handle, handle); 362 if (!handle->firstRequest().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[nsResponse MIMEType]]) 363 return nullptr; 364 365 std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, nsResponse, delegate)); 366 handle->client()->didCreateQuickLookHandle(*quickLookHandle); 367 return std::move(quickLookHandle); 376 368 } 377 369 378 370 #if USE(CFNETWORK) 379 PassOwnPtr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, SynchronousResourceHandleCFURLConnectionDelegate* connectionDelegate, CFURLResponseRef cfResponse) 380 { 381 if (handle->firstRequest().isMainResourceRequest() && [WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)CFURLResponseGetMIMEType(cfResponse)]) { 382 NSURLResponse *nsResponse = [NSURLResponse _responseWithCFURLResponse:cfResponse]; 383 WebQuickLookHandleAsDelegate *delegate = [[[WebQuickLookHandleAsDelegate alloc] initWithConnectionDelegate:connectionDelegate] autorelease]; 384 return adoptPtr(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, nsResponse, delegate)); 385 } 386 387 return nullptr; 371 std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, SynchronousResourceHandleCFURLConnectionDelegate* connectionDelegate, CFURLResponseRef cfResponse) 372 { 373 ASSERT_ARG(handle, handle); 374 if (!handle->firstRequest().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)CFURLResponseGetMIMEType(cfResponse)]) 375 return nullptr; 376 377 NSURLResponse *nsResponse = [NSURLResponse _responseWithCFURLResponse:cfResponse]; 378 WebQuickLookHandleAsDelegate *delegate = [[[WebQuickLookHandleAsDelegate alloc] initWithConnectionDelegate:connectionDelegate] autorelease]; 379 std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, nsResponse, delegate)); 380 handle->client()->didCreateQuickLookHandle(*quickLookHandle); 381 return std::move(quickLookHandle); 388 382 } 389 383 … … 394 388 #endif 395 389 396 PassOwnPtr<QuickLookHandle> QuickLookHandle::create(ResourceLoader* loader, NSURLResponse *response, id delegate) 397 { 398 if (loader->request().isMainResourceRequest() && [WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[response MIMEType]]) 399 return adoptPtr(new QuickLookHandle([loader->originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response, delegate)); 400 401 return nullptr; 390 std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceLoader* loader, NSURLResponse *response, id delegate) 391 { 392 ASSERT_ARG(loader, loader); 393 if (!loader->request().isMainResourceRequest() || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[response MIMEType]]) 394 return nullptr; 395 396 std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([loader->originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response, delegate)); 397 loader->didCreateQuickLookHandle(*quickLookHandle); 398 return std::move(quickLookHandle); 402 399 } 403 400 404 401 NSURLResponse *QuickLookHandle::nsResponse() 405 402 { 406 return m_nsResponse ;403 return m_nsResponse.get(); 407 404 } 408 405 409 406 bool QuickLookHandle::didReceiveDataArray(CFArrayRef cfDataArray) 410 407 { 411 NSArray * const dataArray = (NSArray *)cfDataArray;412 413 408 if (m_finishedLoadingDataIntoConverter) 414 409 return false; 415 410 416 411 LOG(Network, "QuickLookHandle::didReceiveDataArray()"); 417 [m_converter.get() appendDataArray:dataArray]; 418 if (m_quicklookFileHandle) { 419 for (NSData *data in dataArray) 420 [m_quicklookFileHandle.get() writeData:data]; 421 } 412 [m_converter appendDataArray:(NSArray *)cfDataArray]; 413 m_client->didReceiveDataArray(cfDataArray); 422 414 return true; 423 415 } … … 425 417 bool QuickLookHandle::didReceiveData(CFDataRef cfData) 426 418 { 427 NSData * const data = (NSData *)cfData;428 429 419 if (m_finishedLoadingDataIntoConverter) 430 420 return false; 431 432 LOG(Network, "QuickLookHandle::didReceiveData()"); 433 [m_converter.get() appendData:data]; 434 if (m_quicklookFileHandle) 435 [m_quicklookFileHandle.get() writeData:data]; 436 return true; 421 422 return didReceiveDataArray(adoptCF(CFArrayCreate(kCFAllocatorDefault, (const void**)&cfData, 1, &kCFTypeArrayCallBacks)).get()); 437 423 } 438 424 … … 444 430 LOG(Network, "QuickLookHandle::didFinishLoading()"); 445 431 m_finishedLoadingDataIntoConverter = YES; 446 [m_converter.get() finishedAppendingData]; 447 if (m_quicklookFileHandle) 448 [m_quicklookFileHandle.get() closeFile]; 432 [m_converter finishedAppendingData]; 433 m_client->didFinishLoading(); 449 434 return true; 450 435 } … … 453 438 { 454 439 LOG(Network, "QuickLookHandle::didFail()"); 455 m_quicklookFileHandle = nullptr; 456 // removeQLPreviewConverterForURL deletes the temporary file created. 457 removeQLPreviewConverterForURL(m_firstRequestURL.get()); 458 [m_converter.get() finishConverting]; 440 m_client->didFail(); 441 [m_converter finishConverting]; 459 442 m_converter = nullptr; 460 443 } … … 463 446 { 464 447 LOG(Network, "QuickLookHandle::~QuickLookHandle()"); 465 if (m_quicklookFileHandle) {466 m_quicklookFileHandle = nullptr;467 removeQLPreviewConverterForURL(m_firstRequestURL.get());468 }469 448 m_converter = nullptr; 470 449 471 [m_delegate.get() clearHandle]; 450 [m_delegate clearHandle]; 451 } 452 453 NSString *QuickLookHandle::previewFileName() const 454 { 455 return [m_converter previewFileName]; 456 } 457 458 NSURL *QuickLookHandle::previewRequestURL() const 459 { 460 return [[m_converter previewRequest] URL]; 472 461 } 473 462 -
trunk/Source/WebKit/mac/ChangeLog
r167074 r167207 1 2014-04-13 Andy Estes <aestes@apple.com> 2 3 [QuickLook] Move file system-related code into WebKit 4 https://bugs.webkit.org/show_bug.cgi?id=131597 5 6 Reviewed by Dan Bernstein. 7 8 Moved file system and WebKit1-only code from QuickLookHandle into a new 9 QuickLookHandleClient subclass. 10 11 * WebCoreSupport/WebFrameLoaderClient.h: 12 * WebCoreSupport/WebFrameLoaderClient.mm: 13 1 14 2014-04-09 Alexey Proskuryakov <ap@apple.com> 2 15 -
trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h
r165676 r167207 239 239 virtual bool shouldPaintBrokenImage(const WebCore::URL&) const; 240 240 241 #if USE(QUICK_LOOK) 242 virtual void didCreateQuickLookHandle(WebCore::QuickLookHandle&) override; 243 #endif 244 241 245 RetainPtr<WebFrame> m_webFrame; 242 246 -
trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
r166853 r167207 153 153 #endif 154 154 155 #if USE(QUICK_LOOK) 156 #import <Foundation/NSFileManager_NSURLExtras.h> 157 #import <WebCore/FileSystemIOS.h> 158 #import <WebCore/QuickLook.h> 159 #import <WebCore/RuntimeApplicationChecksIOS.h> 160 #endif 161 155 162 using namespace WebCore; 156 163 using namespace HTMLNames; … … 2393 2400 #endif 2394 2401 2402 #if USE(QUICK_LOOK) 2403 void WebFrameLoaderClient::didCreateQuickLookHandle(WebCore::QuickLookHandle& handle) 2404 { 2405 class QuickLookDocumentWriter : public WebCore::QuickLookHandleClient { 2406 public: 2407 explicit QuickLookDocumentWriter(const WebCore::QuickLookHandle& handle) 2408 : m_firstRequestURL(handle.firstRequestURL()) 2409 { 2410 NSURL *previewRequestURL = handle.previewRequestURL(); 2411 if (!applicationIsMobileSafari()) { 2412 // This keeps the QLPreviewConverter alive to serve any subresource requests. 2413 // It is removed by -[WebDataSource dealloc]. 2414 addQLPreviewConverterWithFileForURL(previewRequestURL, handle.converter(), nil); 2415 return; 2416 } 2417 2418 // QuickLook consumes the incoming data, we need to store it so that it can be opened in the handling application. 2419 NSString *quicklookContentPath = createTemporaryFileForQuickLook(handle.previewFileName()); 2420 2421 if (quicklookContentPath) { 2422 m_fileHandle = [NSFileHandle fileHandleForWritingAtPath:quicklookContentPath]; 2423 // previewRequestURL should match the URL removed from -[WebDataSource dealloc]. 2424 addQLPreviewConverterWithFileForURL(previewRequestURL, handle.converter(), quicklookContentPath); 2425 } 2426 } 2427 2428 virtual ~QuickLookDocumentWriter() 2429 { 2430 if (m_fileHandle) 2431 removeQLPreviewConverterForURL(m_firstRequestURL.get()); 2432 } 2433 2434 private: 2435 RetainPtr<NSFileHandle> m_fileHandle; 2436 RetainPtr<NSURL> m_firstRequestURL; 2437 2438 void didReceiveDataArray(CFArrayRef dataArray) override 2439 { 2440 if (m_fileHandle) { 2441 for (NSData *data in (NSArray *)dataArray) 2442 [m_fileHandle writeData:data]; 2443 } 2444 } 2445 2446 void didFinishLoading() override 2447 { 2448 [m_fileHandle closeFile]; 2449 } 2450 2451 void didFail() override 2452 { 2453 m_fileHandle = nil; 2454 // removeQLPreviewConverterForURL deletes the temporary file created. 2455 removeQLPreviewConverterForURL(m_firstRequestURL.get()); 2456 } 2457 }; 2458 handle.setClient(adoptRef(new QuickLookDocumentWriter(handle))); 2459 } 2460 #endif 2461 2395 2462 @implementation WebFramePolicyListener 2396 2463 -
trunk/Source/WebKit2/ChangeLog
r167202 r167207 1 2014-04-13 Andy Estes <aestes@apple.com> 2 3 [QuickLook] Move file system-related code into WebKit 4 https://bugs.webkit.org/show_bug.cgi?id=131597 5 6 Reviewed by Dan Bernstein. 7 8 * WebProcess/Network/WebResourceLoader.h: Made m_quickLookHandle a unique_ptr. 9 * WebProcess/ios/WebResourceLoaderIOS.mm: 10 (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded): 11 1 12 2014-04-13 Andy Estes <aestes@apple.com> 2 13 -
trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h
r167188 r167207 96 96 void setUpQuickLookHandleIfNeeded(const WebCore::ResourceResponse&); 97 97 98 OwnPtr<WebCore::QuickLookHandle> m_quickLookHandle;98 std::unique_ptr<WebCore::QuickLookHandle> m_quickLookHandle; 99 99 #endif 100 100
Note: See TracChangeset
for help on using the changeset viewer.