OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
2 <script src="../../../resources/js-test.js"></script> | 2 <script src="../../../resources/js-test.js"></script> |
3 <style> | 3 <style> |
4 body { | 4 body { |
5 padding: 0px; | 5 padding: 0px; |
6 margin: 0px; | 6 margin: 0px; |
7 /* Overflow hidden so that the size of the scrollbar is not added to | |
8 the innerHeight/Width properties. */ | |
9 overflow: hidden; | |
10 } | 7 } |
11 | 8 |
12 .spacer { | 9 .spacer { |
13 position: absolute; | 10 position: absolute; |
14 left: 0px; | 11 left: 0px; |
15 top: 0px; | 12 top: 0px; |
16 margin: 0px; | 13 margin: 0px; |
17 padding: 0px; | 14 padding: 0px; |
18 width: 2000px; | 15 width: 2000px; |
19 height: 1500px; | 16 height: 1500px; |
20 } | 17 } |
21 </style> | 18 </style> |
22 <script language="JavaScript" type="text/javascript"> | 19 <script language="JavaScript" type="text/javascript"> |
23 if (window.testRunner && window.internals) { | 20 if (window.testRunner && window.internals) { |
24 // Note that the layout viewport is based on the minimum page scale. | |
25 // Thus, the minimum scale of 0.5 causes the layout viewport to become | |
26 // twice of what we would normally expect. | |
27 window.internals.setPageScaleFactorLimits(0.5, 4.0); | 21 window.internals.setPageScaleFactorLimits(0.5, 4.0); |
28 window.jsTestIsAsync = true; | 22 window.jsTestIsAsync = true; |
29 testRunner.dumpAsText(); | 23 testRunner.dumpAsText(); |
30 testRunner.waitUntilDone(); | 24 testRunner.waitUntilDone(); |
31 setPrintTestResultsLazily(); | |
32 } | 25 } |
33 | 26 |
34 description("This test makes sure the window properties related to the\ | 27 description("This test makes sure the window properties related to the\ |
35 viewport remain correct under pinch-to-zoom."); | 28 viewport remain correct under pinch-to-zoom."); |
36 | 29 |
37 | 30 debug('===Unscaled==='); |
38 function testInitialScale () { | 31 debug(''); |
39 debug('===Initial Scale==='); | 32 shouldBe('window.innerWidth', '800'); |
40 debug(''); | 33 shouldBe('window.innerHeight', '600'); |
41 shouldBe('window.innerWidth', '1600'); | |
42 shouldBe('window.innerHeight', '1200'); | |
43 shouldBe('internals.visualViewportWidth()', '1600'); | |
44 shouldBe('internals.visualViewportHeight()', '1200'); | |
45 } | |
46 | |
47 function jsScrollTo(x, y) { | |
48 window.scrollTo(x, y); | |
49 } | |
50 | |
51 function jsScrollBy(x, y) { | |
52 window.scrollBy(x, y); | |
53 } | |
54 | |
55 function testScrolls(jsScroll) { | |
56 // Test that the layout and visual viewport viewport scroll. | |
57 jsScroll(100, 200); | |
58 shouldBe('window.scrollX', '100'); | |
59 shouldBe('window.scrollY', '200'); | |
60 shouldBe('internals.visualViewportScrollX()', '100'); | |
61 shouldBe('internals.visualViewportScrollY()', '200'); | |
62 | |
63 // Test that the scroll doesn't bubble to the visual viewport. | |
64 jsScroll(1500, 1100); | |
65 shouldBe('window.scrollX', '400'); | |
66 shouldBe('window.scrollY', '300'); | |
67 shouldBe('internals.visualViewportScrollX()', '400'); | |
68 shouldBe('internals.visualViewportScrollY()', '300'); | |
69 | |
70 // Reset. | |
71 window.scrollTo(0, 0); | |
72 shouldBe('window.scrollX', '0'); | |
73 shouldBe('window.scrollY', '0'); | |
74 } | |
75 | 34 |
76 function testPinchedIn() { | 35 function testPinchedIn() { |
77 debug(''); | 36 debug(''); |
78 debug('===Pinch Zoom in to 2X==='); | 37 debug('===Pinch Zoom in to 2X==='); |
79 debug(''); | 38 debug(''); |
80 window.internals.setPageScaleFactor(2.0); | 39 window.internals.setPageScaleFactor(2.0); |
81 // Test that the innerWidth, innerHeight, scrollX, scrollY are relative | 40 shouldBe('window.innerWidth', '400'); |
82 // to the layout viewport after page scale. | 41 shouldBe('window.innerHeight', '300'); |
83 shouldBe('window.innerWidth', '1600'); | |
84 shouldBe('window.innerHeight', '1200'); | |
85 shouldBe('window.scrollX', '0'); | 42 shouldBe('window.scrollX', '0'); |
86 shouldBe('window.scrollY', '0'); | 43 shouldBe('window.scrollY', '0'); |
87 | 44 |
88 // Test that the visual viewport size changes after page scale. | 45 window.scrollBy(10, 20); |
89 shouldBe('internals.visualViewportWidth()', '400'); | 46 shouldBe('window.scrollX', '10'); |
90 shouldBe('internals.visualViewportHeight()', '300'); | 47 shouldBe('window.scrollY', '20'); |
91 | 48 window.scrollBy(1590, 1180); |
92 debug('===ScrollBy==='); | 49 shouldBe('window.scrollX', '1600'); |
93 testScrolls(jsScrollBy); | 50 shouldBe('window.scrollY', '1200'); |
94 debug('===ScrollTo==='); | 51 window.scrollBy(-1600, -1200); |
95 testScrolls(jsScrollTo); | 52 shouldBe('window.scrollX', '0'); |
| 53 shouldBe('window.scrollY', '0'); |
| 54 window.scrollTo(1600, 1200); |
| 55 shouldBe('window.scrollX', '1600'); |
| 56 shouldBe('window.scrollY', '1200'); |
| 57 window.scrollTo(0, 0); |
| 58 shouldBe('window.scrollX', '0'); |
| 59 shouldBe('window.scrollY', '0'); |
96 } | 60 } |
97 | 61 |
98 function testMaximallyPinchedOut() { | 62 function testMaximallyPinchedOut() { |
99 debug(''); | 63 debug(''); |
100 debug('===Pinch Out to 0.5X==='); | 64 debug('===Pinch Out to 0.5X==='); |
101 debug(''); | 65 debug(''); |
102 window.internals.setPageScaleFactor(0.5); | 66 window.internals.setPageScaleFactor(0.5); |
103 shouldBe('window.innerWidth', '1600'); | 67 shouldBe('window.innerWidth', '1600'); |
104 shouldBe('window.innerHeight', '1200'); | 68 shouldBe('window.innerHeight', '1200'); |
105 shouldBe('window.scrollX', '0'); | 69 shouldBe('window.scrollX', '0'); |
106 shouldBe('window.scrollY', '0'); | 70 shouldBe('window.scrollY', '0'); |
107 shouldBe('internals.visualViewportWidth()', '1600'); | |
108 shouldBe('internals.visualViewportHeight()', '1200'); | |
109 | 71 |
110 debug('===ScrollBy==='); | 72 window.scrollBy(10, 20); |
111 testScrolls(jsScrollBy); | 73 shouldBe('window.scrollX', '10'); |
112 debug('===ScrollTo==='); | 74 shouldBe('window.scrollY', '20'); |
113 testScrolls(jsScrollTo); | 75 window.scrollBy(390, 280); |
| 76 shouldBe('window.scrollX', '400'); |
| 77 shouldBe('window.scrollY', '300'); |
| 78 window.scrollBy(-400, -300); |
| 79 shouldBe('window.scrollX', '0'); |
| 80 shouldBe('window.scrollY', '0'); |
| 81 window.scrollTo(400, 300); |
| 82 shouldBe('window.scrollX', '400'); |
| 83 shouldBe('window.scrollY', '300'); |
| 84 window.scrollTo(0, 0); |
| 85 shouldBe('window.scrollX', '0'); |
| 86 shouldBe('window.scrollY', '0'); |
| 87 } |
| 88 |
| 89 function testOnScroll() { |
| 90 debug(''); |
| 91 debug('===Test OnScroll==='); |
| 92 debug(''); |
| 93 window.internals.setPageScaleFactor(1.0); |
| 94 shouldBe('window.innerWidth', '800'); |
| 95 shouldBe('window.innerHeight', '600'); |
| 96 shouldBe('window.scrollX', '0'); |
| 97 shouldBe('window.scrollY', '0'); |
| 98 |
| 99 // First scroll scrolls only the outer viewport. |
| 100 // Second scrolls the outer and the inner. |
| 101 // Third scrolls only the inner. |
| 102 var scrolls = [100, 400, 100]; |
| 103 var numScrollsReceived = 0; |
| 104 var numRAFCalls = 0; |
| 105 |
| 106 document.onscroll = function() { |
| 107 if (numRAFCalls == 0) |
| 108 return; |
| 109 |
| 110 ++numScrollsReceived; |
| 111 debug('PASS OnScroll called for scroll #' + numScrollsReceived); |
| 112 if (numScrollsReceived < scrolls.length) { |
| 113 var scrollAmount = scrolls[numScrollsReceived]; |
| 114 window.scrollBy(scrollAmount, 0); |
| 115 } else if (numScrollsReceived == scrolls.length) { |
| 116 // Make sure scrollTo that moves only the inner viewport also |
| 117 // triggers a scroll event. |
| 118 window.scrollTo(1200, 0); |
| 119 } else { |
| 120 debug(''); |
| 121 finishJSTest(); |
| 122 } |
| 123 } |
| 124 |
| 125 // Scroll events are fired right before RAF so this is a good place to |
| 126 // make sure event was handled. |
| 127 var failureSentinel = function() { |
| 128 if (numRAFCalls == 0) { |
| 129 window.scrollBy(scrolls[0], 0); |
| 130 }else if (numRAFCalls > numScrollsReceived) { |
| 131 testFailed("Failed to receive scroll event #" + (numScrollsRecei
ved+1)); |
| 132 finishJSTest(); |
| 133 } |
| 134 ++numRAFCalls; |
| 135 window.requestAnimationFrame(failureSentinel); |
| 136 } |
| 137 |
| 138 window.requestAnimationFrame(failureSentinel); |
114 } | 139 } |
115 | 140 |
116 function forceLayout() { | 141 function forceLayout() { |
117 window.scrollX; | 142 window.scrollTo(0, 0); |
118 } | 143 } |
119 | 144 |
120 function runTests() { | 145 function runTests() { |
121 if (window.testRunner && window.internals) { | 146 if (window.testRunner && window.internals) { |
122 // TODO(ymalik): The call to setPageScaleFactorLimits should force | |
123 // layout. Fix that instead of forcing layout here. | |
124 forceLayout(); | 147 forceLayout(); |
125 testInitialScale(); | |
126 testPinchedIn(); | 148 testPinchedIn(); |
127 testMaximallyPinchedOut(); | 149 testMaximallyPinchedOut(); |
128 finishJSTest(); | 150 testOnScroll(); |
129 } | 151 } |
130 } | 152 } |
131 | 153 |
132 onload = runTests; | 154 onload = runTests; |
133 </script> | 155 </script> |
134 <div class="spacer"></div> | 156 <div class="spacer"></div> |
OLD | NEW |