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

bweinstein at apple.com bweinstein at apple.com
Thu Apr 8 00:33:00 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 60ee0fc577e3ff026d45d6d482f720237a206f55
Author: bweinstein at apple.com <bweinstein at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Dec 11 18:46:14 2009 +0000

    Fixes <http://webkit.org/b/32303>.
    Middle-mouse button not firing mousedown DOM event when autoscroll happens.
    
    Reviewed by Adam Roben.
    
    WebCore:
    
    This fix moves the pan scrolling code into Node.cpp, as part of the default event handler.
    We get two wins out of this:
        1) Mousedown DOM events are now fired before pan scrolling.
        2) Calling event.preventDefault() on a middle mouse button will now prevent pan scrolling.
    
    Added tests to show that middle mousedown DOM events are fired when panscrolling happens, and
    that when event.preventDefault is called, pan scrolling doesn't happen.
    
    Tests: platform/win/fast/events/panScroll-event-fired.html
           platform/win/fast/events/panScroll-preventDefault.html
    
    * dom/Node.cpp:
    (WebCore::Node::defaultEventHandler): Moved pan scrolling starting code to here.
    * page/EventHandler.cpp:
    (WebCore::EventHandler::startPanScrolling): Function to initialize scrolling variables and start timer.
    (WebCore::EventHandler::handleMousePressEvent): From here.
    * page/EventHandler.h:
    
    LayoutTests:
    
    Added tests to show that middle mousedown DOM events are fired when panscrolling happens, and
    that when event.preventDefault is called, pan scrolling doesn't happen.
    
    * platform/win/fast/events/panScroll-event-fired-expected.txt: Added.
    * platform/win/fast/events/panScroll-event-fired.html: Added.
    * platform/win/fast/events/panScroll-preventDefault-expected.txt: Added.
    * platform/win/fast/events/panScroll-preventDefault.html: Added.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52008 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index db57e7f..967dcc1 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2009-12-11  Brian Weinstein  <bweinstein at apple.com>
+
+        Reviewed by Adam Roben.
+
+        Fixes <http://webkit.org/b/32303>.
+        Middle-mouse button not firing mousedown DOM event when autoscroll happens.
+        
+        Added tests to show that middle mousedown DOM events are fired when panscrolling happens, and
+        that when event.preventDefault is called, pan scrolling doesn't happen.
+
+        * platform/win/fast/events/panScroll-event-fired-expected.txt: Added.
+        * platform/win/fast/events/panScroll-event-fired.html: Added.
+        * platform/win/fast/events/panScroll-preventDefault-expected.txt: Added.
+        * platform/win/fast/events/panScroll-preventDefault.html: Added.
+
 2009-12-11  Csaba Osztrogonác  <ossy at webkit.org>
 
         [Qt][LayoutTestController] Output of document.write() is vanished by waitUntilDone()/notifyDone()
diff --git a/LayoutTests/platform/win/fast/events/panScroll-event-fired-expected.txt b/LayoutTests/platform/win/fast/events/panScroll-event-fired-expected.txt
new file mode 100644
index 0000000..f12b9b3
--- /dev/null
+++ b/LayoutTests/platform/win/fast/events/panScroll-event-fired-expected.txt
@@ -0,0 +1,4 @@
+CONSOLE MESSAGE: line 14: Mousedown with 1
+Test for bug 32303 This tests that pan scrolling works without event.preventDefault and the middle button mousedown event is fired. To test manually, try to pan scroll inside this div.
+
+Success! Div with overflow was scrolled
diff --git a/LayoutTests/platform/win/fast/events/panScroll-event-fired.html b/LayoutTests/platform/win/fast/events/panScroll-event-fired.html
new file mode 100644
index 0000000..6b4595a
--- /dev/null
+++ b/LayoutTests/platform/win/fast/events/panScroll-event-fired.html
@@ -0,0 +1,46 @@
+<html>
+    <head>
+        <title>Pan Scrolling Test</title>
+    </head>
+    <body>
+        <script>
+            if (window.layoutTestController) {
+                layoutTestController.dumpAsText();
+                layoutTestController.waitUntilDone();
+            }
+            
+            addEventListener('mousedown', 
+                function(event) { 
+                    console.log("Mousedown with " + event.button);
+                }
+            , false);
+        </script>
+        <div id="overflow" style="width:500px; height:150px; overflow:auto; border:2px solid red; padding:10px">
+            <h1>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=32303">bug 32303</a> This tests that pan
+            scrolling works without event.preventDefault and the middle button mousedown event is fired.
+            To test manually, try to pan scroll inside this div.</h1>
+        </div>
+        <p>
+        <div id="console"></div>
+        <script>
+            if (window.eventSender)
+            {
+                eventSender.mouseMoveTo(50, 50);
+                eventSender.mouseDown(1);
+                eventSender.mouseUp(1);
+                eventSender.mouseMoveTo(50, 200);
+                setTimeout(finished, 500);
+            }
+            
+            function finished()
+            {
+                if (document.getElementById('overflow').scrollTop)
+                    document.getElementById('console').innerHTML = "Success! Div with overflow was scrolled";
+                else
+                    document.getElementById('console').innerHTML = "Fail! Div with overflow was not scrolled";
+                
+                window.layoutTestController.notifyDone();
+            }
+        </script>
+    </body>
+</html>
diff --git a/LayoutTests/platform/win/fast/events/panScroll-preventDefault-expected.txt b/LayoutTests/platform/win/fast/events/panScroll-preventDefault-expected.txt
new file mode 100644
index 0000000..67092fc
--- /dev/null
+++ b/LayoutTests/platform/win/fast/events/panScroll-preventDefault-expected.txt
@@ -0,0 +1,4 @@
+CONSOLE MESSAGE: line 14: Mousedown with 1
+Test for bug 32303 This tests that having a preventDefault on mousedown will prevent pan scrolling and the middle button mousedown event is fired. To test manually, try to pan scroll inside this div.
+
+Success! Div with overflow was not scrolled
diff --git a/LayoutTests/platform/win/fast/events/panScroll-preventDefault.html b/LayoutTests/platform/win/fast/events/panScroll-preventDefault.html
new file mode 100644
index 0000000..6f9594d
--- /dev/null
+++ b/LayoutTests/platform/win/fast/events/panScroll-preventDefault.html
@@ -0,0 +1,47 @@
+<html>
+    <head>
+        <title>Pan Scrolling Test</title>
+    </head>
+    <body>
+        <script>
+            if (window.layoutTestController) {
+                layoutTestController.dumpAsText();
+                layoutTestController.waitUntilDone();
+            }
+            
+            addEventListener('mousedown', 
+                function(event) { 
+                    console.log("Mousedown with " + event.button);
+                    event.preventDefault();
+                }
+            , false);
+        </script>
+        <div id="overflow" style="width:500px; height:150px; overflow:auto; border:2px solid red; padding:10px">
+            <h1>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=32303">bug 32303</a> This tests that having a
+            preventDefault on mousedown will prevent pan scrolling and the middle button mousedown event is fired.
+            To test manually, try to pan scroll inside this div.</h1>
+        </div>
+        <p>
+        <div id="console"></div>
+        <script>
+            if (window.eventSender)
+            {
+                eventSender.mouseMoveTo(50, 50);
+                eventSender.mouseDown(1);
+                eventSender.mouseUp(1);
+                eventSender.mouseMoveTo(50, 200);
+                setTimeout(finished, 500);
+            }
+            
+            function finished()
+            {
+                if (document.getElementById('overflow').scrollTop)
+                    document.getElementById('console').innerHTML = "Fail! Div with overflow was scrolled";
+                else
+                    document.getElementById('console').innerHTML = "Success! Div with overflow was not scrolled";
+                
+                window.layoutTestController.notifyDone();
+            }
+        </script>
+    </body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index ff9ef95..4b41d1e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2009-12-11  Brian Weinstein  <bweinstein at apple.com>
+
+        Reviewed by Adam Roben.
+
+        Fixes <http://webkit.org/b/32303>.
+        Middle-mouse button not firing mousedown DOM event when autoscroll happens.
+        
+        This fix moves the pan scrolling code into Node.cpp, as part of the default event handler.
+        We get two wins out of this:
+            1) Mousedown DOM events are now fired before pan scrolling.
+            2) Calling event.preventDefault() on a middle mouse button will now prevent pan scrolling.
+        
+        Added tests to show that middle mousedown DOM events are fired when panscrolling happens, and
+        that when event.preventDefault is called, pan scrolling doesn't happen.
+
+        Tests: platform/win/fast/events/panScroll-event-fired.html
+               platform/win/fast/events/panScroll-preventDefault.html
+
+        * dom/Node.cpp:
+        (WebCore::Node::defaultEventHandler): Moved pan scrolling starting code to here.
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::startPanScrolling): Function to initialize scrolling variables and start timer.
+        (WebCore::EventHandler::handleMousePressEvent): From here.
+        * page/EventHandler.h:
+
 2009-12-11  Chris Marrin  <cmarrin at apple.com>
 
         Reviewed by Adam Roben.
diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp
index a979d8e..f819b65 100644
--- a/WebCore/dom/Node.cpp
+++ b/WebCore/dom/Node.cpp
@@ -2827,6 +2827,27 @@ void Node::defaultEventHandler(Event* event)
         if (event->isTextEvent())
             if (Frame* frame = document()->frame())
                 frame->eventHandler()->defaultTextInputEventHandler(static_cast<TextEvent*>(event));
+#if ENABLE(PAN_SCROLLING)
+    } else if (eventType == eventNames().mousedownEvent) {
+        MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
+        if (mouseEvent->button() == MiddleButton && !this->isLink()) {
+            RenderObject* renderer = this->renderer();
+
+            while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->canBeScrolledAndHasScrollableArea())) {
+                // FIXME: If we start in a frame that can't scroll, we don't want to jump out of it to start scrolling:
+                // <https://bugs.webkit.org/show_bug.cgi?id=32399>.
+                if (!renderer->parent() && renderer->node() == renderer->document() && renderer->document()->ownerElement())
+                    renderer = renderer->document()->ownerElement()->renderer();
+                else
+                    renderer = renderer->parent();
+            }
+
+            if (renderer) {
+                if (Frame* frame = renderer->document()->frame())
+                    frame->eventHandler()->startPanScrolling(renderer);
+            }
+        }
+#endif
     }
 }
 
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 278d87f..1ac2063 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -694,6 +694,14 @@ void EventHandler::autoscrollTimerFired(Timer<EventHandler>*)
 
 #if ENABLE(PAN_SCROLLING)
 
+void EventHandler::startPanScrolling(RenderObject* renderer)
+{
+    m_panScrollInProgress = true;
+    m_panScrollButtonPressed = true;
+    handleAutoscroll(renderer);
+    invalidateClick();
+}
+
 void EventHandler::updatePanScrollState()
 {
     FrameView* view = m_frame->view();
@@ -1193,25 +1201,6 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
         invalidateClick();
         return true;
     }
-
-    if (mouseEvent.button() == MiddleButton && !mev.isOverLink()) {
-        RenderObject* renderer = mev.targetNode()->renderer();
-
-        while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->canBeScrolledAndHasScrollableArea())) {
-            if (!renderer->parent() && renderer->node() == renderer->document() && renderer->document()->ownerElement())
-                renderer = renderer->document()->ownerElement()->renderer();
-            else
-                renderer = renderer->parent();
-        }
-
-        if (renderer) {
-            m_panScrollInProgress = true;
-            m_panScrollButtonPressed = true;
-            handleAutoscroll(renderer);
-            invalidateClick();
-            return true;
-        }
-    }
 #endif
 
     m_clickCount = mouseEvent.clickCount();
diff --git a/WebCore/page/EventHandler.h b/WebCore/page/EventHandler.h
index 420ff00..53133e4 100644
--- a/WebCore/page/EventHandler.h
+++ b/WebCore/page/EventHandler.h
@@ -87,6 +87,7 @@ public:
     Node* mousePressNode() const;
     void setMousePressNode(PassRefPtr<Node>);
 
+    void startPanScrolling(RenderObject*);
     bool panScrollInProgress() { return m_panScrollInProgress; }
     void setPanScrollInProgress(bool inProgress) { m_panScrollInProgress = inProgress; }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list