Index: LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html |
diff --git a/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html b/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f58a9feb468ec1acfdf88b9bab549394d8a2207a |
--- /dev/null |
+++ b/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html |
@@ -0,0 +1,156 @@ |
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
+<script src="../../../resources/js-test.js"></script> |
+<style> |
+ body { |
+ padding: 0px; |
+ margin: 0px; |
+ } |
+ |
+ .spacer { |
+ position: absolute; |
+ left: 0px; |
+ top: 0px; |
+ margin: 0px; |
+ padding: 0px; |
+ width: 2000px; |
+ height: 1500px; |
+ } |
+</style> |
+<script language="JavaScript" type="text/javascript"> |
+ if (window.testRunner && window.eventSender) { |
+ window.eventSender.setPageScaleFactorLimits(0.5, 4.0); |
+ window.jsTestIsAsync = true; |
+ testRunner.dumpAsText(); |
+ testRunner.waitUntilDone(); |
+ } |
+ |
+ description("This test makes sure the window properties related to the\ |
+ viewport remain correct under pinch-to-zoom."); |
+ |
+ debug('===Unscaled==='); |
+ debug(''); |
+ shouldBe('window.innerWidth', '800'); |
+ shouldBe('window.innerHeight', '600'); |
+ |
+ function testPinchedIn() { |
+ debug(''); |
+ debug('===Pinch Zoom in to 2X==='); |
+ debug(''); |
+ window.eventSender.setPageScaleFactor(2.0, 0, 0); |
+ shouldBe('window.innerWidth', '400'); |
+ shouldBe('window.innerHeight', '300'); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ |
+ window.scrollBy(10, 20); |
+ shouldBe('window.scrollX', '10'); |
+ shouldBe('window.scrollY', '20'); |
+ window.scrollBy(1590, 1180); |
+ shouldBe('window.scrollX', '1600'); |
+ shouldBe('window.scrollY', '1200'); |
+ window.scrollBy(-1600, -1200); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ window.scrollTo(1600, 1200); |
+ shouldBe('window.scrollX', '1600'); |
+ shouldBe('window.scrollY', '1200'); |
+ window.scrollTo(0, 0); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ } |
+ |
+ function testMaximallyPinchedOut() { |
+ debug(''); |
+ debug('===Pinch Out to 0.5X==='); |
+ debug(''); |
+ window.eventSender.setPageScaleFactor(0.5, 0, 0); |
+ shouldBe('window.innerWidth', '1600'); |
+ shouldBe('window.innerHeight', '1200'); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ |
+ window.scrollBy(10, 20); |
+ shouldBe('window.scrollX', '10'); |
+ shouldBe('window.scrollY', '20'); |
+ window.scrollBy(390, 280); |
+ shouldBe('window.scrollX', '400'); |
+ shouldBe('window.scrollY', '300'); |
+ window.scrollBy(-400, -300); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ window.scrollTo(400, 300); |
+ shouldBe('window.scrollX', '400'); |
+ shouldBe('window.scrollY', '300'); |
+ window.scrollTo(0, 0); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ } |
+ |
+ function testOnScroll() { |
+ debug(''); |
+ debug('===Test OnScroll==='); |
+ debug(''); |
+ window.eventSender.setPageScaleFactor(1.0, 0, 0); |
+ shouldBe('window.innerWidth', '800'); |
+ shouldBe('window.innerHeight', '600'); |
+ shouldBe('window.scrollX', '0'); |
+ shouldBe('window.scrollY', '0'); |
+ |
+ // First scroll scrolls only the outer viewport. |
+ // Second scrolls the outer and the inner. |
+ // Third scrolls only the inner. |
+ var scrolls = [100, 400, 100]; |
+ var numScrollsReceived = 0; |
+ var numRAFCalls = 0; |
+ |
+ document.onscroll = function() { |
+ if (numRAFCalls == 0) |
+ return; |
+ |
+ ++numScrollsReceived; |
+ debug('PASS OnScroll called for scroll #' + numScrollsReceived); |
+ if (numScrollsReceived < scrolls.length) { |
+ var scrollAmount = scrolls[numScrollsReceived]; |
+ window.scrollBy(scrollAmount, 0); |
+ } else if (numScrollsReceived == scrolls.length) { |
+ // Make sure scrollTo that moves only the inner viewport also |
+ // triggers a scroll event. |
+ window.scrollTo(1200, 0); |
+ } else { |
+ debug(''); |
+ finishJSTest(); |
+ } |
+ } |
+ |
+ // Scroll events are fired right before RAF so this is a good place to |
+ // make sure event was handled. |
+ var failureSentinel = function() { |
+ if (numRAFCalls == 0) { |
+ window.scrollBy(scrolls[0], 0); |
+ }else if (numRAFCalls > numScrollsReceived) { |
+ testFailed("Failed to receive scroll event #" + (numScrollsReceived+1)); |
+ finishJSTest(); |
+ } |
+ ++numRAFCalls; |
+ window.requestAnimationFrame(failureSentinel); |
+ } |
+ |
+ window.requestAnimationFrame(failureSentinel); |
+ } |
+ |
+ function forceLayout() { |
+ window.scrollTo(0, 0); |
+ } |
+ |
+ function runTests() { |
+ if (window.testRunner && window.eventSender) { |
+ forceLayout(); |
+ testPinchedIn(); |
+ testMaximallyPinchedOut(); |
+ testOnScroll(); |
+ } |
+ } |
+ |
+ onload = runTests; |
+</script> |
+<div class="spacer"></div> |