WebKit Bugzilla
Attachment 340452 Details for
Bug 185669
: Launch System Preview as the download starts, rather than waiting for a response
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185669-20180516102249.patch (text/plain), 5.39 KB, created by
Dean Jackson
on 2018-05-15 17:22:51 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Dean Jackson
Created:
2018-05-15 17:22:51 PDT
Size:
5.39 KB
patch
obsolete
>Subversion Revision: 231578 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 2e16bc1220b701a89e23d74128423cca65aba911..fb0b502ee74148c43c1fcbd6fbe44fd3036e7f23 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,26 @@ >+2018-05-15 Dean Jackson <dino@apple.com> >+ >+ Launch System Preview as the download starts, rather than waiting for a response >+ https://bugs.webkit.org/show_bug.cgi?id=185669 >+ <rdar://problem/40278181> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We were waiting for the RequestResponse to get a MIME-type before >+ launching the system preview. This causes an annoying delay. >+ >+ Instead, assume that the system preview is one of the handled >+ mime types and launch the viewer immediately. If it gets something it >+ didn't expect, it will show an error. >+ >+ * UIProcess/Cocoa/DownloadClient.mm: >+ (WebKit::DownloadClient::didStart): >+ (WebKit::DownloadClient::didReceiveResponse): >+ * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: >+ (-[_WKPreviewControllerDataSource previewController:previewItemAtIndex:]): >+ (WebKit::SystemPreviewController::start): Small cleanup to ensure we >+ don't try to present twice (this shouldn't happen). >+ > 2018-05-15 Dean Jackson <dino@apple.com> > > Post-review cleanup for 185459 >diff --git a/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm b/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm >index 5dc55877f1183ede17e96325f123ce0893f16669..f44542cbf98568278ad75c9c72222cc56b89ce71 100644 >--- a/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm >+++ b/Source/WebKit/UIProcess/Cocoa/DownloadClient.mm >@@ -76,6 +76,10 @@ void DownloadClient::didStart(WebProcessPool&, DownloadProxy& downloadProxy) > { > #if USE(SYSTEM_PREVIEW) > if (downloadProxy.isSystemPreviewDownload()) { >+ if (auto* webPage = downloadProxy.originatingPage()) { >+ // FIXME: Update the MIME-type once it is known in the ResourceResponse. >+ webPage->systemPreviewController()->start(ASCIILiteral { "application/octet-stream" }); >+ } > takeActivityToken(downloadProxy); > return; > } >@@ -91,10 +95,8 @@ void DownloadClient::didReceiveResponse(WebProcessPool&, DownloadProxy& download > if (downloadProxy.isSystemPreviewDownload()) { > downloadProxy.setExpectedContentLength(response.expectedContentLength()); > downloadProxy.setBytesLoaded(0); >- if (auto* webPage = downloadProxy.originatingPage()) { >- webPage->systemPreviewController()->start(response.mimeType()); >+ if (auto* webPage = downloadProxy.originatingPage()) > webPage->systemPreviewController()->updateProgress(0); >- } > return; > } > #endif >diff --git a/Source/WebKit/UIProcess/Cocoa/SystemPreviewControllerCocoa.mm b/Source/WebKit/UIProcess/Cocoa/SystemPreviewControllerCocoa.mm >index 72231d258457c72ec66975901c62c74ba1610320..cc014d4dd314998c8064887819c336d76260754a 100644 >--- a/Source/WebKit/UIProcess/Cocoa/SystemPreviewControllerCocoa.mm >+++ b/Source/WebKit/UIProcess/Cocoa/SystemPreviewControllerCocoa.mm >@@ -80,7 +80,9 @@ SOFT_LINK_CLASS(QuickLook, QLItem); > _itemProvider = adoptNS([[NSItemProvider alloc] init]); > NSString *contentType = @"public.content"; > #if USE(APPLE_INTERNAL_SDK) >- contentType = WebKit::getUTIForMIMEType(self.mimeType); >+ // FIXME: We are launching the preview controller before getting a response from the resource, which >+ // means we don't actually know the real MIME type yet. Assume it is one of those that we registered. >+ contentType = WebKit::getUTIForMIMEType(*WebKit::getSystemPreviewMIMETypes().begin()); > #endif > _item = adoptNS([allocQLItemInstance() initWithPreviewItemProvider:_itemProvider.get() contentType:contentType previewTitle:@"Preview" fileSize:@(0)]); > [_item setUseLoadingTimeout:NO]; >@@ -158,23 +160,22 @@ namespace WebKit { > > void SystemPreviewController::start(const String& mimeType) > { >- // FIXME: Make sure you can't show a preview if we're already previewing. >+ ASSERT(!m_qlPreviewController); >+ if (m_qlPreviewController) >+ return; > > UIViewController *presentingViewController = m_webPageProxy.uiClient().presentingViewController(); > > if (!presentingViewController) > return; > >- if (!m_qlPreviewController) { >- m_qlPreviewController = adoptNS([allocQLPreviewControllerInstance() init]); >- >- m_qlPreviewControllerDelegate = adoptNS([[_WKPreviewControllerDelegate alloc] initWithSystemPreviewController:this]); >- [m_qlPreviewController setDelegate:m_qlPreviewControllerDelegate.get()]; >+ m_qlPreviewController = adoptNS([allocQLPreviewControllerInstance() init]); > >- m_qlPreviewControllerDataSource = adoptNS([[_WKPreviewControllerDataSource alloc] initWithMIMEType:mimeType]); >- [m_qlPreviewController setDataSource:m_qlPreviewControllerDataSource.get()]; >+ m_qlPreviewControllerDelegate = adoptNS([[_WKPreviewControllerDelegate alloc] initWithSystemPreviewController:this]); >+ [m_qlPreviewController setDelegate:m_qlPreviewControllerDelegate.get()]; > >- } >+ m_qlPreviewControllerDataSource = adoptNS([[_WKPreviewControllerDataSource alloc] initWithMIMEType:mimeType]); >+ [m_qlPreviewController setDataSource:m_qlPreviewControllerDataSource.get()]; > > [presentingViewController presentViewController:m_qlPreviewController.get() animated:YES completion:nullptr]; > }
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
Flags:
thorton
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185669
: 340452