[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 00:57:11 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 9ced76708e419d3c52ac87411fb728824022daf3
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 7 14:37:26 2010 +0000

    2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
    
            Reviewed by Antti Koivisto.
    
            Wrong state and TouchLists in TouchEvents
            https://bugs.webkit.org/show_bug.cgi?id=32878
    
            Touch event tests changed to match the API and semantics of iPhone and
            Android. Each new touch point press dispatches a touchstart event with
            the pressed touch point(s) in the changedTouches list, and a release
            dispatches a touchend event with the released touch point(s) in
            changedTouches. Moved points dispatch a touchmove event, with the moved
            points in changedTouches. Old behaviour emitted only one touchstart when
            the first point was pressed and one touchend when the last point was
            released, and any events in between were touchmoves. New presses or
            releases could only be detected by comparing the lists touches and
            changedTouches.
    
            * fast/events/basic-touch-events-expected.txt:
            * fast/events/script-tests/basic-touch-events.js:
            (singleTouchSequence):
            (multiTouchSequence):
    2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
    
            Reviewed by Antti Koivisto.
    
            Wrong state and TouchLists in TouchEvents
            https://bugs.webkit.org/show_bug.cgi?id=32878
    
            Touch events changed to match the API and semantics of iPhone and
            Android. Each new touch point press dispatches a touchstart event with
            the pressed touch point(s) in the changedTouches list, and a release
            dispatches a touchend event with the released touch point(s) in
            changedTouches. Moved points dispatch a touchmove event, with the moved
            points in changedTouches. Old behaviour emitted only one touchstart when
            the first point was pressed and one touchend when the last point was
            released, and any events in between were touchmoves. New presses or
            releases could only be detected by comparing the lists touches and
            changedTouches.
    
            * page/EventHandler.cpp:
            (WebCore::EventHandler::handleTouchEvent):
            * page/EventHandler.h:
    2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
    
            Reviewed by Antti Koivisto.
    
            Wrong state and TouchLists in TouchEvents
            https://bugs.webkit.org/show_bug.cgi?id=32878
    
            * DumpRenderTree/qt/EventSenderQt.cpp:
            (EventSender::touchStart):
            (EventSender::touchEnd):
            (EventSender::clearTouchPoints):
            * DumpRenderTree/qt/EventSenderQt.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52922 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index c9be487..a383b83 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,26 @@
+2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
+
+        Reviewed by Antti Koivisto.
+
+        Wrong state and TouchLists in TouchEvents
+        https://bugs.webkit.org/show_bug.cgi?id=32878
+
+        Touch event tests changed to match the API and semantics of iPhone and
+        Android. Each new touch point press dispatches a touchstart event with
+        the pressed touch point(s) in the changedTouches list, and a release
+        dispatches a touchend event with the released touch point(s) in
+        changedTouches. Moved points dispatch a touchmove event, with the moved
+        points in changedTouches. Old behaviour emitted only one touchstart when
+        the first point was pressed and one touchend when the last point was
+        released, and any events in between were touchmoves. New presses or
+        releases could only be detected by comparing the lists touches and
+        changedTouches.
+
+        * fast/events/basic-touch-events-expected.txt:
+        * fast/events/script-tests/basic-touch-events.js:
+        (singleTouchSequence):
+        (multiTouchSequence):
+
 2010-01-06  MORITA Hajime  <morrita at gmail.com>
 
         Reviewed by Nikolas Zimmermann.
diff --git a/LayoutTests/fast/events/basic-touch-events-expected.txt b/LayoutTests/fast/events/basic-touch-events-expected.txt
index 3841436..7ae4527 100644
--- a/LayoutTests/fast/events/basic-touch-events-expected.txt
+++ b/LayoutTests/fast/events/basic-touch-events-expected.txt
@@ -11,6 +11,16 @@ PASS lastEvent.touches[0].pageY is 10
 PASS lastEvent.touches[0].clientX is 10
 PASS lastEvent.touches[0].clientY is 10
 PASS lastEvent.touches[0].identifier is 0
+PASS lastEvent.changedTouches[0].pageX is 10
+PASS lastEvent.changedTouches[0].pageY is 10
+PASS lastEvent.changedTouches[0].clientX is 10
+PASS lastEvent.changedTouches[0].clientY is 10
+PASS lastEvent.changedTouches[0].identifier is 0
+PASS lastEvent.targetTouches[0].pageX is 10
+PASS lastEvent.targetTouches[0].pageY is 10
+PASS lastEvent.targetTouches[0].clientX is 10
+PASS lastEvent.targetTouches[0].clientY is 10
+PASS lastEvent.targetTouches[0].identifier is 0
 PASS lastEvent.type is "touchmove"
 PASS lastEvent.touches.length is 1
 PASS lastEvent.changedTouches.length is 1
@@ -36,19 +46,10 @@ PASS lastEvent.changedTouches[0].identifier is 0
 PASS lastEvent.shiftKey is false
 PASS lastEvent.altKey is false
 multi touch sequence
+Two touchpoints pressed
 PASS lastEvent.type is "touchstart"
-PASS lastEvent.touches.length is 1
-PASS lastEvent.changedTouches.length is 1
-PASS lastEvent.targetTouches.length is 1
-PASS lastEvent.touches[0].target.id is "touchtarget"
-PASS lastEvent.touches[0].pageX is 10
-PASS lastEvent.touches[0].pageY is 10
-PASS lastEvent.touches[0].clientX is 10
-PASS lastEvent.touches[0].clientY is 10
-PASS lastEvent.touches[0].identifier is 0
-PASS lastEvent.type is "touchmove"
 PASS lastEvent.touches.length is 2
-PASS lastEvent.changedTouches.length is 1
+PASS lastEvent.changedTouches.length is 2
 PASS lastEvent.targetTouches.length is 2
 PASS lastEvent.touches[0].pageX is 10
 PASS lastEvent.touches[0].pageY is 10
@@ -60,11 +61,27 @@ PASS lastEvent.touches[1].pageY is 30
 PASS lastEvent.touches[1].clientX is 20
 PASS lastEvent.touches[1].clientY is 30
 PASS lastEvent.touches[1].identifier is 1
-PASS lastEvent.changedTouches[0].pageX is 20
-PASS lastEvent.changedTouches[0].pageY is 30
-PASS lastEvent.changedTouches[0].clientX is 20
-PASS lastEvent.changedTouches[0].clientY is 30
-PASS lastEvent.changedTouches[0].identifier is 1
+PASS lastEvent.changedTouches[0].pageX is 10
+PASS lastEvent.changedTouches[0].pageY is 10
+PASS lastEvent.changedTouches[0].clientX is 10
+PASS lastEvent.changedTouches[0].clientY is 10
+PASS lastEvent.changedTouches[0].identifier is 0
+PASS lastEvent.changedTouches[1].pageX is 20
+PASS lastEvent.changedTouches[1].pageY is 30
+PASS lastEvent.changedTouches[1].clientX is 20
+PASS lastEvent.changedTouches[1].clientY is 30
+PASS lastEvent.changedTouches[1].identifier is 1
+PASS lastEvent.targetTouches[0].pageX is 10
+PASS lastEvent.targetTouches[0].pageY is 10
+PASS lastEvent.targetTouches[0].clientX is 10
+PASS lastEvent.targetTouches[0].clientY is 10
+PASS lastEvent.targetTouches[0].identifier is 0
+PASS lastEvent.targetTouches[1].pageX is 20
+PASS lastEvent.targetTouches[1].pageY is 30
+PASS lastEvent.targetTouches[1].clientX is 20
+PASS lastEvent.targetTouches[1].clientY is 30
+PASS lastEvent.targetTouches[1].identifier is 1
+First touchpoint moved
 PASS lastEvent.type is "touchmove"
 PASS lastEvent.touches.length is 2
 PASS lastEvent.changedTouches.length is 1
@@ -84,7 +101,8 @@ PASS lastEvent.touches[1].pageY is 30
 PASS lastEvent.touches[1].clientX is 20
 PASS lastEvent.touches[1].clientY is 30
 PASS lastEvent.touches[1].identifier is 1
-PASS lastEvent.type is "touchmove"
+First touchpoint is released
+PASS lastEvent.type is "touchend"
 PASS lastEvent.touches.length is 1
 PASS lastEvent.changedTouches.length is 1
 PASS lastEvent.targetTouches.length is 1
@@ -98,6 +116,12 @@ PASS lastEvent.changedTouches[0].pageY is 15
 PASS lastEvent.changedTouches[0].clientX is 15
 PASS lastEvent.changedTouches[0].clientY is 15
 PASS lastEvent.changedTouches[0].identifier is 0
+PASS lastEvent.targetTouches[0].pageX is 20
+PASS lastEvent.targetTouches[0].pageY is 30
+PASS lastEvent.targetTouches[0].clientX is 20
+PASS lastEvent.targetTouches[0].clientY is 30
+PASS lastEvent.targetTouches[0].identifier is 1
+Last remaining touchpoint is released
 PASS lastEvent.type is "touchend"
 PASS lastEvent.touches.length is 0
 PASS lastEvent.changedTouches.length is 1
diff --git a/LayoutTests/fast/events/script-tests/basic-touch-events.js b/LayoutTests/fast/events/script-tests/basic-touch-events.js
index 7eecd35..6766abc 100644
--- a/LayoutTests/fast/events/script-tests/basic-touch-events.js
+++ b/LayoutTests/fast/events/script-tests/basic-touch-events.js
@@ -49,6 +49,8 @@ function singleTouchSequence()
     shouldBe("lastEvent.shiftKey", "false");
     shouldBeEqualToString("lastEvent.touches[0].target.id", "touchtarget");
     verifyTouchPoint("touches", 0, 10, 10, 0);
+    verifyTouchPoint("changedTouches", 0, 10, 10, 0);
+    verifyTouchPoint("targetTouches", 0, 10, 10, 0);
 
     eventSender.updateTouchPoint(0, 20, 15);
     eventSender.setTouchModifier("shift", true);
@@ -65,6 +67,7 @@ function singleTouchSequence()
     eventSender.setTouchModifier("shift", false);
     eventSender.setTouchModifier("alt", false);
 
+    eventSender.releaseTouchPoint(0);
     eventSender.touchEnd();
 
     verifyTouchEvent("touchend", 0, 1, 0);
@@ -77,38 +80,37 @@ function multiTouchSequence()
 {
     debug("multi touch sequence");
 
+    debug("Two touchpoints pressed");
     eventSender.addTouchPoint(10, 10);
-    eventSender.touchStart();
-
-    verifyTouchEvent("touchstart", 1, 1, 1);
-    shouldBeEqualToString("lastEvent.touches[0].target.id", "touchtarget");
-    verifyTouchPoint("touches", 0, 10, 10, 0);
-
     eventSender.addTouchPoint(20, 30);
-    eventSender.touchMove();
-
-    verifyTouchEvent("touchmove", 2, 1, 2);
+    eventSender.touchStart();
+    verifyTouchEvent("touchstart", 2, 2, 2);
     verifyTouchPoint("touches", 0, 10, 10, 0);
     verifyTouchPoint("touches", 1, 20, 30, 1);
-    verifyTouchPoint("changedTouches", 0, 20, 30, 1);
+    verifyTouchPoint("changedTouches", 0, 10, 10, 0);
+    verifyTouchPoint("changedTouches", 1, 20, 30, 1);
+    verifyTouchPoint("targetTouches", 0, 10, 10, 0);
+    verifyTouchPoint("targetTouches", 1, 20, 30, 1);
 
+    debug("First touchpoint moved");
     eventSender.updateTouchPoint(0, 15, 15);
     eventSender.touchMove();
-
     verifyTouchEvent("touchmove", 2, 1, 2);
     verifyTouchPoint("touches", 0, 15, 15, 0);
     verifyTouchPoint("changedTouches", 0, 15, 15, 0);
     verifyTouchPoint("touches", 1, 20, 30, 1);
 
+    debug("First touchpoint is released");
     eventSender.releaseTouchPoint(0);
-    eventSender.touchMove();
-
-    verifyTouchEvent("touchmove", 1, 1, 1);
+    eventSender.touchEnd();
+    verifyTouchEvent("touchend", 1, 1, 1);
     verifyTouchPoint("touches", 0, 20, 30, 1);
     verifyTouchPoint("changedTouches", 0, 15, 15, 0);
+    verifyTouchPoint("targetTouches", 0, 20, 30, 1);
 
+    debug("Last remaining touchpoint is released");
+    eventSender.releaseTouchPoint(0);
     eventSender.touchEnd();
-
     verifyTouchEvent("touchend", 0, 1, 0);
     verifyTouchPoint("changedTouches", 0, 20, 30, 1);
 }
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c378d30..c45c3b4 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,25 @@
+2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
+
+        Reviewed by Antti Koivisto.
+
+        Wrong state and TouchLists in TouchEvents
+        https://bugs.webkit.org/show_bug.cgi?id=32878
+
+        Touch events changed to match the API and semantics of iPhone and
+        Android. Each new touch point press dispatches a touchstart event with
+        the pressed touch point(s) in the changedTouches list, and a release
+        dispatches a touchend event with the released touch point(s) in
+        changedTouches. Moved points dispatch a touchmove event, with the moved
+        points in changedTouches. Old behaviour emitted only one touchstart when
+        the first point was pressed and one touchend when the last point was
+        released, and any events in between were touchmoves. New presses or
+        releases could only be detected by comparing the lists touches and
+        changedTouches.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleTouchEvent):
+        * page/EventHandler.h:
+
 2010-01-07  Kent Tamura  <tkent at chromium.org>
 
         Reviewed by Maciej Stachowiak.
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 223a3f7..ed6bc4a 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -2545,17 +2545,20 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
         return false;
 
     RefPtr<TouchList> touches = TouchList::create();
-    RefPtr<TouchList> changedTouches = TouchList::create();
+    RefPtr<TouchList> pressedTouches = TouchList::create();
+    RefPtr<TouchList> releasedTouches = TouchList::create();
+    RefPtr<TouchList> movedTouches = TouchList::create();
     RefPtr<TouchList> targetTouches = TouchList::create();
 
     const Vector<PlatformTouchPoint>& points = event.touchPoints();
+    AtomicString* eventName = 0;
+
     for (int i = 0; i < points.size(); ++i) {
         const PlatformTouchPoint& point = points[i];
-
         IntPoint framePoint = documentPointForWindowPoint(m_frame, point.pos());
         HitTestResult result = hitTestResultAtPoint(framePoint, /*allowShadowContent*/ false);
-
         Node* target = result.innerNode();
+
         // Touch events should not go to text nodes
         if (target && target->isTextNode())
             target = target->parentNode();
@@ -2570,49 +2573,77 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
             m_firstTouchPagePos = framePoint;
         }
 
-        if (point.state() != PlatformTouchPoint::TouchReleased) {
-            touches->append(touch);
-
-            if (m_touchEventTarget == target)
-               targetTouches->append(touch);
+        if (point.state() == PlatformTouchPoint::TouchReleased)
+            releasedTouches->append(touch);
+        else {
+            if (point.state() == PlatformTouchPoint::TouchPressed)
+                pressedTouches->append(touch);
+            else {
+                touches->append(touch);
+                if (m_touchEventTarget == target)
+                    targetTouches->append(touch);
+                if (point.state() == PlatformTouchPoint::TouchMoved)
+                    movedTouches->append(touch);
+            }
         }
-
-        if (point.state() != PlatformTouchPoint::TouchStationary)
-            changedTouches->append(touch);
-    }
-
-    AtomicString* eventName = 0;
-    switch (event.type()) {
-    case TouchStart:
-        eventName = &eventNames().touchstartEvent;
-        break;
-    case TouchMove:
-        eventName = &eventNames().touchmoveEvent;
-        break;
-    case TouchEnd:
-        eventName = &eventNames().touchendEvent;
-        break;
     }
 
     if (!m_touchEventTarget)
         return false;
 
-    RefPtr<TouchEvent> ev = TouchEvent::create(touches.get(), targetTouches.get(), changedTouches.get(),
-                                               *eventName, m_touchEventTarget->document()->defaultView(),
-                                               m_firstTouchScreenPos.x(), m_firstTouchScreenPos.y(),
-                                               m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
-                                               event.ctrlKey(), event.altKey(), event.shiftKey(),
-                                               event.metaKey());
+    bool defaultPrevented = false;
 
-    ExceptionCode ec = 0;
-    m_touchEventTarget->dispatchEvent(ev.get(), ec);
+    if (releasedTouches->length() > 0) {
+        eventName = &eventNames().touchendEvent;
+        RefPtr<TouchEvent> endEv = 
+            TouchEvent::create(touches.get(), targetTouches.get(), releasedTouches.get(),
+                                                   *eventName, m_touchEventTarget->document()->defaultView(),
+                                                   m_firstTouchScreenPos.x(), m_firstTouchScreenPos.y(),
+                                                   m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
+                                                   event.ctrlKey(), event.altKey(), event.shiftKey(),
+                                                   event.metaKey());
+        ExceptionCode ec = 0;
+        m_touchEventTarget->dispatchEvent(endEv.get(), ec);
+        defaultPrevented = endEv->defaultPrevented();
+    }
+    if (pressedTouches->length() > 0) {
+        // Add pressed touchpoints to touches and targetTouches
+        for (int i = 0; i < pressedTouches->length(); ++i) {
+            touches->append(pressedTouches->item(i));
+            if (m_touchEventTarget == pressedTouches->item(i)->target())
+                targetTouches->append(pressedTouches->item(i));
+        }
+
+        eventName = &eventNames().touchstartEvent;
+        RefPtr<TouchEvent> startEv = 
+            TouchEvent::create(touches.get(), targetTouches.get(), pressedTouches.get(),
+                                                   *eventName, m_touchEventTarget->document()->defaultView(),
+                                                   m_firstTouchScreenPos.x(), m_firstTouchScreenPos.y(),
+                                                   m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
+                                                   event.ctrlKey(), event.altKey(), event.shiftKey(),
+                                                   event.metaKey());
+        ExceptionCode ec = 0;
+        m_touchEventTarget->dispatchEvent(startEv.get(), ec);
+        defaultPrevented |= startEv->defaultPrevented();
+    }
+    if (movedTouches->length() > 0) {
+        eventName = &eventNames().touchmoveEvent;
+        RefPtr<TouchEvent> moveEv = 
+            TouchEvent::create(touches.get(), targetTouches.get(), movedTouches.get(),
+                                                   *eventName, m_touchEventTarget->document()->defaultView(),
+                                                   m_firstTouchScreenPos.x(), m_firstTouchScreenPos.y(),
+                                                   m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
+                                                   event.ctrlKey(), event.altKey(), event.shiftKey(),
+                                                   event.metaKey());
+        ExceptionCode ec = 0;
+        m_touchEventTarget->dispatchEvent(moveEv.get(), ec);
+        defaultPrevented |= moveEv->defaultPrevented();
+    }
 
     if (event.type() == TouchEnd)
         m_touchEventTarget = 0;
 
-    m_previousTouchEvent = ev;
-
-    return ev->defaultPrevented();
+    return defaultPrevented;
 }
 #endif
 
diff --git a/WebCore/page/EventHandler.h b/WebCore/page/EventHandler.h
index 53133e4..6a12e70 100644
--- a/WebCore/page/EventHandler.h
+++ b/WebCore/page/EventHandler.h
@@ -409,7 +409,6 @@ private:
     RefPtr<Node> m_touchEventTarget;
     IntPoint m_firstTouchScreenPos;
     IntPoint m_firstTouchPagePos;
-    RefPtr<TouchEvent> m_previousTouchEvent;
 #endif
 };
 
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index aced797..02db3a5 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,16 @@
+2010-01-07  Kim Grönholm  <kim.gronholm at nomovok.com>
+
+        Reviewed by Antti Koivisto.
+
+        Wrong state and TouchLists in TouchEvents
+        https://bugs.webkit.org/show_bug.cgi?id=32878
+
+        * DumpRenderTree/qt/EventSenderQt.cpp:
+        (EventSender::touchStart):
+        (EventSender::touchEnd):
+        (EventSender::clearTouchPoints):
+        * DumpRenderTree/qt/EventSenderQt.h:
+
 2010-01-07  Andras Becsi  <abecsi at inf.u-szeged.hu>
 
         Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp b/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp
index cbc7953..73a9934 100644
--- a/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/EventSenderQt.cpp
@@ -330,7 +330,11 @@ void EventSender::setTouchModifier(const QString &modifier, bool enable)
 void EventSender::touchStart()
 {
 #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
-    sendTouchEvent(QEvent::TouchBegin);
+    if (!m_touchActive) {
+        sendTouchEvent(QEvent::TouchBegin);
+        m_touchActive = true;
+    } else
+        sendTouchEvent(QEvent::TouchUpdate);
 #endif
 }
 
@@ -345,8 +349,12 @@ void EventSender::touchEnd()
 {
 #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
     for (int i = 0; i < m_touchPoints.count(); ++i)
-        m_touchPoints[i].setState(Qt::TouchPointReleased);
+        if (m_touchPoints[i].state() != Qt::TouchPointReleased) {
+            sendTouchEvent(QEvent::TouchUpdate);
+            return;
+        }
     sendTouchEvent(QEvent::TouchEnd);
+    m_touchActive = false;
 #endif
 }
 
@@ -355,6 +363,7 @@ void EventSender::clearTouchPoints()
 #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
     m_touchPoints.clear();
     m_touchModifiers = Qt::KeyboardModifiers();
+    m_touchActive = false;
 #endif
 }
 
diff --git a/WebKitTools/DumpRenderTree/qt/EventSenderQt.h b/WebKitTools/DumpRenderTree/qt/EventSenderQt.h
index c17732f..f6cfc7c 100644
--- a/WebKitTools/DumpRenderTree/qt/EventSenderQt.h
+++ b/WebKitTools/DumpRenderTree/qt/EventSenderQt.h
@@ -86,6 +86,7 @@ private:
 #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
     QList<QTouchEvent::TouchPoint> m_touchPoints;
     Qt::KeyboardModifiers m_touchModifiers;
+    bool m_touchActive;
 #endif
 };
 #endif //  EventSenderQt_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list