Title: [226602] trunk/Source/WebKit
Revision
226602
Author
[email protected]
Date
2018-01-08 17:53:29 -0800 (Mon, 08 Jan 2018)

Log Message

Pass around Vector<Ref<WebContextMenuItem>> instead of WKArrayRef or Vector<WebContextMenuItemData>
https://bugs.webkit.org/show_bug.cgi?id=181419

Reviewed by Tim Horton.

Passing a WKArrayRef to an API object is messy and was preventing me from moving things around and making ObjC SPI.
No change in behavior.  Just using different layering abstractions for the same data.

* UIProcess/API/C/WKContextMenuListener.cpp:
(WKContextMenuListenerUseContextMenuItems):
* UIProcess/WebContextMenuListenerProxy.cpp:
(WebKit::WebContextMenuListenerProxy::useContextMenuItems):
* UIProcess/WebContextMenuListenerProxy.h:
* UIProcess/WebContextMenuProxy.h:
* UIProcess/mac/WebContextMenuProxyMac.h:
* UIProcess/mac/WebContextMenuProxyMac.mm:
(WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
(WebKit::WebContextMenuProxyMac::showContextMenu):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (226601 => 226602)


--- trunk/Source/WebKit/ChangeLog	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/ChangeLog	2018-01-09 01:53:29 UTC (rev 226602)
@@ -1,3 +1,24 @@
+2018-01-08  Alex Christensen  <[email protected]>
+
+        Pass around Vector<Ref<WebContextMenuItem>> instead of WKArrayRef or Vector<WebContextMenuItemData>
+        https://bugs.webkit.org/show_bug.cgi?id=181419
+
+        Reviewed by Tim Horton.
+
+        Passing a WKArrayRef to an API object is messy and was preventing me from moving things around and making ObjC SPI.
+        No change in behavior.  Just using different layering abstractions for the same data.
+
+        * UIProcess/API/C/WKContextMenuListener.cpp:
+        (WKContextMenuListenerUseContextMenuItems):
+        * UIProcess/WebContextMenuListenerProxy.cpp:
+        (WebKit::WebContextMenuListenerProxy::useContextMenuItems):
+        * UIProcess/WebContextMenuListenerProxy.h:
+        * UIProcess/WebContextMenuProxy.h:
+        * UIProcess/mac/WebContextMenuProxyMac.h:
+        * UIProcess/mac/WebContextMenuProxyMac.mm:
+        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
+        (WebKit::WebContextMenuProxyMac::showContextMenu):
+
 2018-01-08  John Wilander  <[email protected]>
 
         Storage Access API: Remove access for all frames under a page when the page is closed

Modified: trunk/Source/WebKit/UIProcess/API/C/WKContextMenuListener.cpp (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/API/C/WKContextMenuListener.cpp	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/API/C/WKContextMenuListener.cpp	2018-01-09 01:53:29 UTC (rev 226602)
@@ -26,7 +26,9 @@
 #include "config.h"
 #include "WKContextMenuListener.h"
 
+#include "APIArray.h"
 #include "WKAPICast.h"
+#include "WebContextMenuItem.h"
 #include "WebContextMenuListenerProxy.h"
 
 using namespace WebKit;
@@ -40,10 +42,22 @@
 #endif
 }
 
-void WKContextMenuListenerUseContextMenuItems(WKContextMenuListenerRef listenerRef, WKArrayRef items)
+void WKContextMenuListenerUseContextMenuItems(WKContextMenuListenerRef listenerRef, WKArrayRef arrayRef)
 {
 #if ENABLE(CONTEXT_MENUS)
-    toImpl(listenerRef)->useContextMenuItems(items);
+    RefPtr<API::Array> array = toImpl(arrayRef);
+    size_t newSize = array ? array->size() : 0;
+    Vector<Ref<WebContextMenuItem>> items;
+    items.reserveInitialCapacity(newSize);
+    for (size_t i = 0; i < newSize; ++i) {
+        WebContextMenuItem* item = array->at<WebContextMenuItem>(i);
+        if (!item)
+            continue;
+        
+        items.uncheckedAppend(*item);
+    }
+
+    toImpl(listenerRef)->useContextMenuItems(WTFMove(items));
 #else
     UNUSED_PARAM(listenerRef);
     UNUSED_PARAM(items);

Modified: trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.cpp (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.cpp	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.cpp	2018-01-09 01:53:29 UTC (rev 226602)
@@ -47,24 +47,12 @@
 {
 }
 
-void WebContextMenuListenerProxy::useContextMenuItems(WKArrayRef items)
+void WebContextMenuListenerProxy::useContextMenuItems(Vector<Ref<WebContextMenuItem>>&& items)
 {
     if (!m_contextMenuMac)
         return;
 
-    RefPtr<API::Array> array = toImpl(items);
-    size_t newSize = array ? array->size() : 0;
-    Vector<WebContextMenuItemData> dataItems;
-    dataItems.reserveInitialCapacity(newSize);
-    for (size_t i = 0; i < newSize; ++i) {
-        WebContextMenuItem* item = array->at<WebContextMenuItem>(i);
-        if (!item)
-            continue;
-
-        dataItems.uncheckedAppend(item->data());
-    }
-
-    m_contextMenuMac->showContextMenuWithItems(WTFMove(dataItems));
+    m_contextMenuMac->showContextMenuWithItems(WTFMove(items));
 }
 
 void WebContextMenuListenerProxy::invalidate()

Modified: trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.h (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.h	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/WebContextMenuListenerProxy.h	2018-01-09 01:53:29 UTC (rev 226602)
@@ -44,7 +44,7 @@
 
     virtual ~WebContextMenuListenerProxy();
 
-    void useContextMenuItems(WKArrayRef items);
+    void useContextMenuItems(Vector<Ref<WebContextMenuItem>>&&);
 
     void invalidate();
 private:

Modified: trunk/Source/WebKit/UIProcess/WebContextMenuProxy.h (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/WebContextMenuProxy.h	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/WebContextMenuProxy.h	2018-01-09 01:53:29 UTC (rev 226602)
@@ -41,7 +41,7 @@
 
     virtual void show() = 0;
 
-    virtual void showContextMenuWithItems(Vector<WebContextMenuItemData>&&) = 0;
+    virtual void showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>&) = 0;
 
 protected:
     WebContextMenuProxy(ContextMenuContextData&&, const UserData&);

Modified: trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp	2018-01-09 01:53:29 UTC (rev 226602)
@@ -175,7 +175,7 @@
                    event ? event->button.button : 3, event ? event->button.time : GDK_CURRENT_TIME);
 }
 
-void WebContextMenuProxyGtk::showContextMenuWithItems(Vector<WebContextMenuItemData>&&)
+void WebContextMenuProxyGtk::showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>&)
 {
 }
 

Modified: trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.h (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.h	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.h	2018-01-09 01:53:29 UTC (rev 226602)
@@ -55,7 +55,7 @@
 private:
     WebContextMenuProxyGtk(GtkWidget*, WebPageProxy&, ContextMenuContextData&&, const UserData&);
     void show() override;
-    void showContextMenuWithItems(Vector<WebContextMenuItemData>&&) override;
+    void showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>&) override;
     void append(GMenu*, const WebContextMenuItemGlib&);
     GRefPtr<GMenu> buildMenu(const Vector<WebContextMenuItemGlib>&);
     void populate(const Vector<Ref<WebContextMenuItem>>&);

Modified: trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.h (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.h	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.h	2018-01-09 01:53:29 UTC (rev 226602)
@@ -54,7 +54,7 @@
     ~WebContextMenuProxyMac();
 
     void contextMenuItemSelected(const WebContextMenuItemData&);
-    void showContextMenuWithItems(Vector<WebContextMenuItemData>&&) override;
+    void showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>&) override;
 
 #if ENABLE(SERVICE_CONTROLS)
     void clearServicesMenu();

Modified: trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm	2018-01-09 01:53:29 UTC (rev 226602)
@@ -451,9 +451,14 @@
     }
 }
 
-void WebContextMenuProxyMac::showContextMenuWithItems(Vector<WebContextMenuItemData>&& items)
+void WebContextMenuProxyMac::showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>& items)
 {
-    auto menu = createContextMenuFromItems(items);
+    Vector<WebContextMenuItemData> data;
+    data.reserveInitialCapacity(items.size());
+    for (auto& item : items)
+        data.uncheckedAppend(item->data());
+    
+    auto menu = createContextMenuFromItems(data);
     [[WKMenuTarget sharedMenuTarget] setMenuProxy:this];
     m_menu = m_page.contextMenuClient().menuFromProposedMenu(m_page, menu.get(), m_context.webHitTestResultData(), m_userData.object());
 
@@ -493,14 +498,12 @@
     if (m_page.contextMenuClient().showContextMenu(m_page, m_context.menuLocation(), useProposedItems ? proposedAPIItems : clientItems))
         return;
 
-    Vector<WebContextMenuItemData> items;
-    for (auto& item : (useProposedItems ? proposedAPIItems : clientItems))
-        items.append(item->data());
-
+    auto&& items = WTFMove(useProposedItems ? proposedAPIItems : clientItems);
+    
     if (items.isEmpty())
         return;
 
-    showContextMenuWithItems(WTFMove(items));
+    showContextMenuWithItems(items);
 }
 
 NSWindow *WebContextMenuProxyMac::window() const

Modified: trunk/Source/WebKit/UIProcess/wpe/WebContextMenuProxyWPE.h (226601 => 226602)


--- trunk/Source/WebKit/UIProcess/wpe/WebContextMenuProxyWPE.h	2018-01-09 01:21:04 UTC (rev 226601)
+++ trunk/Source/WebKit/UIProcess/wpe/WebContextMenuProxyWPE.h	2018-01-09 01:53:29 UTC (rev 226602)
@@ -36,7 +36,7 @@
         return adoptRef(*new WebContextMenuProxyWPE(WTFMove(context), userData));
     }
 
-    void showContextMenuWithItems(Vector<WebContextMenuItemData>&&) final { }
+    void showContextMenuWithItems(const Vector<Ref<WebContextMenuItem>>&) final { }
     void show() final { };
 
 private:
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to