Title: [109707] releases/WebKitGTK/webkit-1.8/Source

Diff

Modified: releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testcopyandpaste.c (109706 => 109707)


--- releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testcopyandpaste.c	2012-03-05 06:57:40 UTC (rev 109706)
+++ releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testcopyandpaste.c	2012-03-05 07:50:20 UTC (rev 109707)
@@ -126,6 +126,7 @@
     gtk_widget_show(fixture->window);
     gtk_widget_show(GTK_WIDGET(fixture->webView));
     gtk_window_present(GTK_WINDOW(fixture->window));
+    gtk_widget_grab_focus(fixture->webView);
 
     g_signal_connect(fixture->webView, "notify::load-status",
                      G_CALLBACK(load_status_cb), fixture);

Modified: releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testkeyevents.c (109706 => 109707)


--- releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testkeyevents.c	2012-03-05 06:57:40 UTC (rev 109706)
+++ releases/WebKitGTK/webkit-1.8/Source/WebKit/gtk/tests/testkeyevents.c	2012-03-05 07:50:20 UTC (rev 109707)
@@ -118,7 +118,6 @@
 
 gboolean map_event_cb(GtkWidget *widget, GdkEvent* event, gpointer data)
 {
-    gtk_widget_grab_focus(widget);
     KeyEventFixture* fixture = (KeyEventFixture*)data;
     webkit_web_view_load_string(fixture->webView, fixture->info->page,
                                 "text/html", "utf-8", "file://");
@@ -134,6 +133,7 @@
     gtk_widget_show(fixture->window);
     gtk_widget_show(GTK_WIDGET(fixture->webView));
     gtk_window_present(GTK_WINDOW(fixture->window));
+    gtk_widget_grab_focus(fixture->webView);
 
     g_signal_connect(fixture->webView, "notify::load-status",
                      load_event_callback, fixture);

Modified: releases/WebKitGTK/webkit-1.8/Source/WebKit2/ChangeLog (109706 => 109707)


--- releases/WebKitGTK/webkit-1.8/Source/WebKit2/ChangeLog	2012-03-05 06:57:40 UTC (rev 109706)
+++ releases/WebKitGTK/webkit-1.8/Source/WebKit2/ChangeLog	2012-03-05 07:50:20 UTC (rev 109707)
@@ -1,3 +1,23 @@
+2012-03-04  Sergio Villar Senin  <[email protected]>
+
+        [WK2][GTK] WebProcess SIGSEVs due to incorrect clipboard handling
+        https://bugs.webkit.org/show_bug.cgi?id=79252
+
+        Do not execute clipboard callbacks after the Frame associated with
+        it is destroyed.
+
+        This change is already covered by the TestWebViewEditor unit tests
+        (among others), they hang (because WebProcess dies) without this
+        patch in Debug builds.
+
+        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
+        (EditorClientFrameDestructionObserver):
+        (WebKit::EditorClientFrameDestructionObserver::EditorClientFrameDestructionObserver):
+        (WebKit::EditorClientFrameDestructionObserver::frameDestroyed):
+        (WebKit::EditorClientFrameDestructionObserver::destroyOnClosureFinalization):
+        (WebKit):
+        (WebKit::WebEditorClient::setSelectionPrimaryClipboardIfNeeded):
+
 2012-03-02  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Invalid check in webkit_web_view_set_zoom_level() when zoom-text-only is enabled

Modified: releases/WebKitGTK/webkit-1.8/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp (109706 => 109707)


--- releases/WebKitGTK/webkit-1.8/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp	2012-03-05 06:57:40 UTC (rev 109706)
+++ releases/WebKitGTK/webkit-1.8/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp	2012-03-05 07:50:20 UTC (rev 109707)
@@ -21,6 +21,7 @@
 #include "WebEditorClient.h"
 
 #include "Frame.h"
+#include "FrameDestructionObserver.h"
 #include "PlatformKeyboardEvent.h"
 #include "WebPage.h"
 #include "WebPageProxyMessages.h"
@@ -130,7 +131,28 @@
 }
 
 #if PLATFORM(X11)
+class EditorClientFrameDestructionObserver : FrameDestructionObserver {
+public:
+    EditorClientFrameDestructionObserver(Frame* frame, GClosure* closure)
+        : FrameDestructionObserver(frame)
+        , m_closure(closure)
+    {
+        g_closure_add_finalize_notifier(m_closure, this, destroyOnClosureFinalization);
+    }
+
+    void frameDestroyed()
+    {
+        g_closure_invalidate(m_closure);
+        FrameDestructionObserver::frameDestroyed();
+    }
+private:
+    GClosure* m_closure;
+
+    static void destroyOnClosureFinalization(gpointer data, GClosure* closure) { delete data; }
+};
+
 static Frame* frameSettingClipboard;
+
 static void collapseSelection(GtkClipboard* clipboard, Frame* frame)
 {
     if (frameSettingClipboard && frameSettingClipboard == frame)
@@ -156,6 +178,10 @@
 
     frameSettingClipboard = frame;
     GClosure* callback = g_cclosure_new(G_CALLBACK(collapseSelection), frame, 0);
+    // This observer will be self-destroyed on closure finalization,
+    // that will happen either after closure execution or after
+    // closure invalidation.
+    new EditorClientFrameDestructionObserver(frame, callback);
     g_closure_set_marshal(callback, g_cclosure_marshal_VOID__VOID);
     PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(clipboard, PasteboardHelper::DoNotIncludeSmartPaste, callback);
     frameSettingClipboard = 0;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to