Title: [188031] trunk/Source/WebKit2
Revision
188031
Author
carlo...@webkit.org
Date
2015-08-06 01:14:20 -0700 (Thu, 06 Aug 2015)

Log Message

[GTK] Crash closing a page when a context menu is open
https://bugs.webkit.org/show_bug.cgi?id=147682

Reviewed by Sergio Villar Senin.

Implement WebContextMenuProxy::cancelTracking() to clear the
internal menu when the web page is closed.

* UIProcess/gtk/WebContextMenuProxyGtk.cpp:
(WebKit::WebContextMenuProxyGtk::cancelTracking):
(WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Deleted.
* UIProcess/gtk/WebContextMenuProxyGtk.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (188030 => 188031)


--- trunk/Source/WebKit2/ChangeLog	2015-08-06 07:13:55 UTC (rev 188030)
+++ trunk/Source/WebKit2/ChangeLog	2015-08-06 08:14:20 UTC (rev 188031)
@@ -1,3 +1,18 @@
+2015-08-06  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Crash closing a page when a context menu is open
+        https://bugs.webkit.org/show_bug.cgi?id=147682
+
+        Reviewed by Sergio Villar Senin.
+
+        Implement WebContextMenuProxy::cancelTracking() to clear the
+        internal menu when the web page is closed.
+
+        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
+        (WebKit::WebContextMenuProxyGtk::cancelTracking):
+        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Deleted.
+        * UIProcess/gtk/WebContextMenuProxyGtk.h:
+
 2015-08-04  Matt Rajca  <mra...@apple.com>
 
         Media Session: push paused state to the media session focus manager instead of polling

Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp (188030 => 188031)


--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp	2015-08-06 07:13:55 UTC (rev 188030)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp	2015-08-06 08:14:20 UTC (rev 188031)
@@ -171,10 +171,7 @@
 
 WebContextMenuProxyGtk::~WebContextMenuProxyGtk()
 {
-    for (auto iter = m_signalHandlers.begin(); iter != m_signalHandlers.end(); ++iter)
-        g_signal_handler_disconnect(iter->value, iter->key);
-
-    webkitWebViewBaseSetActiveContextMenuProxy(WEBKIT_WEB_VIEW_BASE(m_webView), 0);
+    cancelTracking();
 }
 
 void WebContextMenuProxyGtk::menuPositionFunction(GtkMenu* menu, gint* x, gint* y, gboolean* pushIn, WebContextMenuProxyGtk* popupMenu)
@@ -194,5 +191,15 @@
     *pushIn = FALSE;
 }
 
+void WebContextMenuProxyGtk::cancelTracking()
+{
+    for (auto iter = m_signalHandlers.begin(); iter != m_signalHandlers.end(); ++iter)
+        g_signal_handler_disconnect(iter->value, iter->key);
+    m_signalHandlers.clear();
+
+    webkitWebViewBaseSetActiveContextMenuProxy(WEBKIT_WEB_VIEW_BASE(m_webView), nullptr);
+    m_menu.setPlatformDescription(nullptr);
+}
+
 } // namespace WebKit
 #endif // ENABLE(CONTEXT_MENUS)

Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h (188030 => 188031)


--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h	2015-08-06 07:13:55 UTC (rev 188030)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h	2015-08-06 08:14:20 UTC (rev 188031)
@@ -47,8 +47,9 @@
     }
     ~WebContextMenuProxyGtk();
 
-    virtual void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&);
-    virtual void hideContextMenu();
+    virtual void showContextMenu(const WebCore::IntPoint&, const Vector<RefPtr<WebContextMenuItem>>&, const ContextMenuContextData&) override;
+    virtual void hideContextMenu() override;
+    virtual void cancelTracking() override;
 
     void populate(Vector<WebCore::ContextMenuItem>&);
     GtkMenu* gtkMenu() const { return m_menu.platformDescription(); }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to