Title: [227961] trunk/Source/WebKit
Revision
227961
Author
[email protected]
Date
2018-02-01 05:58:22 -0800 (Thu, 01 Feb 2018)

Log Message

REGRESSION(r227893): fast/events/touch/touch-stale-node-crash.html and other tests crash
https://bugs.webkit.org/show_bug.cgi?id=182350

Reviewed by Carlos Alberto Lopez Perez.

Ensure events synthesized from touch gestures have a valid window, screen and device.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
* UIProcess/gtk/GestureController.h: Add virtual destructor to GestureControllerclient.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (227960 => 227961)


--- trunk/Source/WebKit/ChangeLog	2018-02-01 13:38:01 UTC (rev 227960)
+++ trunk/Source/WebKit/ChangeLog	2018-02-01 13:58:22 UTC (rev 227961)
@@ -1,3 +1,15 @@
+2018-02-01  Carlos Garcia Campos  <[email protected]>
+
+        REGRESSION(r227893): fast/events/touch/touch-stale-node-crash.html and other tests crash
+        https://bugs.webkit.org/show_bug.cgi?id=182350
+
+        Reviewed by Carlos Alberto Lopez Perez.
+
+        Ensure events synthesized from touch gestures have a valid window, screen and device.
+
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        * UIProcess/gtk/GestureController.h: Add virtual destructor to GestureControllerclient.
+
 2018-01-31  Simon Fraser  <[email protected]>
 
         Use different debug red colors for different contexts

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (227960 => 227961)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2018-02-01 13:38:01 UTC (rev 227960)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2018-02-01 13:58:22 UTC (rev 227961)
@@ -1021,10 +1021,15 @@
 #else
         UNUSED_PARAM(isStop);
 #endif
+        scrollEvent->scroll.window = event->window ? GDK_WINDOW(g_object_ref(event->window)) : nullptr;
+        auto* touchEvent = reinterpret_cast<GdkEvent*>(event);
+        gdk_event_set_screen(scrollEvent.get(), gdk_event_get_screen(touchEvent));
+        gdk_event_set_device(scrollEvent.get(), gdk_event_get_device(touchEvent));
+        gdk_event_set_source_device(scrollEvent.get(), gdk_event_get_source_device(touchEvent));
         return scrollEvent;
     }
 
-    void simulateMouseClick(const GdkEventTouch* event, unsigned button)
+    void simulateMouseClick(GdkEventTouch* event, unsigned button)
     {
         GUniquePtr<GdkEvent> pointerEvent(gdk_event_new(GDK_MOTION_NOTIFY));
         pointerEvent->motion.time = event->time;
@@ -1033,6 +1038,11 @@
         pointerEvent->motion.x_root = event->x_root;
         pointerEvent->motion.y_root = event->y_root;
         pointerEvent->motion.state = event->state;
+        pointerEvent->motion.window = event->window ? GDK_WINDOW(g_object_ref(event->window)) : nullptr;
+        auto* touchEvent = reinterpret_cast<GdkEvent*>(event);
+        gdk_event_set_screen(pointerEvent.get(), gdk_event_get_screen(touchEvent));
+        gdk_event_set_device(pointerEvent.get(), gdk_event_get_device(touchEvent));
+        gdk_event_set_source_device(pointerEvent.get(), gdk_event_get_source_device(touchEvent));
         webkitWebViewBaseHandleMouseEvent(m_webView, pointerEvent.get());
 
         pointerEvent.reset(gdk_event_new(GDK_BUTTON_PRESS));
@@ -1042,6 +1052,10 @@
         pointerEvent->button.y = event->y;
         pointerEvent->button.x_root = event->x_root;
         pointerEvent->button.y_root = event->y_root;
+        pointerEvent->button.window = event->window ? GDK_WINDOW(g_object_ref(event->window)) : nullptr;
+        gdk_event_set_screen(pointerEvent.get(), gdk_event_get_screen(touchEvent));
+        gdk_event_set_device(pointerEvent.get(), gdk_event_get_device(touchEvent));
+        gdk_event_set_source_device(pointerEvent.get(), gdk_event_get_source_device(touchEvent));
         webkitWebViewBaseHandleMouseEvent(m_webView, pointerEvent.get());
 
         pointerEvent->type = GDK_BUTTON_RELEASE;

Modified: trunk/Source/WebKit/UIProcess/gtk/GestureController.h (227960 => 227961)


--- trunk/Source/WebKit/UIProcess/gtk/GestureController.h	2018-02-01 13:38:01 UTC (rev 227960)
+++ trunk/Source/WebKit/UIProcess/gtk/GestureController.h	2018-02-01 13:58:22 UTC (rev 227961)
@@ -41,6 +41,8 @@
 
 class GestureControllerClient {
 public:
+    virtual ~GestureControllerClient() = default;
+
     virtual void tap(GdkEventTouch*) = 0;
 
     virtual void startDrag(GdkEventTouch*, const WebCore::FloatPoint&) = 0;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to