| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>This tests frame flattening when async frame scrolling and frame flattenning settings are changed dynamically</title> |
| <meta charset="utf-8"/> |
| <script src="../../../../../resources/testharness.js"></script> |
| <script src="../../../../../resources/testharnessreport.js"></script> |
| <script> |
| if (window.internals) |
| window.internals.settings.setFrameFlattening("FullyEnabled"); |
| |
| setup({explicit_done: true}); |
| function isUnflatten(id) { |
| var iframe = document.getElementById(id); |
| var iframeBox = iframe.getBoundingClientRect(); |
| var innerDivBox = iframe.contentDocument.body.firstElementChild.getBoundingClientRect(); |
| return iframeBox.width < innerDivBox.width && iframeBox.height < innerDivBox.height; |
| } |
| |
| function frameRelayoutDelay() { |
| return new Promise(resolve => { |
| setTimeout(resolve, 0); |
| }); |
| } |
| |
| async function runTest() { |
| test(() => { assert_false(isUnflatten("iframe")); }, |
| "Frame flattening fully enabled, async frame scrolling disabled"); |
| |
| window.internals.settings.setAsyncFrameScrollingEnabled(true); |
| await frameRelayoutDelay(); |
| test(() => { assert_true(isUnflatten("iframe")); }, |
| "Enabling async frame scrolling"); |
| |
| window.internals.settings.setAsyncFrameScrollingEnabled(false); |
| await frameRelayoutDelay(); |
| test(() => { assert_false(isUnflatten("iframe")); }, |
| "Disabling async frame scrolling"); |
| |
| window.internals.settings.setFrameFlattening("Disabled"); |
| await frameRelayoutDelay(); |
| test(() => { assert_true(isUnflatten("iframe")); }, |
| "Disabling frame flattening"); |
| |
| window.internals.settings.setFrameFlattening("FullyEnabled"); |
| await frameRelayoutDelay(); |
| test(() => { assert_false(isUnflatten("iframe")); }, |
| "Enabling frame flattening"); |
| |
| done(); |
| } |
| </script> |
| </head> |
| <body> |
| <iframe onload="runTest()" id="iframe" style="background: blue; width: 50px; height: 50px;" scrolling="yes" srcdoc="<div style='width: 1000px; height: 1000px;'></div>"></iframe> |
| </body> |
| </html> |