Title: [177192] trunk/Source/WebKit2
Revision
177192
Author
[email protected]
Date
2014-12-11 16:25:16 -0800 (Thu, 11 Dec 2014)

Log Message

WK2: Need new SPI for Webkit clients to override default immediate action
https://bugs.webkit.org/show_bug.cgi?id=139564
-and corresponding-
rdar://problem/19225448

Reviewed by Tim Horton.

New SPI _immediateActionAnimationControllerForHitTestResult:withType:userData:
* UIProcess/API/Cocoa/WKViewPrivate.h:
* UIProcess/API/mac/WKView.mm:
(-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):

Keep at ivar for the userData so that it can be passed to the new SPI.
* UIProcess/mac/WKImmediateActionController.h:
* UIProcess/mac/WKImmediateActionController.mm:
(-[WKImmediateActionController _clearImmediateActionState]):
(-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):

Always give the SPI a chance to override the animationController.
(-[WKImmediateActionController _updateImmediateActionItem]):

Need to mark WKImmediateActionTypes.h as Private.
* WebKit2.xcodeproj/project.pbxproj:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (177191 => 177192)


--- trunk/Source/WebKit2/ChangeLog	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/ChangeLog	2014-12-12 00:25:16 UTC (rev 177192)
@@ -1,3 +1,29 @@
+2014-12-11  Beth Dakin  <[email protected]>
+
+        WK2: Need new SPI for Webkit clients to override default immediate action
+        https://bugs.webkit.org/show_bug.cgi?id=139564
+        -and corresponding-
+        rdar://problem/19225448
+
+        Reviewed by Tim Horton.
+
+        New SPI _immediateActionAnimationControllerForHitTestResult:withType:userData:
+        * UIProcess/API/Cocoa/WKViewPrivate.h:
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
+
+        Keep at ivar for the userData so that it can be passed to the new SPI.
+        * UIProcess/mac/WKImmediateActionController.h:
+        * UIProcess/mac/WKImmediateActionController.mm:
+        (-[WKImmediateActionController _clearImmediateActionState]):
+        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):
+
+        Always give the SPI a chance to override the animationController.
+        (-[WKImmediateActionController _updateImmediateActionItem]):
+
+        Need to mark WKImmediateActionTypes.h as Private.
+        * WebKit2.xcodeproj/project.pbxproj:
+
 2014-12-11  Timothy Horton  <[email protected]>
 
         Move the preview popover to WebImmediateActionController

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (177191 => 177192)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h	2014-12-12 00:25:16 UTC (rev 177192)
@@ -25,6 +25,7 @@
 
 #import <WebKit/WKActionMenuTypes.h>
 #import <WebKit/WKBase.h>
+#import <WebKit/WKImmediateActionTypes.h>
 #import <WebKit/WKView.h>
 
 @interface WKView (Private)
@@ -124,6 +125,10 @@
 - (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKActionMenuType)type defaultActionMenuItems:(NSArray *)defaultMenuItems;
 - (NSArray *)_actionMenuItemsForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKActionMenuType)type defaultActionMenuItems:(NSArray *)defaultMenuItems userData:(WKTypeRef)userData;
 
+// Clients that want to maintain default behavior can return nil. To disable the immediate action entirely, return NSNull. And to
+// do something custom, return an object that conforms to the NSImmediateActionAnimationController protocol.
+- (id)_immediateActionAnimationControllerForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKImmediateActionType)type userData:(WKTypeRef)userData;
+
 - (NSView *)_viewForPreviewingURL:(NSURL *)url initialFrameSize:(NSSize)initialFrameSize;
 - (NSString *)_titleForPreviewOfURL:(NSURL *)url;
 - (void)_setPreviewTitle:(NSString *)previewTitle;

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (177191 => 177192)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2014-12-12 00:25:16 UTC (rev 177192)
@@ -4310,6 +4310,11 @@
     return [self _actionMenuItemsForHitTestResult:hitTestResult withType:type defaultActionMenuItems:defaultMenuItems];
 }
 
+- (id)_immediateActionAnimationControllerForHitTestResult:(WKHitTestResultRef)hitTestResult withType:(_WKImmediateActionType)type userData:(WKTypeRef)userData
+{
+    return nil;
+}
+
 - (void)_dismissActionMenuPopovers
 {
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000

Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h (177191 => 177192)


--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h	2014-12-12 00:25:16 UTC (rev 177192)
@@ -54,6 +54,7 @@
 
     WebKit::ImmediateActionState _state;
     WebKit::ActionMenuHitTestResult _hitTestResult;
+    RefPtr<API::Object> _userData;
     _WKImmediateActionType _type;
     NSImmediateActionGestureRecognizer *_immediateActionRecognizer;
 

Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm (177191 => 177192)


--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm	2014-12-12 00:25:16 UTC (rev 177192)
@@ -85,6 +85,7 @@
     _state = ImmediateActionState::None;
     _hitTestResult = ActionMenuHitTestResult();
     _type = kWKImmediateActionNone;
+    _userData = nil;
 }
 
 - (void)didPerformActionMenuHitTest:(const ActionMenuHitTestResult&)hitTestResult userData:(API::Object*)userData
@@ -92,6 +93,7 @@
     // FIXME: This needs to use the WebKit2 callback mechanism to avoid out-of-order replies.
     _state = ImmediateActionState::Ready;
     _hitTestResult = hitTestResult;
+    _userData = userData;
 
     [self _updateImmediateActionItem];
 }
@@ -166,6 +168,7 @@
 
     _type = kWKImmediateActionNone;
     _immediateActionRecognizer.animationController = nil;
+    id <NSImmediateActionAnimationController> defaultAnimationController = nil;
 
     if (!hitTestResult)
         return;
@@ -183,16 +186,22 @@
                 [qlPreviewLinkItem setPreviewStyle:QLPreviewStylePopover];
                 [qlPreviewLinkItem setDelegate:self];
             }
-            _immediateActionRecognizer.animationController = (id<NSImmediateActionAnimationController>)qlPreviewLinkItem.get();
+            defaultAnimationController = (id<NSImmediateActionAnimationController>)qlPreviewLinkItem.get();
         } else {
 #if WK_API_ENABLED
             [self _createPreviewPopoverIfNeededForURL:absoluteLinkURL];
-            _immediateActionRecognizer.animationController = (id<NSImmediateActionAnimationController>)_previewPopover.get();
+            defaultAnimationController = (id<NSImmediateActionAnimationController>)_previewPopover.get();
 #endif // WK_API_ENABLED
         }
+    }
 
+    id customClientAnimationController = [_wkView _immediateActionAnimationControllerForHitTestResult:toAPI(hitTestResult.get()) withType:_type userData:toAPI(_userData.get())];
+    if (customClientAnimationController == [NSNull null])
         return;
-    }
+    if (customClientAnimationController && [customClientAnimationController conformsToProtocol:@protocol(NSImmediateActionAnimationController)])
+        _immediateActionRecognizer.animationController = (id <NSImmediateActionAnimationController>)customClientAnimationController;
+    else
+        _immediateActionRecognizer.animationController = defaultAnimationController;
 }
 
 #pragma mark Link Preview action

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (177191 => 177192)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2014-12-12 00:22:41 UTC (rev 177191)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2014-12-12 00:25:16 UTC (rev 177192)
@@ -1096,7 +1096,7 @@
 		909854EE12BC4E18000AD080 /* WebMemorySampler.mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 905620E512BC2476000799B6 /* WebMemorySampler.mac.mm */; };
 		9321D5861A38EE3C008052BE /* WKImmediateActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5851A38EE3C008052BE /* WKImmediateActionController.h */; };
 		9321D5881A38EE74008052BE /* WKImmediateActionController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9321D5871A38EE74008052BE /* WKImmediateActionController.mm */; };
-		9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; };
+		9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		934B724419F5B9BE00AE96D6 /* WKActionMenuItemTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 934B724319F5B9BE00AE96D6 /* WKActionMenuItemTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		935EEB9B1277617C003322B8 /* WKBundleBackForwardListItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 935EEB981277616D003322B8 /* WKBundleBackForwardListItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		935EEB9E127761AC003322B8 /* WKBundleBackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 935EEB951277616D003322B8 /* WKBundleBackForwardList.cpp */; };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to