[WK2] Fix for initial scale handling for mobile pages in UI process side.
authorpritam.nikam <pritam.nikam@samsung.com>
Tue, 26 Mar 2013 13:13:29 +0000 (18:43 +0530)
committerpritam.nikam <pritam.nikam@samsung.com>
Tue, 26 Mar 2013 13:13:29 +0000 (18:43 +0530)
[Version]    N/A
[Project]    N/A
[Title]      Fix for issue WEB-2446
[BinType]    N/A
[Customer]   N/A
[Issue#]     WEB-2446
[Problem]    [WK2] Page display differs while reloading the same webpage in "http://dev.bybjorn.com/ipadoffline".
[Cause]      Viewport's initial scale handling on UI process is at fault. In WebKit::PageClientImpl::didChangeContentsSize
             over-writes initilal scale and replaces it with minimumScaleByContentWidth, i.e. ratio of webview (evas object)
             size's width to page contents width. Apparently contents fit to width, instead of initial scale set in pages
             meta viewport tag.
[Solution]   If initialScale is not set explicitly in content's meta viewport and is same to minimumScale, then only
             update initialScale to the minimumScaleByContentWidth. Otherwise retain the initial scale to value specified in
             content's viewport consraints.
[Team]       TiledAC
[Developer]  pritam.nikam
[Request]    N/A
[Horizontal expansion] N/A
[SCMRequest] N/A

Change-Id: Iba9302bb9b0ffa22ea0c5d0e0d6a74c291211d3e

Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
Source/WebKit2/UIProcess/API/efl/PageClientImpl.h

index 2366918..aa4f34e 100644 (file)
@@ -184,6 +184,7 @@ PageClientImpl::ViewportConstraints PageClientImpl::computeViewportConstraints(c
     constraints.maximumScale = attributes.maximumScale * attributes.devicePixelRatio;
     constraints.userScalable = attributes.userScalable;
     constraints.layoutSize = attributes.layoutSize;
+    constraints.contentsDefinedInitialScale = (ViewportArguments::ValueAuto != attributes.initialScale);
 
     double defaultViewLevel = m_page->pageGroup()->preferences()->defaultViewLevel();
     // If defaultViewLevel is 1, "Default View" is set as "Readable"
@@ -629,8 +630,9 @@ void PageClientImpl::didChangeContentsSize(const WebCore::IntSize size)
     if (m_viewportConstraints.userScalable
         && fabs(oldMinimumScale - newMinimumScale) > numeric_limits<float>::epsilon()) {
         // Sometimes initializeVisibleContentRect can be called after content size change.
-        // So, if initialScale is same to minimumScale, update initialScale too.
-        if (fabs(m_viewportConstraints.initialScale - oldMinimumScale) < numeric_limits<float>::epsilon())
+        // So, if initialScale is not set explicitly in content's meta viewport tag and is same to minimumScale, update initialScale too.
+        if (!m_viewportConstraints.contentsDefinedInitialScale
+            && fabs(m_viewportConstraints.initialScale - oldMinimumScale) < numeric_limits<float>::epsilon())
             m_viewportConstraints.initialScale = newMinimumScale;
         m_viewportConstraints.minimumScale = newMinimumScale;
     }
index b3e5f83..bc6e456 100644 (file)
@@ -96,6 +96,7 @@ public:
             , minimumScale(0.25)
             , maximumScale(5.0)
             , userScalable(true)
+            , contentsDefinedInitialScale(false)
             , layoutSize(WebCore::IntSize())
         {
         }
@@ -103,6 +104,7 @@ public:
         double minimumScale;
         double maximumScale;
         bool userScalable;
+        bool contentsDefinedInitialScale;
         WebCore::IntSize layoutSize;
     };