Modified: branches/chromium/1391a/Source/WebCore/page/FrameView.cpp (140689 => 140690)
--- branches/chromium/1391a/Source/WebCore/page/FrameView.cpp 2013-01-24 17:18:17 UTC (rev 140689)
+++ branches/chromium/1391a/Source/WebCore/page/FrameView.cpp 2013-01-24 17:28:02 UTC (rev 140690)
@@ -1992,7 +1992,7 @@
if (!frame()->view())
return;
- if (needsLayout())
+ if (!useFixedLayout() && needsLayout())
layout();
#if USE(ACCELERATED_COMPOSITING)
Modified: branches/chromium/1391a/Source/WebCore/page/Page.cpp (140689 => 140690)
--- branches/chromium/1391a/Source/WebCore/page/Page.cpp 2013-01-24 17:18:17 UTC (rev 140689)
+++ branches/chromium/1391a/Source/WebCore/page/Page.cpp 2013-01-24 17:28:02 UTC (rev 140690)
@@ -723,9 +723,10 @@
Document* document = mainFrame()->document();
FrameView* view = document->view();
- if (scale == m_pageScaleFactor) {
+ if (m_pageScaleFactor == scale) {
if (view && (view->scrollPosition() != origin || view->delegatesScrolling())) {
- document->updateLayoutIgnorePendingStylesheets();
+ if (!m_settings->applyPageScaleFactorInCompositor())
+ document->updateLayoutIgnorePendingStylesheets();
view->setScrollPosition(origin);
}
return;
@@ -748,7 +749,7 @@
#endif
if (view && view->scrollPosition() != origin) {
- if (document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout())
+ if (!m_settings->applyPageScaleFactorInCompositor() && document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout())
view->layout();
view->setScrollPosition(origin);
}
Modified: branches/chromium/1391a/Source/WebCore/platform/ScrollView.cpp (140689 => 140690)
--- branches/chromium/1391a/Source/WebCore/platform/ScrollView.cpp 2013-01-24 17:18:17 UTC (rev 140689)
+++ branches/chromium/1391a/Source/WebCore/platform/ScrollView.cpp 2013-01-24 17:28:02 UTC (rev 140690)
@@ -288,6 +288,8 @@
return;
m_fixedLayoutSize = newSize;
updateScrollbars(scrollOffset());
+ if (useFixedLayout())
+ contentsResized();
}
bool ScrollView::useFixedLayout() const
@@ -301,6 +303,7 @@
return;
m_useFixedLayout = enable;
updateScrollbars(scrollOffset());
+ contentsResized();
}
IntSize ScrollView::contentsSize() const
Modified: branches/chromium/1391a/Source/WebKit/chromium/src/WebViewImpl.cpp (140689 => 140690)
--- branches/chromium/1391a/Source/WebKit/chromium/src/WebViewImpl.cpp 2013-01-24 17:18:17 UTC (rev 140689)
+++ branches/chromium/1391a/Source/WebKit/chromium/src/WebViewImpl.cpp 2013-01-24 17:28:02 UTC (rev 140690)
@@ -1661,11 +1661,6 @@
#if ENABLE(VIEWPORT)
if (settings()->viewportEnabled()) {
- if (!settingsImpl()->applyPageScaleFactorInCompositor()) {
- // Relayout immediately to obtain the new content width, which is needed
- // to calculate the minimum scale limit.
- view->layout();
- }
computePageScaleFactorLimits();
// When the device rotates:
@@ -3106,6 +3101,10 @@
FrameView* view = page()->mainFrame()->view();
+ // Layout to refresh to the latest contents width.
+ if (view->needsLayout())
+ view->layout();
+
m_minimumPageScaleFactor = min(max(m_pageDefinedMinimumPageScaleFactor, minPageScaleFactor), maxPageScaleFactor);
m_maximumPageScaleFactor = max(min(m_pageDefinedMaximumPageScaleFactor, maxPageScaleFactor), minPageScaleFactor);
if (!m_webSettings->applyDeviceScaleFactorInCompositor()) {
Modified: branches/chromium/1391a/Source/WebKit/chromium/tests/WebFrameTest.cpp (140689 => 140690)
--- branches/chromium/1391a/Source/WebKit/chromium/tests/WebFrameTest.cpp 2013-01-24 17:18:17 UTC (rev 140689)
+++ branches/chromium/1391a/Source/WebKit/chromium/tests/WebFrameTest.cpp 2013-01-24 17:28:02 UTC (rev 140690)
@@ -238,6 +238,8 @@
WebView* webView = static_cast<WebView*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "no_viewport_tag.html", true, 0, &client));
+ webView->settings()->setApplyDeviceScaleFactorInCompositor(true);
+ webView->settings()->setApplyPageScaleFactorInCompositor(true);
webView->settings()->setViewportEnabled(true);
webView->enableFixedLayoutMode(true);
webView->resize(WebSize(viewportWidth, viewportHeight));
@@ -245,17 +247,15 @@
EXPECT_EQ(2, webView->deviceScaleFactor());
- // Device scale factor should be a component of page scale factor in fixed-layout, so a scale of 1 becomes 2.
+ // Page scale factor should not include device scale factor.
webView->setPageScaleFactorLimits(1, 2);
- EXPECT_EQ(2, webView->pageScaleFactor());
+ EXPECT_EQ(1, webView->pageScaleFactor());
// Force the layout to happen before leaving the test.
webView->mainFrame()->contentAsText(1024).utf8();
}
-// Test is disabled because it started failing after r140025.
-// See bug for details: webkit.org/b/107206.
-TEST_F(WebFrameTest, DISABLED_FixedLayoutInitializeAtMinimumPageScale)
+TEST_F(WebFrameTest, FixedLayoutInitializeAtMinimumPageScale)
{
registerMockedHttpURLLoad("fixed_layout.html");
@@ -267,6 +267,8 @@
// Make sure we initialize to minimum scale, even if the window size
// only becomes available after the load begins.
WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html", true, 0, &client));
+ webViewImpl->settings()->setApplyDeviceScaleFactorInCompositor(true);
+ webViewImpl->settings()->setApplyPageScaleFactorInCompositor(true);
webViewImpl->enableFixedLayoutMode(true);
webViewImpl->settings()->setViewportEnabled(true);
webViewImpl->resize(WebSize(viewportWidth, viewportHeight));
@@ -301,12 +303,37 @@
int viewportHeight = 1057;
WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "scale_oscillate.html", true, 0, &client));
+ webViewImpl->settings()->setApplyDeviceScaleFactorInCompositor(true);
+ webViewImpl->settings()->setApplyPageScaleFactorInCompositor(true);
webViewImpl->enableFixedLayoutMode(true);
webViewImpl->settings()->setViewportEnabled(true);
webViewImpl->resize(WebSize(viewportWidth, viewportHeight));
webViewImpl->layout();
}
+TEST_F(WebFrameTest, setPageScaleFactorDoesNotLayout)
+{
+ registerMockedHttpURLLoad("fixed_layout.html");
+
+ FixedLayoutTestWebViewClient client;
+ client.m_screenInfo.deviceScaleFactor = 1;
+ int viewportWidth = 640;
+ int viewportHeight = 480;
+
+ WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html", true, 0, &client));
+ webViewImpl->settings()->setApplyDeviceScaleFactorInCompositor(true);
+ webViewImpl->settings()->setApplyPageScaleFactorInCompositor(true);
+ webViewImpl->enableFixedLayoutMode(true);
+ webViewImpl->settings()->setViewportEnabled(true);
+ webViewImpl->resize(WebSize(viewportWidth, viewportHeight));
+ webViewImpl->layout();
+
+ int prevLayoutCount = webViewImpl->mainFrameImpl()->frameView()->layoutCount();
+ webViewImpl->setPageScaleFactor(3, WebPoint());
+ EXPECT_EQ(false, webViewImpl->mainFrameImpl()->frameView()->needsLayout());
+ EXPECT_EQ(prevLayoutCount, webViewImpl->mainFrameImpl()->frameView()->layoutCount());
+}
+
#endif
TEST_F(WebFrameTest, CanOverrideMaximumScaleFactor)