| <!doctype html> |
| <html> |
| <head> |
| <title>Viewport: page and offset values in iframe</title> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width"> |
| <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="viewport_support.js"></script> |
| <style> |
| iframe { |
| width: 200px; |
| height: 300px; |
| border: 0; |
| } |
| </style> |
| </head> |
| <body> |
| <h1>Viewport: Page and offset values in iframe</h1> |
| <h4> |
| Test Description: This test checks for correct visualViewport values in |
| an iframe. |
| </h4> |
| <iframe></iframe> |
| </body> |
| <script> |
| var iframe = frames[0].window; |
| |
| // Add overflow to the iframe so it can scroll. |
| iframe.document.body.style.width = "2000px"; |
| iframe.document.body.style.height = "2000px"; |
| iframe.scrollTo(1000, 1200); |
| |
| promise_test(async t => { |
| assert_equals(visualViewport.scale, 1, |
| "[PRECONDITION] Start off unzoomed"); |
| assert_equals(visualViewport.offsetLeft, 0, |
| "[PRECONDITION] No offsetLeft to start"); |
| assert_equals(visualViewport.offsetTop, 0, |
| "[PRECONDITION] No offsetTop to start"); |
| |
| // The iframe's visual viewport isn't yet offset |
| assert_equals(iframe.visualViewport.offsetLeft, 0, |
| "offsetLeft must be 0"); |
| assert_equals(iframe.visualViewport.offsetTop, 0, |
| "offsetTop must be 0"); |
| |
| // However, page values should reflect layout viewport scrolling. |
| assert_equals(iframe.visualViewport.pageLeft, 1000, |
| "pageLeft must reflect location in document."); |
| assert_equals(iframe.visualViewport.pageTop, 1200, |
| "pageTop must reflect location in document."); |
| |
| // Zoom in and pan the viewport to ensure the iframe is independent |
| // of the root frame. |
| await pinchZoomIn(); |
| |
| // These values are arbitrary since the amount of pinch-zoom caused |
| // by pinchZoomIn will differ but we only care that the iframe's |
| // values aren't changed. |
| assert_greater_than(visualViewport.scale, 1.2, |
| "Pinch zoom must have increased scale"); |
| assert_greater_than(visualViewport.offsetLeft, 10, |
| "Pinch zoom must have offsetLeft visualViewport"); |
| assert_greater_than(visualViewport.offsetTop, 10, |
| "Pinch zoom must have offsetTop visualViewport"); |
| |
| // The iframe's visualViewport is independent of the root frame's so |
| // none of the values should have changed. |
| assert_equals(iframe.visualViewport.offsetLeft, 0, |
| "After zooming, offsetLeft must remain 0"); |
| assert_equals(iframe.visualViewport.offsetTop, 0, |
| "After zooming, offsetTop must remain 0"); |
| assert_equals(iframe.visualViewport.pageLeft, 1000, |
| "After zooming, pageLeft must reflect location in document."); |
| assert_equals(iframe.visualViewport.pageTop, 1200, |
| "After zooming, pageTop must reflect location in document."); |
| |
| assert_equals(iframe.visualViewport.scale, 1, |
| "Iframe's visualViewport must not be scaled"); |
| }, "VisualViewport page and offset values in iframe"); |
| </script> |
| </html> |