1e87add511e521086d58f64fb4c66c5cfb9a880b
[WebKit-https.git] / LayoutTests / platform / mac-wk2 / tiled-drawing / scrolling / fast-scroll-iframe-latched-mainframe-with-handler.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <link rel="help" href="http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent">
5 <script src="../../../../resources/js-test-pre.js"></script>
6 <script>
7 var wheelCount = 0;
8 function onScrollWheel(evt) {
9     wheelCount = wheelCount + 1;
10 }
11
12 function onLoad() {
13     document.addEventListener("mousewheel", onScrollWheel);
14     window.addEventListener("scroll", onPageScroll);
15 }
16 </script>
17 </head>
18 <body onload="onLoad();">
19 <script>
20
21 var iframeTarget;
22 var pageScrollPositionBefore;
23 var iFrameScrollPositionBefore;
24 var continueCount = 5;
25
26 function onPageScroll()
27 {
28     if (document.body.scrollTop >= 70)
29         checkForScroll();
30 }
31
32 function checkForScroll()
33 {
34     // The IFrame should not have scrolled at all.
35     var pageScrollPositionAfter = document.body.scrollTop;
36     var iFrameScrollPositionAfter = window.frames['target'].document.body.scrollTop;
37
38     if (iFrameScrollPositionBefore != iFrameScrollPositionAfter)
39         testFailed("IFrame consumed wheel events.");
40     else
41         testPassed("IFrame did not receive wheel events.");
42
43     if (window.internals) {
44         document.getElementById('layers').innerText = internals.layerTreeAsText(document,
45             internals.LAYER_TREE_INCLUDES_VISIBLE_RECTS | internals.LAYER_TREE_INCLUDES_TILE_CACHES);
46     }
47
48     testRunner.notifyDone();
49 }
50
51 function scrollTest()
52 {
53     pageScrollPositionBefore = document.body.scrollTop;
54     iFrameScrollPositionBefore = window.frames['target'].document.body.scrollTop;
55
56     iframeTarget = document.getElementById('target');
57
58     // Scroll the #source until we reach the #target.
59     var startPosX = Math.round(iframeTarget.offsetLeft) + 20;
60     var startPosY = Math.round(iframeTarget.offsetTop) - 42; // Slightly more than one wheel scroll away from the IFrame
61     eventSender.mouseMoveTo(startPosX, startPosY);
62     //debug("Mouse moved to (" + startPosX + ", " + startPosY + ")");
63     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
64     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
65     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
66     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
67     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
68     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
69     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
70     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
71     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
72     eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
73     eventSender.callAfterScrollingCompletes(checkForScroll);
74
75     // We should finish via the scroll event; this will fire in the case of failure when the page doesn't scroll.
76 }
77
78 function setupTopLevel()
79 {
80     if (window.eventSender) {
81         testRunner.dumpAsText();
82         testRunner.waitUntilDone();
83
84         eventSender.monitorWheelEvents();
85         setTimeout(scrollTest, 0);
86     } else {
87         var messageLocation = document.getElementById('parent');
88         var message = document.createElement('div');
89         message.innerHTML = "<p>This test is better run under DumpRenderTree. To manually test it, place the mouse pointer<br/>"
90             + "at the top of the page, and then use the mouse wheel or a two-finger swipe to scroll the<br/>"
91             + "down past the IFrame.<br/><br/>"
92             + "You should not see the row of END labels if this test is successful.</p>";
93         messageLocation.appendChild(message);
94     }
95 }
96
97 </script>
98 <div id="parent" style="height: 2000px;">
99     <div id="source" style="height: 100px">
100         Put mouse here and flick downwards
101     </div>
102     <iframe id="target" name="target" style="border:solid 1px green; height: 300px; width: 500px;" 
103      src= "data:text/html,
104      <div id='notToBeScrolled' style='height: 1000px; width: 1000px;'>
105      TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP<br/><br/>
106      This should still be visible inside the frame after you scroll down
107      <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
108      <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
109      <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
110      This should NOT be visible inside the frame after you scroll down<br/>
111      <br/>
112      END END END END END END END END END END END END END
113      </div>
114      "
115      onload="setupTopLevel();"
116      >
117     </iframe>
118 </div>
119 <div id="console"></div>
120 <script>
121 description("Tests that iframe doesn't consume wheel events when scroll ");
122 </script>
123 <pre id="layers">Layer tree goes here</p>
124 <script src="../../../../resources/js-test-post.js"></script>
125 </body>
126 </html>