https://bugs.webkit.org/show_bug.cgi?id=147573
-and corresponding-
rdar://problem/
22077836
Reviewed by Dan Bernstein.
WKView implementation.
* UIProcess/API/Cocoa/WKViewPrivate.h:
New API. Call into WKView to handle Mac.
* UIProcess/API/Cocoa/WKWebView.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView initWithFrame:configuration:]):
(-[WKWebView allowsLinkPreview]):
(-[WKWebView setAllowsLinkPreview:]):
Remove the SPI declaration from WKWebViewPrivate in order to make this API.
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
Handle the Mac side.
* UIProcess/API/mac/WKView.mm:
(-[WKView viewDidMoveToWindow]):
(-[WKView initWithFrame:processPool:configuration:webView:]):
(-[WKView allowsBackForwardNavigationGestures]):
(-[WKView allowsLinkPreview]):
(-[WKView setAllowsLinkPreview:]):
Don’t register previews when link preview is prevented.
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _registerPreview]):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@187764
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2015-08-03 Beth Dakin <bdakin@apple.com>
+
+ Need WKWebView API to enable/disable link preview
+ https://bugs.webkit.org/show_bug.cgi?id=147573
+ -and corresponding-
+ rdar://problem/22077836
+
+ Reviewed by Dan Bernstein.
+
+ WKView implementation.
+ * UIProcess/API/Cocoa/WKViewPrivate.h:
+
+ New API. Call into WKView to handle Mac.
+ * UIProcess/API/Cocoa/WKWebView.h:
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView initWithFrame:configuration:]):
+ (-[WKWebView allowsLinkPreview]):
+ (-[WKWebView setAllowsLinkPreview:]):
+
+ Remove the SPI declaration from WKWebViewPrivate in order to make this API.
+ * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+
+ Handle the Mac side.
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView viewDidMoveToWindow]):
+ (-[WKView initWithFrame:processPool:configuration:webView:]):
+ (-[WKView allowsBackForwardNavigationGestures]):
+ (-[WKView allowsLinkPreview]):
+ (-[WKView setAllowsLinkPreview:]):
+
+ Don’t register previews when link preview is prevented.
+ * UIProcess/ios/WKContentViewInteraction.mm:
+ (-[WKContentView _registerPreview]):
+
2015-08-03 Tim Horton <timothy_horton@apple.com>
[iOS] Link previews sometimes don't hide the link highlight
- (void)setMagnification:(double)magnification centeredAtPoint:(NSPoint)point;
+- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview;
+- (BOOL)allowsLinkPreview;
+
- (void)saveBackForwardSnapshotForCurrentItem;
- (void)saveBackForwardSnapshotForItem:(WKBackForwardListItemRef)item;
*/
@property (WK_NULLABLE_PROPERTY nonatomic, copy) NSString *customUserAgent WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+/*! @abstract A Boolean value indicating whether link preview is allowed for any
+ links inside this WKWebView.
+ @discussion The default value is NO on iOS and YES on Mac.
+ */
+@property (nonatomic) BOOL allowsLinkPreview WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+
#if TARGET_OS_IPHONE
/*! @abstract The scroll view associated with the web view.
*/
[self _updateScrollViewBackground];
_viewportMetaTagWidth = -1;
- _allowsLinkPreview = YES;
[self _frameOrBoundsChanged];
return toAPI(_page.get());
}
+- (BOOL)allowsLinkPreview
+{
+#if PLATFORM(MAC)
+ return [_wkView allowsLinkPreview];
+#elif PLATFORM(IOS)
+ return _allowsLinkPreview;
+#endif
+}
+
+- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview
+{
+#if PLATFORM(MAC)
+ [_wkView setAllowsLinkPreview:allowsLinkPreview];
+ return;
+#elif PLATFORM(IOS)
+ if (_allowsLinkPreview == allowsLinkPreview)
+ return;
+
+ _allowsLinkPreview = allowsLinkPreview;
+
+#if HAVE(LINK_PREVIEW)
+ if (_allowsLinkPreview)
+ [_contentView _registerPreview];
+ else
+ [_contentView _unregisterPreview];
+#endif // HAVE(LINK_PREVIEW)
+#endif // PLATFORM(IOS)
+}
+
#pragma mark iOS-specific methods
#if PLATFORM(IOS)
return (_WKWebViewPrintFormatter *)viewPrintFormatter;
}
-- (BOOL)_allowsLinkPreview
-{
- return _allowsLinkPreview;
-}
-
-- (void)_setAllowsLinkPreview:(BOOL)allowsLinkPreview
-{
- if (_allowsLinkPreview == allowsLinkPreview)
- return;
-
- _allowsLinkPreview = allowsLinkPreview;
-}
-
-#else
+#else // #if PLATFORM(IOS)
#pragma mark - OS X-specific methods
@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;
- (void)_hideContentUntilNextUpdate;
BOOL _ignoresNonWheelEvents;
BOOL _ignoresAllEvents;
BOOL _allowsBackForwardNavigationGestures;
+ BOOL _allowsLinkPreview;
RetainPtr<WKViewLayoutStrategy> _layoutStrategy;
CGSize _minimumViewSize;
[self _accessibilityRegisterUIProcessTokens];
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
- if (_data->_immediateActionGestureRecognizer && ![[self gestureRecognizers] containsObject:_data->_immediateActionGestureRecognizer.get()] && !_data->_ignoresNonWheelEvents)
+ if (_data->_immediateActionGestureRecognizer && ![[self gestureRecognizers] containsObject:_data->_immediateActionGestureRecognizer.get()] && !_data->_ignoresNonWheelEvents && _data->_allowsLinkPreview)
[self addGestureRecognizer:_data->_immediateActionGestureRecognizer.get()];
#endif
} else {
[workspaceNotificationCenter addObserver:self selector:@selector(_activeSpaceDidChange:) name:NSWorkspaceActiveSpaceDidChangeNotification object:nil];
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
+ _data->_allowsLinkPreview = YES;
+
if (Class gestureClass = NSClassFromString(@"NSImmediateActionGestureRecognizer")) {
_data->_immediateActionGestureRecognizer = adoptNS([(NSImmediateActionGestureRecognizer *)[gestureClass alloc] init]);
_data->_immediateActionController = adoptNS([[WKImmediateActionController alloc] initWithPage:*_data->_page view:self recognizer:_data->_immediateActionGestureRecognizer.get()]);
return _data->_allowsBackForwardNavigationGestures;
}
+- (BOOL)allowsLinkPreview
+{
+ return _data->_allowsLinkPreview;
+}
+
+- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview
+{
+ if (_data->_allowsLinkPreview == allowsLinkPreview)
+ return;
+
+ _data->_allowsLinkPreview = allowsLinkPreview;
+
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
+ if (!allowsLinkPreview)
+ [self removeGestureRecognizer:_data->_immediateActionGestureRecognizer.get()];
+ else if (NSGestureRecognizer *immediateActionRecognizer = _data->_immediateActionGestureRecognizer.get())
+ [self addGestureRecognizer:immediateActionRecognizer];
+#endif
+}
+
- (void)_setIgnoresAllEvents:(BOOL)ignoresAllEvents
{
_data->_ignoresAllEvents = ignoresAllEvents;
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
if (ignoresNonWheelEvents)
[self removeGestureRecognizer:_data->_immediateActionGestureRecognizer.get()];
- else if (NSGestureRecognizer *immediateActionRecognizer = _data->_immediateActionGestureRecognizer.get())
- [self addGestureRecognizer:immediateActionRecognizer];
+ else if (NSGestureRecognizer *immediateActionRecognizer = _data->_immediateActionGestureRecognizer.get()) {
+ if (_data->_allowsLinkPreview)
+ [self addGestureRecognizer:immediateActionRecognizer];
+ }
#endif
}
- (void)_registerPreview
{
+ if (!_webView.allowsLinkPreview)
+ return;
+
_previewItemController = adoptNS([[UIPreviewItemController alloc] initWithView:self]);
[_previewItemController setDelegate:self];
_previewGestureRecognizer = _previewItemController.get().presentationGestureRecognizer;