Simulate user inputs in css/css-overscroll-behavior/overscroll-behavior.html

Use testdriver Action API to simulate wheel scroll actions in
css/css-overscroll-behavior/overscroll-behavior.html.

Bug: 1145677
Change-Id: I0e746a34aa741a16ceaca99af76497efca38829a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2561106
Commit-Queue: Lan Wei <lanwei@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: Lan Wei <lanwei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#848428}
diff --git a/css/css-overscroll-behavior/overscroll-behavior-manual.html b/css/css-overscroll-behavior/overscroll-behavior.html
similarity index 78%
rename from css/css-overscroll-behavior/overscroll-behavior-manual.html
rename to css/css-overscroll-behavior/overscroll-behavior.html
index 97f5298..f018d5c 100644
--- a/css/css-overscroll-behavior/overscroll-behavior-manual.html
+++ b/css/css-overscroll-behavior/overscroll-behavior.html
@@ -1,6 +1,10 @@
 <!doctype html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/css/css-scroll-snap/support/common.js"></script>
 <link rel="help" href="https://drafts.csswg.org/css-overscroll-behavior">
 
 <style>
@@ -57,11 +61,22 @@
 const container = document.getElementById('container');
 const non_scrollable = document.getElementById('non_scrollable');
 const root = document.getElementById('root');
+const btnDone = document.getElementById('btnDone');
 var test = async_test("overscroll-behavior prevents scroll-propagation in the area and direction as specified");
 var instruction1 = document.getElementById("i1");
 var instruction2 = document.getElementById("i2");
 var instruction3 = document.getElementById("i3");
 var instruction4 = document.getElementById("i4");
+var actions_promise;
+
+scrollTop = () => container.scrollTop;
+scrollLeft = () => container.scrollLeft;
+
+function smoothScrollByXY(xPosition, yPosition, xScrollOffset, yScrollOffset) {
+  return new test_driver.Actions()
+      .scroll(xPosition, yPosition, xScrollOffset, yScrollOffset)
+      .send();
+}
 
 function setUpForRoot(offset) {
   root.scrollTop = offset;
@@ -137,7 +152,9 @@
     assert_equals(root.scrollLeft, 0);
     assert_equals(root.scrollTop, 0);
   }, "overscroll-behavior on non-scrollable area should not affect scroll propagation.");
-  test.done();
+  actions_promise.then( () => {
+    test.done();
+  });
 }
 
 var verifyAndSetupForNext = [
@@ -147,7 +164,7 @@
     verify_inner_allowed_and_set_nonscrollable_allows_propagation,
     verify_non_scrollable_allows_propagation];
 
-on_event(document.getElementById("btnDone"), "click", function() {
+on_event(btnDone, "click", function() {
   if (current_test < verifyAndSetupForNext.length)
     verifyAndSetupForNext[current_test++]();
 });
@@ -155,4 +172,27 @@
 var current_test = 0;
 verifyAndSetupForNext[current_test++]();
 
+// Inject scroll actions.
+const test_cases = [
+  { x: 200, y: 500, dx: -200, dy: -200 },
+  { x: 200, y: 500, dx: -200, dy: -200 },
+  { x: 200, y: 500, dx: -200, dy: -200 },
+  { x: 200, y: 100, dx: -200, dy: -200 },
+];
+
+actions_promise = new Promise( (resolve) => {resolve();} );
+for (let action of test_cases) {
+  actions_promise = actions_promise.then(() => {
+    return smoothScrollByXY(action.x, action.y, 0, action.dy);
+  }).then(() => {
+    return waitForAnimationEnd(scrollTop);
+  }).then(() => {
+    return smoothScrollByXY(action.x, action.y, action.dx, 0);
+  }).then(() => {
+    return waitForAnimationEnd(scrollLeft);
+  }).then(() => {
+    return test_driver.click(btnDone);
+  });
+}
+
 </script>