Title: [142875] trunk/Source/WebKit/chromium
Revision
142875
Author
mnaga...@chromium.org
Date
2013-02-14 05:53:30 -0800 (Thu, 14 Feb 2013)

Log Message

[Chromium] Add a setting to control scaling content to fit viewport
https://bugs.webkit.org/show_bug.cgi?id=109584

Adds a setting called 'initializeAtMinimumPageScale'. By default,
it is set to 'true' which corresponds to Chrome on Android behavior--
adjust the page scale to make the content fit into the viewport
by width. When set to false, the setting instructs ChromeClientImpl to
set page scale to 1.0, unless the scale value is set by the page
in the viewport meta-tag.

Reviewed by Adam Barth.

* public/WebSettings.h:
* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):
* src/WebSettingsImpl.cpp:
(WebKit::WebSettingsImpl::WebSettingsImpl):
(WebKit::WebSettingsImpl::setInitializeAtMinimumPageScale):
(WebKit):
* src/WebSettingsImpl.h:
(WebSettingsImpl):
(WebKit::WebSettingsImpl::initializeAtMinimumPageScale):
* tests/WebFrameTest.cpp:
* tests/data/viewport-2x-initial-scale.html: Added.
* tests/data/viewport-auto-initial-scale.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (142874 => 142875)


--- trunk/Source/WebKit/chromium/ChangeLog	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/ChangeLog	2013-02-14 13:53:30 UTC (rev 142875)
@@ -1,3 +1,31 @@
+2013-02-14  Mikhail Naganov  <mnaga...@chromium.org>
+
+        [Chromium] Add a setting to control scaling content to fit viewport
+        https://bugs.webkit.org/show_bug.cgi?id=109584
+
+        Adds a setting called 'initializeAtMinimumPageScale'. By default,
+        it is set to 'true' which corresponds to Chrome on Android behavior--
+        adjust the page scale to make the content fit into the viewport
+        by width. When set to false, the setting instructs ChromeClientImpl to
+        set page scale to 1.0, unless the scale value is set by the page
+        in the viewport meta-tag.
+
+        Reviewed by Adam Barth.
+
+        * public/WebSettings.h:
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):
+        * src/WebSettingsImpl.cpp:
+        (WebKit::WebSettingsImpl::WebSettingsImpl):
+        (WebKit::WebSettingsImpl::setInitializeAtMinimumPageScale):
+        (WebKit):
+        * src/WebSettingsImpl.h:
+        (WebSettingsImpl):
+        (WebKit::WebSettingsImpl::initializeAtMinimumPageScale):
+        * tests/WebFrameTest.cpp:
+        * tests/data/viewport-2x-initial-scale.html: Added.
+        * tests/data/viewport-auto-initial-scale.html: Added.
+
 2013-02-14  Sheriff Bot  <webkit.review....@gmail.com>
 
         Unreviewed, rolling out r142808.

Modified: trunk/Source/WebKit/chromium/public/WebSettings.h (142874 => 142875)


--- trunk/Source/WebKit/chromium/public/WebSettings.h	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/public/WebSettings.h	2013-02-14 13:53:30 UTC (rev 142875)
@@ -116,6 +116,7 @@
     virtual void setGestureTapHighlightEnabled(bool) = 0;
     virtual void setHyperlinkAuditingEnabled(bool) = 0;
     virtual void setImagesEnabled(bool) = 0;
+    virtual void setInitializeAtMinimumPageScale(bool) = 0;
     virtual void setInteractiveFormValidationEnabled(bool) = 0;
     virtual void setJavaEnabled(bool) = 0;
     virtual void setJavaScriptCanAccessClipboard(bool) = 0;

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (142874 => 142875)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2013-02-14 13:53:30 UTC (rev 142875)
@@ -666,6 +666,8 @@
         computed.maximumScale = max(computed.maximumScale, m_webView->maxPageScaleFactor);
         computed.userScalable = true;
     }
+    if (arguments.zoom == ViewportArguments::ValueAuto && !m_webView->settingsImpl()->initializeAtMinimumPageScale())
+        computed.initialScale = 1.0f;
     if (!m_webView->settingsImpl()->applyDeviceScaleFactorInCompositor())
         computed.initialScale *= deviceScaleFactor;
 

Modified: trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp (142874 => 142875)


--- trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp	2013-02-14 13:53:30 UTC (rev 142875)
@@ -54,6 +54,7 @@
     , m_renderVSyncEnabled(true)
     , m_renderVSyncNotificationEnabled(false)
     , m_viewportEnabled(false)
+    , m_initializeAtMinimumPageScale(true)
     , m_gestureTapHighlightEnabled(true)
     , m_autoZoomFocusedNodeToLegibleScale(false)
     , m_deferredImageDecodingEnabled(false)
@@ -207,6 +208,11 @@
     m_settings->setImagesEnabled(enabled);
 }
 
+void WebSettingsImpl::setInitializeAtMinimumPageScale(bool enabled)
+{
+    m_initializeAtMinimumPageScale = enabled;
+}
+
 void WebSettingsImpl::setPluginsEnabled(bool enabled)
 {
     m_settings->setPluginsEnabled(enabled);

Modified: trunk/Source/WebKit/chromium/src/WebSettingsImpl.h (142874 => 142875)


--- trunk/Source/WebKit/chromium/src/WebSettingsImpl.h	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/src/WebSettingsImpl.h	2013-02-14 13:53:30 UTC (rev 142875)
@@ -109,6 +109,7 @@
     virtual void setGestureTapHighlightEnabled(bool);
     virtual void setHyperlinkAuditingEnabled(bool);
     virtual void setImagesEnabled(bool);
+    virtual void setInitializeAtMinimumPageScale(bool);
     virtual void setInteractiveFormValidationEnabled(bool);
     virtual void setJavaEnabled(bool);
     virtual void setJavaScriptCanAccessClipboard(bool);
@@ -179,6 +180,7 @@
     bool renderVSyncNotificationEnabled() const { return m_renderVSyncNotificationEnabled; }
     bool applyDeviceScaleFactorInCompositor() const;
     bool applyPageScaleFactorInCompositor() const;
+    bool initializeAtMinimumPageScale() const { return m_initializeAtMinimumPageScale; }
     bool autoZoomFocusedNodeToLegibleScale() const { return m_autoZoomFocusedNodeToLegibleScale; }
     bool gestureTapHighlightEnabled() const { return m_gestureTapHighlightEnabled; }
     bool doubleTapToZoomEnabled() const { return m_doubleTapToZoomEnabled; }
@@ -196,6 +198,7 @@
     bool m_renderVSyncEnabled;
     bool m_renderVSyncNotificationEnabled;
     bool m_viewportEnabled;
+    bool m_initializeAtMinimumPageScale;
     bool m_gestureTapHighlightEnabled;
     bool m_autoZoomFocusedNodeToLegibleScale;
     bool m_deferredImageDecodingEnabled;

Modified: trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp (142874 => 142875)


--- trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp	2013-02-14 13:39:54 UTC (rev 142874)
+++ trunk/Source/WebKit/chromium/tests/WebFrameTest.cpp	2013-02-14 13:53:30 UTC (rev 142875)
@@ -352,6 +352,48 @@
     EXPECT_EQ(userPinchPageScaleFactor, m_webView->pageScaleFactor());
 }
 
+TEST_F(WebFrameTest, setInitializeAtMinimumPageScaleToFalse)
+{
+    registerMockedHttpURLLoad("viewport-auto-initial-scale.html");
+
+    FixedLayoutTestWebViewClient client;
+    client.m_screenInfo.deviceScaleFactor = 1;
+    int viewportWidth = 640;
+    int viewportHeight = 480;
+
+    m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-auto-initial-scale.html", true, 0, &client);
+    m_webView->settings()->setApplyDeviceScaleFactorInCompositor(true);
+    m_webView->settings()->setApplyPageScaleFactorInCompositor(true);
+    m_webView->enableFixedLayoutMode(true);
+    m_webView->settings()->setViewportEnabled(true);
+    m_webView->settings()->setInitializeAtMinimumPageScale(false);
+    m_webView->resize(WebSize(viewportWidth, viewportHeight));
+
+    // The page must be displayed at 100% zoom.
+    EXPECT_EQ(1.0f, m_webView->pageScaleFactor());
+}
+
+TEST_F(WebFrameTest, PageViewportInitialScaleOverridesInitializeAtMinimumScale)
+{
+    registerMockedHttpURLLoad("viewport-2x-initial-scale.html");
+
+    FixedLayoutTestWebViewClient client;
+    client.m_screenInfo.deviceScaleFactor = 1;
+    int viewportWidth = 640;
+    int viewportHeight = 480;
+
+    m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-2x-initial-scale.html", true, 0, &client);
+    m_webView->settings()->setApplyDeviceScaleFactorInCompositor(true);
+    m_webView->settings()->setApplyPageScaleFactorInCompositor(true);
+    m_webView->enableFixedLayoutMode(true);
+    m_webView->settings()->setViewportEnabled(true);
+    m_webView->settings()->setInitializeAtMinimumPageScale(false);
+    m_webView->resize(WebSize(viewportWidth, viewportHeight));
+
+    // The page must be displayed at 200% zoom, as specified in its viewport meta tag.
+    EXPECT_EQ(2.0f, m_webView->pageScaleFactor());
+}
+
 TEST_F(WebFrameTest, ScaleFactorShouldNotOscillate)
 {
     registerMockedHttpURLLoad("scale_oscillate.html");

Added: trunk/Source/WebKit/chromium/tests/data/viewport-2x-initial-scale.html (0 => 142875)


--- trunk/Source/WebKit/chromium/tests/data/viewport-2x-initial-scale.html	                        (rev 0)
+++ trunk/Source/WebKit/chromium/tests/data/viewport-2x-initial-scale.html	2013-02-14 13:53:30 UTC (rev 142875)
@@ -0,0 +1,8 @@
+<html>
+  <head>
+    <meta name='viewport' content='width=3000, initial-scale=2' />
+  </head>
+  <body>
+    A page with the viewport set to 2x scale.
+  </body>
+</html>
Property changes on: trunk/Source/WebKit/chromium/tests/data/viewport-2x-initial-scale.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:eol-style

Added: trunk/Source/WebKit/chromium/tests/data/viewport-auto-initial-scale.html (0 => 142875)


--- trunk/Source/WebKit/chromium/tests/data/viewport-auto-initial-scale.html	                        (rev 0)
+++ trunk/Source/WebKit/chromium/tests/data/viewport-auto-initial-scale.html	2013-02-14 13:53:30 UTC (rev 142875)
@@ -0,0 +1,8 @@
+<html>
+  <head>
+    <meta name='viewport' content='width=3000' />
+  </head>
+  <body>
+    A page with a viewport.
+  </body>
+</html>
Property changes on: trunk/Source/WebKit/chromium/tests/data/viewport-auto-initial-scale.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:eol-style

_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to