⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 184061 in webkit


Ignore:
Timestamp:
May 10, 2015, 6:41:13 PM (11 years ago)
Author:
commit-queue@webkit.org
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_zhang@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:]):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r184059 r184061  
     12015-05-10  Yongjun Zhang  <yongjun_zhang@apple.com>
     2
     3        Use preview view controller from WebKitSystemInterface.
     4        https://bugs.webkit.org/show_bug.cgi?id=144836
     5
     6        Add a property _allowsLinkPreview to WKWebView so that we can turn on/off preview at runtime. Also,
     7        for client that doesn't provide preview view controller, use the default view controller prepared
     8        by WebKitSystemInterface.
     9
     10        Reviewed by Dan Bernstein.
     11
     12        * UIProcess/API/Cocoa/WKWebView.mm:
     13        (-[WKWebView initWithFrame:configuration:]):
     14        (-[WKWebView _allowsLinkPreview]):
     15        (-[WKWebView _setAllowsLinkPreview:]):
     16        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add _allowsLinkPreview property
     17        * UIProcess/ios/WKContentView.mm:
     18        (-[WKContentView willMoveToWindow:]):
     19        * UIProcess/ios/WKContentViewInteraction.h:
     20        * UIProcess/ios/WKContentViewInteraction.mm:
     21        (-[WKContentView _registerPreviewInWindow:]):
     22        (-[WKContentView _unregisterPreviewInWindow:]):
     23        (-[WKContentView previewViewControllerForPosition:inSourceView:]): : For client that doesn't provide
     24            preview delegate, use preview view controller in WebKitSystemInterface.
     25        (-[WKContentView commitPreviewViewController:]):
     26
    1272015-05-10  Darin Adler  <darin@apple.com>
    228
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r183841 r184061  
    170170    CGRect _inputViewBounds;
    171171    CGFloat _viewportMetaTagWidth;
     172    BOOL _allowsLinkPreview;
    172173
    173174    UIEdgeInsets _obscuredInsets;
     
    332333
    333334    _viewportMetaTagWidth = -1;
     335    _allowsLinkPreview = YES;
    334336
    335337    [self _frameOrBoundsChanged];
     
    27972799}
    27982800
     2801- (BOOL)_allowsLinkPreview
     2802{
     2803    return _allowsLinkPreview;
     2804}
     2805
     2806- (void)_setAllowsLinkPreview:(BOOL)allowsLinkPreview
     2807{
     2808    if (_allowsLinkPreview == allowsLinkPreview)
     2809        return;
     2810
     2811    _allowsLinkPreview = allowsLinkPreview;
     2812#if HAVE(LINK_PREVIEW)
     2813    if (_allowsLinkPreview)
     2814        [_contentView _registerPreviewInWindow:[_contentView window]];
     2815    else
     2816        [_contentView _unregisterPreviewInWindow:[_contentView window]];
     2817#endif
     2818}
     2819
    27992820#else
    28002821
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h

    r183841 r184061  
    128128@property (nonatomic, readonly) _WKWebViewPrintFormatter *_webViewPrintFormatter;
    129129
     130// Indicating whether link preview is allowed. The default value is YES.
     131@property (nonatomic, getter=_allowsLinkPreview, setter=_setAllowsLinkPreview:) BOOL _allowsLinkPreview WK_AVAILABLE(NA, WK_IOS_TBA);
     132
    130133- (void)_beginInteractiveObscuredInsetsChange;
    131134- (void)_endInteractiveObscuredInsetsChange;
  • trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm

    r183909 r184061  
    270270    if (window) {
    271271        [defaultCenter removeObserver:self name:UIWindowDidMoveToScreenNotification object:window];
    272 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
    273         [window.rootViewController unregisterPreviewSourceView:self];
    274         [_previewGestureRecognizer setDelegate:nil];
    275         _previewGestureRecognizer.clear();
     272#if HAVE(LINK_PREVIEW)
     273        if (_webView._allowsLinkPreview)
     274            [self _unregisterPreviewInWindow:window];
    276275#endif
    277276    }
     
    279278    if (newWindow) {
    280279        [defaultCenter addObserver:self selector:@selector(_windowDidMoveToScreenNotification:) name:UIWindowDidMoveToScreenNotification object:newWindow];
    281 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
    282         [newWindow.rootViewController registerPreviewSourceView:self previewingDelegate:self];
    283         _previewGestureRecognizer = self.gestureRecognizers.lastObject;
    284         [_previewGestureRecognizer setDelegate:self];
     280#if HAVE(LINK_PREVIEW)
     281        if (_webView._allowsLinkPreview)
     282            [self _registerPreviewInWindow:newWindow];
    285283#endif
    286284    }
  • trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h

    r182975 r184061  
    4545#import <wtf/text/WTFString.h>
    4646
     47#if USE(APPLE_INTERNAL_SDK)
     48#import <WebKitAdditions/LinkPreviewDefines.h>
     49#endif
     50
    4751namespace WebCore {
    4852class Color;
     
    201205@end
    202206
    203 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
     207#if HAVE(LINK_PREVIEW)
    204208@interface WKContentView (WKInteractionPreview) <UIViewControllerPreviewingDelegate>
     209
     210- (void)_registerPreviewInWindow:(UIWindow *)window;
     211- (void)_unregisterPreviewInWindow:(UIWindow *)window;
    205212@end
    206213#endif
  • trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm

    r183780 r184061  
    6262#import <WebCore/WebEvent.h>
    6363#import <WebKit/WebSelectionRect.h> // FIXME: WK2 should not include WebKit headers!
     64#import <WebKitSystemInterfaceIOS.h>
    6465#import <wtf/RetainPtr.h>
    6566
     
    30983099@end
    30993100
    3100 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000
     3101#if HAVE(LINK_PREVIEW)
    31013102
    31023103@implementation WKContentView (WKInteractionPreview)
     3104
     3105- (void)_registerPreviewInWindow:(UIWindow *)window
     3106{
     3107    [window.rootViewController registerPreviewSourceView:self previewingDelegate:self];
     3108    _previewGestureRecognizer = self.gestureRecognizers.lastObject;
     3109    [_previewGestureRecognizer setDelegate:self];
     3110}
     3111
     3112- (void)_unregisterPreviewInWindow:(UIWindow *)window
     3113{
     3114    [window.rootViewController unregisterPreviewSourceView:self];
     3115    [_previewGestureRecognizer setDelegate:nil];
     3116    _previewGestureRecognizer = nil;
     3117}
    31033118
    31043119- (UIViewController *)previewViewControllerForPosition:(CGPoint)position inSourceView:(UIView *)sourceView
     
    31203135        return [uiDelegate _webView:_webView previewViewControllerForURL:targetURL];
    31213136
    3122     return nil;
     3137    return WKGetPreviewViewController(targetURL);
    31233138}
    31243139
     
    31263141{
    31273142    id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);
    3128     if ([uiDelegate respondsToSelector:@selector(_webView:commitPreviewedViewController:)])
     3143    if ([uiDelegate respondsToSelector:@selector(_webView:commitPreviewedViewController:)]) {
    31293144        [uiDelegate _webView:_webView commitPreviewedViewController:viewController];
     3145        return;
     3146    }
     3147
     3148    UIViewController *presentingViewController = viewController.presentingViewController ?: self.window.rootViewController;
     3149    WKWillCommitPreviewViewController(viewController);
     3150
     3151    viewController.transitioningDelegate = nil;
     3152    viewController.modalPresentationStyle = UIModalPresentationFullScreen;
     3153    [presentingViewController presentViewController:viewController animated:NO completion:nil];
    31303154}
    31313155
Note: See TracChangeset for help on using the changeset viewer.