Title: [191194] trunk/Source/WebKit2
Revision
191194
Author
ander...@apple.com
Date
2015-10-16 12:52:42 -0700 (Fri, 16 Oct 2015)

Log Message

Move more code to WebContextMenuProxyMac
https://bugs.webkit.org/show_bug.cgi?id=150240

Reviewed by Tim Horton.

* UIProcess/WebContextMenuProxy.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::internalShowContextMenu):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::contextMenuClient):
* UIProcess/mac/WebContextMenuProxyMac.h:
* UIProcess/mac/WebContextMenuProxyMac.mm:
(WebKit::WebContextMenuProxyMac::initializeShareMenuItem):
(WebKit::WebContextMenuProxyMac::showContextMenu):
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::platformInitializeShareMenuItem): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (191193 => 191194)


--- trunk/Source/WebKit2/ChangeLog	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/ChangeLog	2015-10-16 19:52:42 UTC (rev 191194)
@@ -1,3 +1,22 @@
+2015-10-16  Anders Carlsson  <ander...@apple.com>
+
+        Move more code to WebContextMenuProxyMac
+        https://bugs.webkit.org/show_bug.cgi?id=150240
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/WebContextMenuProxy.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::internalShowContextMenu):
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::contextMenuClient):
+        * UIProcess/mac/WebContextMenuProxyMac.h:
+        * UIProcess/mac/WebContextMenuProxyMac.mm:
+        (WebKit::WebContextMenuProxyMac::initializeShareMenuItem):
+        (WebKit::WebContextMenuProxyMac::showContextMenu):
+        * UIProcess/mac/WebPageProxyMac.mm:
+        (WebKit::WebPageProxy::platformInitializeShareMenuItem): Deleted.
+
 2015-10-16  Tim Horton  <timothy_hor...@apple.com>
 
         Hook up autolayout intrinsic sizing for WKWebView

Modified: trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h	2015-10-16 19:52:42 UTC (rev 191194)
@@ -40,7 +40,7 @@
 public:
     virtual ~WebContextMenuProxy();
 
-    virtual void showContextMenu(const Vector<RefPtr<WebContextMenuItem>>&) = 0;
+    virtual void showContextMenu() = 0;
     virtual void hideContextMenu() = 0;
     virtual void cancelTracking() { }
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-10-16 19:52:42 UTC (rev 191194)
@@ -4209,45 +4209,9 @@
     // Since showContextMenu() can spin a nested run loop we need to turn off the responsiveness timer.
     m_process->responsivenessTimer()->stop();
 
-    // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
-    bool askClientToChangeMenu = true;
-#if ENABLE(SERVICE_CONTROLS)
-    if (contextMenuContextData.isServicesMenu() || contextMenuContextData.controlledImage())
-        askClientToChangeMenu = false;
-#endif
-
-    Vector<RefPtr<WebContextMenuItem>> proposedAPIItems;
-    for (auto& item : contextMenuContextData.menuItems()) {
-        if (item.action() != ContextMenuItemTagShareMenu) {
-            proposedAPIItems.append(WebContextMenuItem::create(item));
-            continue;
-        }
-
-        ContextMenuItem coreItem = platformInitializeShareMenuItem(contextMenuContextData);
-        if (!coreItem.isNull())
-            proposedAPIItems.append(WebContextMenuItem::create(coreItem));
-    }
-
-    Vector<RefPtr<WebContextMenuItem>> clientItems;
-    bool useProposedItems = true;
-
-    if (askClientToChangeMenu && m_contextMenuClient->getContextMenuFromProposedMenu(*this, proposedAPIItems, clientItems, contextMenuContextData.webHitTestResultData(), m_process->transformHandlesToObjects(userData.object()).get()))
-        useProposedItems = false;
-
-    const Vector<RefPtr<WebContextMenuItem>>& itemsToShow = useProposedItems ? proposedAPIItems : clientItems;
-    if (!m_contextMenuClient->showContextMenu(*this, contextMenuContextData.menuLocation(), itemsToShow))
-        m_activeContextMenu->showContextMenu(itemsToShow);
-
-    m_contextMenuClient->contextMenuDismissed(*this);
+    m_activeContextMenu->showContextMenu();
 }
 
-#if !ENABLE(SERVICE_CONTROLS)
-ContextMenuItem WebPageProxy::platformInitializeShareMenuItem(const ContextMenuContextData&)
-{
-    return ContextMenuItem();
-}
-#endif
-
 void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
 {
     // Application custom items don't need to round-trip through to WebCore in the WebProcess.

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-10-16 19:52:42 UTC (rev 191194)
@@ -326,6 +326,7 @@
 #endif
 
 #if ENABLE(CONTEXT_MENUS)
+    API::ContextMenuClient& contextMenuClient() { return *m_contextMenuClient; }
     void setContextMenuClient(std::unique_ptr<API::ContextMenuClient>);
 #endif
     API::FindClient& findClient() { return *m_findClient; }
@@ -1264,7 +1265,6 @@
 #if ENABLE(CONTEXT_MENUS)
     void showContextMenu(const ContextMenuContextData&, const UserData&);
     void internalShowContextMenu(const ContextMenuContextData&, const UserData&);
-    WebCore::ContextMenuItem platformInitializeShareMenuItem(const ContextMenuContextData&);
 #endif
 
 #if ENABLE(TELEPHONE_NUMBER_DETECTION)

Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h	2015-10-16 19:52:42 UTC (rev 191194)
@@ -50,7 +50,7 @@
     }
     ~WebContextMenuProxyMac();
 
-    virtual void showContextMenu(const Vector<RefPtr<WebContextMenuItem>>&) override;
+    virtual void showContextMenu() override;
 
     virtual void hideContextMenu() override;
     virtual void cancelTracking() override;
@@ -71,6 +71,7 @@
 
 #if ENABLE(SERVICE_CONTROLS)
     void setupServicesMenu(const ContextMenuContextData&);
+    WebCore::ContextMenuItem shareMenuItem();
 #endif
 
     RetainPtr<NSPopUpButtonCell> m_popup;

Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm	2015-10-16 19:52:42 UTC (rev 191194)
@@ -28,6 +28,7 @@
 
 #if PLATFORM(MAC)
 
+#import "APIContextMenuClient.h"
 #import "DataReference.h"
 #import "MenuUtilities.h"
 #import "PageClientImpl.h"
@@ -251,7 +252,6 @@
 }
 
 #if ENABLE(SERVICE_CONTROLS)
-
 void WebContextMenuProxyMac::setupServicesMenu(const ContextMenuContextData& context)
 {
     bool includeEditorServices = context.controlledDataIsEditable();
@@ -321,6 +321,39 @@
     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nullptr];
     m_servicesMenu = nullptr;
 }
+
+ContextMenuItem WebContextMenuProxyMac::shareMenuItem()
+{
+    const WebHitTestResultData& hitTestData = m_context.webHitTestResultData();
+
+    URL absoluteLinkURL;
+    if (!hitTestData.absoluteLinkURL.isEmpty())
+        absoluteLinkURL = URL(ParsedURLString, hitTestData.absoluteLinkURL);
+
+    URL downloadableMediaURL;
+    if (!hitTestData.absoluteMediaURL.isEmpty() && hitTestData.isDownloadableMedia)
+        downloadableMediaURL = URL(ParsedURLString, hitTestData.absoluteMediaURL);
+
+    RetainPtr<NSImage> image;
+    if (hitTestData.imageSharedMemory && hitTestData.imageSize)
+        image = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:(unsigned char*)hitTestData.imageSharedMemory->data() length:hitTestData.imageSize]]);
+
+    ContextMenuItem item = ContextMenuItem::shareMenuItem(absoluteLinkURL, downloadableMediaURL, image.get(), m_context.selectedText());
+
+    NSMenuItem *nsItem = item.platformDescription();
+
+    NSSharingServicePicker *sharingServicePicker = [nsItem representedObject];
+    sharingServicePicker.delegate = [WKSharingServicePickerDelegate sharedSharingServicePickerDelegate];
+
+    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:NO];
+    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:NO];
+    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:this];
+
+    // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
+    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nil];
+
+    return item;
+}
 #endif
 
 void WebContextMenuProxyMac::populate(const Vector<RefPtr<WebContextMenuItem>>& items)
@@ -345,9 +378,36 @@
     populateNSMenu(menu, nsMenuItemVector(items));
 }
 
-void WebContextMenuProxyMac::showContextMenu(const Vector<RefPtr<WebContextMenuItem>>& items)
+void WebContextMenuProxyMac::showContextMenu()
 {
+    // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
+    bool askClientToChangeMenu = true;
 #if ENABLE(SERVICE_CONTROLS)
+    if (m_context.isServicesMenu() || m_context.controlledImage())
+        askClientToChangeMenu = false;
+#endif
+
+    Vector<RefPtr<WebContextMenuItem>> proposedAPIItems;
+    for (auto& item : m_context.menuItems()) {
+        if (item.action() != ContextMenuItemTagShareMenu) {
+            proposedAPIItems.append(WebContextMenuItem::create(item));
+            continue;
+        }
+
+#if ENABLE(SERVICE_CONTROLS)
+        proposedAPIItems.append(WebContextMenuItem::create(shareMenuItem()));
+#endif
+    }
+
+    Vector<RefPtr<WebContextMenuItem>> clientItems;
+    bool useProposedItems = true;
+
+    if (askClientToChangeMenu && m_page.contextMenuClient().getContextMenuFromProposedMenu(m_page, proposedAPIItems, clientItems, m_context.webHitTestResultData(), m_page.process().transformHandlesToObjects(m_userData.object()).get()))
+        useProposedItems = false;
+
+    const Vector<RefPtr<WebContextMenuItem>>& items = useProposedItems ? proposedAPIItems : clientItems;
+
+#if ENABLE(SERVICE_CONTROLS)
     if (items.isEmpty() && !m_context.isServicesMenu())
         return;
 #else

Modified: trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm (191193 => 191194)


--- trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2015-10-16 19:47:04 UTC (rev 191193)
+++ trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2015-10-16 19:52:42 UTC (rev 191194)
@@ -738,41 +738,6 @@
 #endif
 }
 
-#if ENABLE(SERVICE_CONTROLS)
-ContextMenuItem WebPageProxy::platformInitializeShareMenuItem(const ContextMenuContextData& contextMenuContextData)
-{
-    const WebHitTestResultData& hitTestData = contextMenuContextData.webHitTestResultData();
-
-    URL absoluteLinkURL;
-    if (!hitTestData.absoluteLinkURL.isEmpty())
-        absoluteLinkURL = URL(ParsedURLString, hitTestData.absoluteLinkURL);
-
-    URL downloadableMediaURL;
-    if (!hitTestData.absoluteMediaURL.isEmpty() && hitTestData.isDownloadableMedia)
-        downloadableMediaURL = URL(ParsedURLString, hitTestData.absoluteMediaURL);
-
-    RetainPtr<NSImage> image;
-    if (hitTestData.imageSharedMemory && hitTestData.imageSize)
-        image = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:(unsigned char*)hitTestData.imageSharedMemory->data() length:hitTestData.imageSize]]);
-
-    ContextMenuItem item = ContextMenuItem::shareMenuItem(absoluteLinkURL, downloadableMediaURL, image.get(), contextMenuContextData.selectedText());
-
-    NSMenuItem *nsItem = item.platformDescription();
-
-    NSSharingServicePicker *sharingServicePicker = [nsItem representedObject];
-    sharingServicePicker.delegate = [WKSharingServicePickerDelegate sharedSharingServicePickerDelegate];
-    
-    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:NO];
-    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:NO];
-    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:static_cast<WebContextMenuProxyMac*>(m_activeContextMenu.get())];
-
-    // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
-    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nil];
-
-    return item;
-}
-#endif
-
 } // namespace WebKit
 
 #endif // PLATFORM(MAC)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to