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