Title: [165911] trunk/Source
Revision
165911
Author
beid...@apple.com
Date
2014-03-19 13:12:24 -0700 (Wed, 19 Mar 2014)

Log Message

Filter out editable services from image menu for non-contenteditable images
<rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437

Reviewed by Tim Horton.

Source/WebCore:

* WebCore.exp.in:

Source/WebKit/mac:

* Misc/WebSharingServicePickerController.h:
* Misc/WebSharingServicePickerController.mm:
(-[WebSharingServicePickerController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
  Filter out editing services based on the includeEditorServices flag.
* WebCoreSupport/WebContextMenuClient.mm:
(WebContextMenuClient::contextMenuForEvent):

Source/WebKit2:

* UIProcess/mac/WebContextMenuProxyMac.h:
* UIProcess/mac/WebContextMenuProxyMac.mm:
(-[WKSharingServicePickerDelegate setIncludeEditorServices:]):
(-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
  Filter out editing services based on the includeEditorServices flag.
(WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
(WebKit::WebContextMenuProxyMac::populate):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (165910 => 165911)


--- trunk/Source/WebCore/ChangeLog	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebCore/ChangeLog	2014-03-19 20:12:24 UTC (rev 165911)
@@ -1,3 +1,12 @@
+2014-03-19  Brady Eidson  <beid...@apple.com>
+
+        Filter out editable services from image menu for non-contenteditable images
+        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437
+
+        Reviewed by Tim Horton.
+
+        * WebCore.exp.in:
+
 2014-03-19  Dirk Schulze  <k...@webkit.org>
 
         Implement method addPath for Path2D

Modified: trunk/Source/WebCore/WebCore.exp.in (165910 => 165911)


--- trunk/Source/WebCore/WebCore.exp.in	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-03-19 20:12:24 UTC (rev 165911)
@@ -1017,6 +1017,7 @@
 __ZN7WebCore4Node12insertBeforeEN3WTF10PassRefPtrIS0_EEPS0_Ri
 __ZN7WebCore4Node14removedLastRefEv
 __ZN7WebCore4Node14setTextContentERKN3WTF6StringERi
+__ZN7WebCore4Node17isContentEditableENS0_22UserSelectAllTreatmentE
 __ZN7WebCore4Node17stopIgnoringLeaksEv
 __ZN7WebCore4Node18startIgnoringLeaksEv
 __ZN7WebCore4Node19setNeedsStyleRecalcENS_15StyleChangeTypeE

Modified: trunk/Source/WebKit/mac/ChangeLog (165910 => 165911)


--- trunk/Source/WebKit/mac/ChangeLog	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-03-19 20:12:24 UTC (rev 165911)
@@ -1,3 +1,17 @@
+2014-03-19  Brady Eidson  <beid...@apple.com>
+
+        Filter out editable services from image menu for non-contenteditable images
+        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437
+
+        Reviewed by Tim Horton.
+
+        * Misc/WebSharingServicePickerController.h:
+        * Misc/WebSharingServicePickerController.mm:
+        (-[WebSharingServicePickerController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
+          Filter out editing services based on the includeEditorServices flag.
+        * WebCoreSupport/WebContextMenuClient.mm:
+        (WebContextMenuClient::contextMenuForEvent):
+
 2014-03-19  Jer Noble  <jer.no...@apple.com>
 
         [iOS] Disable the video plugin proxy by default on WK1.

Modified: trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.h (165910 => 165911)


--- trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.h	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.h	2014-03-19 20:12:24 UTC (rev 165911)
@@ -36,9 +36,10 @@
 @interface WebSharingServicePickerController : NSObject <NSSharingServiceDelegate, NSSharingServicePickerDelegate> {
     WebContextMenuClient* _menuClient;
     RetainPtr<NSSharingServicePicker> _picker;
+    BOOL _includeEditorServices;
 }
 
-- (instancetype)initWithImage:(NSImage *)image menuClient:(WebContextMenuClient*)menuClient;
+- (instancetype)initWithImage:(NSImage *)image includeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient;
 - (NSMenu *)menu;
 
 @end

Modified: trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm (165910 => 165911)


--- trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm	2014-03-19 20:12:24 UTC (rev 165911)
@@ -52,7 +52,7 @@
 
 @implementation WebSharingServicePickerController
 
-- (instancetype)initWithImage:(NSImage *)image menuClient:(WebContextMenuClient*)menuClient
+- (instancetype)initWithImage:(NSImage *)image includeEditorServices:(BOOL)includeEditorServices menuClient:(WebContextMenuClient*)menuClient
 {
     if (!(self = [super init]))
         return nil;
@@ -61,6 +61,7 @@
     [_picker setStyle:NSSharingServicePickerStyleRollover];
     [_picker setDelegate:self];
 
+    _includeEditorServices = includeEditorServices;
     _menuClient = menuClient;
 
     return self;
@@ -81,6 +82,22 @@
 
 #pragma mark NSSharingServicePickerDelegate methods
 
+
+- (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items mask:(NSSharingServiceMask)mask proposedSharingServices:(NSArray *)proposedServices
+{
+    if (_includeEditorServices)
+        return proposedServices;
+        
+    NSMutableArray *services = [[NSMutableArray alloc] initWithCapacity:[proposedServices count]];
+    
+    for (NSSharingService *service in proposedServices) {
+        if (service.type != NSSharingServiceTypeEditor)
+            [services addObject:service];
+    }
+    
+    return services;
+}
+
 - (id <NSSharingServiceDelegate>)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker delegateForSharingService:(NSSharingService *)sharingService
 {
     return self;

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm (165910 => 165911)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm	2014-03-19 20:12:24 UTC (rev 165911)
@@ -362,7 +362,10 @@
 
 #if ENABLE(IMAGE_CONTROLS)
     if (Image* image = page->contextMenuController().context().controlledImage()) {
-        m_sharingServicePickerController = adoptNS([[WebSharingServicePickerController alloc] initWithImage:image->getNSImage() menuClient:this]);
+        ASSERT(page->contextMenuController().context().hitTestResult().innerNode());
+        bool isContentEditable = page->contextMenuController().context().hitTestResult().innerNode()->isContentEditable();
+        m_sharingServicePickerController = adoptNS([[WebSharingServicePickerController alloc] initWithImage:image->getNSImage() includeEditorServices:isContentEditable menuClient:this]);
+        
         return [m_sharingServicePickerController menu];
     }
 #endif

Modified: trunk/Source/WebKit2/ChangeLog (165910 => 165911)


--- trunk/Source/WebKit2/ChangeLog	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit2/ChangeLog	2014-03-19 20:12:24 UTC (rev 165911)
@@ -1,3 +1,18 @@
+2014-03-19  Brady Eidson  <beid...@apple.com>
+
+        Filter out editable services from image menu for non-contenteditable images
+        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/mac/WebContextMenuProxyMac.h:
+        * UIProcess/mac/WebContextMenuProxyMac.mm:
+        (-[WKSharingServicePickerDelegate setIncludeEditorServices:]):
+        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
+          Filter out editing services based on the includeEditorServices flag.
+        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
+        (WebKit::WebContextMenuProxyMac::populate):
+
 2014-03-19  Yongjun Zhang  <yongjun_zh...@apple.com>
 
         [iOS] WebKit2 Quicklook.

Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (165910 => 165911)


--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h	2014-03-19 20:12:24 UTC (rev 165911)
@@ -66,7 +66,7 @@
     void populate(const Vector<WebContextMenuItemData>&, const ContextMenuContextData&);
 
 #if ENABLE(IMAGE_CONTROLS)
-    void setupImageServicesMenu(ShareableBitmap&);
+    void setupImageServicesMenu(ShareableBitmap&, bool includeEditorServices);
 #endif
 
     RetainPtr<NSPopUpButtonCell> m_popup;

Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (165910 => 165911)


--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm	2014-03-19 19:54:42 UTC (rev 165910)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm	2014-03-19 20:12:24 UTC (rev 165911)
@@ -131,12 +131,14 @@
 @interface WKSharingServicePickerDelegate : NSObject <NSSharingServiceDelegate, NSSharingServicePickerDelegate> {
     WebKit::WebContextMenuProxyMac* _menuProxy;
     RetainPtr<NSSharingServicePicker> _picker;
+    BOOL _includeEditorServices;
 }
 
 + (WKSharingServicePickerDelegate *)sharedSharingServicePickerDelegate;
 - (WebKit::WebContextMenuProxyMac*)menuProxy;
 - (void)setMenuProxy:(WebKit::WebContextMenuProxyMac*)menuProxy;
 - (void)setPicker:(NSSharingServicePicker *)picker;
+- (void)setIncludeEditorServices:(BOOL)includeEditorServices;
 @end
 
 // FIXME: We probably need to hang on the picker itself until the context menu operation is done, and this object will probably do that.
@@ -162,6 +164,26 @@
     _picker = picker;
 }
 
+- (void)setIncludeEditorServices:(BOOL)includeEditorServices
+{
+    _includeEditorServices = includeEditorServices;
+}
+
+- (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items mask:(NSSharingServiceMask)mask proposedSharingServices:(NSArray *)proposedServices
+{
+    if (_includeEditorServices)
+        return proposedServices;
+        
+    NSMutableArray *services = [[NSMutableArray alloc] initWithCapacity:[proposedServices count]];
+    
+    for (NSSharingService *service in proposedServices) {
+        if (service.type != NSSharingServiceTypeEditor)
+            [services addObject:service];
+    }
+    
+    return services;
+}
+
 - (id <NSSharingServiceDelegate>)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker delegateForSharingService:(NSSharingService *)sharingService
 {
     return self;
@@ -274,7 +296,7 @@
 }
 
 #if ENABLE(IMAGE_CONTROLS)
-void WebContextMenuProxyMac::setupImageServicesMenu(ShareableBitmap& image)
+void WebContextMenuProxyMac::setupImageServicesMenu(ShareableBitmap& image, bool includeEditorServices)
 {
     RetainPtr<CGImageRef> cgImage = image.makeCGImage();
     RetainPtr<NSImage> nsImage = adoptNS([[NSImage alloc] initWithCGImage:cgImage.get() size:image.size()]);
@@ -283,6 +305,7 @@
     [picker setStyle:NSSharingServicePickerStyleRollover];
     [picker setDelegate:[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate]];
     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:picker.get()];
+    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setIncludeEditorServices:includeEditorServices];
 
     m_servicesMenu = [picker menu];
 }
@@ -298,7 +321,7 @@
 {
 #if ENABLE(IMAGE_CONTROLS)
     if (RefPtr<ShareableBitmap> image = ShareableBitmap::create(context.controlledImageHandle())) {
-        setupImageServicesMenu(*image);
+        setupImageServicesMenu(*image, context.webHitTestResultData().isContentEditable);
         return;
     }
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to