Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index e60297a38762379674687cb860d2faf4a682c0af..41a8c97725e1d304fadd2d24df0ec9299599b121 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -386,6 +386,133 @@ TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
EXPECT_TRUE(multiplierCheckedAtLeastOnce); |
} |
+TEST_F(WebFrameTest, FixedLayoutLockStopsResizeFromChangingFixedLayoutSize) |
+{ |
+ registerMockedHttpURLLoad("fixed_layout.html"); |
+ |
+ int viewportWidth = 640; |
+ int viewportHeight = 480; |
+ |
+ int fixedLayoutWidth = viewportWidth / 2; |
+ int fixedLayoutHeight = viewportHeight / 2; |
+ |
+ m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html"); |
+ m_webView->enableFixedLayoutMode(true); |
+ m_webView->settings()->setViewportEnabled(true); |
+ m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); |
+ m_webView->setFixedLayoutSizeLock(true); |
+ m_webView->resize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->layout(); |
+ |
+ EXPECT_EQ(fixedLayoutWidth, m_webView->fixedLayoutSize().width); |
+ EXPECT_EQ(fixedLayoutHeight, m_webView->fixedLayoutSize().height); |
+} |
+ |
+TEST_F(WebFrameTest, FixedLayoutLockPreventsResizeFromChangingPageScale) |
+{ |
+ registerMockedHttpURLLoad("fixed_layout.html"); |
+ |
+ int viewportWidth = 640; |
+ int viewportHeight = 480; |
+ |
+ int fixedLayoutWidth = viewportWidth / 2; |
+ int fixedLayoutHeight = viewportHeight / 2; |
+ |
+ m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html"); |
+ m_webView->enableFixedLayoutMode(true); |
+ m_webView->settings()->setViewportEnabled(true); |
+ m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); |
+ m_webView->setFixedLayoutSizeLock(true); |
+ m_webView->resize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->layout(); |
+ float pageScaleFactor = m_webView->pageScaleFactor(); |
+ |
+ m_webView->resize(WebSize(viewportWidth * 2, viewportHeight * 2)); |
+ |
+ EXPECT_EQ(pageScaleFactor, m_webView->pageScaleFactor()); |
+} |
+ |
+TEST_F(WebFrameTest, FixedLayoutLockPreventsLayoutFromChangingPageScale) |
+{ |
+ registerMockedHttpURLLoad("fixed_layout.html"); |
+ |
+ int viewportWidth = 640; |
+ int viewportHeight = 480; |
+ |
+ int fixedLayoutWidth = viewportWidth * 2; |
+ int fixedLayoutHeight = viewportHeight * 2; |
+ |
+ m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html"); |
+ m_webView->enableFixedLayoutMode(true); |
+ m_webView->settings()->setViewportEnabled(true); |
+ m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->resize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->layout(); |
+ float pageScaleFactor = m_webView->pageScaleFactor(); |
+ |
+ m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); |
+ m_webView->setFixedLayoutSizeLock(true); |
+ m_webView->layout(); |
+ |
+ EXPECT_EQ(pageScaleFactor, m_webView->pageScaleFactor()); |
+} |
+ |
+TEST_F(WebFrameTest, FixedLayoutLockPreventsContentRectScaling) |
+{ |
+ registerMockedHttpURLLoad("fixed_layout.html"); |
+ |
+ int viewportWidth = 640; |
+ int viewportHeight = 480; |
+ |
+ FixedLayoutTestWebViewClient client; |
+ client.m_screenInfo.deviceScaleFactor = 1; |
+ |
+ m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html", true, 0, &client); |
+ m_webView->enableFixedLayoutMode(true); |
+ m_webView->settings()->setViewportEnabled(true); |
+ m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->resize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->layout(); |
+ |
+ m_webView->setPageScaleFactor(1, WebPoint()); |
+ int contentRectWidth = m_webView->mainFrame()->visibleContentRect().width; |
+ int contentRectHeight = m_webView->mainFrame()->visibleContentRect().height; |
+ |
+ m_webView->setFixedLayoutSizeLock(true); |
+ m_webView->setPageScaleFactor(2, WebPoint()); |
+ EXPECT_EQ(contentRectWidth, m_webView->mainFrame()->visibleContentRect().width); |
+ EXPECT_EQ(contentRectHeight, m_webView->mainFrame()->visibleContentRect().height); |
+} |
+ |
+TEST_F(WebFrameTest, PreferredSizeAndContentSizeReportedCorrectlyWithZeroHeightFixedLayout) |
+{ |
+ registerMockedHttpURLLoad("200-by-300.html"); |
+ |
+ int windowWidth = 100; |
+ int windowHeight = 100; |
+ int viewportWidth = 100; |
+ int viewportHeight = 0; |
+ int divWidth = 200; |
+ int divHeight = 300; |
+ |
+ FixedLayoutTestWebViewClient client; |
+ client.m_screenInfo.deviceScaleFactor = 1; |
+ |
+ m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "200-by-300.html", true, 0, &client); |
+ m_webView->enableFixedLayoutMode(true); |
+ m_webView->settings()->setViewportEnabled(true); |
+ m_webView->resize(WebSize(windowWidth, windowHeight)); |
+ m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); |
+ m_webView->setFixedLayoutSizeLock(true); |
+ m_webView->layout(); |
+ |
+ EXPECT_EQ(divWidth, m_webView->mainFrame()->contentsSize().width); |
+ EXPECT_EQ(divHeight, m_webView->mainFrame()->contentsSize().height); |
+ |
+ EXPECT_EQ(divWidth, m_webView->contentsPreferredMinimumSize().width); |
+ EXPECT_EQ(divHeight, m_webView->contentsPreferredMinimumSize().height); |
+} |
+ |
TEST_F(WebFrameTest, DeviceScaleFactorUsesDefaultWithoutViewportTag) |
{ |
registerMockedHttpURLLoad("no_viewport_tag.html"); |