Changeset 192311 in webkit


Ignore:
Timestamp:
Nov 11, 2015 8:36:29 AM (8 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Runtime critical warnings when closing a page containing windowed plugins
https://bugs.webkit.org/show_bug.cgi?id=151132

Reviewed by Martin Robinson.

This is because our plugin widget, that is a GtkPlug (derived from
GtkWindow), can receive the delete-event signal before
NetscapePlugin::platformDestroy is called. The delete-event
signal, by default, destroys the window when the signal is not
handled. So, after the delete-event the GtkPlug is destroyed, but
our pointer hasn't been reset. We can handle the delete-event
using gtk_widget_hide_on_delete as callback, so that the plugin
widget is hidden instead of destroyed.

  • WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

(WebKit::NetscapePlugin::platformPostInitializeWindowed):

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r192310 r192311  
     12015-11-11  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Runtime critical warnings when closing a page containing windowed plugins
     4        https://bugs.webkit.org/show_bug.cgi?id=151132
     5
     6        Reviewed by Martin Robinson.
     7
     8        This is because our plugin widget, that is a GtkPlug (derived from
     9        GtkWindow), can receive the delete-event signal before
     10        NetscapePlugin::platformDestroy is called. The delete-event
     11        signal, by default, destroys the window when the signal is not
     12        handled. So, after the delete-event the GtkPlug is destroyed, but
     13        our pointer hasn't been reset. We can handle the delete-event
     14        using gtk_widget_hide_on_delete as callback, so that the plugin
     15        widget is hidden instead of destroyed.
     16
     17        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
     18        (WebKit::NetscapePlugin::platformPostInitializeWindowed):
     19
    1202015-11-11  Carlos Garcia Campos  <cgarcia@igalia.com>
    221
  • trunk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp

    r189144 r192311  
    135135    // containing a plug with the UI process socket embedded.
    136136    m_platformPluginWidget = gtk_plug_new(static_cast<Window>(windowID));
     137
     138    // Hide the GtkPlug on delete-event since we assume the widget is valid while the plugin is active.
     139    // platformDestroy() will be called anyway right after the delete-event.
     140    g_signal_connect(m_platformPluginWidget, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), nullptr);
     141
    137142    GtkWidget* socket = gtk_socket_new();
    138143    // Do not show the plug widget until the socket is connected.
Note: See TracChangeset for help on using the changeset viewer.