Diff
Modified: trunk/Source/WebKit2/ChangeLog (191401 => 191402)
--- trunk/Source/WebKit2/ChangeLog 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/ChangeLog 2015-10-21 21:26:41 UTC (rev 191402)
@@ -1,5 +1,38 @@
2015-10-21 Anders Carlsson <ander...@apple.com>
+ WebContextMenuProxy doesn't have to be ref-counted
+ https://bugs.webkit.org/show_bug.cgi?id=150415
+
+ Reviewed by Tim Horton.
+
+ Change WebContextMenuProxy to not inherit from RefCounted. Instead of using RefPtr, use std::unique_ptr.
+ Get rid of cancelTracking and hideContextMenu and dismiss the menu whenever the menu proxy is destroyed.
+ Also, rename showContextMenu to show.
+
+ * UIProcess/PageClient.h:
+ * UIProcess/WebContextMenuProxy.h:
+ (WebKit::WebContextMenuProxy::cancelTracking): Deleted.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::close):
+ (WebKit::WebPageProxy::internalShowContextMenu):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/ios/PageClientImplIOS.h:
+ * UIProcess/ios/PageClientImplIOS.mm:
+ (WebKit::PageClientImpl::createContextMenuProxy):
+ * UIProcess/mac/PageClientImpl.h:
+ * UIProcess/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::createContextMenuProxy):
+ * UIProcess/mac/WebContextMenuProxyMac.h:
+ (WebKit::WebContextMenuProxyMac::create): Deleted.
+ * UIProcess/mac/WebContextMenuProxyMac.mm:
+ (WebKit::WebContextMenuProxyMac::~WebContextMenuProxyMac):
+ (WebKit::WebContextMenuProxyMac::show):
+ (WebKit::WebContextMenuProxyMac::showContextMenu): Deleted.
+ (WebKit::WebContextMenuProxyMac::hideContextMenu): Deleted.
+ (WebKit::WebContextMenuProxyMac::cancelTracking): Deleted.
+
+2015-10-21 Anders Carlsson <ander...@apple.com>
+
Stop using a popup menu button cell(!) for context menus
https://bugs.webkit.org/show_bug.cgi?id=150413
Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/PageClient.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -224,7 +224,7 @@
virtual RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) = 0;
#if ENABLE(CONTEXT_MENUS)
- virtual RefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) = 0;
+ virtual std::unique_ptr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) = 0;
#endif
#if ENABLE(INPUT_TYPE_COLOR)
Modified: trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -36,13 +36,11 @@
class WebContextMenuItem;
-class WebContextMenuProxy : public RefCounted<WebContextMenuProxy> {
+class WebContextMenuProxy {
public:
virtual ~WebContextMenuProxy();
- virtual void showContextMenu() = 0;
- virtual void hideContextMenu() = 0;
- virtual void cancelTracking() { }
+ virtual void show() = 0;
protected:
WebContextMenuProxy(const ContextMenuContextData&, const UserData&);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-10-21 21:26:41 UTC (rev 191402)
@@ -817,8 +817,7 @@
m_activePopupMenu->cancelTracking();
#if ENABLE(CONTEXT_MENUS)
- if (m_activeContextMenu)
- m_activeContextMenu->cancelTracking();
+ m_activeContextMenu = nullptr;
#endif
m_backForwardList->pageClosed();
@@ -4197,11 +4196,6 @@
{
m_activeContextMenuContextData = contextMenuContextData;
- if (!m_contextMenuClient->hideContextMenu(*this) && m_activeContextMenu) {
- m_activeContextMenu->hideContextMenu();
- m_activeContextMenu = nullptr;
- }
-
m_activeContextMenu = m_pageClient.createContextMenuProxy(*this, contextMenuContextData, userData);
if (!m_activeContextMenu)
return;
@@ -4209,7 +4203,7 @@
// Since showContextMenu() can spin a nested run loop we need to turn off the responsiveness timer.
m_process->responsivenessTimer()->stop();
- m_activeContextMenu->showContextMenu();
+ m_activeContextMenu->show();
}
void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -1546,7 +1546,7 @@
RefPtr<WebPopupMenuProxy> m_activePopupMenu;
#if ENABLE(CONTEXT_MENUS)
- RefPtr<WebContextMenuProxy> m_activeContextMenu;
+ std::unique_ptr<WebContextMenuProxy> m_activeContextMenu;
ContextMenuContextData m_activeContextMenuContextData;
#endif
RefPtr<API::HitTestResult> m_lastMouseMoveHitTestResult;
Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -97,7 +97,7 @@
#endif
virtual RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) override;
#if ENABLE(CONTEXT_MENUS)
- virtual RefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) override;
+ virtual std::unique_ptr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) override;
#endif
virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorWindowLifetime) override;
virtual void clearTextIndicator(WebCore::TextIndicatorWindowDismissalAnimation) override;
Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm 2015-10-21 21:26:41 UTC (rev 191402)
@@ -444,7 +444,7 @@
}
#if ENABLE(CONTEXT_MENUS)
-RefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy&, const UserData&)
+std::unique_ptr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy&, const UserData&)
{
return nullptr;
}
Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -127,7 +127,7 @@
virtual RefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy&) override;
#if ENABLE(CONTEXT_MENUS)
- virtual RefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) override;
+ virtual std::unique_ptr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy&, const ContextMenuContextData&, const UserData&) override;
#endif
#if ENABLE(INPUT_TYPE_COLOR)
Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm 2015-10-21 21:26:41 UTC (rev 191402)
@@ -500,9 +500,9 @@
}
#if ENABLE(CONTEXT_MENUS)
-RefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy& page, const ContextMenuContextData& context, const UserData& userData)
+std::unique_ptr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy& page, const ContextMenuContextData& context, const UserData& userData)
{
- return WebContextMenuProxyMac::create(m_wkView, page, context, userData);
+ return std::make_unique<WebContextMenuProxyMac>(m_wkView, page, context, userData);
}
#endif
Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h 2015-10-21 21:26:41 UTC (rev 191402)
@@ -44,17 +44,9 @@
class WebContextMenuProxyMac : public WebContextMenuProxy {
public:
- static Ref<WebContextMenuProxyMac> create(WKView* webView, WebPageProxy& page, const ContextMenuContextData& context, const UserData& userData)
- {
- return adoptRef(*new WebContextMenuProxyMac(webView, page, context, userData));
- }
+ WebContextMenuProxyMac(WKView*, WebPageProxy&, const ContextMenuContextData&, const UserData&);
~WebContextMenuProxyMac();
- virtual void showContextMenu() override;
-
- virtual void hideContextMenu() override;
- virtual void cancelTracking() override;
-
void contextMenuItemSelected(const WebContextMenuItemData&);
#if ENABLE(SERVICE_CONTROLS)
@@ -65,7 +57,7 @@
NSWindow *window() const;
private:
- WebContextMenuProxyMac(WKView*, WebPageProxy&, const ContextMenuContextData&, const UserData&);
+ virtual void show() override;
void populate(const Vector<RefPtr<WebContextMenuItem>>&);
Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (191401 => 191402)
--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm 2015-10-21 21:04:43 UTC (rev 191401)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm 2015-10-21 21:26:41 UTC (rev 191402)
@@ -160,6 +160,7 @@
WebContextMenuProxyMac::~WebContextMenuProxyMac()
{
+ [m_menu cancelTracking];
}
void WebContextMenuProxyMac::contextMenuItemSelected(const WebContextMenuItemData& item)
@@ -374,7 +375,7 @@
populateNSMenu(m_menu.get(), nsMenuItemVector(items));
}
-void WebContextMenuProxyMac::showContextMenu()
+void WebContextMenuProxyMac::show()
{
// Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
bool askClientToChangeMenu = true;
@@ -422,23 +423,11 @@
[[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:this];
#endif
- Ref<WebContextMenuProxyMac> protect(*this);
+ Ref<WebPageProxy> protect(m_page);
[m_menu popUpMenuPositioningItem:nil atLocation:m_context.menuLocation() inView:m_webView];
-
- hideContextMenu();
}
-void WebContextMenuProxyMac::hideContextMenu()
-{
- [m_menu cancelTracking];
-}
-
-void WebContextMenuProxyMac::cancelTracking()
-{
- [m_menu cancelTracking];
-}
-
NSWindow *WebContextMenuProxyMac::window() const
{
return [m_webView window];