⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 227544 in webkit


Ignore:
Timestamp:
Jan 24, 2018, 12:25:59 PM (9 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK] Page crash after swipe gesture running GNOME3 under wayland

​https://bugs.webkit.org/show_bug.cgi?id=181996

Patch by Jan-Michael Brummer <​jan.brummer@tabos.org> on 2018-01-24
Reviewed by Michael Catanzaro.

Add missing GDK_TOUCH_CANCEL support which fixes page crashes due to cancelled gestures.

  • Shared/gtk/WebEventFactory.cpp:

(WebKit::WebEventFactory::createWebTouchEvent):

  • UIProcess/API/gtk/PageClientImpl.cpp:

(WebKit::PageClientImpl::doneWithTouchEvent):

  • UIProcess/API/gtk/WebKitWebViewBase.cpp:

(touchPointStateForEvents):
(webkitWebViewBaseGetTouchPointsForEvent):
(webkitWebViewBaseTouchEvent):

  • UIProcess/gtk/GestureController.cpp:

(WebKit::GestureController::handleEvent):

Location:
trunk/Source/WebKit
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r227535 r227544  
     12018-01-24  Jan-Michael Brummer  <jan.brummer@tabos.org>
     2        [GTK] Page crash after swipe gesture running GNOME3 under wayland
     3
     4        https://bugs.webkit.org/show_bug.cgi?id=181996
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Add missing GDK_TOUCH_CANCEL support which fixes page crashes due to cancelled gestures.
     9        * Shared/gtk/WebEventFactory.cpp:
     10        (WebKit::WebEventFactory::createWebTouchEvent):
     11        * UIProcess/API/gtk/PageClientImpl.cpp:
     12        (WebKit::PageClientImpl::doneWithTouchEvent):
     13        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
     14        (touchPointStateForEvents):
     15        (webkitWebViewBaseGetTouchPointsForEvent):
     16        (webkitWebViewBaseTouchEvent):
     17        * UIProcess/gtk/GestureController.cpp:
     18        (WebKit::GestureController::handleEvent):
     19
    1202018-01-24  Alex Christensen  <achristensen@webkit.org>
    221
  • trunk/Source/WebKit/Shared/gtk/WebEventFactory.cpp

    r223264 r227544  
    248248        type = WebEvent::TouchEnd;
    249249        break;
     250    case GDK_TOUCH_CANCEL:
     251        type = WebEvent::TouchCancel;
     252        break;
    250253    default:
    251254        ASSERT_NOT_REACHED();
  • trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp

    r226323 r227544  
    4848#include <WebCore/GtkUtilities.h>
    4949#include <WebCore/RefPtrCairo.h>
     50#include <wtf/Compiler.h>
    5051#include <wtf/text/CString.h>
    5152#include <wtf/text/WTFString.h>
    … …  
    373374    } else {
    374375        switch (touchEvent->type) {
     376        case GDK_TOUCH_CANCEL:
     377            FALLTHROUGH;
    375378        case GDK_TOUCH_END:
    376379            pointerEvent.reset(gdk_event_new(GDK_BUTTON_RELEASE));
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp

    r227519 r227544  
    6565#include <memory>
    6666#include <pal/system/SleepDisabler.h>
     67#include <wtf/Compiler.h>
    6768#include <wtf/HashMap.h>
    6869#include <wtf/glib/GRefPtr.h>
    … …  
    896897    case GDK_TOUCH_END:
    897898        return WebPlatformTouchPoint::TouchReleased;
     899    case GDK_TOUCH_CANCEL:
     900        return WebPlatformTouchPoint::TouchCancelled;
    898901    default:
    899902        return WebPlatformTouchPoint::TouchStationary;
    … …  
    904907{
    905908    WebKitWebViewBasePrivate* priv = webViewBase->priv;
    906     touchPoints.reserveInitialCapacity(event->type == GDK_TOUCH_END ? priv->touchEvents.size() + 1 : priv->touchEvents.size());
     909    bool touchEnd = (event->type == GDK_TOUCH_END) || (event->type == GDK_TOUCH_CANCEL);
     910    touchPoints.reserveInitialCapacity(touchEnd ? priv->touchEvents.size() + 1 : priv->touchEvents.size());
    907911
    908912    for (const auto& it : priv->touchEvents)
    … …  
    910914
    911915    // Touch was already removed from the TouchEventsMap, add it here.
    912     if (event->type == GDK_TOUCH_END)
     916    if (touchEnd)
    913917        appendTouchEvent(touchPoints, event, WebPlatformTouchPoint::TouchReleased);
    914918}
    … …  
    938942        break;
    939943    }
     944    case GDK_TOUCH_CANCEL:
     945        FALLTHROUGH;
    940946    case GDK_TOUCH_END:
    941947        ASSERT(priv->touchEvents.contains(sequence));
  • trunk/Source/WebKit/UIProcess/gtk/GestureController.cpp

    r222855 r227544  
    5050{
    5151    bool wasProcessingGestures = isProcessingGestures();
     52    bool touchEnd;
    5253    m_dragGesture.handleEvent(event);
    5354    m_swipeGesture.handleEvent(event);
    5455    m_zoomGesture.handleEvent(event);
    55     return event->type == GDK_TOUCH_END ? wasProcessingGestures : isProcessingGestures();
     56    touchEnd = (event->type == GDK_TOUCH_END) || (event->type == GDK_TOUCH_CANCEL);
     57    return touchEnd ? wasProcessingGestures : isProcessingGestures();
    5658}
    5759
Note: See TracChangeset for help on using the changeset viewer.