Title: [166767] trunk/Source/WebKit2
Revision
166767
Author
[email protected]
Date
2014-04-03 22:23:52 -0700 (Thu, 03 Apr 2014)

Log Message

[Cocoa] Add additional WKWebView SPI for clients that interact with PDFs
https://bugs.webkit.org/show_bug.cgi?id=131206

Reviewed by Dan Bernstein.

Add _dataForDisplayedPDF and _suggestedFilenameForDisplayedPDF to
support clients that wish to save a copy of the currently displayed PDF
to disk. Ultimately we should support this use case by exposing something
like WKWebViewContentProvider, but for now let's do something simple.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
(-[WKWebView _dataForDisplayedPDF]):
(-[WKWebView _suggestedFilenameForDisplayedPDF]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/Cocoa/WKWebViewContentProvider.h:
* UIProcess/ios/WKPDFView.h:
* UIProcess/ios/WKPDFView.mm:
(-[WKPDFView documentData]):
(-[WKPDFView suggestedFilename]):
(-[WKPDFView web_setContentProviderData:suggestedFilename:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (166766 => 166767)


--- trunk/Source/WebKit2/ChangeLog	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/ChangeLog	2014-04-04 05:23:52 UTC (rev 166767)
@@ -1,3 +1,27 @@
+2014-04-03  Andy Estes  <[email protected]>
+
+        [Cocoa] Add additional WKWebView SPI for clients that interact with PDFs
+        https://bugs.webkit.org/show_bug.cgi?id=131206
+
+        Reviewed by Dan Bernstein.
+
+        Add _dataForDisplayedPDF and _suggestedFilenameForDisplayedPDF to
+        support clients that wish to save a copy of the currently displayed PDF
+        to disk. Ultimately we should support this use case by exposing something
+        like WKWebViewContentProvider, but for now let's do something simple.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
+        (-[WKWebView _dataForDisplayedPDF]):
+        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/Cocoa/WKWebViewContentProvider.h:
+        * UIProcess/ios/WKPDFView.h:
+        * UIProcess/ios/WKPDFView.mm:
+        (-[WKPDFView documentData]):
+        (-[WKPDFView suggestedFilename]):
+        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
+
 2014-04-03  Eunmi Lee  <[email protected]>
 
         [EFL][WK2] Add API to get contents size of current web page.

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (166766 => 166767)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-04-04 05:23:52 UTC (rev 166767)
@@ -399,7 +399,7 @@
 - (void)_didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:(const String&)suggestedFilename data:(NSData *)data
 {
     ASSERT(_customContentView);
-    [_customContentView web_setContentProviderData:data];
+    [_customContentView web_setContentProviderData:data suggestedFilename:suggestedFilename];
 }
 
 - (void)_didCommitLoadForMainFrame
@@ -1270,6 +1270,20 @@
     return [_customContentView isKindOfClass:[WKPDFView class]];
 }
 
+- (NSData *)_dataForDisplayedPDF
+{
+    if (![self _isDisplayingPDF])
+        return nil;
+    return [(WKPDFView *)_customContentView.get() documentData];
+}
+
+- (NSString *)_suggestedFilenameForDisplayedPDF
+{
+    if (![self _isDisplayingPDF])
+        return nil;
+    return [(WKPDFView *)_customContentView.get() suggestedFilename];
+}
+
 // FIXME: Remove this once nobody uses it.
 - (NSURL *)activeURL
 {

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (166766 => 166767)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2014-04-04 05:23:52 UTC (rev 166767)
@@ -98,7 +98,11 @@
 
 @property (nonatomic, setter=_setBackgroundExtendsBeyondPage:) BOOL _backgroundExtendsBeyondPage;
 
+// FIXME: Remove these three properties once we expose WKWebViewContentProvider as API.
 @property (nonatomic, readonly, getter=_isDisplayingPDF) BOOL _displayingPDF;
+@property (nonatomic, readonly) NSData *_dataForDisplayedPDF;
+// FIXME: This can be removed once WKNavigation's response property is implemented.
+@property (nonatomic, readonly) NSString *_suggestedFilenameForDisplayedPDF;
 
 - (void)_beginInteractiveObscuredInsetsChange;
 - (void)_endInteractiveObscuredInsetsChange;

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProvider.h (166766 => 166767)


--- trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProvider.h	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProvider.h	2014-04-04 05:23:52 UTC (rev 166767)
@@ -37,7 +37,7 @@
 // FIXME: This should be API.
 @protocol WKWebViewContentProvider <NSObject>
 
-- (void)web_setContentProviderData:(NSData *)data;
+- (void)web_setContentProviderData:(NSData *)data suggestedFilename:(NSString *)filename;
 - (void)web_setMinimumSize:(CGSize)size;
 - (void)web_setScrollView:(UIScrollView *)scrollView;
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKPDFView.h (166766 => 166767)


--- trunk/Source/WebKit2/UIProcess/ios/WKPDFView.h	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/UIProcess/ios/WKPDFView.h	2014-04-04 05:23:52 UTC (rev 166767)
@@ -30,6 +30,9 @@
 
 @interface WKPDFView : UIView <WKWebViewContentProvider>
 
+@property (nonatomic, readonly) NSData *documentData;
+@property (nonatomic, readonly) NSString *suggestedFilename;
+
 @end
 
 #endif // PLATFORM(IOS)

Modified: trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm (166766 => 166767)


--- trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm	2014-04-04 05:04:56 UTC (rev 166766)
+++ trunk/Source/WebKit2/UIProcess/ios/WKPDFView.mm	2014-04-04 05:23:52 UTC (rev 166767)
@@ -28,6 +28,7 @@
 
 #if PLATFORM(IOS)
 
+#import <CoreGraphics/CGPDFDocumentPrivate.h>
 #import <CorePDF/UIPDFDocument.h>
 #import <CorePDF/UIPDFPageView.h>
 #import <wtf/RetainPtr.h>
@@ -39,6 +40,7 @@
 
 @implementation WKPDFView {
     RetainPtr<UIPDFDocument> _pdfDocument;
+    RetainPtr<NSString> _suggestedFilename;
     Vector<UIPDFPageView*> _pageViews;
     CGSize _minimumSize;
     UIScrollView *_scrollView;
@@ -54,8 +56,20 @@
     return self;
 }
 
-- (void)web_setContentProviderData:(NSData *)data
+- (NSData *)documentData
+{    
+    return [(NSData *)CGDataProviderCopyData(CGPDFDocumentGetDataProvider([_pdfDocument CGDocument])) autorelease];
+}
+
+- (NSString *)suggestedFilename
 {
+    return _suggestedFilename.get();
+}
+
+- (void)web_setContentProviderData:(NSData *)data suggestedFilename:(NSString *)filename
+{
+    _suggestedFilename = adoptNS([filename copy]);
+
     for (auto& pageView : _pageViews)
         [pageView removeFromSuperview];
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to