Manually revert http://trac.webkit.org/changeset/136012
authorrjkroege@chromium.org <rjkroege@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Jan 2013 18:41:04 +0000 (18:41 +0000)
committerrjkroege@chromium.org <rjkroege@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 Jan 2013 18:41:04 +0000 (18:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106580

Reviewed by Dimitri Glazkov.

Source/WebCore:

136012 broke touch-scrolling of an overflow div in an iframe. Revert manually
to work around conflicts.

* page/EventHandler.cpp:
(WebCore::EventHandler::handleWheelEvent):

LayoutTests:

* fast/events/touch/gesture/touch-gesture-scroll-remove-node-expected.txt: Removed.
* fast/events/touch/gesture/touch-gesture-scroll-remove-node.html: Removed.

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

LayoutTests/ChangeLog
LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node-expected.txt [deleted file]
LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node.html [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/page/EventHandler.cpp

index fae5b78..d891514 100644 (file)
@@ -1,3 +1,13 @@
+2013-01-10  Robert Kroeger  <rjkroege@chromium.org>
+
+        Manually revert http://trac.webkit.org/changeset/136012
+        https://bugs.webkit.org/show_bug.cgi?id=106580
+
+        Reviewed by Dimitri Glazkov.
+
+        * fast/events/touch/gesture/touch-gesture-scroll-remove-node-expected.txt: Removed.
+        * fast/events/touch/gesture/touch-gesture-scroll-remove-node.html: Removed.
+
 2013-01-10  Robert Hogan  <robert@webkit.org>
 
         REGRESSION(r136967): margin-top + overflow:hidden causes incorrect layout for internal floated elements
diff --git a/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node-expected.txt b/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node-expected.txt
deleted file mode 100644 (file)
index 34d5149..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-This tests gesture event scrolling of a div where the element the scrolling starts on is removed from an onscroll event handler.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-begin scroll
-scroll up
-PASS scroller.scrollTop is 96
-PASS scroller.scrollLeft is 0
-PASS wheelCount is 1
-PASS scrollCount is 1
-PASS typeof cache[2] is typeof undefined
-scroll down
-PASS scroller.scrollTop is 0
-PASS scroller.scrollLeft is 0
-PASS wheelCount is 2
-PASS scrollCount is 2
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-
diff --git a/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node.html b/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-remove-node.html
deleted file mode 100644 (file)
index 0c633b5..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE=html>
-<html>
-<head>
-<script src="../../../js/resources/js-test-pre.js"></script>
-<script src="resources/gesture-helpers.js"></script>
-<style>
-  #spacing {
-    width: 200px;
-    height: 120px;
-  }
-  #scroller {
-    border: 1px solid #777;
-    box-sizing: content-box;
-    height: 300px;
-    margin: 20px;
-    overflow-x: hidden;
-    overflow-y: auto;
-    width: 100px
-  }
-  .spacer {
-    box-sizing: border-box;
-    display: block;
-    overflow: hidden;
-    visibility: hidden;
-  }
-  .list-item {
-    line-height: 30px;
-    text-align: center;
-  }
-</style>
-</head>
-<body onload="runTest();">
-  <div id="spacing"></div>
-  <div id="scroller">
-    <div id = "top-spacer" class="spacer"></div>
-
-    <div id = "bottom-spacer" class="spacer"></div>
-  </div>
-<script>
-var cache = {};
-
-/* One more that the maximum that can be fully fit on screen. */
-var maxVisibleItems = 11;
-
-var listSize = 300;
-
-var itemHeight = 30;
-
-function $(name) {
-  return document.getElementById(name);
-}
-
-function onScroll(e) {
-  redraw();
-}
-
-function redraw() {
-  // Create new items and add to cache.
-  var top = $('scroller').scrollTop;
-  var first = Math.floor(top / 30);
-  if (first > listSize - maxVisibleItems)
-    first = listSize - maxVisibleItems;
-  var newItems = [];
-  for (var i = 0; i < maxVisibleItems; i++) {
-    var index = first + i;
-    if (cache[index] == undefined) {
-      var element = document.createElement('div');
-      element.className = 'list-item';
-      element.textContent = String(index+1);
-      element.data = {};
-      element.data.index = index;
-      cache[index] = element;
-      newItems.push(element);
-    }
-  }
-  // Remove items that are not visible.
-  for (var i = 0; i < first; i++) {
-    if (cache[i])
-      delete cache[i];
-  }
-  for (var i = first + maxVisibleItems; i < listSize; i++) {
-    if (cache[i])
-      delete cache[i];
-  }
-  // Pad spacer elements to preserve height of scrollable list.
-  $('top-spacer').style.height = (first * itemHeight) + 'px';
-  $('bottom-spacer').style.height =
-      ((listSize - maxVisibleItems - first) * 30) + 'px';
-
-  // Remove off-screen elements.
-  var anchor = $('bottom-spacer');
-  var parent = $('scroller');
-  for (var item = $('top-spacer').nextSibling; item != anchor; ) {
-    if (!item.classList || !item.classList.contains('list-item')) {
-      item = item.nextSibling;
-      continue;
-    }
-    if (!cache[item.data.index]) {
-      var next = item.nextSibling;
-      scroller.removeChild(item);
-      item = next;
-    } else {
-      item = item.nextSibling;
-    }
-  }
-
-  // Insert new on-screen elements.
-  var referenceElement = $('top-spacer').nextSibling;
-  for (var i = 0; i < newItems.length; i++) {
-    var index = newItems[i].data.index;
-    while (referenceElement != anchor && (!referenceElement.classList ||
-           !referenceElement.classList.contains('list-item') ||
-           referenceElement.data.index < index)) {
-      referenceElement = referenceElement.nextSibling;
-    }
-    parent.insertBefore(newItems[i], referenceElement);
-  }
-}
-
-$('scroller').addEventListener('scroll', onScroll);
-redraw();
-
-if (window.testRunner)
-    testRunner.waitUntilDone();
-
-var scrollCount = 0;
-var wheelCount = 0;
-var nextStep;
-var scrollIndex = 2;
-var startPositionX;
-var startPositionY;
-var scrollAmount;
-
-function firstStep() {
-    debug("begin scroll");
-    var item = cache[scrollIndex];
-    startPositionX = item.offsetLeft + 5;
-    startPositionY = item.offsetTop + 5;
-    eventSender.gestureScrollBegin(startPositionX, startPositionY);
-
-    var aboveScroller = scroller.offsetTop - 30;
-    scrollAmount = startPositionY - aboveScroller;
-    debug("scroll up");
-
-    nextStep = secondStep;
-
-    eventSender.gestureScrollUpdate(0, -scrollAmount);
-    shouldBe('scroller.scrollTop', '' + scrollAmount);
-    shouldBe('scroller.scrollLeft', '0');
-    shouldBe('wheelCount', '1');
-}
-
-function secondStep() {
-    shouldBe('scrollCount', '1');
-    shouldBe('typeof cache[' + scrollIndex + ']', 'typeof undefined');
-    debug("scroll down");
-
-    nextStep = thirdStep;
-
-    eventSender.gestureScrollUpdate(0, scrollAmount);
-    shouldBe('scroller.scrollTop', '0');
-    shouldBe('scroller.scrollLeft', '0');
-    shouldBe('wheelCount', '2');
-}
-
-function thirdStep() {
-    shouldBe('scrollCount', '2');
-    testRunner.notifyDone();
-}
-
-function runTest()
-{
-    var scroller = $('scroller');
-    scroller.addEventListener("scroll", function() {
-        ++scrollCount;
-        setTimeout(function() {
-            nextStep();
-        }, 0);
-    });
-    window.addEventListener("mousewheel", function() {
-        ++wheelCount;
-    });
-
-    if (window.eventSender && window.testRunner) {
-        description('This tests gesture event scrolling of a div where the element the scrolling starts on is removed from an onscroll event handler.');
-        if (checkTestDependencies()) {
-            firstStep();
-        } else {
-            exitIfNecessary();
-        }
-    } else {
-        debug("This test requires DumpRenderTree.");
-    }
-}
-</script>
-</body>
-</html>
index fec44ea..f93900f 100644 (file)
@@ -1,3 +1,16 @@
+2013-01-10  Robert Kroeger  <rjkroege@chromium.org>
+
+        Manually revert http://trac.webkit.org/changeset/136012
+        https://bugs.webkit.org/show_bug.cgi?id=106580
+
+        Reviewed by Dimitri Glazkov.
+
+        136012 broke touch-scrolling of an overflow div in an iframe. Revert manually
+        to work around conflicts.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::handleWheelEvent):
+
 2013-01-10  Robert Hogan  <robert@webkit.org>
 
         REGRESSION(r136967): margin-top + overflow:hidden causes incorrect layout for internal floated elements
index 2576c9d..ebe9a37 100644 (file)
@@ -276,18 +276,6 @@ static inline bool scrollNode(float delta, ScrollGranularity granularity, Scroll
     return enclosingBox->scroll(delta < 0 ? negativeDirection : positiveDirection, granularity, absDelta, stopNode);
 }
 
-static Node* closestScrollableNodeInDocumentIfPossible(Node* node)
-{
-    for (Node* scrollableNode = node; scrollableNode; scrollableNode = scrollableNode->parentNode()) {
-        if (scrollableNode->isDocumentNode())
-            break;
-        RenderObject* renderer = scrollableNode->renderer();
-        if (renderer && renderer->isBox() && toRenderBox(renderer)->canBeScrolledAndHasScrollableArea())
-            return scrollableNode;
-    }
-    return node;
-}
-
 #if ENABLE(GESTURE_EVENTS)
 static inline bool shouldGesturesTriggerActive()
 {
@@ -2314,7 +2302,7 @@ bool EventHandler::handleWheelEvent(const PlatformWheelEvent& e)
 
     if (useLatchedWheelEventNode) {
         if (!m_latchedWheelEventNode) {
-            m_latchedWheelEventNode = closestScrollableNodeInDocumentIfPossible(result.innerNode());
+            m_latchedWheelEventNode = result.innerNode();
             m_widgetIsLatched = result.isOverWidget();
         }