| Index: third_party/WebKit/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html
 | 
| diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html b/third_party/WebKit/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html
 | 
| index 36b0d5a1a5e7b44e6028922e77fb3278afe6f843..790c0bfbb22286ea447e149c71c4098e7f569773 100644
 | 
| --- a/third_party/WebKit/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html
 | 
| +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/window-scaled-viewport-properties.html
 | 
| @@ -1,12 +1,9 @@
 | 
| -<!DOCTYPE html>
 | 
| +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
 | 
|  <script src="../../../resources/js-test.js"></script>
 | 
|  <style>
 | 
|    body {
 | 
|      padding: 0px;
 | 
|      margin: 0px;
 | 
| -    /* Overflow hidden so that the size of the scrollbar is not added to
 | 
| -    the innerHeight/Width properties. */
 | 
| -    overflow: hidden;
 | 
|    }
 | 
|  
 | 
|    .spacer {
 | 
| @@ -21,111 +18,136 @@
 | 
|  </style>
 | 
|  <script language="JavaScript" type="text/javascript">
 | 
|      if (window.testRunner && window.internals) {
 | 
| -        // Note that the layout viewport is based on the minimum page scale.
 | 
| -        // Thus, the minimum scale of 0.5 causes the layout viewport to become
 | 
| -        // twice of what we would normally expect.
 | 
|          window.internals.setPageScaleFactorLimits(0.5, 4.0);
 | 
|          window.jsTestIsAsync = true;
 | 
|          testRunner.dumpAsText();
 | 
|          testRunner.waitUntilDone();
 | 
| -        setPrintTestResultsLazily();
 | 
|      }
 | 
|  
 | 
|      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 testInitialScale () {
 | 
| -        debug('===Initial Scale===');
 | 
| +    function testPinchedIn() {
 | 
|          debug('');
 | 
| -        shouldBe('window.innerWidth', '1600');
 | 
| -        shouldBe('window.innerHeight', '1200');
 | 
| -        shouldBe('internals.visualViewportWidth()', '1600');
 | 
| -        shouldBe('internals.visualViewportHeight()', '1200');
 | 
| -    }
 | 
| -
 | 
| -    function jsScrollTo(x, y) {
 | 
| -        window.scrollTo(x, y);
 | 
| -    }
 | 
| -
 | 
| -    function jsScrollBy(x, y) {
 | 
| -        window.scrollBy(x, y);
 | 
| -    }
 | 
| -
 | 
| -    function testScrolls(jsScroll) {
 | 
| -        // Test that the layout and visual viewport viewport scroll.
 | 
| -        jsScroll(100, 200);
 | 
| -        shouldBe('window.scrollX', '100');
 | 
| -        shouldBe('window.scrollY', '200');
 | 
| -        shouldBe('internals.visualViewportScrollX()', '100');
 | 
| -        shouldBe('internals.visualViewportScrollY()', '200');
 | 
| -
 | 
| -        // Test that the scroll doesn't bubble to the visual viewport.
 | 
| -        jsScroll(1500, 1100);
 | 
| -        shouldBe('window.scrollX', '400');
 | 
| -        shouldBe('window.scrollY', '300');
 | 
| -        shouldBe('internals.visualViewportScrollX()', '400');
 | 
| -        shouldBe('internals.visualViewportScrollY()', '300');
 | 
| +        debug('===Pinch Zoom in to 2X===');
 | 
| +        debug('');
 | 
| +        window.internals.setPageScaleFactor(2.0);
 | 
| +        shouldBe('window.innerWidth', '400');
 | 
| +        shouldBe('window.innerHeight', '300');
 | 
| +        shouldBe('window.scrollX', '0');
 | 
| +        shouldBe('window.scrollY', '0');
 | 
|  
 | 
| -        // Reset.
 | 
| +        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 testPinchedIn() {
 | 
| +    function testMaximallyPinchedOut() {
 | 
|          debug('');
 | 
| -        debug('===Pinch Zoom in to 2X===');
 | 
| +        debug('===Pinch Out to 0.5X===');
 | 
|          debug('');
 | 
| -        window.internals.setPageScaleFactor(2.0);
 | 
| -        // Test that the innerWidth, innerHeight, scrollX, scrollY are relative
 | 
| -        // to the layout viewport after page scale.
 | 
| +        window.internals.setPageScaleFactor(0.5);
 | 
|          shouldBe('window.innerWidth', '1600');
 | 
|          shouldBe('window.innerHeight', '1200');
 | 
|          shouldBe('window.scrollX', '0');
 | 
|          shouldBe('window.scrollY', '0');
 | 
|  
 | 
| -        // Test that the visual viewport size changes after page scale.
 | 
| -        shouldBe('internals.visualViewportWidth()', '400');
 | 
| -        shouldBe('internals.visualViewportHeight()', '300');
 | 
| -
 | 
| -        debug('===ScrollBy===');
 | 
| -        testScrolls(jsScrollBy);
 | 
| -        debug('===ScrollTo===');
 | 
| -        testScrolls(jsScrollTo);
 | 
| +        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 testMaximallyPinchedOut() {
 | 
| +    function testOnScroll() {
 | 
|          debug('');
 | 
| -        debug('===Pinch Out to 0.5X===');
 | 
| +        debug('===Test OnScroll===');
 | 
|          debug('');
 | 
| -        window.internals.setPageScaleFactor(0.5);
 | 
| -        shouldBe('window.innerWidth', '1600');
 | 
| -        shouldBe('window.innerHeight', '1200');
 | 
| +        window.internals.setPageScaleFactor(1.0);
 | 
| +        shouldBe('window.innerWidth', '800');
 | 
| +        shouldBe('window.innerHeight', '600');
 | 
|          shouldBe('window.scrollX', '0');
 | 
|          shouldBe('window.scrollY', '0');
 | 
| -        shouldBe('internals.visualViewportWidth()', '1600');
 | 
| -        shouldBe('internals.visualViewportHeight()', '1200');
 | 
|  
 | 
| -        debug('===ScrollBy===');
 | 
| -        testScrolls(jsScrollBy);
 | 
| -        debug('===ScrollTo===');
 | 
| -        testScrolls(jsScrollTo);
 | 
| +        // 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.scrollX;
 | 
| +        window.scrollTo(0, 0);
 | 
|      }
 | 
|  
 | 
|      function runTests() {
 | 
|          if (window.testRunner && window.internals) {
 | 
| -            // TODO(ymalik): The call to setPageScaleFactorLimits should force
 | 
| -            // layout. Fix that instead of forcing layout here.
 | 
|              forceLayout();
 | 
| -            testInitialScale();
 | 
|              testPinchedIn();
 | 
|              testMaximallyPinchedOut();
 | 
| -            finishJSTest();
 | 
| +            testOnScroll();
 | 
|          }
 | 
|      }
 | 
|  
 | 
| 
 |