Unreviewed, rolling out r139044.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 Jan 2013 22:52:31 +0000 (22:52 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 Jan 2013 22:52:31 +0000 (22:52 +0000)
http://trac.webkit.org/changeset/139044
https://bugs.webkit.org/show_bug.cgi?id=106702

Caused various scrolling anomolies on Mac with drag and drop
(Requested by smfr on #webkit).

Patch by Sheriff Bot <webkit.review.bot@gmail.com> on 2013-01-11

Source/WebCore:

* page/AutoscrollController.cpp:
(WebCore::AutoscrollController::AutoscrollController):
(WebCore::AutoscrollController::autoscrollTimerFired):
* page/AutoscrollController.h:
(WebCore):
(AutoscrollController):
* page/EventHandler.cpp:
(WebCore::EventHandler::updateDragAndDrop):
* rendering/RenderBox.cpp:
(WebCore):
(WebCore::RenderBox::autoscroll):
* rendering/RenderBox.h:
(RenderBox):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::autoscroll):
* rendering/RenderLayer.h:
(RenderLayer):
* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::autoscroll):
* rendering/RenderListBox.h:
(RenderListBox):
* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::autoscroll):
* rendering/RenderTextControlSingleLine.h:
(RenderTextControlSingleLine):

Source/WebKit/chromium:

* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::WebViewImpl):
(WebKit::WebViewImpl::dragSourceEndedAt):
(WebKit::WebViewImpl::dragSourceMovedTo):
(WebKit::WebViewImpl::dragTargetDrop):
(WebKit::WebViewImpl::dragTargetDragEnterOrOver):
* src/WebViewImpl.h:
(WebKit):

LayoutTests:

* fast/events/drag-and-drop-autoscroll-expected.txt: Removed.
* fast/events/drag-and-drop-autoscroll.html: Removed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@139503 268f45cc-cd09-0410-ab3c-d52691b4dbfc

18 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/events/drag-and-drop-autoscroll-expected.txt [deleted file]
LayoutTests/fast/events/drag-and-drop-autoscroll.html [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/page/AutoscrollController.cpp
Source/WebCore/page/AutoscrollController.h
Source/WebCore/page/EventHandler.cpp
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderBox.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderListBox.cpp
Source/WebCore/rendering/RenderListBox.h
Source/WebCore/rendering/RenderTextControlSingleLine.cpp
Source/WebCore/rendering/RenderTextControlSingleLine.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/WebViewImpl.cpp
Source/WebKit/chromium/src/WebViewImpl.h

index 9ea446f..6b02ed8 100644 (file)
@@ -1,3 +1,15 @@
+2013-01-11  Sheriff Bot  <webkit.review.bot@gmail.com>
+
+        Unreviewed, rolling out r139044.
+        http://trac.webkit.org/changeset/139044
+        https://bugs.webkit.org/show_bug.cgi?id=106702
+
+        Caused various scrolling anomolies on Mac with drag and drop
+        (Requested by smfr on #webkit).
+
+        * fast/events/drag-and-drop-autoscroll-expected.txt: Removed.
+        * fast/events/drag-and-drop-autoscroll.html: Removed.
+
 2013-01-11  Rafael Weinstein  <rafaelw@chromium.org>
 
         Prevent HTMLPreloadScanner from fetching resources inside <template>
diff --git a/LayoutTests/fast/events/drag-and-drop-autoscroll-expected.txt b/LayoutTests/fast/events/drag-and-drop-autoscroll-expected.txt
deleted file mode 100644 (file)
index dac163d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Check autoscroll by drag-and-drop
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS scrollable.scrollTop > 0
-For manual testing, drag and drop "Drop Me" to "Scrollable" area.
-
diff --git a/LayoutTests/fast/events/drag-and-drop-autoscroll.html b/LayoutTests/fast/events/drag-and-drop-autoscroll.html
deleted file mode 100644 (file)
index f462bfc..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<html>
-<head>
-<style type="text/css">
-#draggable {
-  padding: 5pt;
-  border: 3px solid #00cc00;
-  background: #00cccc;
-  width: 80px;
-  cursor: hand;
-}
-
-#scrollable {
-    height: 200px;
-    overflow: auto;
-    border: solid 3px #cc0000;
-}
-</style>
-<script>
-function $(id) { return document.getElementById(id); }
-
-function finishTest() {
-    eventSender.mouseUp();
-    $('container').innerHTML = '';
-    window.testRunner.notifyDone();
-}
-
-function testIt() {
-    var draggable = $('draggable');
-    var scrollable = $('scrollable');
-
-    if (!window.eventSender)
-        return;
-
-    eventSender.dragMode = false;
-
-    // Grab draggable
-    eventSender.mouseMoveTo(draggable.offsetLeft + 5, draggable.offsetTop + 5);
-    eventSender.mouseDown();
-
-    // Move mouse to autoscroll border belt.
-    eventSender.mouseMoveTo(scrollable.offsetLeft + 5, scrollable.offsetTop + scrollable.offsetHeight - 10);
-
-    var retryCount = 0;
-
-    function checkScrolled()
-    {
-        if (scrollable.scrollTop > 0) {
-            testPassed('scrollable.scrollTop > 0');
-            finishTest();
-            return;
-        }
-
-        ++retryCount;
-        if (retryCount > 10) {
-            testFailed('No autoscroll');
-            finishTest();
-            return;
-        }
-
-        // Autoscroll is occurred evey 0.05 sec.
-        window.setTimeout(checkScrolled, 50);
-    }
-
-    checkScrolled();
-}
-
-function setUpTest()
-{
-    var scrollable = $('scrollable');
-    for (var i = 0; i < 100; ++i) {
-      var line = document.createElement('div');
-      line.innerHTML = "line " + i;
-      scrollable.appendChild(line);
-    }
-
-    if (!window.eventSender) {
-        console.log('Please run within DumpRenderTree');
-        return;
-    }
-
-    window.jsTestIsAsync = true;
-    window.setTimeout(testIt, 0);
-}
-</script>
-</head>
-<body>
-For manual testing, drag and drop "Drop Me" to "Scrollable" area.
-<div id="container">
-<div id="draggable" draggable="true">Drop Me</div>
-Scrollable
-<div id="scrollable">
-</div>
-</div>
-<script src="../js/resources/js-test-pre.js"></script>
-<script>
-description('Check autoscroll by drag-and-drop');
-setUpTest();
-</script>
-<script src="../js/resources/js-test-post.js"></script>
-</body>
-</html>
index 0857d28..80ede82 100644 (file)
@@ -1,3 +1,38 @@
+2013-01-11  Sheriff Bot  <webkit.review.bot@gmail.com>
+
+        Unreviewed, rolling out r139044.
+        http://trac.webkit.org/changeset/139044
+        https://bugs.webkit.org/show_bug.cgi?id=106702
+
+        Caused various scrolling anomolies on Mac with drag and drop
+        (Requested by smfr on #webkit).
+
+        * page/AutoscrollController.cpp:
+        (WebCore::AutoscrollController::AutoscrollController):
+        (WebCore::AutoscrollController::autoscrollTimerFired):
+        * page/AutoscrollController.h:
+        (WebCore):
+        (AutoscrollController):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::updateDragAndDrop):
+        * rendering/RenderBox.cpp:
+        (WebCore):
+        (WebCore::RenderBox::autoscroll):
+        * rendering/RenderBox.h:
+        (RenderBox):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::autoscroll):
+        * rendering/RenderLayer.h:
+        (RenderLayer):
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::autoscroll):
+        * rendering/RenderListBox.h:
+        (RenderListBox):
+        * rendering/RenderTextControlSingleLine.cpp:
+        (WebCore::RenderTextControlSingleLine::autoscroll):
+        * rendering/RenderTextControlSingleLine.h:
+        (RenderTextControlSingleLine):
+
 2013-01-11  Rafael Weinstein  <rafaelw@chromium.org>
 
         Prevent HTMLPreloadScanner from fetching resources inside <template>
index 82ad619..438e99d 100644 (file)
 #include "Page.h"
 #include "RenderBox.h"
 #include "ScrollView.h"
-#include <wtf/CurrentTime.h>
 
 namespace WebCore {
 
-// Delay time in second for start autoscroll if pointer is in border edge of scrollable element.
-static double autoscrollDelay = 0.2;
-
 // When the autoscroll or the panScroll is triggered when do the scroll every 0.05s to make it smooth
 static const double autoscrollInterval = 0.05;
 
@@ -57,7 +53,6 @@ AutoscrollController::AutoscrollController()
     : m_autoscrollTimer(this, &AutoscrollController::autoscrollTimerFired)
     , m_autoscrollRenderer(0)
     , m_autoscrollType(NoAutoscroll)
-    , m_dragAndDropAutoscrollStartTime(0)
 #if ENABLE(PAN_SCROLLING)
     , m_panScrollButtonPressed(false)
     , m_springLoadedPanScrollInProgress(false)
@@ -149,38 +144,6 @@ void AutoscrollController::updateAutoscrollRenderer()
     m_autoscrollRenderer = renderer && renderer->isBox() ? toRenderBox(renderer) : 0;
 }
 
-void AutoscrollController::updateDragAndDrop(Node* dropTargetNode, const IntPoint& eventPosition, double eventTime)
-{
-    if (!dropTargetNode) {
-        stopAutoscrollTimer();
-        return;
-    }
-
-    RenderBox* scrollable = RenderBox::findAutoscrollable(dropTargetNode->renderer());
-    if (!scrollable) {
-        stopAutoscrollTimer();
-        return;
-    }
-
-    IntSize offset = scrollable->calculateAutoscrollDirection(eventPosition);
-    if (offset.isZero()) {
-        stopAutoscrollTimer();
-        return;
-    }
-
-    m_dragAndDropAutoscrollReferencePosition = eventPosition + offset;
-
-    if (m_autoscrollType == NoAutoscroll) {
-        m_autoscrollType = AutoscrollForDragAndDrop;
-        m_autoscrollRenderer = scrollable;
-        m_dragAndDropAutoscrollStartTime = eventTime;
-        startAutoscrollTimer();
-    } else if (m_autoscrollRenderer != scrollable) {
-        m_dragAndDropAutoscrollStartTime = eventTime;
-        m_autoscrollRenderer = scrollable;
-    }
-}
-
 #if ENABLE(PAN_SCROLLING)
 void AutoscrollController::didPanScrollStart()
 {
@@ -237,20 +200,13 @@ void AutoscrollController::autoscrollTimerFired(Timer<AutoscrollController>*)
 
     Frame* frame = m_autoscrollRenderer->frame();
     switch (m_autoscrollType) {
-    case AutoscrollForDragAndDrop:
-        if (WTF::currentTime() - m_dragAndDropAutoscrollStartTime > autoscrollDelay)
-            m_autoscrollRenderer->autoscroll(m_dragAndDropAutoscrollReferencePosition);
-        break;
-    case AutoscrollForSelection: {
-        EventHandler* eventHandler = frame->eventHandler();
-        if (!eventHandler->mousePressed()) {
+    case AutoscrollForSelection:
+        if (!frame->eventHandler()->mousePressed()) {
             stopAutoscrollTimer();
             return;
         }
-        eventHandler->updateSelectionForMouseDrag();
-        m_autoscrollRenderer->autoscroll(eventHandler->lastKnownMousePosition());
+        m_autoscrollRenderer->autoscroll();
         break;
-    }
     case NoAutoscroll:
         break;
 #if ENABLE(PAN_SCROLLING)
index 4000a17..f671f15 100644 (file)
@@ -34,14 +34,12 @@ namespace WebCore {
 class EventHandler;
 class Frame;
 class FrameView;
-class Node;
 class PlatformMouseEvent;
 class RenderBox;
 class RenderObject;
 
 enum AutoscrollType {
     NoAutoscroll,
-    AutoscrollForDragAndDrop,
     AutoscrollForSelection,
 #if ENABLE(PAN_SCROLLING)
     AutoscrollForPan,
@@ -58,7 +56,6 @@ public:
     void startAutoscrollForSelection(RenderObject*);
     void stopAutoscrollTimer(bool rendererIsBeingDestroyed = false);
     void updateAutoscrollRenderer();
-    void updateDragAndDrop(Node* targetNode, const IntPoint& eventPosition, double eventTime);
 #if ENABLE(PAN_SCROLLING)
     void didPanScrollStart();
     void didPanScrollStop();
@@ -77,8 +74,6 @@ private:
     Timer<AutoscrollController> m_autoscrollTimer;
     RenderBox* m_autoscrollRenderer;
     AutoscrollType m_autoscrollType;
-    IntPoint m_dragAndDropAutoscrollReferencePosition;
-    double m_dragAndDropAutoscrollStartTime;
 #if ENABLE(PAN_SCROLLING)
     IntPoint m_panScrollStartPos;
     bool m_panScrollButtonPressed;
index 5867d92..0da8381 100644 (file)
@@ -1957,8 +1957,6 @@ bool EventHandler::updateDragAndDrop(const PlatformMouseEvent& event, Clipboard*
     if (newTarget && newTarget->isTextNode())
         newTarget = newTarget->parentNode();
 
-    m_autoscrollController->updateDragAndDrop(newTarget.get(), event.position(), event.timestamp());
-
     if (m_dragTarget != newTarget) {
         // FIXME: this ordering was explicitly chosen to match WinIE. However,
         // it is sometimes incorrect when dragging within subframes, as seen with
index 3e810fe..18f3c86 100644 (file)
@@ -81,11 +81,6 @@ static OverrideSizeMap* gOverrideWidthMap = 0;
 static OverrideSizeMap* gOverrideContainingBlockLogicalHeightMap = 0;
 static OverrideSizeMap* gOverrideContainingBlockLogicalWidthMap = 0;
 
-
-// Size of border belt for autoscroll. When mouse pointer in border belt,
-// autoscroll is started.
-static const int autoscrollBeltSize = 20;
-
 bool RenderBox::s_hadOverflowClip = false;
 
 RenderBox::RenderBox(Node* node)
@@ -703,10 +698,10 @@ bool RenderBox::usesCompositedScrolling() const
     return hasOverflowClip() && hasLayer() && layer()->usesCompositedScrolling();
 }
 
-void RenderBox::autoscroll(const IntPoint& position)
+void RenderBox::autoscroll()
 {
     if (layer())
-        layer()->autoscroll(position);
+        layer()->autoscroll();
 }
 
 // There are two kinds of renderer that can autoscroll.
@@ -730,33 +725,6 @@ bool RenderBox::canAutoscroll() const
     return page && page->mainFrame() == frame;
 }
 
-// If specified point is in border belt, returned offset denotes direction of
-// scrolling.
-IntSize RenderBox::calculateAutoscrollDirection(const IntPoint& windowPoint) const
-{
-    if (!frame())
-        return IntSize();
-
-    FrameView* frameView = frame()->view();
-    if (!frameView)
-        return IntSize();
-
-    IntSize offset;
-    IntPoint point = frameView->windowToContents(windowPoint);
-    IntRect box(absoluteBoundingBoxRect());
-
-    if (point.x() < box.x() + autoscrollBeltSize)
-        point.move(-autoscrollBeltSize, 0);
-    else if (point.x() > box.maxX() - autoscrollBeltSize)
-        point.move(autoscrollBeltSize, 0);
-
-    if (point.y() < box.y() + autoscrollBeltSize)
-        point.move(0, -autoscrollBeltSize);
-    else if (point.y() > box.maxY() - autoscrollBeltSize)
-        point.move(0, autoscrollBeltSize);
-    return frameView->contentsToWindow(point) - windowPoint;
-}
-
 RenderBox* RenderBox::findAutoscrollable(RenderObject* renderer)
 {
     while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscroll())) {
index ffecc77..ee73766 100644 (file)
@@ -447,9 +447,8 @@ public:
     virtual bool logicalScroll(ScrollLogicalDirection, ScrollGranularity, float multiplier = 1, Node** stopNode = 0);
     bool canBeScrolledAndHasScrollableArea() const;
     virtual bool canBeProgramaticallyScrolled() const;
-    virtual void autoscroll(const IntPoint&);
+    virtual void autoscroll();
     bool canAutoscroll() const;
-    IntSize calculateAutoscrollDirection(const IntPoint& windowPoint) const;
     static RenderBox* findAutoscrollable(RenderObject*);
     virtual void stopAutoscroll() { }
     virtual void panScroll(const IntPoint&);
index f5ee2c9..5c28416 100644 (file)
@@ -2293,7 +2293,7 @@ LayoutRect RenderLayer::getRectToExpose(const LayoutRect &visibleRect, const Lay
     return LayoutRect(LayoutPoint(x, y), visibleRect.size());
 }
 
-void RenderLayer::autoscroll(const IntPoint& position)
+void RenderLayer::autoscroll()
 {
     Frame* frame = renderer()->frame();
     if (!frame)
@@ -2303,7 +2303,11 @@ void RenderLayer::autoscroll(const IntPoint& position)
     if (!frameView)
         return;
 
-    IntPoint currentDocumentPosition = frameView->windowToContents(position);
+#if ENABLE(DRAG_SUPPORT)
+    frame->eventHandler()->updateSelectionForMouseDrag();
+#endif
+
+    IntPoint currentDocumentPosition = frameView->windowToContents(frame->eventHandler()->lastKnownMousePosition());
     scrollRectToVisible(LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
 }
 
index adb3197..b6bc608 100644 (file)
@@ -373,7 +373,7 @@ public:
     void updateScrollInfoAfterLayout();
 
     bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1);
-    void autoscroll(const IntPoint&);
+    void autoscroll();
 
     void resize(const PlatformMouseEvent&, const LayoutSize&);
     bool inResizeMode() const { return m_inResizeMode; }
index 7139aac..370900e 100644 (file)
@@ -554,7 +554,7 @@ int RenderListBox::scrollToward(const IntPoint& destination)
     return listIndexAtOffset(positionOffset);
 }
 
-void RenderListBox::autoscroll(const IntPoint&)
+void RenderListBox::autoscroll()
 {
     IntPoint pos = frame()->view()->windowToContents(frame()->eventHandler()->lastKnownMousePosition());
 
index 72a9135..3bafbe3 100644 (file)
@@ -84,7 +84,7 @@ private:
     virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint&);
 
     virtual bool canBeProgramaticallyScrolled() const { return true; }
-    virtual void autoscroll(const IntPoint&);
+    virtual void autoscroll();
     virtual void stopAutoscroll();
 
     virtual bool shouldPanScroll() const { return true; }
index 7ea3081..c7f075a 100644 (file)
@@ -381,11 +381,11 @@ bool RenderTextControlSingleLine::textShouldBeTruncated() const
         && style()->textOverflow() == TextOverflowEllipsis;
 }
 
-void RenderTextControlSingleLine::autoscroll(const IntPoint& position)
+void RenderTextControlSingleLine::autoscroll()
 {
     RenderLayer* layer = innerTextElement()->renderBox()->layer();
     if (layer)
-        layer->autoscroll(position);
+        layer->autoscroll();
 }
 
 int RenderTextControlSingleLine::scrollWidth() const
index d7dffe3..af27bf7 100644 (file)
@@ -58,7 +58,7 @@ private:
 
     virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE;
 
-    virtual void autoscroll(const IntPoint&);
+    virtual void autoscroll();
 
     // Subclassed to forward to our inner div.
     virtual int scrollLeft() const;
index 4b11a03..927ee77 100644 (file)
@@ -1,3 +1,21 @@
+2013-01-11  Sheriff Bot  <webkit.review.bot@gmail.com>
+
+        Unreviewed, rolling out r139044.
+        http://trac.webkit.org/changeset/139044
+        https://bugs.webkit.org/show_bug.cgi?id=106702
+
+        Caused various scrolling anomolies on Mac with drag and drop
+        (Requested by smfr on #webkit).
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::WebViewImpl):
+        (WebKit::WebViewImpl::dragSourceEndedAt):
+        (WebKit::WebViewImpl::dragSourceMovedTo):
+        (WebKit::WebViewImpl::dragTargetDrop):
+        (WebKit::WebViewImpl::dragTargetDragEnterOrOver):
+        * src/WebViewImpl.h:
+        (WebKit):
+
 2013-01-11  Tony Chang  <tony@chromium.org>
 
         [chromium] Don't regenerate all bindings when any idl file changes
index f32c5f6..0f20c92 100644 (file)
@@ -53,6 +53,7 @@
 #include "DocumentLoader.h"
 #include "DragController.h"
 #include "DragData.h"
+#include "DragScrollTimer.h"
 #include "DragSession.h"
 #include "Editor.h"
 #include "EventHandler.h"
@@ -413,6 +414,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client)
     , m_autofillPopup(0)
     , m_isTransparent(false)
     , m_tabsToLinks(false)
+    , m_dragScrollTimer(adoptPtr(new DragScrollTimer))
     , m_isCancelingFullScreen(false)
     , m_benchmarkSupport(this)
 #if USE(ACCELERATED_COMPOSITING)
@@ -3236,6 +3238,7 @@ void WebViewImpl::dragSourceEndedAt(
                            false, 0);
     m_page->mainFrame()->eventHandler()->dragSourceEndedAt(pme,
         static_cast<DragOperation>(operation));
+    m_dragScrollTimer->stop();
 }
 
 void WebViewImpl::dragSourceMovedTo(
@@ -3243,6 +3246,7 @@ void WebViewImpl::dragSourceMovedTo(
     const WebPoint& screenPoint,
     WebDragOperation operation)
 {
+    m_dragScrollTimer->triggerScroll(mainFrameImpl()->frameView(), clientPoint);
 }
 
 void WebViewImpl::dragSourceSystemDragEnded()
@@ -3328,6 +3332,8 @@ void WebViewImpl::dragTargetDrop(const WebPoint& clientPoint,
 
     m_dragOperation = WebDragOperationNone;
     m_currentDragData = 0;
+
+    m_dragScrollTimer->stop();
 }
 
 WebDragOperation WebViewImpl::dragTargetDragEnterOrOver(const WebPoint& clientPoint, const WebPoint& screenPoint, DragAction dragAction, int keyModifiers)
@@ -3355,6 +3361,11 @@ WebDragOperation WebViewImpl::dragTargetDragEnterOrOver(const WebPoint& clientPo
 
      m_dragOperation = static_cast<WebDragOperation>(dropEffect);
 
+    if (dragAction == DragOver)
+        m_dragScrollTimer->triggerScroll(mainFrameImpl()->frameView(), clientPoint);
+    else
+        m_dragScrollTimer->stop();
+
     return m_dragOperation;
 }
 
index c308d75..898b638 100644 (file)
@@ -91,6 +91,7 @@ class BatteryClientImpl;
 class ContextFeaturesClientImpl;
 class ContextMenuClientImpl;
 class DeviceOrientationClientProxy;
+class DragScrollTimer;
 class GeolocationClientProxy;
 class LinkHighlight;
 class NonCompositedContentHost;
@@ -816,6 +817,7 @@ private:
 
     typedef HashMap<WTF::String, WTF::String> SettingsMap;
     OwnPtr<SettingsMap> m_inspectorSettingsMap;
+    OwnPtr<DragScrollTimer> m_dragScrollTimer;
 
 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
     // The provider of desktop notifications;