Changeset 182303 in webkit
- Timestamp:
- Apr 2, 2015, 6:16:24 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 31 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/page/ContextMenuClient.h (modified) (1 diff)
-
WebCore/page/ContextMenuContext.h (modified) (2 diffs)
-
WebCore/page/ContextMenuController.cpp (modified) (3 diffs)
-
WebCore/platform/ContextMenuItem.cpp (modified) (1 diff)
-
WebCore/platform/ContextMenuItem.h (modified) (3 diffs)
-
WebCore/platform/gtk/ContextMenuItemGtk.cpp (modified) (1 diff)
-
WebCore/platform/mac/ContextMenuItemMac.mm (modified) (3 diffs)
-
WebCore/platform/spi/mac/NSMenuSPI.h (modified) (2 diffs)
-
WebKit/mac/ChangeLog (modified) (1 diff)
-
WebKit/mac/WebView/WebImmediateActionController.mm (modified) (1 diff)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/Shared/API/c/WKContextMenuItemTypes.h (modified) (1 diff)
-
WebKit2/Shared/API/c/WKSharedAPICast.h (modified) (2 diffs)
-
WebKit2/Shared/ContextMenuContextData.cpp (modified) (3 diffs)
-
WebKit2/Shared/ContextMenuContextData.h (modified) (2 diffs)
-
WebKit2/Shared/NativeContextMenuItem.h (added)
-
WebKit2/Shared/WebContextMenuItem.cpp (modified) (1 diff)
-
WebKit2/Shared/WebContextMenuItem.h (modified) (3 diffs)
-
WebKit2/Shared/mac/NativeContextMenuItem.mm (added)
-
WebKit2/UIProcess/API/APIContextMenuClient.h (modified) (3 diffs)
-
WebKit2/UIProcess/API/C/WKPage.cpp (modified) (5 diffs)
-
WebKit2/UIProcess/WebContextMenuProxy.h (modified) (2 diffs)
-
WebKit2/UIProcess/WebPageProxy.cpp (modified) (3 diffs)
-
WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp (modified) (1 diff)
-
WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h (modified) (1 diff)
-
WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp (modified) (1 diff)
-
WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h (modified) (2 diffs)
-
WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (modified) (3 diffs)
-
WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (modified) (6 diffs)
-
WebKit2/WebKit2.xcodeproj/project.pbxproj (modified) (5 diffs)
-
WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h (modified) (1 diff)
-
WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r182301 r182303 1 2015-04-02 Brady Eidson <beidson@apple.com> 2 3 Unreviewed: Reapplied Change after rollout. 4 5 Expose the "Share" menu for text selections on platforms where it's available. 6 rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318 7 8 * page/ContextMenuClient.h: 9 (WebCore::ContextMenuClient::shareSelectedTextMenuItem): 10 11 * page/ContextMenuContext.h: 12 (WebCore::ContextMenuContext::setSelectedText): 13 (WebCore::ContextMenuContext::selectedText): 14 15 * page/ContextMenuController.cpp: 16 (WebCore::ContextMenuController::populate): Add a Share menu item returned from the client. 17 (WebCore::ContextMenuController::checkOrEnableIfNeeded): 18 19 * platform/ContextMenuItem.cpp: 20 (WebCore::ContextMenuItem::shareSelectedTextMenuItem): 21 22 * platform/ContextMenuItem.h: 23 (WebCore::ContextMenuItem::supportsShareMenu): 24 25 * platform/gtk/ContextMenuItemGtk.cpp: 26 (WebCore::ContextMenuItem::shareSelectedTextMenuItem): 27 28 * platform/mac/ContextMenuItemMac.mm: 29 (WebCore::ContextMenuItem::releasePlatformDescription): 30 (WebCore::ContextMenuItem::getPlatformDescription): 31 (WebCore::ContextMenuItem::supportsShareMenu): 32 (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Use NSMenu SPI to get the Share menu. 33 34 * platform/spi/mac/NSMenuSPI.h: Forward declare instead of #include 35 1 36 2015-04-02 Commit Queue <commit-queue@webkit.org> 2 37 -
trunk/Source/WebCore/page/ContextMenuClient.h
r182301 r182303 61 61 #if PLATFORM(COCOA) 62 62 virtual void searchWithSpotlight() = 0; 63 virtual ContextMenuItem shareSelectedTextMenuItem(const String& selectedText) { return ContextMenuItem::shareSelectedTextMenuItem(selectedText); } 63 64 #endif 64 65 -
trunk/Source/WebCore/page/ContextMenuContext.h
r182301 r182303 42 42 const HitTestResult& hitTestResult() const { return m_hitTestResult; } 43 43 44 void setSelectedText(const String& selectedText) { m_selectedText = selectedText; } 45 const String& selectedText() const { return m_selectedText; } 46 44 47 #if ENABLE(SERVICE_CONTROLS) 45 48 void setControlledImage(Image* controlledImage) { m_controlledImage = controlledImage; } … … 50 53 51 54 HitTestResult m_hitTestResult; 55 String m_selectedText; 52 56 53 57 #if ENABLE(SERVICE_CONTROLS) -
trunk/Source/WebCore/page/ContextMenuController.cpp
r182301 r182303 893 893 if (imageURL.isEmpty() && linkURL.isEmpty() && mediaURL.isEmpty()) { 894 894 if (m_context.hitTestResult().isSelected()) { 895 String selectedString; 895 896 if (selectionContainsPossibleWord(frame)) { 896 897 #if PLATFORM(COCOA) 897 StringselectedString = frame->displayStringModifiedByEncoding(frame->editor().selectedText());898 selectedString = frame->displayStringModifiedByEncoding(frame->editor().selectedText()); 898 899 ContextMenuItem LookUpInDictionaryItem(ActionType, ContextMenuItemTagLookUpInDictionary, contextMenuItemTagLookUpInDictionary(selectedString)); 899 900 … … 910 911 #if PLATFORM(COCOA) 911 912 appendItem(*separatorItem(), m_contextMenu.get()); 913 914 if (!selectedString.isEmpty() && ContextMenuItem::supportsShareMenu()) { 915 ContextMenuItem ShareItem(m_client.shareSelectedTextMenuItem(selectedString)); 916 appendItem(ShareItem, m_contextMenu.get()); 917 appendItem(*separatorItem(), m_contextMenu.get()); 918 919 m_context.setSelectedText(selectedString); 920 } 912 921 913 922 ContextMenuItem SpeechMenuItem(SubmenuType, ContextMenuItemTagSpeechMenu, contextMenuItemTagSpeechMenu()); … … 1401 1410 case ContextMenuItemBaseApplicationTag: 1402 1411 case ContextMenuItemTagDictationAlternative: 1412 case ContextMenuItemTagShareMenu: 1403 1413 break; 1404 1414 case ContextMenuItemTagMediaPlayPause: -
trunk/Source/WebCore/platform/ContextMenuItem.cpp
r182301 r182303 118 118 } 119 119 120 bool ContextMenuItem::supportsShareMenu() 121 { 122 return false; 123 } 124 125 ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String&) 126 { 127 return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString()); 128 } 129 120 130 } // namespace WebCore 121 131 -
trunk/Source/WebCore/platform/ContextMenuItem.h
r182301 r182303 162 162 ContextMenuItemTagOpenLinkInThisWindow, 163 163 ContextMenuItemTagToggleVideoFullscreen, 164 ContextMenuItemTagShareMenu, 164 165 ContextMenuItemBaseCustomTag = 5000, 165 166 ContextMenuItemCustomTagNoAction = 5998, … … 206 207 void setSubMenu(ContextMenu*); 207 208 209 static bool supportsShareMenu(); 210 WEBCORE_EXPORT static ContextMenuItem shareSelectedTextMenuItem(const String&); 211 208 212 #if PLATFORM(GTK) 209 213 GtkAction* gtkAction() const; … … 229 233 230 234 WEBCORE_EXPORT PlatformMenuItemDescription releasePlatformDescription(); 235 WEBCORE_EXPORT PlatformMenuItemDescription getPlatformDescription() const; 231 236 232 237 WEBCORE_EXPORT String title() const; -
trunk/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp
r182301 r182303 284 284 } 285 285 286 bool ContextMenuItem::supportsShareMenu() 287 { 288 return false; 289 } 290 291 ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String&) 292 { 293 return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString()); 294 } 295 286 296 } 287 297 -
trunk/Source/WebCore/platform/mac/ContextMenuItemMac.mm
r182301 r182303 30 30 31 31 #include "ContextMenu.h" 32 #include "NSMenuSPI.h" 32 33 33 34 namespace WebCore { … … 96 97 } 97 98 98 NSMenuItem *ContextMenuItem::releasePlatformDescription()99 { 100 NSMenuItem *item = [m_platformDescription.get() retain];99 NSMenuItem *ContextMenuItem::releasePlatformDescription() 100 { 101 NSMenuItem *item = [m_platformDescription.get() retain]; 101 102 m_platformDescription = 0; 102 103 return item; 104 } 105 106 NSMenuItem *ContextMenuItem::getPlatformDescription() const 107 { 108 return m_platformDescription.get(); 103 109 } 104 110 … … 188 194 } 189 195 196 bool ContextMenuItem::supportsShareMenu() 197 { 198 static bool supportsShareMenu = [[NSMenuItem class] respondsToSelector:@selector(standardShareMenuItemWithItems:)]; 199 return supportsShareMenu; 200 } 201 202 ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String& selectedText) 203 { 204 ContextMenuItem item([NSMenuItem standardShareMenuItemWithItems:@[ (NSString *)selectedText ]]); 205 item.setAction(ContextMenuItemTagShareMenu); 206 return item; 207 } 208 190 209 } // namespace WebCore 191 210 -
trunk/Source/WebCore/platform/spi/mac/NSMenuSPI.h
r182301 r182303 24 24 */ 25 25 26 #import "QuickLookMacSPI.h"27 28 26 // FIXME: We should just include the appropriate internal headers. 29 27 … … 38 36 @end 39 37 38 @class QLPreviewMenuItem; 39 40 40 @interface NSMenuItem (Private) 41 41 + (QLPreviewMenuItem *)standardQuickLookMenuItem; -
trunk/Source/WebKit/mac/ChangeLog
r182301 r182303 1 2015-04-02 Brady Eidson <beidson@apple.com> 2 3 Unreviewed: Reland change after rollout. 4 5 Expose the "Share" menu for text selections on platforms where it's available. 6 rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318 7 8 * WebView/WebImmediateActionController.mm: Update for required #include 9 1 10 2015-04-02 Commit Queue <commit-queue@webkit.org> 2 11 -
trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm
r182301 r182303 50 50 #import <WebCore/NSMenuSPI.h> 51 51 #import <WebCore/Page.h> 52 #import <WebCore/QuickLookMacSPI.h> 52 53 #import <WebCore/RenderElement.h> 53 54 #import <WebCore/RenderObject.h> -
trunk/Source/WebKit2/ChangeLog
r182301 r182303 1 2015-04-02 Brady Eidson <beidson@apple.com> 2 3 Unreviewed: Re-applied change after rollout. 4 5 Expose the "Share" menu for text selections on platforms where it's available. 6 rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318 7 8 * Shared/API/c/WKContextMenuItemTypes.h: Add a constant for the Share menu. 9 * Shared/API/c/WKSharedAPICast.h: 10 (WebKit::toAPI): 11 (WebKit::toImpl): 12 13 * Shared/ContextMenuContextData.cpp: 14 (WebKit::ContextMenuContextData::ContextMenuContextData): 15 (WebKit::ContextMenuContextData::encode): 16 (WebKit::ContextMenuContextData::decode): 17 * Shared/ContextMenuContextData.h: 18 (WebKit::ContextMenuContextData::selectedText): 19 20 Add a "cross platform" menu item wrapper, right now only for NSMenuItem. 21 * Shared/NativeContextMenuItem.h: 22 (WebKit::NativeContextMenuItem::~NativeContextMenuItem): 23 (WebKit::NativeContextMenuItem::nsMenuItem): 24 * Shared/mac/NativeContextMenuItem.mm: 25 (WebKit::NativeContextMenuItem::NativeContextMenuItem): 26 27 Let WebContextMenuItem hold on to a NativeContextMenuItem to maintain full fidelity of the platform. 28 * Shared/WebContextMenuItem.cpp: 29 (WebKit::WebContextMenuItem::WebContextMenuItem): 30 * Shared/WebContextMenuItem.h: 31 (WebKit::WebContextMenuItem::create): 32 (WebKit::WebContextMenuItem::nativeContextMenuItem): 33 34 * UIProcess/API/APIContextMenuClient.h: 35 (API::ContextMenuClient::getContextMenuFromProposedMenu): 36 (API::ContextMenuClient::showContextMenu): 37 38 * UIProcess/API/C/WKPage.cpp: 39 (WKPageSetPageContextMenuClient): 40 41 * UIProcess/WebContextMenuProxy.h: 42 43 * UIProcess/WebPageProxy.cpp: 44 (WebKit::WebPageProxy::internalShowContextMenu): Translate the placeholder item from the web process into the 45 native Share menu before consulting the context menu client. Also create the API items here so the native NSMenuItem 46 can be attached to them. 47 48 * UIProcess/mac/WebContextMenuProxyMac.h: 49 * UIProcess/mac/WebContextMenuProxyMac.mm: 50 (-[WKMenuTarget forwardContextMenuAction:]): 51 (WebKit::nsMenuItem): 52 (WebKit::nsMenuItemVector): 53 (WebKit::WebContextMenuProxyMac::populate): 54 (WebKit::WebContextMenuProxyMac::showContextMenu): 55 56 * WebKit2.xcodeproj/project.pbxproj: 57 58 * WebProcess/WebCoreSupport/WebContextMenuClient.h: 59 * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm: 60 (WebKit::WebContextMenuClient::shareSelectedTextMenuItem): In the web process, mark the Share menu's place in the 61 context menu with a placeholder item. It will be translated into the real Share menu in the UI process. 62 1 63 2015-04-02 Commit Queue <commit-queue@webkit.org> 2 64 -
trunk/Source/WebKit2/Shared/API/c/WKContextMenuItemTypes.h
r182301 r182303 122 122 kWKContextMenuItemTagOpenLinkInThisWindow, 123 123 kWKContextMenuItemTagToggleVideoFullscreen, 124 kWKContextMenuItemTagShareMenu, 124 125 kWKContextMenuItemBaseApplicationTag = 10000 125 126 }; -
trunk/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
r182301 r182303 504 504 case WebCore::ContextMenuItemTagOpenLinkInThisWindow: 505 505 return kWKContextMenuItemTagOpenLinkInThisWindow; 506 case WebCore::ContextMenuItemTagShareMenu: 507 return kWKContextMenuItemTagShareMenu; 506 508 default: 507 509 if (action < WebCore::ContextMenuItemBaseApplicationTag) … … 693 695 case kWKContextMenuItemTagChangeBack: 694 696 return WebCore::ContextMenuItemTagChangeBack; 697 case kWKContextMenuItemTagShareMenu: 698 return WebCore::ContextMenuItemTagShareMenu; 695 699 #endif 696 700 case kWKContextMenuItemTagOpenLinkInThisWindow: -
trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp
r182301 r182303 47 47 ContextMenuContextData::ContextMenuContextData(const ContextMenuContext& context) 48 48 : m_webHitTestResultData(WebHitTestResult::Data(context.hitTestResult())) 49 , m_selectedText(context.selectedText()) 49 50 #if ENABLE(SERVICE_CONTROLS) 50 51 , m_selectionIsEditable(false) … … 65 66 { 66 67 encoder << m_webHitTestResultData; 68 encoder << m_selectedText; 67 69 68 70 #if ENABLE(SERVICE_CONTROLS) … … 77 79 { 78 80 if (!decoder.decode(contextMenuContextData.m_webHitTestResultData)) 81 return false; 82 83 if (!decoder.decode(contextMenuContextData.m_selectedText)) 79 84 return false; 80 85 -
trunk/Source/WebKit2/Shared/ContextMenuContextData.h
r182301 r182303 50 50 51 51 const WebHitTestResult::Data& webHitTestResultData() const { return m_webHitTestResultData; } 52 const String& selectedText() const { return m_selectedText; } 52 53 53 54 #if ENABLE(SERVICE_CONTROLS) … … 72 73 private: 73 74 WebHitTestResult::Data m_webHitTestResultData; 75 String m_selectedText; 74 76 75 77 #if ENABLE(SERVICE_CONTROLS) -
trunk/Source/WebKit2/Shared/WebContextMenuItem.cpp
r182301 r182303 39 39 : m_webContextMenuItemData(data) 40 40 { 41 } 42 43 WebContextMenuItem::WebContextMenuItem(const WebCore::ContextMenuItem& coreItem) 44 : m_webContextMenuItemData(coreItem) 45 { 46 m_nativeContextMenuItem = std::make_unique<NativeContextMenuItem>(coreItem); 41 47 } 42 48 -
trunk/Source/WebKit2/Shared/WebContextMenuItem.h
r182301 r182303 30 30 31 31 #include "APIObject.h" 32 #include "NativeContextMenuItem.h" 32 33 #include "WebContextMenuItemData.h" 33 34 34 35 namespace API { 35 36 class Array; 37 } 38 39 namespace WebCore { 40 class ContextMenuItem; 36 41 } 37 42 … … 44 49 return adoptRef(new WebContextMenuItem(data)); 45 50 } 51 52 static PassRefPtr<WebContextMenuItem> create(const WebCore::ContextMenuItem& item) 53 { 54 return adoptRef(new WebContextMenuItem(item)); 55 } 56 46 57 static PassRefPtr<WebContextMenuItem> create(const String& title, bool enabled, API::Array* submenuItems); 47 58 static WebContextMenuItem* separatorItem(); … … 53 64 54 65 WebContextMenuItemData* data() { return &m_webContextMenuItemData; } 66 NativeContextMenuItem* nativeContextMenuItem() { return m_nativeContextMenuItem.get(); } 55 67 56 68 private: 57 69 WebContextMenuItem(const WebContextMenuItemData&); 70 WebContextMenuItem(const WebCore::ContextMenuItem&); 58 71 59 72 WebContextMenuItemData m_webContextMenuItemData; 73 74 std::unique_ptr<NativeContextMenuItem> m_nativeContextMenuItem; 60 75 }; 61 76 -
trunk/Source/WebKit2/UIProcess/API/APIContextMenuClient.h
r182301 r182303 30 30 31 31 #include "WebHitTestResult.h" 32 #include <wtf/RefPtr.h> 32 33 #include <wtf/Vector.h> 33 34 … … 37 38 38 39 namespace WebKit { 40 class WebContextMenuItem; 39 41 class WebContextMenuItemData; 40 42 class WebPageProxy; … … 47 49 virtual ~ContextMenuClient() { } 48 50 49 virtual bool getContextMenuFromProposedMenu(WebKit::WebPageProxy&, const Vector< WebKit::WebContextMenuItemData>& /* proposedMenu */, Vector<WebKit::WebContextMenuItemData>& /* customMenu */, const WebKit::WebHitTestResult::Data&, API::Object* /* userData */) { return false; }51 virtual bool getContextMenuFromProposedMenu(WebKit::WebPageProxy&, const Vector<RefPtr<WebKit::WebContextMenuItem>>& /* proposedMenu */, Vector<RefPtr<WebKit::WebContextMenuItem>>& /* customMenu */, const WebKit::WebHitTestResult::Data&, API::Object* /* userData */) { return false; } 50 52 virtual void customContextMenuItemSelected(WebKit::WebPageProxy&, const WebKit::WebContextMenuItemData&) { } 51 53 virtual void contextMenuDismissed(WebKit::WebPageProxy&) { } 52 virtual bool showContextMenu(WebKit::WebPageProxy&, const WebCore::IntPoint&, const Vector< WebKit::WebContextMenuItemData>&) { return false; }54 virtual bool showContextMenu(WebKit::WebPageProxy&, const WebCore::IntPoint&, const Vector<RefPtr<WebKit::WebContextMenuItem>>&) { return false; } 53 55 virtual bool hideContextMenu(WebKit::WebPageProxy&) { return false; } 54 56 }; -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r182301 r182303 745 745 746 746 private: 747 virtual bool getContextMenuFromProposedMenu(WebPageProxy& page, const Vector< WebContextMenuItemData>& proposedMenuVector, Vector<WebContextMenuItemData>& customMenu, const WebHitTestResult::Data& hitTestResultData, API::Object* userData) override747 virtual bool getContextMenuFromProposedMenu(WebPageProxy& page, const Vector<RefPtr<WebKit::WebContextMenuItem>>& proposedMenuVector, Vector<RefPtr<WebKit::WebContextMenuItem>>& customMenu, const WebHitTestResult::Data& hitTestResultData, API::Object* userData) override 748 748 { 749 749 if (!m_client.getContextMenuFromProposedMenu && !m_client.getContextMenuFromProposedMenu_deprecatedForUseWithV0) … … 757 757 758 758 for (const auto& menuItem : proposedMenuVector) 759 proposedMenuItems.uncheckedAppend( WebContextMenuItem::create(menuItem));759 proposedMenuItems.uncheckedAppend(menuItem); 760 760 761 761 WKArrayRef newMenu = nullptr; … … 778 778 } 779 779 780 customMenu.append( *item->data());780 customMenu.append(item); 781 781 } 782 782 … … 800 800 } 801 801 802 virtual bool showContextMenu(WebPageProxy& page, const WebCore::IntPoint& menuLocation, const Vector< WebContextMenuItemData>& menuItemsVector) override802 virtual bool showContextMenu(WebPageProxy& page, const WebCore::IntPoint& menuLocation, const Vector<RefPtr<WebContextMenuItem>>& menuItemsVector) override 803 803 { 804 804 if (!m_client.showContextMenu) … … 809 809 810 810 for (const auto& menuItem : menuItemsVector) 811 menuItems.uncheckedAppend( WebContextMenuItem::create(menuItem));811 menuItems.uncheckedAppend(menuItem); 812 812 813 813 m_client.showContextMenu(toAPI(&page), toAPI(menuLocation), toAPI(API::Array::create(WTF::move(menuItems)).get()), m_client.base.clientInfo); -
trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h
r182301 r182303 38 38 39 39 class ContextMenuContextData; 40 class WebContextMenuItem Data;40 class WebContextMenuItem; 41 41 42 42 class WebContextMenuProxy : public RefCounted<WebContextMenuProxy> { … … 44 44 virtual ~WebContextMenuProxy(); 45 45 46 virtual void showContextMenu(const WebCore::IntPoint&, const Vector< WebContextMenuItemData>&, const ContextMenuContextData&) = 0;46 virtual void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&) = 0; 47 47 virtual void hideContextMenu() = 0; 48 48 virtual void cancelTracking() { } -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r182301 r182303 70 70 #include "WebBackForwardListItem.h" 71 71 #include "WebCertificateInfo.h" 72 #include "WebContextMenuItem.h" 72 73 #include "WebContextMenuProxy.h" 73 74 #include "WebCoreArgumentCoders.h" … … 4029 4030 4030 4031 // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu. 4031 Vector<WebContextMenuItemData> items;4032 bool useProposedItems = true;4033 4032 bool askClientToChangeMenu = clientEligibility == ContextMenuClientEligibility::EligibleForClient; 4034 4033 #if ENABLE(SERVICE_CONTROLS) … … 4037 4036 #endif 4038 4037 4039 if (askClientToChangeMenu && m_contextMenuClient->getContextMenuFromProposedMenu(*this, proposedItems, items, contextMenuContextData.webHitTestResultData(), m_process->transformHandlesToObjects(userData.object()).get())) 4038 Vector<RefPtr<WebContextMenuItem>> proposedAPIItems; 4039 for (auto& item : proposedItems) { 4040 if (item.action() != ContextMenuItemTagShareMenu) { 4041 proposedAPIItems.append(WebContextMenuItem::create(item)); 4042 continue; 4043 } 4044 4045 // Currently we only support the share menu for text selection, so create the appropriate menu item for that text selection now. 4046 ContextMenuItem coreItem = ContextMenuItem::shareSelectedTextMenuItem(contextMenuContextData.selectedText()); 4047 proposedAPIItems.append(WebContextMenuItem::create(coreItem)); 4048 } 4049 4050 Vector<RefPtr<WebContextMenuItem>> clientItems; 4051 bool useProposedItems = true; 4052 4053 if (askClientToChangeMenu && m_contextMenuClient->getContextMenuFromProposedMenu(*this, proposedAPIItems, clientItems, contextMenuContextData.webHitTestResultData(), m_process->transformHandlesToObjects(userData.object()).get())) 4040 4054 useProposedItems = false; 4041 4055 4042 const Vector< WebContextMenuItemData>& itemsToShow = useProposedItems ? proposedItems : items;4056 const Vector<RefPtr<WebContextMenuItem>>& itemsToShow = useProposedItems ? proposedAPIItems : clientItems; 4043 4057 if (!m_contextMenuClient->showContextMenu(*this, menuLocation, itemsToShow)) 4044 4058 m_activeContextMenu->showContextMenu(menuLocation, itemsToShow, contextMenuContextData); -
trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp
r182301 r182303 48 48 } 49 49 50 void WebContextMenuProxyEfl::showContextMenu(const WebCore::IntPoint&, const Vector< WebContextMenuItemData>&, const ContextMenuContextData&)50 void WebContextMenuProxyEfl::showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&) 51 51 { 52 52 notImplemented(); -
trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h
r182301 r182303 49 49 ~WebContextMenuProxyEfl(); 50 50 51 void showContextMenu(const WebCore::IntPoint&, const Vector< WebContextMenuItemData>&, const ContextMenuContextData&);51 void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&); 52 52 void hideContextMenu(); 53 53 -
trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp
r182301 r182303 131 131 } 132 132 133 void WebContextMenuProxyGtk::populate(const Vector< WebContextMenuItemData>& items)133 void WebContextMenuProxyGtk::populate(const Vector<RefPtr<WebContextMenuItem>>& items) 134 134 { 135 135 for (size_t i = 0; i < items.size(); i++) { 136 ContextMenuItem menuitem = items.at(i) .core();136 ContextMenuItem menuitem = items.at(i)->data()->core(); 137 137 append(menuitem); 138 138 } 139 139 } 140 140 141 void WebContextMenuProxyGtk::showContextMenu(const WebCore::IntPoint& position, const Vector< WebContextMenuItemData>& items, const ContextMenuContextData&)141 void WebContextMenuProxyGtk::showContextMenu(const WebCore::IntPoint& position, const Vector<RefPtr<WebContextMenuItem>>& items, const ContextMenuContextData&) 142 142 { 143 143 if (!items.isEmpty()) -
trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h
r182301 r182303 47 47 ~WebContextMenuProxyGtk(); 48 48 49 virtual void showContextMenu(const WebCore::IntPoint&, const Vector< WebContextMenuItemData>&, const ContextMenuContextData&);49 virtual void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&); 50 50 virtual void hideContextMenu(); 51 51 … … 57 57 58 58 void append(WebCore::ContextMenuItem&); 59 void populate(const Vector< WebContextMenuItemData>&);59 void populate(const Vector<RefPtr<WebContextMenuItem>>&); 60 60 static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*); 61 61 -
trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h
r182301 r182303 39 39 40 40 class ShareableBitmap; 41 class WebContextMenuItemData; 41 42 class WebPageProxy; 42 43 … … 49 50 ~WebContextMenuProxyMac(); 50 51 51 virtual void showContextMenu(const WebCore::IntPoint&, const Vector< WebContextMenuItemData>&, const ContextMenuContextData&) override;52 virtual void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&) override; 52 53 53 54 virtual void hideContextMenu() override; … … 66 67 WebContextMenuProxyMac(WKView*, WebPageProxy*); 67 68 68 void populate(const Vector< WebContextMenuItemData>&, const ContextMenuContextData&);69 void populate(const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&); 69 70 70 71 #if ENABLE(SERVICE_CONTROLS) -
trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm
r182301 r182303 35 35 #import "ShareableBitmap.h" 36 36 #import "StringUtilities.h" 37 #import "WebContextMenuItem.h" 37 38 #import "WebContextMenuItemData.h" 38 39 #import "WebProcessProxy.h" … … 141 142 item.setUserData([static_cast<WKUserDataWrapper *>(representedObject) userData]); 142 143 } 143 144 144 145 _menuProxy->contextMenuItemSelected(item); 145 146 } … … 293 294 } 294 295 295 static Vector<RetainPtr<NSMenuItem>> nsMenuItemVector(const Vector<WebContextMenuItemData>& items) 296 template<typename ItemType> static Vector<RetainPtr<NSMenuItem>> nsMenuItemVector(const Vector<ItemType>&); 297 298 static RetainPtr<NSMenuItem> nsMenuItem(const WebContextMenuItemData& item) 299 { 300 switch (item.type()) { 301 case ActionType: 302 case CheckableActionType: { 303 NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(item.title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@""]; 304 [menuItem setTag:item.action()]; 305 [menuItem setEnabled:item.enabled()]; 306 [menuItem setState:item.checked() ? NSOnState : NSOffState]; 307 308 if (std::function<void ()> selectionHandler = item.selectionHandler()) { 309 WKSelectionHandlerWrapper *wrapper = [[WKSelectionHandlerWrapper alloc] initWithSelectionHandler:selectionHandler]; 310 [menuItem setRepresentedObject:wrapper]; 311 [wrapper release]; 312 } else if (item.userData()) { 313 WKUserDataWrapper *wrapper = [[WKUserDataWrapper alloc] initWithUserData:item.userData()]; 314 [menuItem setRepresentedObject:wrapper]; 315 [wrapper release]; 316 } 317 318 return adoptNS(menuItem); 319 break; 320 } 321 case SeparatorType: 322 return [NSMenuItem separatorItem]; 323 break; 324 case SubmenuType: { 325 NSMenu* menu = [[NSMenu alloc] initWithTitle:nsStringFromWebCoreString(item.title())]; 326 [menu setAutoenablesItems:NO]; 327 populateNSMenu(menu, nsMenuItemVector(item.submenu())); 328 329 NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(item.title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@""]; 330 [menuItem setEnabled:item.enabled()]; 331 [menuItem setSubmenu:menu]; 332 [menu release]; 333 334 return adoptNS(menuItem); 335 } 336 default: 337 ASSERT_NOT_REACHED(); 338 } 339 } 340 341 static RetainPtr<NSMenuItem> nsMenuItem(const RefPtr<WebContextMenuItem>& item) 342 { 343 if (NativeContextMenuItem* nativeItem = item->nativeContextMenuItem()) 344 return nativeItem->nsMenuItem(); 345 346 ASSERT(item->data()); 347 return nsMenuItem(*item->data()); 348 } 349 350 template<typename ItemType> static Vector<RetainPtr<NSMenuItem>> nsMenuItemVector(const Vector<ItemType>& items) 296 351 { 297 352 Vector<RetainPtr<NSMenuItem>> result; … … 299 354 unsigned size = items.size(); 300 355 result.reserveCapacity(size); 301 for (unsigned i = 0; i < size; i++) { 302 switch (items[i].type()) { 303 case ActionType: 304 case CheckableActionType: { 305 NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(items[i].title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@""]; 306 [menuItem setTag:items[i].action()]; 307 [menuItem setEnabled:items[i].enabled()]; 308 [menuItem setState:items[i].checked() ? NSOnState : NSOffState]; 309 310 if (std::function<void ()> selectionHandler = items[i].selectionHandler()) { 311 WKSelectionHandlerWrapper *wrapper = [[WKSelectionHandlerWrapper alloc] initWithSelectionHandler:selectionHandler]; 312 [menuItem setRepresentedObject:wrapper]; 313 [wrapper release]; 314 } else if (items[i].userData()) { 315 WKUserDataWrapper *wrapper = [[WKUserDataWrapper alloc] initWithUserData:items[i].userData()]; 316 [menuItem setRepresentedObject:wrapper]; 317 [wrapper release]; 318 } 319 320 result.append(adoptNS(menuItem)); 321 break; 322 } 323 case SeparatorType: 324 result.append([NSMenuItem separatorItem]); 325 break; 326 case SubmenuType: { 327 NSMenu* menu = [[NSMenu alloc] initWithTitle:nsStringFromWebCoreString(items[i].title())]; 328 [menu setAutoenablesItems:NO]; 329 populateNSMenu(menu, nsMenuItemVector(items[i].submenu())); 330 331 NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(items[i].title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@""]; 332 [menuItem setEnabled:items[i].enabled()]; 333 [menuItem setSubmenu:menu]; 334 [menu release]; 335 336 result.append(adoptNS(menuItem)); 337 338 break; 339 } 340 default: 341 ASSERT_NOT_REACHED(); 342 } 343 } 356 for (auto& item : items) 357 result.uncheckedAppend(nsMenuItem(item)); 344 358 345 359 WKMenuTarget* target = [WKMenuTarget sharedMenuTarget]; 346 for ( unsigned i = 0; i < size; ++i)347 [ result[i].get() setTarget:target];360 for (auto& item : result) 361 [item.get() setTarget:target]; 348 362 349 363 return result; … … 422 436 #endif 423 437 424 void WebContextMenuProxyMac::populate(const Vector< WebContextMenuItemData>& items, const ContextMenuContextData& context)438 void WebContextMenuProxyMac::populate(const Vector<RefPtr<WebContextMenuItem>>& items, const ContextMenuContextData& context) 425 439 { 426 440 #if ENABLE(SERVICE_CONTROLS) … … 443 457 } 444 458 445 void WebContextMenuProxyMac::showContextMenu(const IntPoint& menuLocation, const Vector< WebContextMenuItemData>& items, const ContextMenuContextData& context)459 void WebContextMenuProxyMac::showContextMenu(const IntPoint& menuLocation, const Vector<RefPtr<WebContextMenuItem>>& items, const ContextMenuContextData& context) 446 460 { 447 461 #if ENABLE(SERVICE_CONTROLS) -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r182301 r182303 945 945 5163199416289A6000E22F00 /* NetworkProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51ACC9341628064800342550 /* NetworkProcessMessageReceiver.cpp */; }; 946 946 5163199516289A6300E22F00 /* NetworkProcessMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 51ACC9351628064800342550 /* NetworkProcessMessages.h */; }; 947 5163EA451ACC7AE50012D1E4 /* NativeContextMenuItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */; }; 947 948 51654EFD184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51654EFB184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp */; }; 948 949 51654EFE184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 51654EFC184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h */; }; … … 3132 3133 516311861858446600534647 /* WebCrossThreadCopier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCrossThreadCopier.h; sourceTree = "<group>"; }; 3133 3134 516319911628980A00E22F00 /* NetworkProcessProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkProcessProxyMac.mm; path = mac/NetworkProcessProxyMac.mm; sourceTree = "<group>"; }; 3135 5163EA3F1ACC74820012D1E4 /* NativeContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeContextMenuItem.h; sourceTree = "<group>"; }; 3136 5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NativeContextMenuItem.mm; sourceTree = "<group>"; }; 3134 3137 51654EFB184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueIDBDatabaseBackingStoreSQLite.cpp; sourceTree = "<group>"; }; 3135 3138 51654EFC184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueIDBDatabaseBackingStoreSQLite.h; sourceTree = "<group>"; }; … … 4737 4740 1A92DC1212F8BAB90017AF65 /* LayerTreeContext.cpp */, 4738 4741 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */, 4742 5163EA3F1ACC74820012D1E4 /* NativeContextMenuItem.h */, 4739 4743 C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */, 4740 4744 31EA25D3134F78D6005B1452 /* NativeWebMouseEvent.h */, … … 6530 6534 CDC382F9172116D3008A2FC3 /* CookieStorageShimLibrary.cpp */, 6531 6535 CDC3830B172121CE008A2FC3 /* CookieStorageShimLibrary.h */, 6536 5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */, 6532 6537 C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */, 6533 6538 31EA25D0134F78B2005B1452 /* NativeWebMouseEventMac.mm */, … … 9992 9997 BC4A6296147313A0006C681A /* WKConnectionRef.cpp in Sources */, 9993 9998 0FCB4E4D18BBE044000FCFC9 /* WKContentView.mm in Sources */, 9999 5163EA451ACC7AE50012D1E4 /* NativeContextMenuItem.mm in Sources */, 9994 10000 0FCB4E6D18BBF26A000FCFC9 /* WKContentViewInteraction.mm in Sources */, 9995 10001 BCB9E24C1120E15C00A137E0 /* WKContext.cpp in Sources */, -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h
r182301 r182303 61 61 #if PLATFORM(COCOA) 62 62 virtual void searchWithSpotlight() override; 63 virtual WebCore::ContextMenuItem shareSelectedTextMenuItem(const String&) override; 63 64 #endif 64 65 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm
r182301 r182303 95 95 } 96 96 97 ContextMenuItem WebContextMenuClient::shareSelectedTextMenuItem(const String& selectedText) 98 { 99 return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString()); 100 } 101 97 102 } // namespace WebKit 98 103
Note:
See TracChangeset
for help on using the changeset viewer.