Changeset 191194 in webkit


Ignore:
Timestamp:
Oct 16, 2015 12:52:42 PM (9 years ago)
Author:
andersca@apple.com
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.

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r191183 r191194  
     12015-10-16  Anders Carlsson  <andersca@apple.com>
     2
     3        Move more code to WebContextMenuProxyMac
     4        https://bugs.webkit.org/show_bug.cgi?id=150240
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/WebContextMenuProxy.h:
     9        * UIProcess/WebPageProxy.cpp:
     10        (WebKit::WebPageProxy::internalShowContextMenu):
     11        * UIProcess/WebPageProxy.h:
     12        (WebKit::WebPageProxy::contextMenuClient):
     13        * UIProcess/mac/WebContextMenuProxyMac.h:
     14        * UIProcess/mac/WebContextMenuProxyMac.mm:
     15        (WebKit::WebContextMenuProxyMac::initializeShareMenuItem):
     16        (WebKit::WebContextMenuProxyMac::showContextMenu):
     17        * UIProcess/mac/WebPageProxyMac.mm:
     18        (WebKit::WebPageProxy::platformInitializeShareMenuItem): Deleted.
     19
    1202015-10-16  Tim Horton  <timothy_horton@apple.com>
    221
  • trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h

    r191146 r191194  
    4141    virtual ~WebContextMenuProxy();
    4242
    43     virtual void showContextMenu(const Vector<RefPtr<WebContextMenuItem>>&) = 0;
     43    virtual void showContextMenu() = 0;
    4444    virtual void hideContextMenu() = 0;
    4545    virtual void cancelTracking() { }
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r191181 r191194  
    42104210    m_process->responsivenessTimer()->stop();
    42114211
    4212     // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
    4213     bool askClientToChangeMenu = true;
    4214 #if ENABLE(SERVICE_CONTROLS)
    4215     if (contextMenuContextData.isServicesMenu() || contextMenuContextData.controlledImage())
    4216         askClientToChangeMenu = false;
    4217 #endif
    4218 
    4219     Vector<RefPtr<WebContextMenuItem>> proposedAPIItems;
    4220     for (auto& item : contextMenuContextData.menuItems()) {
    4221         if (item.action() != ContextMenuItemTagShareMenu) {
    4222             proposedAPIItems.append(WebContextMenuItem::create(item));
    4223             continue;
    4224         }
    4225 
    4226         ContextMenuItem coreItem = platformInitializeShareMenuItem(contextMenuContextData);
    4227         if (!coreItem.isNull())
    4228             proposedAPIItems.append(WebContextMenuItem::create(coreItem));
    4229     }
    4230 
    4231     Vector<RefPtr<WebContextMenuItem>> clientItems;
    4232     bool useProposedItems = true;
    4233 
    4234     if (askClientToChangeMenu && m_contextMenuClient->getContextMenuFromProposedMenu(*this, proposedAPIItems, clientItems, contextMenuContextData.webHitTestResultData(), m_process->transformHandlesToObjects(userData.object()).get()))
    4235         useProposedItems = false;
    4236 
    4237     const Vector<RefPtr<WebContextMenuItem>>& itemsToShow = useProposedItems ? proposedAPIItems : clientItems;
    4238     if (!m_contextMenuClient->showContextMenu(*this, contextMenuContextData.menuLocation(), itemsToShow))
    4239         m_activeContextMenu->showContextMenu(itemsToShow);
    4240 
    4241     m_contextMenuClient->contextMenuDismissed(*this);
    4242 }
    4243 
    4244 #if !ENABLE(SERVICE_CONTROLS)
    4245 ContextMenuItem WebPageProxy::platformInitializeShareMenuItem(const ContextMenuContextData&)
    4246 {
    4247     return ContextMenuItem();
    4248 }
    4249 #endif
     4212    m_activeContextMenu->showContextMenu();
     4213}
    42504214
    42514215void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r191181 r191194  
    327327
    328328#if ENABLE(CONTEXT_MENUS)
     329    API::ContextMenuClient& contextMenuClient() { return *m_contextMenuClient; }
    329330    void setContextMenuClient(std::unique_ptr<API::ContextMenuClient>);
    330331#endif
     
    12651266    void showContextMenu(const ContextMenuContextData&, const UserData&);
    12661267    void internalShowContextMenu(const ContextMenuContextData&, const UserData&);
    1267     WebCore::ContextMenuItem platformInitializeShareMenuItem(const ContextMenuContextData&);
    12681268#endif
    12691269
  • trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h

    r191144 r191194  
    5151    ~WebContextMenuProxyMac();
    5252
    53     virtual void showContextMenu(const Vector<RefPtr<WebContextMenuItem>>&) override;
     53    virtual void showContextMenu() override;
    5454
    5555    virtual void hideContextMenu() override;
     
    7272#if ENABLE(SERVICE_CONTROLS)
    7373    void setupServicesMenu(const ContextMenuContextData&);
     74    WebCore::ContextMenuItem shareMenuItem();
    7475#endif
    7576
  • trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm

    r191181 r191194  
    2929#if PLATFORM(MAC)
    3030
     31#import "APIContextMenuClient.h"
    3132#import "DataReference.h"
    3233#import "MenuUtilities.h"
     
    252253
    253254#if ENABLE(SERVICE_CONTROLS)
    254 
    255255void WebContextMenuProxyMac::setupServicesMenu(const ContextMenuContextData& context)
    256256{
     
    322322    m_servicesMenu = nullptr;
    323323}
     324
     325ContextMenuItem WebContextMenuProxyMac::shareMenuItem()
     326{
     327    const WebHitTestResultData& hitTestData = m_context.webHitTestResultData();
     328
     329    URL absoluteLinkURL;
     330    if (!hitTestData.absoluteLinkURL.isEmpty())
     331        absoluteLinkURL = URL(ParsedURLString, hitTestData.absoluteLinkURL);
     332
     333    URL downloadableMediaURL;
     334    if (!hitTestData.absoluteMediaURL.isEmpty() && hitTestData.isDownloadableMedia)
     335        downloadableMediaURL = URL(ParsedURLString, hitTestData.absoluteMediaURL);
     336
     337    RetainPtr<NSImage> image;
     338    if (hitTestData.imageSharedMemory && hitTestData.imageSize)
     339        image = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:(unsigned char*)hitTestData.imageSharedMemory->data() length:hitTestData.imageSize]]);
     340
     341    ContextMenuItem item = ContextMenuItem::shareMenuItem(absoluteLinkURL, downloadableMediaURL, image.get(), m_context.selectedText());
     342
     343    NSMenuItem *nsItem = item.platformDescription();
     344
     345    NSSharingServicePicker *sharingServicePicker = [nsItem representedObject];
     346    sharingServicePicker.delegate = [WKSharingServicePickerDelegate sharedSharingServicePickerDelegate];
     347
     348    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:NO];
     349    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:NO];
     350    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:this];
     351
     352    // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
     353    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nil];
     354
     355    return item;
     356}
    324357#endif
    325358
     
    346379}
    347380
    348 void WebContextMenuProxyMac::showContextMenu(const Vector<RefPtr<WebContextMenuItem>>& items)
    349 {
     381void WebContextMenuProxyMac::showContextMenu()
     382{
     383    // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
     384    bool askClientToChangeMenu = true;
     385#if ENABLE(SERVICE_CONTROLS)
     386    if (m_context.isServicesMenu() || m_context.controlledImage())
     387        askClientToChangeMenu = false;
     388#endif
     389
     390    Vector<RefPtr<WebContextMenuItem>> proposedAPIItems;
     391    for (auto& item : m_context.menuItems()) {
     392        if (item.action() != ContextMenuItemTagShareMenu) {
     393            proposedAPIItems.append(WebContextMenuItem::create(item));
     394            continue;
     395        }
     396
     397#if ENABLE(SERVICE_CONTROLS)
     398        proposedAPIItems.append(WebContextMenuItem::create(shareMenuItem()));
     399#endif
     400    }
     401
     402    Vector<RefPtr<WebContextMenuItem>> clientItems;
     403    bool useProposedItems = true;
     404
     405    if (askClientToChangeMenu && m_page.contextMenuClient().getContextMenuFromProposedMenu(m_page, proposedAPIItems, clientItems, m_context.webHitTestResultData(), m_page.process().transformHandlesToObjects(m_userData.object()).get()))
     406        useProposedItems = false;
     407
     408    const Vector<RefPtr<WebContextMenuItem>>& items = useProposedItems ? proposedAPIItems : clientItems;
     409
    350410#if ENABLE(SERVICE_CONTROLS)
    351411    if (items.isEmpty() && !m_context.isServicesMenu())
  • trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm

    r191181 r191194  
    739739}
    740740
    741 #if ENABLE(SERVICE_CONTROLS)
    742 ContextMenuItem WebPageProxy::platformInitializeShareMenuItem(const ContextMenuContextData& contextMenuContextData)
    743 {
    744     const WebHitTestResultData& hitTestData = contextMenuContextData.webHitTestResultData();
    745 
    746     URL absoluteLinkURL;
    747     if (!hitTestData.absoluteLinkURL.isEmpty())
    748         absoluteLinkURL = URL(ParsedURLString, hitTestData.absoluteLinkURL);
    749 
    750     URL downloadableMediaURL;
    751     if (!hitTestData.absoluteMediaURL.isEmpty() && hitTestData.isDownloadableMedia)
    752         downloadableMediaURL = URL(ParsedURLString, hitTestData.absoluteMediaURL);
    753 
    754     RetainPtr<NSImage> image;
    755     if (hitTestData.imageSharedMemory && hitTestData.imageSize)
    756         image = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:(unsigned char*)hitTestData.imageSharedMemory->data() length:hitTestData.imageSize]]);
    757 
    758     ContextMenuItem item = ContextMenuItem::shareMenuItem(absoluteLinkURL, downloadableMediaURL, image.get(), contextMenuContextData.selectedText());
    759 
    760     NSMenuItem *nsItem = item.platformDescription();
    761 
    762     NSSharingServicePicker *sharingServicePicker = [nsItem representedObject];
    763     sharingServicePicker.delegate = [WKSharingServicePickerDelegate sharedSharingServicePickerDelegate];
    764    
    765     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:NO];
    766     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:NO];
    767     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:static_cast<WebContextMenuProxyMac*>(m_activeContextMenu.get())];
    768 
    769     // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
    770     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nil];
    771 
    772     return item;
    773 }
    774 #endif
    775 
    776741} // namespace WebKit
    777742
Note: See TracChangeset for help on using the changeset viewer.