| <!DOCTYPE html> |
| <html> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script> |
| description("Tests that requestAnimationFrame is throttled in subframes that are outside the viewport"); |
| window.jsTestIsAsync = true; |
| |
| if (window.internals) |
| internals.setOutsideViewportThrottlingEnabled(true); |
| |
| function checkSubframesThrottled() |
| { |
| shouldBeEqualToString("testFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport"); |
| shouldBeEqualToString("grandChildFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport"); |
| |
| finishJSTest(); |
| } |
| |
| function scrollFrameOutOfView() |
| { |
| debug("Scrolling frame out of view again."); |
| window.scroll(0, 0); |
| |
| shouldBeEqualToString("internals.requestAnimationFrameThrottlingReasons()", "[Unthrottled]"); |
| shouldBecomeEqualToString("testFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport", checkSubframesThrottled); |
| } |
| |
| function scrollFrameIntoView() |
| { |
| shouldBeEqualToString("internals.requestAnimationFrameThrottlingReasons()", "[Unthrottled]"); |
| shouldBeEqualToString("testFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport"); |
| shouldBeEqualToString("grandChildFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport"); |
| |
| debug("Scrolling frame into view."); |
| window.internals.scrollElementToRect(testFrame, 0, 0, 300, 300); |
| |
| debug("RequestAnimationFrame should no longer be throttled"); |
| shouldBeEqualToString("internals.requestAnimationFrameThrottlingReasons()", "[Unthrottled]"); |
| shouldBeEqualToString("grandChildFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "[Unthrottled]"); |
| shouldBeEqualToString("testFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "[Unthrottled]"); |
| |
| scrollFrameOutOfView(); |
| } |
| |
| function runTest() |
| { |
| testFrame = document.getElementById("testFrame"); |
| grandChildFrame = testFrame.contentDocument.getElementById("grandChildFrame"); |
| debug("Frame is initially outside the viewport so requestAnimationFrame should be throttled"); |
| shouldBecomeEqualToString("testFrame.contentWindow.internals.requestAnimationFrameThrottlingReasons()", "OutsideViewport", scrollFrameIntoView); |
| } |
| |
| var i = 0; |
| requestAnimationFrame(function() { |
| i++; |
| }); |
| </script> |
| <div style="position: relative; width: 1600px; height: 2400px; background-color: green;"> |
| <iframe id="testFrame" src="resources/requestAnimationFrame-frame.html" style="position:absolute; left: 600px; top: 800px;" onload="runTest()"></iframe> |
| </div> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |