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