OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head><title>Tests that a momentum scroll (i.e. a fling) doesn't jump vertically
</title></head> |
| 4 <body> |
| 5 <div id="box" style="height:800px; background: red; border:2px solid black; widt
h:100%"></div> |
| 6 <div id="info">This test requires DRT.</div> |
| 7 <script> |
| 8 if (window.internals) { |
| 9 document.getElementById('info').style.visibility = 'hidden'; |
| 10 internals.settings.setMockScrollbarsEnabled(false); |
| 11 |
| 12 // These trackpad scroll events first go up, then left, then down & left
. All events except the last 2 were obtained by recording real gesture data. The
goal is to get rubber-banding to occur while maintaining high velocity in the X
and Y directions. |
| 13 var trackpadScrollEvents = [ |
| 14 ["scrollBegin"], |
| 15 ["scroll", -1, 4], |
| 16 ["scroll", -5, 14], |
| 17 ["scroll", -5, 23], |
| 18 ["scroll", -12, 57], |
| 19 ["scroll", -11, 68], |
| 20 ["scroll", -9, 85], |
| 21 ["scroll", -3, 77], |
| 22 ["scroll", -1, 109], |
| 23 ["scroll", 4, 105], |
| 24 ["scroll", 22, 106], |
| 25 ["scroll", 47, 60], |
| 26 ["scroll", 102, 32], |
| 27 ["scroll", 210, -1], |
| 28 ["scroll", 281, -23], |
| 29 ["scroll", 453, -103], |
| 30 ["scroll", 600, -223], |
| 31 ["scroll", 800, -303], |
| 32 ["scrollEnd"], |
| 33 ["momentumBegin", 555, -120], |
| 34 ["momentumEnd"] |
| 35 ]; |
| 36 |
| 37 function queueTimeout(index) |
| 38 { |
| 39 setTimeout(function() { runTimeout(index); }, 5); |
| 40 } |
| 41 |
| 42 // Replays the event at position |index|. |
| 43 function runTimeout(index) |
| 44 { |
| 45 var name = trackpadScrollEvents[index][0]; |
| 46 if (name == "scrollBegin") { |
| 47 eventSender.trackpadScrollBegin(); |
| 48 } else if (name == "scroll") { |
| 49 var deltaX = trackpadScrollEvents[index][1]; |
| 50 var deltaY = trackpadScrollEvents[index][2]; |
| 51 eventSender.trackpadScroll(deltaX, deltaY, false, true); |
| 52 } else if (name == "scrollEnd") { |
| 53 eventSender.trackpadScrollEnd(); |
| 54 } else if (name == "momentumBegin") { |
| 55 var deltaX = trackpadScrollEvents[index][1]; |
| 56 var deltaY = trackpadScrollEvents[index][2]; |
| 57 eventSender.mouseMomentumBegin2(deltaX, deltaY, false, true); |
| 58 } else if (name == "momentumEnd") { |
| 59 eventSender.mouseMomentumEnd(); |
| 60 } |
| 61 |
| 62 // Queues another event, if one is available. |
| 63 if (index + 1 < trackpadScrollEvents.length) { |
| 64 queueTimeout(index + 1); |
| 65 } |
| 66 } |
| 67 |
| 68 // Queue the first event for replay. |
| 69 queueTimeout(0); |
| 70 |
| 71 // The ScrollElasticityController receives callbacks every 16ms, and ani
mates the release effect of the rubber-band. Wait for 2 seconds to give the anim
ation time to settle. |
| 72 testRunner.waitUntilDone(); |
| 73 setTimeout(function() { |
| 74 document.getElementById('box').style.background = 'green'; |
| 75 // The left margin should have rebounded back to 0. |
| 76 if (document.documentElement.scrollLeft != 0) { |
| 77 document.getElementById('box').style.background = 'yellow'; |
| 78 } |
| 79 // The content should be scrolled to the bottom. |
| 80 var expectedScrollTop = document.documentElement.scrollHeight - docu
ment.documentElement.clientHeight; |
| 81 if (document.documentElement.scrollTop != expectedScrollTop) { |
| 82 document.getElementById('box').style.background = 'yellow'; |
| 83 } |
| 84 testRunner.notifyDone(); |
| 85 }, 2000); |
| 86 } |
| 87 </script> |
| 88 </body> |
| 89 </html> |
OLD | NEW |