Title: [178892] trunk/Source/WebKit2
Revision
178892
Author
carlo...@webkit.org
Date
2015-01-22 00:30:39 -0800 (Thu, 22 Jan 2015)

Log Message

[GTK] Use API::ContextMenuClient and API::InjectedBundle::PageContextMenuClient classes
https://bugs.webkit.org/show_bug.cgi?id=138467

Reviewed by Gustavo Noronha Silva.

* UIProcess/API/gtk/WebKitContextMenu.cpp:
(webkitContextMenuPopulate): Add a version that receives a Vector<WebContextMenuItemData>&.
(webkitContextMenuCreate): Change it to receive a const
Vector<WebContextMenuItemData>& instead of a API::Array* and also
add a another version that receives const Vector<ContextMenuItem>&.
* UIProcess/API/gtk/WebKitContextMenuClient.cpp:
(attachContextMenuClientToView): Use a class derived from
API::ContextMenuClient to implement the context menu client.
(getContextMenuFromProposedMenu): Deleted.
* UIProcess/API/gtk/WebKitContextMenuItem.cpp:
(webkitContextMenuItemCreate): Change it to receive a const
WebContextMenuItemData& and added another version that receives a
const ContextMenuItem&.
* UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
* UIProcess/API/gtk/WebKitContextMenuPrivate.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewPopulateContextMenu): Remove the creation of a
WebHitTestResult::Data, since it receives it now as parameter.
* UIProcess/API/gtk/WebKitWebViewPrivate.h:
* WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp:
(webkitWebHitTestResultCreate): Change it to receive a const
HitTestResult& instead of const InjectedBundleHitTestResult&.
* WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h:
* WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
(webkitWebPageCreate): Use a class derived from
API::InjectedBundle::PageContextMenuClient to implement the
context menu client.
(getContextMenuFromDefaultMenu): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (178891 => 178892)


--- trunk/Source/WebKit2/ChangeLog	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/ChangeLog	2015-01-22 08:30:39 UTC (rev 178892)
@@ -1,3 +1,39 @@
+2014-11-06  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Use API::ContextMenuClient and API::InjectedBundle::PageContextMenuClient classes
+        https://bugs.webkit.org/show_bug.cgi?id=138467
+
+        Reviewed by Gustavo Noronha Silva.
+
+        * UIProcess/API/gtk/WebKitContextMenu.cpp:
+        (webkitContextMenuPopulate): Add a version that receives a Vector<WebContextMenuItemData>&.
+        (webkitContextMenuCreate): Change it to receive a const
+        Vector<WebContextMenuItemData>& instead of a API::Array* and also
+        add a another version that receives const Vector<ContextMenuItem>&.
+        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
+        (attachContextMenuClientToView): Use a class derived from
+        API::ContextMenuClient to implement the context menu client.
+        (getContextMenuFromProposedMenu): Deleted.
+        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
+        (webkitContextMenuItemCreate): Change it to receive a const
+        WebContextMenuItemData& and added another version that receives a
+        const ContextMenuItem&.
+        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
+        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewPopulateContextMenu): Remove the creation of a
+        WebHitTestResult::Data, since it receives it now as parameter.
+        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
+        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp:
+        (webkitWebHitTestResultCreate): Change it to receive a const
+        HitTestResult& instead of const InjectedBundleHitTestResult&.
+        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h:
+        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
+        (webkitWebPageCreate): Use a class derived from
+        API::InjectedBundle::PageContextMenuClient to implement the
+        context menu client.
+        (getContextMenuFromDefaultMenu): Deleted.
+
 2015-01-22  Carlos Garcia Campos  <cgar...@igalia.com>
 
         Unreviewed. Try to fix Debug build after r178889.

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -76,18 +76,34 @@
     }
 }
 
-WebKitContextMenu* webkitContextMenuCreate(API::Array* items)
+void webkitContextMenuPopulate(WebKitContextMenu* menu, Vector<WebContextMenuItemData>& contextMenuItems)
 {
+    for (GList* item = menu->priv->items; item; item = g_list_next(item)) {
+        WebKitContextMenuItem* menuItem = WEBKIT_CONTEXT_MENU_ITEM(item->data);
+        contextMenuItems.append(WebContextMenuItemData(ContextMenuItem(webkitContextMenuItemRelease(menuItem))));
+    }
+}
+
+WebKitContextMenu* webkitContextMenuCreate(const Vector<WebContextMenuItemData>& items)
+{
     WebKitContextMenu* menu = webkit_context_menu_new();
-    for (size_t i = 0; i < items->size(); ++i) {
-        WebContextMenuItem* item = static_cast<WebContextMenuItem*>(items->at(i));
+    for (const auto& item : items)
         webkit_context_menu_prepend(menu, webkitContextMenuItemCreate(item));
-    }
     menu->priv->items = g_list_reverse(menu->priv->items);
 
     return menu;
 }
 
+WebKitContextMenu* webkitContextMenuCreate(const Vector<ContextMenuItem>& items)
+{
+    WebKitContextMenu* menu = webkit_context_menu_new();
+    for (const auto& item : items)
+        webkit_context_menu_prepend(menu, webkitContextMenuItemCreate(item));
+    menu->priv->items = g_list_reverse(menu->priv->items);
+
+    return menu;
+}
+
 void webkitContextMenuSetParentItem(WebKitContextMenu* menu, WebKitContextMenuItem* item)
 {
     menu->priv->parentItem = item;

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuClient.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -20,38 +20,38 @@
 #include "config.h"
 #include "WebKitContextMenuClient.h"
 
-#include "WebKitPrivate.h"
+#include "APIContextMenuClient.h"
 #include "WebKitWebViewBasePrivate.h"
 #include "WebKitWebViewPrivate.h"
 
 using namespace WebKit;
 
-static void getContextMenuFromProposedMenu(WKPageRef, WKArrayRef proposedMenu, WKArrayRef*, WKHitTestResultRef hitTestResult, WKTypeRef userData, const void* clientInfo)
-{
-    GRefPtr<GVariant> variant;
-    if (userData) {
-        ASSERT(WKGetTypeID(userData) == WKStringGetTypeID());
-        CString userDataString = toImpl(static_cast<WKStringRef>(userData))->string().utf8();
-        variant = adoptGRef(g_variant_parse(nullptr, userDataString.data(), userDataString.data() + userDataString.length(), nullptr, nullptr));
+class ContextMenuClient final: public API::ContextMenuClient {
+public:
+    explicit ContextMenuClient(WebKitWebView* webView)
+        : m_webView(webView)
+    {
     }
-    webkitWebViewPopulateContextMenu(WEBKIT_WEB_VIEW(clientInfo), toImpl(proposedMenu), toImpl(hitTestResult), variant.get());
-}
 
+private:
+    bool getContextMenuFromProposedMenu(WebPageProxy&, const Vector<WebContextMenuItemData>& proposedMenu, Vector<WebContextMenuItemData>&, const WebHitTestResult::Data& hitTestResultData, API::Object* userData) override
+    {
+        GRefPtr<GVariant> variant;
+        if (userData) {
+            ASSERT(userData->type() == API::Object::Type::String);
+            CString userDataString = static_cast<API::String*>(userData)->string().utf8();
+            variant = adoptGRef(g_variant_parse(nullptr, userDataString.data(), userDataString.data() + userDataString.length(), nullptr, nullptr));
+        }
+        webkitWebViewPopulateContextMenu(m_webView, proposedMenu, hitTestResultData, variant.get());
+        return true;
+    }
+
+    WebKitWebView* m_webView;
+};
+
 void attachContextMenuClientToView(WebKitWebView* webView)
 {
-    WKPageContextMenuClientV3 wkContextMenuClient = {
-        {
-            3, // version
-            webView, // clientInfo
-        },
-        0, // getContextMenuFromProposedMenu_deprecatedForUseWithV0
-        0, // customContextMenuItemSelected
-        0, // contextMenuDismissed
-        getContextMenuFromProposedMenu,
-        0, // showContextMenu
-        0, // hideContextMenu
-    };
-    WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
-    WKPageSetPageContextMenuClient(wkPage, &wkContextMenuClient.base);
+    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
+    page->setContextMenuClient(std::make_unique<ContextMenuClient>(webView));
 }
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -90,24 +90,31 @@
         webkitContextMenuSetParentItem(subMenu.get(), item);
 }
 
-WebKitContextMenuItem* webkitContextMenuItemCreate(WebContextMenuItem* webItem)
+WebKitContextMenuItem* webkitContextMenuItemCreate(const WebContextMenuItemData& itemData)
 {
     WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
-    WebContextMenuItemData* itemData = webItem->data();
-    item->priv->menuItem = std::make_unique<ContextMenuItem>(itemData->type(), itemData->action(), itemData->title(), itemData->enabled(), itemData->checked());
-    const Vector<WebContextMenuItemData>& subMenu = itemData->submenu();
-    if (!subMenu.size())
-        return item;
 
-    Vector<RefPtr<API::Object>> subMenuItems;
-    subMenuItems.reserveInitialCapacity(subMenu.size());
-    for (size_t i = 0; i < subMenu.size(); ++i)
-        subMenuItems.uncheckedAppend(WebContextMenuItem::create(subMenu[i]).get());
-    webkitContextMenuItemSetSubMenu(item, adoptGRef(webkitContextMenuCreate(API::Array::create(WTF::move(subMenuItems)).get())));
+    item->priv->menuItem = std::make_unique<ContextMenuItem>(itemData.type(), itemData.action(), itemData.title(), itemData.enabled(), itemData.checked());
+    const Vector<WebContextMenuItemData>& subMenu = itemData.submenu();
+    if (!subMenu.isEmpty())
+        webkitContextMenuItemSetSubMenu(item, adoptGRef(webkitContextMenuCreate(subMenu)));
 
     return item;
 }
 
+WebKitContextMenuItem* webkitContextMenuItemCreate(const ContextMenuItem& coreItem)
+{
+    WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
+
+    item->priv->menuItem = std::make_unique<ContextMenuItem>(coreItem.type(), coreItem.action(), coreItem.title(), coreItem.enabled(), coreItem.checked());
+    if (coreItem.type() == WebCore::SubmenuType) {
+        Vector<ContextMenuItem> subMenu = contextMenuItemVector(coreItem.platformSubMenu());
+        webkitContextMenuItemSetSubMenu(item, adoptGRef(webkitContextMenuCreate(subMenu)));
+    }
+
+    return item;
+}
+
 static WebKitContextMenuItem* webkitContextMenuItemCreateForGtkItem(GtkMenuItem* menuItem)
 {
     WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItemPrivate.h (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItemPrivate.h	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItemPrivate.h	2015-01-22 08:30:39 UTC (rev 178892)
@@ -20,10 +20,12 @@
 #ifndef WebKitContextMenuItemPrivate_h
 #define WebKitContextMenuItemPrivate_h
 
+#include "WebContextMenuItemData.h"
 #include "WebKitContextMenuItem.h"
 #include "WebKitPrivate.h"
 
-WebKitContextMenuItem* webkitContextMenuItemCreate(WebKit::WebContextMenuItem*);
+WebKitContextMenuItem* webkitContextMenuItemCreate(const WebKit::WebContextMenuItemData&);
+WebKitContextMenuItem* webkitContextMenuItemCreate(const WebCore::ContextMenuItem&);
 GtkMenuItem* webkitContextMenuItemRelease(WebKitContextMenuItem*);
 void webkitContextMenuItemSetSubMenuFromGtkMenu(WebKitContextMenuItem*, GtkMenu*);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuPrivate.h (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuPrivate.h	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuPrivate.h	2015-01-22 08:30:39 UTC (rev 178892)
@@ -20,11 +20,14 @@
 #ifndef WebKitContextMenuPrivate_h
 #define WebKitContextMenuPrivate_h
 
+#include "WebContextMenuItemData.h"
 #include "WebKitContextMenu.h"
 #include "WebKitPrivate.h"
 
-WebKitContextMenu* webkitContextMenuCreate(API::Array* items);
+WebKitContextMenu* webkitContextMenuCreate(const Vector<WebKit::WebContextMenuItemData>&);
+WebKitContextMenu* webkitContextMenuCreate(const Vector<WebCore::ContextMenuItem>&);
 void webkitContextMenuPopulate(WebKitContextMenu*, Vector<WebCore::ContextMenuItem>&);
+void webkitContextMenuPopulate(WebKitContextMenu*, Vector<WebKit::WebContextMenuItemData>&);
 void webkitContextMenuSetParentItem(WebKitContextMenu*, WebKitContextMenuItem*);
 WebKitContextMenuItem* webkitContextMenuGetParentItem(WebKitContextMenu*);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -2059,30 +2059,17 @@
     g_signal_emit(webView, signals[CONTEXT_MENU_DISMISSED], 0, NULL);
 }
 
-void webkitWebViewPopulateContextMenu(WebKitWebView* webView, API::Array* proposedMenu, WebHitTestResult* webHitTestResult, GVariant* userData)
+void webkitWebViewPopulateContextMenu(WebKitWebView* webView, const Vector<WebContextMenuItemData>& proposedMenu, const WebHitTestResult::Data& hitTestResultData, GVariant* userData)
 {
     WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(webView);
     WebContextMenuProxyGtk* contextMenuProxy = webkitWebViewBaseGetActiveContextMenuProxy(webViewBase);
     ASSERT(contextMenuProxy);
 
     GRefPtr<WebKitContextMenu> contextMenu = adoptGRef(webkitContextMenuCreate(proposedMenu));
-    if (webHitTestResult->isContentEditable())
+    if (hitTestResultData.isContentEditable)
         webkitWebViewCreateAndAppendInputMethodsMenuItem(webView, contextMenu.get());
 
-    // FIXME: we should use a custom ContextMenuClient at some point, that will receive a
-    // const WebHitTestResult::Data& that we can use directly here.
-    WebHitTestResult::Data data;
-    data.absoluteImageURL = webHitTestResult->absoluteImageURL();
-    data.absoluteLinkURL = webHitTestResult->absoluteLinkURL();
-    data.absoluteMediaURL = webHitTestResult->absoluteMediaURL();
-    data.linkLabel = webHitTestResult->linkLabel();
-    data.linkTitle = webHitTestResult->linkTitle();
-    data.isContentEditable = webHitTestResult->isContentEditable();
-    data.elementBoundingBox = webHitTestResult->elementBoundingBox();
-    data.isScrollbar = webHitTestResult->isScrollbar();
-    data.isSelected = webHitTestResult->isSelected();
-
-    GRefPtr<WebKitHitTestResult> hitTestResult = adoptGRef(webkitHitTestResultCreate(data));
+    GRefPtr<WebKitHitTestResult> hitTestResult = adoptGRef(webkitHitTestResultCreate(hitTestResultData));
     GUniquePtr<GdkEvent> contextMenuEvent(webkitWebViewBaseTakeContextMenuEvent(webViewBase));
 
     if (userData)

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h (178891 => 178892)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2015-01-22 08:30:39 UTC (rev 178892)
@@ -27,6 +27,7 @@
 #ifndef WebKitWebViewPrivate_h
 #define WebKitWebViewPrivate_h
 
+#include "WebContextMenuItemData.h"
 #include "WebHitTestResult.h"
 #include "WebImage.h"
 #include "WebKitWebView.h"
@@ -53,7 +54,7 @@
 void webkitWebViewRemoveLoadingWebResource(WebKitWebView*, uint64_t resourceIdentifier);
 bool webkitWebViewEnterFullScreen(WebKitWebView*);
 bool webkitWebViewLeaveFullScreen(WebKitWebView*);
-void webkitWebViewPopulateContextMenu(WebKitWebView*, API::Array* proposedMenu, WebKit::WebHitTestResult*, GVariant*);
+void webkitWebViewPopulateContextMenu(WebKitWebView*, const Vector<WebKit::WebContextMenuItemData>& proposedMenu, const WebKit::WebHitTestResult::Data&, GVariant*);
 void webkitWebViewSubmitFormRequest(WebKitWebView*, WebKitFormSubmissionRequest*);
 void webkitWebViewHandleAuthenticationChallenge(WebKitWebView*, WebKit::AuthenticationChallengeProxy*);
 void webkitWebViewInsecureContentDetected(WebKitWebView*, WebKitInsecureContentEvent);

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp (178891 => 178892)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -106,30 +106,36 @@
             static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
 }
 
-WebKitWebHitTestResult* webkitWebHitTestResultCreate(const InjectedBundleHitTestResult& hitTestResult)
+WebKitWebHitTestResult* webkitWebHitTestResultCreate(const HitTestResult& hitTestResult)
 {
     unsigned context = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT;
-    if (!hitTestResult.absoluteLinkURL().isEmpty())
+    String absoluteLinkURL = hitTestResult.absoluteLinkURL().string();
+    if (!absoluteLinkURL.isEmpty())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK;
-    if (!hitTestResult.absoluteImageURL().isEmpty())
+    String absoluteImageURL = hitTestResult.absoluteImageURL().string();
+    if (!absoluteImageURL.isEmpty())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE;
-    if (!hitTestResult.absoluteMediaURL().isEmpty())
+    String absoluteMediaURL = hitTestResult.absoluteMediaURL().string();
+    if (!absoluteMediaURL.isEmpty())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA;
-    if (hitTestResult.coreHitTestResult().isContentEditable())
+    if (hitTestResult.isContentEditable())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE;
-    if (hitTestResult.coreHitTestResult().scrollbar())
+    if (hitTestResult.scrollbar())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_SCROLLBAR;
     if (hitTestResult.isSelected())
         context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION;
 
+    String linkTitle = hitTestResult.titleDisplayString();
+    String linkLabel = hitTestResult.textContent();
+
     return WEBKIT_WEB_HIT_TEST_RESULT(g_object_new(WEBKIT_TYPE_WEB_HIT_TEST_RESULT,
         "context", context,
-        "link-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK ? hitTestResult.absoluteLinkURL().utf8().data() : nullptr,
-        "image-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE ? hitTestResult.absoluteImageURL().utf8().data() : nullptr,
-        "media-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA ? hitTestResult.absoluteMediaURL().utf8().data() : nullptr,
-        "link-title", !hitTestResult.linkTitle().isEmpty() ? hitTestResult.linkTitle().utf8().data() : nullptr,
-        "link-label", !hitTestResult.linkLabel().isEmpty() ? hitTestResult.linkLabel().utf8().data() : nullptr,
-        "node", kit(hitTestResult.coreHitTestResult().innerNonSharedNode()),
+        "link-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK ? absoluteLinkURL.utf8().data() : nullptr,
+        "image-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE ? absoluteImageURL.utf8().data() : nullptr,
+        "media-uri", context & WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA ? absoluteMediaURL.utf8().data() : nullptr,
+        "link-title", !linkTitle.isEmpty() ? linkTitle.utf8().data() : nullptr,
+        "link-label", !linkLabel.isEmpty() ? linkLabel.utf8().data() : nullptr,
+        "node", kit(hitTestResult.innerNonSharedNode()),
         nullptr));
 }
 

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h (178891 => 178892)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h	2015-01-22 08:30:39 UTC (rev 178892)
@@ -20,9 +20,9 @@
 #ifndef WebKitWebHitTestResultPrivate_h
 #define WebKitWebHitTestResultPrivate_h
 
-#include "InjectedBundleHitTestResult.h"
 #include "WebKitWebHitTestResult.h"
+#include <WebCore/HitTestResult.h>
 
-WebKitWebHitTestResult* webkitWebHitTestResultCreate(const WebKit::InjectedBundleHitTestResult&);
+WebKitWebHitTestResult* webkitWebHitTestResultCreate(const WebCore::HitTestResult&);
 
 #endif // WebKitWebHitTestResultPrivate_h

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp (178891 => 178892)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp	2015-01-22 08:05:45 UTC (rev 178891)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp	2015-01-22 08:30:39 UTC (rev 178892)
@@ -228,35 +228,34 @@
     WebProcess::shared().injectedBundle()->postMessage(String::fromUTF8("WebPage.DidFailLoadForResource"), API::Dictionary::create(WTF::move(message)).get());
 }
 
-static void getContextMenuFromDefaultMenu(WKBundlePageRef, WKBundleHitTestResultRef wkHitTestResult, WKArrayRef wkDefaultMenu, WKArrayRef* wkNewMenu, WKTypeRef* wkUserData, const void* clientInfo)
-{
-    GRefPtr<WebKitContextMenu> contextMenu = adoptGRef(webkitContextMenuCreate(toImpl(wkDefaultMenu)));
-    GRefPtr<WebKitWebHitTestResult> webHitTestResult = adoptGRef(webkitWebHitTestResultCreate(*toImpl(wkHitTestResult)));
-    gboolean returnValue;
-    g_signal_emit(WEBKIT_WEB_PAGE(clientInfo), signals[CONTEXT_MENU], 0, contextMenu.get(), webHitTestResult.get(), &returnValue);
-    if (GVariant* userData = webkit_context_menu_get_user_data(contextMenu.get())) {
-        GUniquePtr<gchar> dataString(g_variant_print(userData, TRUE));
-        *wkUserData = static_cast<WKTypeRef>(WKStringCreateWithUTF8CString(dataString.get()));
+class PageContextMenuClient final : public API::InjectedBundle::PageContextMenuClient {
+public:
+    explicit PageContextMenuClient(WebKitWebPage* webPage)
+        : m_webPage(webPage)
+    {
     }
 
-    if (!returnValue) {
-        WKRetain(wkDefaultMenu);
-        *wkNewMenu = wkDefaultMenu;
-        return;
-    }
+private:
+    bool getCustomMenuFromDefaultItems(WebPage&, const WebCore::HitTestResult& hitTestResult, const Vector<WebCore::ContextMenuItem>& defaultMenu, Vector<WebContextMenuItemData>& newMenu, RefPtr<API::Object>& userData) override
+    {
+        GRefPtr<WebKitContextMenu> contextMenu = adoptGRef(webkitContextMenuCreate(defaultMenu));
+        GRefPtr<WebKitWebHitTestResult> webHitTestResult = adoptGRef(webkitWebHitTestResultCreate(hitTestResult));
+        gboolean returnValue;
+        g_signal_emit(m_webPage, signals[CONTEXT_MENU], 0, contextMenu.get(), webHitTestResult.get(), &returnValue);
+        if (GVariant* variant = webkit_context_menu_get_user_data(contextMenu.get())) {
+            GUniquePtr<gchar> dataString(g_variant_print(variant, TRUE));
+            userData = API::String::create(String::fromUTF8(dataString.get()));
+        }
 
-    Vector<ContextMenuItem> contextMenuItems;
-    webkitContextMenuPopulate(contextMenu.get(), contextMenuItems);
+        if (!returnValue)
+            return false;
 
-    Vector<RefPtr<API::Object>> newMenuItems;
-    newMenuItems.reserveInitialCapacity(contextMenuItems.size());
-    for (const auto& item : contextMenuItems)
-        newMenuItems.uncheckedAppend(WebContextMenuItem::create(item));
+        webkitContextMenuPopulate(contextMenu.get(), newMenu);
+        return true;
+    }
 
-    RefPtr<API::Array> array = API::Array::create(WTF::move(newMenuItems));
-    *wkNewMenu = toAPI(array.get());
-    WKRetain(*wkNewMenu);
-}
+    WebKitWebPage* m_webPage;
+};
 
 static void webkitWebPageGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
 {
@@ -436,14 +435,7 @@
     };
     WKBundlePageSetResourceLoadClient(toAPI(webPage), &resourceLoadClient.base);
 
-    WKBundlePageContextMenuClientV0 contextMenuClient = {
-        {
-            0, // version
-            page, // clientInfo
-        },
-        getContextMenuFromDefaultMenu,
-    };
-    WKBundlePageSetContextMenuClient(toAPI(webPage), &contextMenuClient.base);
+    webPage->setInjectedBundleContextMenuClient(std::make_unique<PageContextMenuClient>(page));
 
     return page;
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to