| <!DOCTYPE html> |
| <style> |
| body { |
| height: 2000px; |
| width: 2000px; |
| } |
| </style> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script> |
| var pageZoomFactor = 1.25; |
| var pageScaleFactor = 2; |
| var scrollbarThicknessInCSSPixels; |
| |
| if (window.internals) |
| internals.settings.setVisualViewportEnabled(true); |
| |
| function viewport() { |
| return window.visualViewport; |
| } |
| |
| var test = async_test('Verify viewport dimensions exclude scrollbars.'); |
| |
| var doAfterZooming = test.step_func(function() { |
| window.scrollTo(0, 0); |
| scrollbarThicknessInCSSPixels /= pageScaleFactor; |
| |
| assert_equals( |
| viewport().width, |
| 800 / pageScaleFactor - scrollbarThicknessInCSSPixels, |
| "Width with page scale"); |
| assert_equals( |
| viewport().height, |
| 600 / pageScaleFactor - scrollbarThicknessInCSSPixels, |
| "Height with page scale"); |
| |
| window.internals.setPageZoomFactor(pageZoomFactor); |
| |
| // Since the scrollbars don't change size to the user with page zoom, |
| // they're actually smaller in CSS pixels. |
| scrollbarThicknessInCSSPixels /= pageZoomFactor; |
| assert_equals( |
| viewport().width, |
| 800 / pageScaleFactor / pageZoomFactor - scrollbarThicknessInCSSPixels, |
| "Width with page scale and page zoom"); |
| assert_equals( |
| viewport().height, |
| 600 / pageScaleFactor / pageZoomFactor - scrollbarThicknessInCSSPixels, |
| "Height with page scale and page zoom"); |
| test.done(); |
| }); |
| |
| function getUIScript() { |
| return `(function() { |
| uiController.zoomToScale(${pageScaleFactor}, function() { |
| uiController.uiScriptComplete(uiController.zoomScale); |
| }); |
| })();`; |
| } |
| |
| window.onload = function() { |
| scrollbarThicknessInCSSPixels = window.innerWidth - document.documentElement.clientWidth; |
| testRunner.runUIScript(getUIScript(), function(zoomScale) { |
| doAfterZooming(); |
| }); |
| }; |
| </script> |