Diff
Modified: trunk/Source/WebCore/ChangeLog (167734 => 167735)
--- trunk/Source/WebCore/ChangeLog 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebCore/ChangeLog 2014-04-24 02:13:06 UTC (rev 167735)
@@ -1,3 +1,27 @@
+2014-04-23 Benjamin Poulain <bpoul...@apple.com>
+
+ [iOS][WK2] Fix a few mistakes affecting the initial layout and the initial unobscured rect
+ https://bugs.webkit.org/show_bug.cgi?id=132093
+
+ Reviewed by Tim Horton.
+
+ Change the minimum layout size to float point values to account for size defined on retina displays.
+ The minimum layout size supports half-pixels, the value is rounded later when computing the layout size
+ in document coordinates.
+
+ * WebCore.exp.in:
+ * page/ViewportConfiguration.cpp:
+ (WebCore::ViewportConfiguration::ViewportConfiguration):
+ Setting the initial content size is incorrect. The layout size computation already take into account
+ empty size for the first layout.
+
+ Setting the content size upfront make the first computation incorrect when the viewport arguments specify
+ the initial scale.
+
+ (WebCore::ViewportConfiguration::setMinimumLayoutSize):
+ * page/ViewportConfiguration.h:
+ (WebCore::ViewportConfiguration::minimumLayoutSize):
+
2014-04-23 Brent Fulgham <bfulg...@apple.com>
[Mac, iOS] Stop buffering media when on an inactive tab.
Modified: trunk/Source/WebCore/WebCore.exp.in (167734 => 167735)
--- trunk/Source/WebCore/WebCore.exp.in 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebCore/WebCore.exp.in 2014-04-24 02:13:06 UTC (rev 167735)
@@ -894,7 +894,7 @@
__ZN7WebCore21UserContentURLPattern5parseERKN3WTF6StringE
__ZN7WebCore21ViewportConfiguration15setContentsSizeERKNS_7IntSizeE
__ZN7WebCore21ViewportConfiguration17webpageParametersEv
-__ZN7WebCore21ViewportConfiguration20setMinimumLayoutSizeERKNS_7IntSizeE
+__ZN7WebCore21ViewportConfiguration20setMinimumLayoutSizeERKNS_9FloatSizeE
__ZN7WebCore21ViewportConfiguration20setViewportArgumentsERKNS_17ViewportArgumentsE
__ZN7WebCore21ViewportConfiguration21xhtmlMobileParametersEv
__ZN7WebCore21ViewportConfiguration22textDocumentParametersEv
Modified: trunk/Source/WebCore/page/ViewportConfiguration.cpp (167734 => 167735)
--- trunk/Source/WebCore/page/ViewportConfiguration.cpp 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebCore/page/ViewportConfiguration.cpp 2014-04-24 02:13:06 UTC (rev 167735)
@@ -43,8 +43,7 @@
#endif
ViewportConfiguration::ViewportConfiguration()
- : m_contentSize(1024, 768)
- , m_minimumLayoutSize(m_contentSize)
+ : m_minimumLayoutSize(1024, 768)
{
// Setup a reasonable default configuration to avoid computing infinite scale/sizes.
// Those are the original iPhone configuration.
@@ -72,7 +71,7 @@
updateConfiguration();
}
-void ViewportConfiguration::setMinimumLayoutSize(const IntSize& minimumLayoutSize)
+void ViewportConfiguration::setMinimumLayoutSize(const FloatSize& minimumLayoutSize)
{
if (m_minimumLayoutSize == minimumLayoutSize)
return;
Modified: trunk/Source/WebCore/page/ViewportConfiguration.h (167734 => 167735)
--- trunk/Source/WebCore/page/ViewportConfiguration.h 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebCore/page/ViewportConfiguration.h 2014-04-24 02:13:06 UTC (rev 167735)
@@ -26,6 +26,7 @@
#ifndef ViewportConfiguration_h
#define ViewportConfiguration_h
+#include "FloatSize.h"
#include "IntSize.h"
#include "ViewportArguments.h"
#include <wtf/Noncopyable.h>
@@ -70,8 +71,8 @@
const IntSize& contentsSize() const { return m_contentSize; }
void setContentsSize(const IntSize&);
- const IntSize& minimumLayoutSize() const { return m_minimumLayoutSize; }
- void setMinimumLayoutSize(const IntSize&);
+ const FloatSize& minimumLayoutSize() const { return m_minimumLayoutSize; }
+ void setMinimumLayoutSize(const FloatSize&);
const ViewportArguments& viewportArguments() const { return m_viewportArguments; }
void setViewportArguments(const ViewportArguments&);
@@ -95,7 +96,7 @@
Parameters m_configuration;
Parameters m_defaultConfiguration;
IntSize m_contentSize;
- IntSize m_minimumLayoutSize;
+ FloatSize m_minimumLayoutSize;
ViewportArguments m_viewportArguments;
};
Modified: trunk/Source/WebKit2/ChangeLog (167734 => 167735)
--- trunk/Source/WebKit2/ChangeLog 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/ChangeLog 2014-04-24 02:13:06 UTC (rev 167735)
@@ -1,3 +1,46 @@
+2014-04-23 Benjamin Poulain <bpoul...@apple.com>
+
+ [iOS][WK2] Fix a few mistakes affecting the initial layout and the initial unobscured rect
+ https://bugs.webkit.org/show_bug.cgi?id=132093
+ <rdar://problem/16703237>
+
+ Reviewed by Tim Horton.
+
+ The user of WKWebView can setup a size on device pixels, which can add half a point to the minimum
+ layout size. By rounding this up before applying the page scale, we ended up with rounding errors
+ on the layout size and the transitory unobscured content rect.
+
+ This patch fixes changes the minimal layout size to float point values to reduce the rounding problems.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (setViewportConfigurationMinimumLayoutSize):
+ (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
+ (-[WKWebView _beginAnimatedResizeWithUpdates:]):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/ios/WebPageProxyIOS.mm:
+ (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
+ (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
+ (WebKit::WebPageProxy::setMinimumLayoutSizeForMinimalUI):
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::didCommitLoad):
+ Defaulting the content size to the minimum layout size only works if the initial-scale is 1.
+ ViewportConfiguration knows exactly what to do before the first layout.
+
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):
+ (WebKit::WebPage::setMinimumLayoutSizeForMinimalUI):
+ (WebKit::WebPage::dynamicViewportSizeUpdate):
+ A few fixes here:
+ -setZoomedOutPageScaleFactor() was incorrectly using the initial scale. 99% of the time, initial scale
+ and minimum scale are equal, but the page can specify something different with the viewport meta tag.
+ -Use floating point for manipulating the minimum layout sizes, then round the value.
+ -minimumLayoutSizeInDocumentCoordinate was scaled the wrong way around.
+
+ (WebKit::WebPage::viewportConfigurationChanged):
+
2014-04-23 Yongjun Zhang <yongjun_zh...@apple.com>
Support encoding/decoding NSUInteger arguments in WKRemoteObjectCoder.
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (167734 => 167735)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-04-24 02:13:06 UTC (rev 167735)
@@ -720,7 +720,7 @@
static inline void setViewportConfigurationMinimumLayoutSize(WebKit::WebPageProxy& page, const CGSize& size)
{
- page.setViewportConfigurationMinimumLayoutSize(WebCore::IntSize(CGCeiling(size.width), CGCeiling(size.height)));
+ page.setViewportConfigurationMinimumLayoutSize(WebCore::FloatSize(size));
}
- (void)_frameOrBoundsChanged
@@ -1279,7 +1279,7 @@
{
_minimumLayoutSizeOverrideForMinimalUI = size;
if (!_isAnimatingResize)
- _page->setMinimumLayoutSizeForMinimalUI(WebCore::IntSize(CGCeiling(size.width), CGCeiling(size.height)));
+ _page->setMinimumLayoutSizeForMinimalUI(WebCore::FloatSize(size));
}
- (UIEdgeInsets)_obscuredInsets
@@ -1393,7 +1393,7 @@
CGRect unobscuredRect = UIEdgeInsetsInsetRect(newBounds, _obscuredInsets);
CGRect unobscuredRectInContentCoordinates = [self convertRect:unobscuredRect toView:_contentView.get()];
- _page->dynamicViewportSizeUpdate(WebCore::IntSize(CGCeiling(newMinimumLayoutSize.width), CGCeiling(newMinimumLayoutSize.height)), visibleRectInContentCoordinates, unobscuredRectInContentCoordinates, targetScale);
+ _page->dynamicViewportSizeUpdate(WebCore::FloatSize(newMinimumLayoutSize.width, newMinimumLayoutSize.height), visibleRectInContentCoordinates, unobscuredRectInContentCoordinates, targetScale);
}
- (void)_endAnimatedResize
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (167734 => 167735)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-04-24 02:13:06 UTC (rev 167735)
@@ -576,10 +576,10 @@
uint64_t nextVisibleContentRectUpdateID() const { return m_lastVisibleContentRectUpdate.updateID() + 1; }
uint64_t lastVisibleContentRectUpdateID() const { return m_lastVisibleContentRectUpdate.updateID(); }
- void dynamicViewportSizeUpdate(const WebCore::IntSize& minimumLayoutSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, double targetScale);
+ void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, double targetScale);
- void setViewportConfigurationMinimumLayoutSize(const WebCore::IntSize&);
- void setMinimumLayoutSizeForMinimalUI(const WebCore::IntSize&);
+ void setViewportConfigurationMinimumLayoutSize(const WebCore::FloatSize&);
+ void setMinimumLayoutSizeForMinimalUI(const WebCore::FloatSize&);
void didCommitLayerTree(const WebKit::RemoteLayerTreeTransaction&);
void selectWithGesture(const WebCore::IntPoint, WebCore::TextGranularity, uint32_t gestureType, uint32_t gestureState, PassRefPtr<GestureCallback>);
Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (167734 => 167735)
--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm 2014-04-24 02:13:06 UTC (rev 167735)
@@ -188,17 +188,17 @@
return true;
}
-void WebPageProxy::dynamicViewportSizeUpdate(const IntSize& minimumLayoutSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, double targetScale)
+void WebPageProxy::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, double targetScale)
{
m_process->send(Messages::WebPage::DynamicViewportSizeUpdate(minimumLayoutSize, targetExposedContentRect, targetUnobscuredRect, targetScale), m_pageID);
}
-void WebPageProxy::setViewportConfigurationMinimumLayoutSize(const WebCore::IntSize& size)
+void WebPageProxy::setViewportConfigurationMinimumLayoutSize(const WebCore::FloatSize& size)
{
m_process->send(Messages::WebPage::SetViewportConfigurationMinimumLayoutSize(size), m_pageID);
}
-void WebPageProxy::setMinimumLayoutSizeForMinimalUI(const WebCore::IntSize& size)
+void WebPageProxy::setMinimumLayoutSizeForMinimalUI(const WebCore::FloatSize& size)
{
m_process->send(Messages::WebPage::SetMinimumLayoutSizeForMinimalUI(size), m_pageID);
}
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (167734 => 167735)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-24 02:13:06 UTC (rev 167735)
@@ -4263,7 +4263,7 @@
m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters());
m_viewportConfiguration.setViewportArguments(ViewportArguments());
- m_viewportConfiguration.setContentsSize(m_viewportConfiguration.minimumLayoutSize());
+ m_viewportConfiguration.setContentsSize(IntSize());
viewportConfigurationChanged();
#endif
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (167734 => 167735)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2014-04-24 02:13:06 UTC (rev 167735)
@@ -695,9 +695,9 @@
void updateVisibilityState(bool isInitialState = false);
#if PLATFORM(IOS)
- void setViewportConfigurationMinimumLayoutSize(const WebCore::IntSize&);
- void setMinimumLayoutSizeForMinimalUI(const WebCore::IntSize&);
- void dynamicViewportSizeUpdate(const WebCore::IntSize& minimumLayoutSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, double scale);
+ void setViewportConfigurationMinimumLayoutSize(const WebCore::FloatSize&);
+ void setMinimumLayoutSizeForMinimalUI(const WebCore::FloatSize&);
+ void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, double scale);
void viewportConfigurationChanged();
void updateVisibleContentRects(const VisibleContentRectUpdateInfo&);
bool scaleWasSetByUIProcess() const { return m_scaleWasSetByUIProcess; }
@@ -1165,7 +1165,7 @@
WebCore::FloatSize m_screenSize;
WebCore::FloatSize m_availableScreenSize;
WebCore::IntSize m_blockSelectionDesiredSize;
- WebCore::IntSize m_minimumLayoutSizeForMinimalUI;
+ WebCore::FloatSize m_minimumLayoutSizeForMinimalUI;
bool m_inDynamicSizeUpdate;
HashMap<std::pair<WebCore::IntSize, double>, WebCore::IntPoint> m_dynamicSizeUpdateHistory;
#endif
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (167734 => 167735)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2014-04-24 02:13:06 UTC (rev 167735)
@@ -43,9 +43,9 @@
MouseEventSyncForTesting(WebKit::WebMouseEvent event) -> (bool handled)
WheelEventSyncForTesting(WebKit::WebWheelEvent event) -> (bool handled)
#if PLATFORM(IOS)
- SetViewportConfigurationMinimumLayoutSize(WebCore::IntSize size)
- SetMinimumLayoutSizeForMinimalUI(WebCore::IntSize size)
- DynamicViewportSizeUpdate(WebCore::IntSize minimumLayoutSize, WebCore::FloatRect targetExposedContentRect, WebCore::FloatRect targetUnobscuredRect, double scale)
+ SetViewportConfigurationMinimumLayoutSize(WebCore::FloatSize size)
+ SetMinimumLayoutSizeForMinimalUI(WebCore::FloatSize size)
+ DynamicViewportSizeUpdate(WebCore::FloatSize minimumLayoutSize, WebCore::FloatRect targetExposedContentRect, WebCore::FloatRect targetUnobscuredRect, double scale)
HandleTap(WebCore::IntPoint point)
TapHighlightAtPosition(uint64_t requestID, WebCore::FloatPoint point)
Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (167734 => 167735)
--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2014-04-24 01:23:58 UTC (rev 167734)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2014-04-24 02:13:06 UTC (rev 167735)
@@ -1759,19 +1759,19 @@
}
}
-void WebPage::setViewportConfigurationMinimumLayoutSize(const IntSize& size)
+void WebPage::setViewportConfigurationMinimumLayoutSize(const FloatSize& size)
{
m_viewportConfiguration.setMinimumLayoutSize(size);
viewportConfigurationChanged();
}
-void WebPage::setMinimumLayoutSizeForMinimalUI(const IntSize& size)
+void WebPage::setMinimumLayoutSizeForMinimalUI(const FloatSize& size)
{
m_minimumLayoutSizeForMinimalUI = size;
viewportConfigurationChanged();
}
-void WebPage::dynamicViewportSizeUpdate(const IntSize& minimumLayoutSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, double targetScale)
+void WebPage::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, double targetScale)
{
TemporaryChange<bool> dynamicSizeUpdateGuard(m_inDynamicSizeUpdate, true);
// FIXME: this does not handle the cases where the content would change the content size or scroll position from _javascript_.
@@ -1930,19 +1930,19 @@
else
scale = initialScale;
- m_page->setZoomedOutPageScaleFactor(initialScale);
-
+ m_page->setZoomedOutPageScaleFactor(m_viewportConfiguration.minimumScale());
+
FrameView& frameView = *mainFrameView();
- IntSize viewportSize = !m_minimumLayoutSizeForMinimalUI.isEmpty() ? m_minimumLayoutSizeForMinimalUI : m_viewportConfiguration.minimumLayoutSize();
+ FloatSize viewportSize = !m_minimumLayoutSizeForMinimalUI.isEmpty() ? m_minimumLayoutSizeForMinimalUI : m_viewportConfiguration.minimumLayoutSize();
viewportSize.scale(1 / initialScale);
- frameView.setViewportSize(viewportSize);
+ frameView.setViewportSize(roundedIntSize(viewportSize));
IntPoint scrollPosition = frameView.scrollPosition();
if (!m_hasReceivedVisibleContentRectsAfterDidCommitLoad) {
- IntSize minimumLayoutSizeInDocumentCoordinate = m_viewportConfiguration.minimumLayoutSize();
- minimumLayoutSizeInDocumentCoordinate.scale(scale);
-
- IntRect unobscuredContentRect(scrollPosition, minimumLayoutSizeInDocumentCoordinate);
+ FloatSize minimumLayoutSizeInScrollViewCoordinates = m_viewportConfiguration.minimumLayoutSize();
+ minimumLayoutSizeInScrollViewCoordinates.scale(1 / scale);
+ IntSize minimumLayoutSizeInDocumentCoordinates = roundedIntSize(minimumLayoutSizeInScrollViewCoordinates);
+ IntRect unobscuredContentRect(scrollPosition, minimumLayoutSizeInDocumentCoordinates);
frameView.setUnobscuredContentRect(unobscuredContentRect);
frameView.setScrollVelocity(0, 0, 0, monotonicallyIncreasingTime());