| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <script src="../../../resources/testharness.js"></script> | 2 <script src="../../../resources/testharness.js"></script> |
| 3 <script src="../../../resources/testharnessreport.js"></script> | 3 <script src="../../../resources/testharnessreport.js"></script> |
| 4 <script src="resources/scroll-anchoring-test.js"></script> |
| 4 <style> | 5 <style> |
| 5 | 6 |
| 6 body { margin: 80px 0; height: 5000px; } | 7 body { margin: 80px 0; height: 5000px; } |
| 7 #a, #b { height: 200px; width: 200px; } | 8 #a, #b { height: 200px; width: 200px; } |
| 8 #c { height: 400px; } | 9 #c { height: 400px; } |
| 9 #left, #c { display: inline-block; width: 200px; vertical-align: top; } | 10 #left, #c { display: inline-block; width: 200px; vertical-align: top; } |
| 10 #a.f { position: fixed; top: 30px; left: 150px; } | 11 #a.f { position: fixed; top: 30px; left: 150px; } |
| 11 #a { background-color: #fcc; } | 12 #a { background-color: #fcc; } |
| 12 #b { background-color: #cfc; } | 13 #b { background-color: #cfc; } |
| 13 #c { background-color: #ccf; } | 14 #c { background-color: #ccf; } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 if (fixed == (y > 300)) | 47 if (fixed == (y > 300)) |
| 47 return; | 48 return; |
| 48 if (y < 130) { | 49 if (y < 130) { |
| 49 // Clear the scroll anchor. | 50 // Clear the scroll anchor. |
| 50 scrollBy(0, 10); | 51 scrollBy(0, 10); |
| 51 scrollBy(0, -10); | 52 scrollBy(0, -10); |
| 52 } | 53 } |
| 53 a.className = (fixed = !fixed) ? "f" : ""; | 54 a.className = (fixed = !fixed) ? "f" : ""; |
| 54 }; | 55 }; |
| 55 | 56 |
| 56 var frame = () => new Promise((resolve) => { requestAnimationFrame(resolve); }); | |
| 57 | |
| 58 var waitFor = function(condition, failmsg, deadline) { | |
| 59 if (!deadline) deadline = Date.now() + 1000; | |
| 60 if (condition()) return Promise.resolve(); | |
| 61 else if (Date.now() > deadline) return Promise.reject(failmsg); | |
| 62 else return frame().then(() => waitFor(condition, failmsg, deadline)); | |
| 63 }; | |
| 64 | |
| 65 var waitFrames = function(n, condition, failmsg) { | |
| 66 var p = Promise.resolve(); | |
| 67 var check = () => (!condition || condition() ? | |
| 68 Promise.resolve() : Promise.reject(failmsg)); | |
| 69 while (n--) | |
| 70 p = p.then(check).then(frame); | |
| 71 return p.then(check); | |
| 72 }; | |
| 73 | |
| 74 var scrollSettlesAt = function(expectedY) { | |
| 75 return waitFor(() => (scrollY == expectedY), | |
| 76 "scroll did not reach " + expectedY) | |
| 77 .then(() => waitFrames(3)) | |
| 78 .then(() => waitFrames(3, () => (scrollY == expectedY), | |
| 79 "scroll did not stay at " + expectedY)); | |
| 80 }; | |
| 81 | |
| 82 promise_test(function() { | 57 promise_test(function() { |
| 83 return Promise.resolve() | 58 return Promise.resolve() |
| 84 | 59 |
| 85 // The 320px offset tests for the first failure mode. | 60 // The 320px offset tests for the first failure mode. |
| 86 .then(() => { eventSender.continuousMouseScrollBy(0, -320); }) | 61 .then(() => { eventSender.continuousMouseScrollBy(0, -320); }) |
| 87 .then(() => scrollSettlesAt(320)) | 62 .then(() => scrollSettlesAt(320)) |
| 88 | 63 |
| 89 .then(() => { scrollTo(0, 0); }) | 64 .then(() => { scrollTo(0, 0); }) |
| 90 .then(() => frame()) | 65 .then(() => frame()) |
| 91 | 66 |
| 92 // The 360px offset tests for the second failure mode. | 67 // The 360px offset tests for the second failure mode. |
| 93 .then(() => { eventSender.continuousMouseScrollBy(0, -360); }) | 68 .then(() => { eventSender.continuousMouseScrollBy(0, -360); }) |
| 94 .then(() => scrollSettlesAt(360)); | 69 .then(() => scrollSettlesAt(360)); |
| 95 | 70 |
| 96 }, "Scroll anchoring with scroll event handlers"); | 71 }, "Scroll anchoring with scroll event handlers"); |
| 97 | 72 |
| 98 </script> | 73 </script> |
| OLD | NEW |