| <!DOCTYPE html> |
| <title>Test visualViewport inside a fenced frame.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-actions.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="resources/utils.js"></script> |
| |
| <body> |
| <script> |
| function pinch_zoom_in() { |
| return new test_driver.Actions() |
| .setContext(window) |
| .addPointer("finger1", "touch") |
| .addPointer("finger2", "touch") |
| .pointerMove(400, 250, {origin: "viewport", sourceName: "finger1"}) |
| .pointerMove(400, 350, {origin: "viewport", sourceName: "finger2"}) |
| .pointerDown({sourceName: "finger1"}) |
| .pointerDown({sourceName: "finger2"}) |
| .pointerMove(400, 200, {origin: "viewport", sourceName: "finger1"}) |
| .pointerMove(400, 400, {origin: "viewport", sourceName: "finger2"}) |
| .pointerUp({sourceName: "finger1"}) |
| .pointerUp({sourceName: "finger2"}) |
| .send(); |
| } |
| |
| promise_test(async () => { |
| // Create a fenced frame, and use the same target name inside of it. |
| const frame = attachFencedFrameContext({html: ` |
| <!DOCTYPE html> |
| <style> |
| body { |
| /* Make fenced frame scrollable */ |
| width: 200vw; |
| height: 200vh; |
| } |
| |
| ::-webkit-scrollbar { |
| display: none; |
| } |
| </style>`}); |
| |
| const is_mac = navigator.platform.indexOf('Mac') == 0; |
| |
| // Mac doesn't support pinch zooming via test driver so just avoid trying. |
| if (!is_mac) { |
| await pinch_zoom_in(); |
| |
| // Run the test zoomed in to ensure the fenced frame doesn't incorrectly |
| // bring values in from its embedder. |
| assert_greater_than(window.visualViewport.scale, 1, |
| '[PRECONDITION] outer window pinch-zoomed in'); |
| } |
| |
| await frame.execute(async (width, height) => { |
| window.scrollTo(30, 40); |
| assert_equals(window.scrollX, 30, '[PRECONDITION] document scrolled x'); |
| assert_equals(window.scrollY, 40, '[PRECONDITION] document scrolled y'); |
| |
| assert_equals(window.visualViewport.width, width, |
| 'visualViewport.width matches fencedframe width'); |
| assert_equals(window.visualViewport.height, height, |
| 'visualViewport.height matches fencedframe height'); |
| assert_equals(window.visualViewport.scale, 1, |
| 'visualViewport.scale is 1'); |
| assert_equals(window.visualViewport.offsetLeft, 0, |
| 'visualViewport.offsetLeft is 0'); |
| assert_equals(window.visualViewport.offsetTop, 0, |
| 'visualViewport.offsetTop is 0'); |
| assert_equals(window.visualViewport.pageLeft, window.scrollX, |
| 'visualViewport.pageLeft reflects only window scroll offset'); |
| assert_equals(window.visualViewport.pageTop, window.scrollY, |
| 'visualViewport.pageTop reflects only window scroll offset'); |
| }, [frame.clientWidth, frame.clientHeight]); |
| |
| }, 'visualViewport values inside fenced frame'); |
| |
| </script> |
| </body> |