Title: [139177] trunk/Source/WebKit/chromium
Revision
139177
Author
[email protected]
Date
2013-01-09 01:37:34 -0800 (Wed, 09 Jan 2013)

Log Message

[Chromium] When viewport is disabled, use display width in DIP pixels for the fallback width
https://bugs.webkit.org/show_bug.cgi?id=106021

This is to emulate 'UseWideViewport' setting of Android WebView properly.
'UseWideViewport' now corresponds to the 'viewportEnabled' setting.
When the value is false, "meta viewport" tag is ignored, and when calculating
layout width, display width in DIP pixels is used.

Reviewed by Adam Barth.

* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::resize):
(WebKit::WebViewImpl::dipSize):
(WebKit):
* src/WebViewImpl.h:
(WebCore):
(WebViewImpl):

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (139176 => 139177)


--- trunk/Source/WebKit/chromium/ChangeLog	2013-01-09 09:36:57 UTC (rev 139176)
+++ trunk/Source/WebKit/chromium/ChangeLog	2013-01-09 09:37:34 UTC (rev 139177)
@@ -1,3 +1,25 @@
+2013-01-08  Mikhail Naganov  <[email protected]>
+
+        [Chromium] When viewport is disabled, use display width in DIP pixels for the fallback width
+        https://bugs.webkit.org/show_bug.cgi?id=106021
+
+        This is to emulate 'UseWideViewport' setting of Android WebView properly.
+        'UseWideViewport' now corresponds to the 'viewportEnabled' setting.
+        When the value is false, "meta viewport" tag is ignored, and when calculating
+        layout width, display width in DIP pixels is used.
+
+        Reviewed by Adam Barth.
+
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::dispatchViewportPropertiesDidChange):
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::resize):
+        (WebKit::WebViewImpl::dipSize):
+        (WebKit):
+        * src/WebViewImpl.h:
+        (WebCore):
+        (WebViewImpl):
+
 2013-01-08  Chris Rogers  <[email protected]>
 
         Remove unused/deprecated render() method in chromium WebKit API

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (139176 => 139177)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2013-01-09 09:36:57 UTC (rev 139176)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2013-01-09 09:37:34 UTC (rev 139177)
@@ -620,7 +620,7 @@
 void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const
 {
 #if ENABLE(VIEWPORT)
-    if (!m_webView->settings()->viewportEnabled() || !m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page())
+    if (!m_webView->isFixedLayoutModeEnabled() || !m_webView->client() || !m_webView->page())
         return;
 
     WebViewClient* client = m_webView->client();
@@ -629,11 +629,23 @@
     if (!deviceSize.width || !deviceSize.height)
         return;
 
-    Settings* settings = m_webView->page()->settings();
+    int viewportWidthInDIPs = m_webView->dipSize().width();
+    ViewportArguments effectiveViewportArguments;
+    int effectiveFallbackWidth;
+    if (m_webView->settings()->viewportEnabled()) {
+        effectiveViewportArguments = arguments;
+        effectiveFallbackWidth = std::max(m_webView->page()->settings()->layoutFallbackWidth(), viewportWidthInDIPs);
+    } else {
+        // This is for Android WebView to use layout width in device-independent pixels.
+        // Once WebViewImpl on Android will start using DIP pixels size,
+        // dispatchViewportPropertiesDidChange can bail out when viewport is disabled.
+        effectiveViewportArguments = ViewportArguments();
+        effectiveFallbackWidth = viewportWidthInDIPs;
+    }
     float devicePixelRatio = client->screenInfo().deviceScaleFactor;
     // Call the common viewport computing logic in ViewportArguments.cpp.
     ViewportAttributes computed = computeViewportAttributes(
-        arguments, settings->layoutFallbackWidth(), deviceSize.width, deviceSize.height,
+        effectiveViewportArguments, effectiveFallbackWidth, deviceSize.width, deviceSize.height,
         devicePixelRatio, IntSize(deviceSize.width, deviceSize.height));
 
     restrictScaleFactorToInitialScaleIfNotUserScalable(computed);

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (139176 => 139177)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2013-01-09 09:36:57 UTC (rev 139176)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2013-01-09 09:37:34 UTC (rev 139177)
@@ -1586,18 +1586,8 @@
     m_size = newSize;
 
 #if ENABLE(VIEWPORT)
-    if (settings()->viewportEnabled()) {
-        // Fallback width is used to layout sites designed for desktop. The
-        // conventional size used by all mobile browsers is 980. When a mobile
-        // device has a particularly wide screen (such as a 10" tablet held in
-        // landscape), it can be larger.
-        const int standardFallbackWidth = 980;
-        int dpiIndependentViewportWidth = newSize.width / page()->deviceScaleFactor();
-        settings()->setLayoutFallbackWidth(std::max(standardFallbackWidth, dpiIndependentViewportWidth));
-
-        ViewportArguments viewportArguments = mainFrameImpl()->frame()->document()->viewportArguments();
-        m_page->chrome()->client()->dispatchViewportPropertiesDidChange(viewportArguments);
-    }
+    ViewportArguments viewportArguments = mainFrameImpl()->frame()->document()->viewportArguments();
+    m_page->chrome()->client()->dispatchViewportPropertiesDidChange(viewportArguments);
 #endif
 
     WebDevToolsAgentPrivate* agentPrivate = devToolsAgentPrivate();
@@ -3136,6 +3126,15 @@
     frame->view()->setFixedLayoutSize(layoutSize);
 }
 
+WebCore::FloatSize WebViewImpl::dipSize() const
+{
+    if (!page() || m_webSettings->applyDeviceScaleFactorInCompositor())
+        return FloatSize(m_size.width, m_size.height);
+
+    float deviceScaleFactor = page()->deviceScaleFactor();
+    return FloatSize(m_size.width / deviceScaleFactor, m_size.height / deviceScaleFactor);
+}
+
 void WebViewImpl::performMediaPlayerAction(const WebMediaPlayerAction& action,
                                            const WebPoint& location)
 {

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.h (139176 => 139177)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.h	2013-01-09 09:36:57 UTC (rev 139176)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.h	2013-01-09 09:37:34 UTC (rev 139177)
@@ -35,6 +35,7 @@
 #include "ContextMenuClientImpl.h"
 #include "DragClientImpl.h"
 #include "EditorClientImpl.h"
+#include "FloatSize.h"
 #include "GraphicsContext3D.h"
 #include "GraphicsLayer.h"
 #include "InspectorClientImpl.h"
@@ -64,6 +65,7 @@
 class ChromiumDataObject;
 class Color;
 class DocumentLoader;
+class FloatSize;
 class Frame;
 class GraphicsContext3D;
 class HistoryItem;
@@ -238,6 +240,7 @@
     virtual void enableFixedLayoutMode(bool enable);
     virtual WebSize fixedLayoutSize() const;
     virtual void setFixedLayoutSize(const WebSize&);
+    virtual WebCore::FloatSize dipSize() const;
     virtual void enableAutoResizeMode(
         const WebSize& minSize,
         const WebSize& maxSize);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to