Title: [184061] trunk/Source/WebKit2
Revision
184061
Author
commit-qu...@webkit.org
Date
2015-05-10 18:41:13 -0700 (Sun, 10 May 2015)

Log Message

Use preview view controller from WebKitSystemInterface.
https://bugs.webkit.org/show_bug.cgi?id=144836

Add a property _allowsLinkPreview to WKWebView so that we can turn on/off preview at runtime. Also,
for client that doesn't provide preview view controller, use the default view controller prepared
by WebKitSystemInterface.

Patch by Yongjun Zhang <yongjun_zh...@apple.com> on 2015-05-10
Reviewed by Dan Bernstein.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView initWithFrame:configuration:]):
(-[WKWebView _allowsLinkPreview]):
(-[WKWebView _setAllowsLinkPreview:]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h: Add _allowsLinkPreview property
* UIProcess/ios/WKContentView.mm:
(-[WKContentView willMoveToWindow:]):
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _registerPreviewInWindow:]):
(-[WKContentView _unregisterPreviewInWindow:]):
(-[WKContentView previewViewControllerForPosition:inSourceView:]): : For client that doesn't provide
    preview delegate, use preview view controller in WebKitSystemInterface.
(-[WKContentView commitPreviewViewController:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (184060 => 184061)


--- trunk/Source/WebKit2/ChangeLog	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/ChangeLog	2015-05-11 01:41:13 UTC (rev 184061)
@@ -1,3 +1,29 @@
+2015-05-10  Yongjun Zhang  <yongjun_zh...@apple.com>
+
+        Use preview view controller from WebKitSystemInterface.
+        https://bugs.webkit.org/show_bug.cgi?id=144836
+
+        Add a property _allowsLinkPreview to WKWebView so that we can turn on/off preview at runtime. Also,
+        for client that doesn't provide preview view controller, use the default view controller prepared
+        by WebKitSystemInterface.
+
+        Reviewed by Dan Bernstein.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView initWithFrame:configuration:]):
+        (-[WKWebView _allowsLinkPreview]):
+        (-[WKWebView _setAllowsLinkPreview:]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add _allowsLinkPreview property
+        * UIProcess/ios/WKContentView.mm:
+        (-[WKContentView willMoveToWindow:]):
+        * UIProcess/ios/WKContentViewInteraction.h:
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _registerPreviewInWindow:]):
+        (-[WKContentView _unregisterPreviewInWindow:]):
+        (-[WKContentView previewViewControllerForPosition:inSourceView:]): : For client that doesn't provide
+            preview delegate, use preview view controller in WebKitSystemInterface.
+        (-[WKContentView commitPreviewViewController:]):
+
 2015-05-10  Darin Adler  <da...@apple.com>
 
         Fix internal Apple builds on Mavericks.

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


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-05-11 01:41:13 UTC (rev 184061)
@@ -169,6 +169,7 @@
     CGSize _maximumUnobscuredSizeOverride;
     CGRect _inputViewBounds;
     CGFloat _viewportMetaTagWidth;
+    BOOL _allowsLinkPreview;
 
     UIEdgeInsets _obscuredInsets;
     BOOL _haveSetObscuredInsets;
@@ -331,6 +332,7 @@
     [self _updateScrollViewBackground];
 
     _viewportMetaTagWidth = -1;
+    _allowsLinkPreview = YES;
 
     [self _frameOrBoundsChanged];
 
@@ -2796,6 +2798,25 @@
     return (_WKWebViewPrintFormatter *)viewPrintFormatter;
 }
 
+- (BOOL)_allowsLinkPreview
+{
+    return _allowsLinkPreview;
+}
+
+- (void)_setAllowsLinkPreview:(BOOL)allowsLinkPreview
+{
+    if (_allowsLinkPreview == allowsLinkPreview)
+        return;
+
+    _allowsLinkPreview = allowsLinkPreview;
+#if HAVE(LINK_PREVIEW)
+    if (_allowsLinkPreview)
+        [_contentView _registerPreviewInWindow:[_contentView window]];
+    else
+        [_contentView _unregisterPreviewInWindow:[_contentView window]];
+#endif
+}
+
 #else
 
 #pragma mark - OS X-specific methods

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


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2015-05-11 01:41:13 UTC (rev 184061)
@@ -127,6 +127,9 @@
 
 @property (nonatomic, readonly) _WKWebViewPrintFormatter *_webViewPrintFormatter;
 
+// Indicating whether link preview is allowed. The default value is YES.
+@property (nonatomic, getter=_allowsLinkPreview, setter=_setAllowsLinkPreview:) BOOL _allowsLinkPreview WK_AVAILABLE(NA, WK_IOS_TBA);
+
 - (void)_beginInteractiveObscuredInsetsChange;
 - (void)_endInteractiveObscuredInsetsChange;
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (184060 => 184061)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2015-05-11 01:41:13 UTC (rev 184061)
@@ -269,19 +269,17 @@
 
     if (window) {
         [defaultCenter removeObserver:self name:UIWindowDidMoveToScreenNotification object:window];
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
-        [window.rootViewController unregisterPreviewSourceView:self];
-        [_previewGestureRecognizer setDelegate:nil];
-        _previewGestureRecognizer.clear();
+#if HAVE(LINK_PREVIEW)
+        if (_webView._allowsLinkPreview)
+            [self _unregisterPreviewInWindow:window];
 #endif
     }
 
     if (newWindow) {
         [defaultCenter addObserver:self selector:@selector(_windowDidMoveToScreenNotification:) name:UIWindowDidMoveToScreenNotification object:newWindow];
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
-        [newWindow.rootViewController registerPreviewSourceView:self previewingDelegate:self];
-        _previewGestureRecognizer = self.gestureRecognizers.lastObject;
-        [_previewGestureRecognizer setDelegate:self];
+#if HAVE(LINK_PREVIEW)
+        if (_webView._allowsLinkPreview)
+            [self _registerPreviewInWindow:newWindow];
 #endif
     }
 }

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h (184060 => 184061)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h	2015-05-11 01:41:13 UTC (rev 184061)
@@ -44,6 +44,10 @@
 #import <wtf/Vector.h>
 #import <wtf/text/WTFString.h>
 
+#if USE(APPLE_INTERNAL_SDK)
+#import <WebKitAdditions/LinkPreviewDefines.h>
+#endif
+
 namespace WebCore {
 class Color;
 class FloatQuad;
@@ -200,8 +204,11 @@
 - (void)_becomeFirstResponderWithSelectionMovingForward:(BOOL)selectingForward completionHandler:(void (^)(BOOL didBecomeFirstResponder))completionHandler;
 @end
 
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
+#if HAVE(LINK_PREVIEW)
 @interface WKContentView (WKInteractionPreview) <UIViewControllerPreviewingDelegate>
+
+- (void)_registerPreviewInWindow:(UIWindow *)window;
+- (void)_unregisterPreviewInWindow:(UIWindow *)window;
 @end
 #endif
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (184060 => 184061)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2015-05-11 00:57:01 UTC (rev 184060)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm	2015-05-11 01:41:13 UTC (rev 184061)
@@ -61,6 +61,7 @@
 #import <WebCore/SoftLinking.h>
 #import <WebCore/WebEvent.h>
 #import <WebKit/WebSelectionRect.h> // FIXME: WK2 should not include WebKit headers!
+#import <WebKitSystemInterfaceIOS.h>
 #import <wtf/RetainPtr.h>
 
 using namespace WebCore;
@@ -3097,10 +3098,24 @@
 
 @end
 
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
+#if HAVE(LINK_PREVIEW)
 
 @implementation WKContentView (WKInteractionPreview)
 
+- (void)_registerPreviewInWindow:(UIWindow *)window
+{
+    [window.rootViewController registerPreviewSourceView:self previewingDelegate:self];
+    _previewGestureRecognizer = self.gestureRecognizers.lastObject;
+    [_previewGestureRecognizer setDelegate:self];
+}
+
+- (void)_unregisterPreviewInWindow:(UIWindow *)window
+{
+    [window.rootViewController unregisterPreviewSourceView:self];
+    [_previewGestureRecognizer setDelegate:nil];
+    _previewGestureRecognizer = nil;
+}
+
 - (UIViewController *)previewViewControllerForPosition:(CGPoint)position inSourceView:(UIView *)sourceView
 {
     ASSERT(self == sourceView);
@@ -3119,14 +3134,23 @@
     if ([uiDelegate respondsToSelector:@selector(_webView:previewViewControllerForURL:)])
         return [uiDelegate _webView:_webView previewViewControllerForURL:targetURL];
 
-    return nil;
+    return WKGetPreviewViewController(targetURL);
 }
 
 - (void)commitPreviewViewController:(UIViewController *)viewController
 {
     id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);
-    if ([uiDelegate respondsToSelector:@selector(_webView:commitPreviewedViewController:)])
+    if ([uiDelegate respondsToSelector:@selector(_webView:commitPreviewedViewController:)]) {
         [uiDelegate _webView:_webView commitPreviewedViewController:viewController];
+        return;
+    }
+
+    UIViewController *presentingViewController = viewController.presentingViewController ?: self.window.rootViewController;
+    WKWillCommitPreviewViewController(viewController);
+
+    viewController.transitioningDelegate = nil;
+    viewController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [presentingViewController presentViewController:viewController animated:NO completion:nil];
 }
 
 - (void)willPresentPreviewViewController:(UIViewController *)viewController forPosition:(CGPoint)position inSourceView:(UIView *)sourceView
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to