Log Message
[css-values-4] viewport units should be floats https://bugs.webkit.org/show_bug.cgi?id=231644 <rdar://problem/84172685>
Reviewed by Tim Horton. Source/WebCore: Views can be fractional pixels wide. We should not round, especially since viewport units are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport"). Tests: CSSViewportUnits.EmptyUnobscuredSizeOverrides CSSViewportUnits.SameUnobscuredSizeOverrides CSSViewportUnits.DifferentUnobscuredSizeOverrides * page/FrameView.h: * page/FrameView.cpp: (WebCore::FrameView::setSizeForCSSSmallViewportUnits): (WebCore::FrameView::overrideWidthForCSSSmallViewportUnits): (WebCore::FrameView::sizeForCSSSmallViewportUnits const): (WebCore::FrameView::setSizeForCSSLargeViewportUnits): (WebCore::FrameView::overrideWidthForCSSLargeViewportUnits): (WebCore::FrameView::sizeForCSSLargeViewportUnits const): (WebCore::FrameView::calculateSizeForCSSViewportUnitsOverride const): (WebCore::FrameView::sizeForCSSDynamicViewportUnits const): (WebCore::FrameView::sizeForCSSDefaultViewportUnits const): * rendering/RenderView.h: * rendering/RenderView.cpp: (WebCore::RenderView::sizeForCSSSmallViewportUnits const): (WebCore::RenderView::sizeForCSSLargeViewportUnits const): (WebCore::RenderView::sizeForCSSDynamicViewportUnits const): (WebCore::RenderView::sizeForCSSDefaultViewportUnits const): Source/WebKit: Views can be fractional pixels wide. We should not round, especially since viewport units are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport"). * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _setViewportSizeForCSSViewportUnits:]): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::setViewportSizeForCSSViewportUnits): * Shared/WebPageCreationParameters.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setViewportSizeForCSSViewportUnits): (WebKit::WebPage::viewportSizeForCSSViewportUnits const): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::updateViewportSizeForCSSViewportUnits): Tools: * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm: (evaluateForNumber): (getElementHeight): (TEST.CSSViewportUnits.AllSame): (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides): (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides): (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides): * TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm: (TEST.WebKit.ViewportSizeForViewportUnits):
Modified Paths
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/page/FrameView.cpp
- trunk/Source/WebCore/page/FrameView.h
- trunk/Source/WebCore/rendering/RenderView.cpp
- trunk/Source/WebCore/rendering/RenderView.h
- trunk/Source/WebKit/ChangeLog
- trunk/Source/WebKit/Shared/WebPageCreationParameters.h
- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
- trunk/Source/WebKit/UIProcess/WebPageProxy.h
- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
- trunk/Tools/ChangeLog
- trunk/Tools/TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm
- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm
Diff
Modified: trunk/Source/WebCore/ChangeLog (285344 => 285345)
--- trunk/Source/WebCore/ChangeLog 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebCore/ChangeLog 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1,3 +1,37 @@
+2021-11-05 Devin Rousso <drou...@apple.com>
+
+ [css-values-4] viewport units should be floats
+ https://bugs.webkit.org/show_bug.cgi?id=231644
+ <rdar://problem/84172685>
+
+ Reviewed by Tim Horton.
+
+ Views can be fractional pixels wide. We should not round, especially since viewport units
+ are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport").
+
+ Tests: CSSViewportUnits.EmptyUnobscuredSizeOverrides
+ CSSViewportUnits.SameUnobscuredSizeOverrides
+ CSSViewportUnits.DifferentUnobscuredSizeOverrides
+
+ * page/FrameView.h:
+ * page/FrameView.cpp:
+ (WebCore::FrameView::setSizeForCSSSmallViewportUnits):
+ (WebCore::FrameView::overrideWidthForCSSSmallViewportUnits):
+ (WebCore::FrameView::sizeForCSSSmallViewportUnits const):
+ (WebCore::FrameView::setSizeForCSSLargeViewportUnits):
+ (WebCore::FrameView::overrideWidthForCSSLargeViewportUnits):
+ (WebCore::FrameView::sizeForCSSLargeViewportUnits const):
+ (WebCore::FrameView::calculateSizeForCSSViewportUnitsOverride const):
+ (WebCore::FrameView::sizeForCSSDynamicViewportUnits const):
+ (WebCore::FrameView::sizeForCSSDefaultViewportUnits const):
+
+ * rendering/RenderView.h:
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::sizeForCSSSmallViewportUnits const):
+ (WebCore::RenderView::sizeForCSSLargeViewportUnits const):
+ (WebCore::RenderView::sizeForCSSDynamicViewportUnits const):
+ (WebCore::RenderView::sizeForCSSDefaultViewportUnits const):
+
2021-11-05 Antoine Quint <grao...@webkit.org>
[Media Controls] Volume button orientation is always stuck to right-to-left
Modified: trunk/Source/WebCore/page/FrameView.cpp (285344 => 285345)
--- trunk/Source/WebCore/page/FrameView.cpp 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebCore/page/FrameView.cpp 2021-11-05 17:43:33 UTC (rev 285345)
@@ -5557,12 +5557,12 @@
document->styleScope().didChangeStyleSheetEnvironment();
}
-void FrameView::setSizeForCSSSmallViewportUnits(IntSize size)
+void FrameView::setSizeForCSSSmallViewportUnits(FloatSize size)
{
overrideSizeForCSSSmallViewportUnits({ size.width(), size.height() });
}
-void FrameView::overrideWidthForCSSSmallViewportUnits(int width)
+void FrameView::overrideWidthForCSSSmallViewportUnits(float width)
{
overrideSizeForCSSSmallViewportUnits({ width, m_smallViewportSizeOverride ? m_smallViewportSizeOverride->height : std::nullopt });
}
@@ -5583,7 +5583,7 @@
document->styleScope().didChangeStyleSheetEnvironment();
}
-IntSize FrameView::sizeForCSSSmallViewportUnits() const
+FloatSize FrameView::sizeForCSSSmallViewportUnits() const
{
return calculateSizeForCSSViewportUnitsOverride(m_smallViewportSizeOverride);
}
@@ -5598,12 +5598,12 @@
document->styleScope().didChangeStyleSheetEnvironment();
}
-void FrameView::setSizeForCSSLargeViewportUnits(IntSize size)
+void FrameView::setSizeForCSSLargeViewportUnits(FloatSize size)
{
overrideSizeForCSSLargeViewportUnits({ size.width(), size.height() });
}
-void FrameView::overrideWidthForCSSLargeViewportUnits(int width)
+void FrameView::overrideWidthForCSSLargeViewportUnits(float width)
{
overrideSizeForCSSLargeViewportUnits({ width, m_largeViewportSizeOverride ? m_largeViewportSizeOverride->height : std::nullopt });
}
@@ -5624,31 +5624,23 @@
document->styleScope().didChangeStyleSheetEnvironment();
}
-IntSize FrameView::sizeForCSSLargeViewportUnits() const
+FloatSize FrameView::sizeForCSSLargeViewportUnits() const
{
return calculateSizeForCSSViewportUnitsOverride(m_largeViewportSizeOverride);
}
-IntSize FrameView::calculateSizeForCSSViewportUnitsOverride(std::optional<OverrideViewportSize> override) const
+FloatSize FrameView::calculateSizeForCSSViewportUnitsOverride(std::optional<OverrideViewportSize> override) const
{
OverrideViewportSize viewportSize;
- if (override)
+ if (override) {
viewportSize = *override;
- // Use the large size if no override is given since it's considered the default size.
- // if (m_largeViewportSizeOverride) {
- // if (!viewportSize.width)
- // viewportSize.width = m_largeViewportSizeOverride->width;
+ // auto-size overrides the width only, so we can't always bail out early here.
+ if (viewportSize.width && viewportSize.height)
+ return { *viewportSize.width, *viewportSize.height };
+ }
- // if (!viewportSize.height)
- // viewportSize.height = m_largeViewportSizeOverride->height;
- // }
-
- // auto-size overrides the width only, so we can't always bail out early here.
- if (viewportSize.width && viewportSize.height)
- return { *viewportSize.width, *viewportSize.height };
-
if (useFixedLayout()) {
auto fixedLayoutSize = this->fixedLayoutSize();
viewportSize.width = viewportSize.width.value_or(fixedLayoutSize.width());
@@ -5664,12 +5656,12 @@
return { *viewportSize.width, *viewportSize.height };
}
-IntSize FrameView::sizeForCSSDynamicViewportUnits() const
+FloatSize FrameView::sizeForCSSDynamicViewportUnits() const
{
return unobscuredContentRectIncludingScrollbars().size();
}
-IntSize FrameView::sizeForCSSDefaultViewportUnits() const
+FloatSize FrameView::sizeForCSSDefaultViewportUnits() const
{
return sizeForCSSLargeViewportUnits();
}
Modified: trunk/Source/WebCore/page/FrameView.h (285344 => 285345)
--- trunk/Source/WebCore/page/FrameView.h 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebCore/page/FrameView.h 2021-11-05 17:43:33 UTC (rev 285345)
@@ -228,17 +228,17 @@
WEBCORE_EXPORT void adjustViewSize();
- WEBCORE_EXPORT void setSizeForCSSSmallViewportUnits(IntSize);
+ WEBCORE_EXPORT void setSizeForCSSSmallViewportUnits(FloatSize);
void clearSizeOverrideForCSSSmallViewportUnits();
- IntSize sizeForCSSSmallViewportUnits() const;
+ FloatSize sizeForCSSSmallViewportUnits() const;
- WEBCORE_EXPORT void setSizeForCSSLargeViewportUnits(IntSize);
+ WEBCORE_EXPORT void setSizeForCSSLargeViewportUnits(FloatSize);
void clearSizeOverrideForCSSLargeViewportUnits();
- IntSize sizeForCSSLargeViewportUnits() const;
+ FloatSize sizeForCSSLargeViewportUnits() const;
- IntSize sizeForCSSDynamicViewportUnits() const;
+ FloatSize sizeForCSSDynamicViewportUnits() const;
- IntSize sizeForCSSDefaultViewportUnits() const;
+ FloatSize sizeForCSSDefaultViewportUnits() const;
IntRect windowClipRect() const final;
WEBCORE_EXPORT IntRect windowClipRectForFrameOwner(const HTMLFrameOwnerElement*, bool clipToLayerContents) const;
@@ -857,19 +857,19 @@
void didLayout(WeakPtr<RenderElement> layoutRoot);
struct OverrideViewportSize {
- std::optional<int> width;
- std::optional<int> height;
+ std::optional<float> width;
+ std::optional<float> height;
bool operator==(const OverrideViewportSize& rhs) const { return rhs.width == width && rhs.height == height; }
};
- IntSize calculateSizeForCSSViewportUnitsOverride(std::optional<OverrideViewportSize>) const;
+ FloatSize calculateSizeForCSSViewportUnitsOverride(std::optional<OverrideViewportSize>) const;
void overrideSizeForCSSSmallViewportUnits(OverrideViewportSize);
- void overrideWidthForCSSSmallViewportUnits(int);
+ void overrideWidthForCSSSmallViewportUnits(float);
void resetOverriddenWidthForCSSSmallViewportUnits();
void overrideSizeForCSSLargeViewportUnits(OverrideViewportSize);
- void overrideWidthForCSSLargeViewportUnits(int);
+ void overrideWidthForCSSLargeViewportUnits(float);
void resetOverriddenWidthForCSSLargeViewportUnits();
void didFinishProhibitingScrollingWhenChangingContentSize() final;
Modified: trunk/Source/WebCore/rendering/RenderView.cpp (285344 => 285345)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2021-11-05 17:43:33 UTC (rev 285345)
@@ -697,22 +697,22 @@
return frameView().frame().pageZoomFactor();
}
-IntSize RenderView::sizeForCSSSmallViewportUnits() const
+FloatSize RenderView::sizeForCSSSmallViewportUnits() const
{
return frameView().sizeForCSSSmallViewportUnits();
}
-IntSize RenderView::sizeForCSSLargeViewportUnits() const
+FloatSize RenderView::sizeForCSSLargeViewportUnits() const
{
return frameView().sizeForCSSLargeViewportUnits();
}
-IntSize RenderView::sizeForCSSDynamicViewportUnits() const
+FloatSize RenderView::sizeForCSSDynamicViewportUnits() const
{
return frameView().sizeForCSSDynamicViewportUnits();
}
-IntSize RenderView::sizeForCSSDefaultViewportUnits() const
+FloatSize RenderView::sizeForCSSDefaultViewportUnits() const
{
return frameView().sizeForCSSDefaultViewportUnits();
}
Modified: trunk/Source/WebCore/rendering/RenderView.h (285344 => 285345)
--- trunk/Source/WebCore/rendering/RenderView.h 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebCore/rendering/RenderView.h 2021-11-05 17:43:33 UTC (rev 285345)
@@ -143,10 +143,10 @@
bool shouldPaintBaseBackground() const;
- IntSize sizeForCSSSmallViewportUnits() const;
- IntSize sizeForCSSLargeViewportUnits() const;
- IntSize sizeForCSSDynamicViewportUnits() const;
- IntSize sizeForCSSDefaultViewportUnits() const;
+ FloatSize sizeForCSSSmallViewportUnits() const;
+ FloatSize sizeForCSSLargeViewportUnits() const;
+ FloatSize sizeForCSSDynamicViewportUnits() const;
+ FloatSize sizeForCSSDefaultViewportUnits() const;
bool hasQuotesNeedingUpdate() const { return m_hasQuotesNeedingUpdate; }
void setHasQuotesNeedingUpdate(bool b) { m_hasQuotesNeedingUpdate = b; }
Modified: trunk/Source/WebKit/ChangeLog (285344 => 285345)
--- trunk/Source/WebKit/ChangeLog 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/ChangeLog 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1,3 +1,30 @@
+2021-11-05 Devin Rousso <drou...@apple.com>
+
+ [css-values-4] viewport units should be floats
+ https://bugs.webkit.org/show_bug.cgi?id=231644
+ <rdar://problem/84172685>
+
+ Reviewed by Tim Horton.
+
+ Views can be fractional pixels wide. We should not round, especially since viewport units
+ are used as percentage values (e.g. `50dvh` is "50% of the height of the current viewport").
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _setViewportSizeForCSSViewportUnits:]):
+
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setViewportSizeForCSSViewportUnits):
+
+ * Shared/WebPageCreationParameters.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::setViewportSizeForCSSViewportUnits):
+ (WebKit::WebPage::viewportSizeForCSSViewportUnits const):
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):
+
2021-11-04 Jean-Yves Avenard <j...@apple.com>
Have RemoteMediaResource use SharedMemory
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (285344 => 285345)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2021-11-05 17:43:33 UTC (rev 285345)
@@ -127,7 +127,7 @@
WebCore::IntSize minimumSizeForAutoLayout;
WebCore::IntSize sizeToContentAutoSizeMaximumSize;
bool autoSizingShouldExpandToViewHeight;
- std::optional<WebCore::IntSize> viewportSizeForCSSViewportUnits;
+ std::optional<WebCore::FloatSize> viewportSizeForCSSViewportUnits;
WebCore::ScrollPinningBehavior scrollPinningBehavior;
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (285344 => 285345)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1891,7 +1891,7 @@
- (void)_setViewportSizeForCSSViewportUnits:(CGSize)viewportSize
{
THROW_IF_SUSPENDED;
- auto viewportSizeForViewportUnits = WebCore::IntSize(viewportSize);
+ auto viewportSizeForViewportUnits = WebCore::FloatSize(viewportSize);
if (viewportSizeForViewportUnits.isEmpty())
[NSException raise:NSInvalidArgumentException format:@"Viewport size should not be empty"];
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (285344 => 285345)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-11-05 17:43:33 UTC (rev 285345)
@@ -8981,7 +8981,7 @@
send(Messages::WebPage::SetAutoSizingShouldExpandToViewHeight(shouldExpand));
}
-void WebPageProxy::setViewportSizeForCSSViewportUnits(const IntSize& viewportSize)
+void WebPageProxy::setViewportSizeForCSSViewportUnits(const FloatSize& viewportSize)
{
if (m_viewportSizeForCSSViewportUnits && *m_viewportSizeForCSSViewportUnits == viewportSize)
return;
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (285344 => 285345)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1460,8 +1460,8 @@
bool autoSizingShouldExpandToViewHeight() const { return m_autoSizingShouldExpandToViewHeight; }
void setAutoSizingShouldExpandToViewHeight(bool);
- void setViewportSizeForCSSViewportUnits(const WebCore::IntSize&);
- WebCore::IntSize viewportSizeForCSSViewportUnits() const { return m_viewportSizeForCSSViewportUnits.value_or(WebCore::IntSize()); }
+ void setViewportSizeForCSSViewportUnits(const WebCore::FloatSize&);
+ WebCore::FloatSize viewportSizeForCSSViewportUnits() const { return m_viewportSizeForCSSViewportUnits.value_or(WebCore::FloatSize()); }
void didReceiveAuthenticationChallengeProxy(Ref<AuthenticationChallengeProxy>&&, NegotiatedLegacyTLS);
void negotiatedLegacyTLS();
@@ -2903,7 +2903,7 @@
WebCore::IntSize m_minimumSizeForAutoLayout;
WebCore::IntSize m_sizeToContentAutoSizeMaximumSize;
- std::optional<WebCore::IntSize> m_viewportSizeForCSSViewportUnits;
+ std::optional<WebCore::FloatSize> m_viewportSizeForCSSViewportUnits;
// Visual viewports
WebCore::LayoutSize m_baseLayoutViewportSize;
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (285344 => 285345)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2021-11-05 17:43:33 UTC (rev 285345)
@@ -6207,7 +6207,7 @@
corePage()->mainFrame().view()->setAutoSizeFixedMinimumHeight(shouldExpand ? m_viewSize.height() : 0);
}
-void WebPage::setViewportSizeForCSSViewportUnits(std::optional<WebCore::IntSize> viewportSize)
+void WebPage::setViewportSizeForCSSViewportUnits(std::optional<WebCore::FloatSize> viewportSize)
{
if (m_viewportSizeForCSSViewportUnits == viewportSize)
return;
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (285344 => 285345)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1167,8 +1167,8 @@
void setAutoSizingShouldExpandToViewHeight(bool shouldExpand);
bool autoSizingShouldExpandToViewHeight() { return m_autoSizingShouldExpandToViewHeight; }
- void setViewportSizeForCSSViewportUnits(std::optional<WebCore::IntSize>);
- std::optional<WebCore::IntSize> viewportSizeForCSSViewportUnits() const { return m_viewportSizeForCSSViewportUnits; }
+ void setViewportSizeForCSSViewportUnits(std::optional<WebCore::FloatSize>);
+ std::optional<WebCore::FloatSize> viewportSizeForCSSViewportUnits() const { return m_viewportSizeForCSSViewportUnits; }
bool canShowMIMEType(const String& MIMEType) const;
bool canShowResponse(const WebCore::ResourceResponse&) const;
@@ -2188,7 +2188,7 @@
WebCore::IntSize m_minimumSizeForAutoLayout;
WebCore::IntSize m_sizeToContentAutoSizeMaximumSize;
bool m_autoSizingShouldExpandToViewHeight { false };
- std::optional<WebCore::IntSize> m_viewportSizeForCSSViewportUnits;
+ std::optional<WebCore::FloatSize> m_viewportSizeForCSSViewportUnits;
bool m_userIsInteracting { false };
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (285344 => 285345)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2021-11-05 17:43:33 UTC (rev 285345)
@@ -480,7 +480,7 @@
SetSizeToContentAutoSizeMaximumSize(WebCore::IntSize size)
SetAutoSizingShouldExpandToViewHeight(bool shouldExpand)
- SetViewportSizeForCSSViewportUnits(std::optional<WebCore::IntSize> viewportSize)
+ SetViewportSizeForCSSViewportUnits(std::optional<WebCore::FloatSize> viewportSize)
#if PLATFORM(COCOA)
HandleAlternativeTextUIResult(String result)
Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (285344 => 285345)
--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm 2021-11-05 17:43:33 UTC (rev 285345)
@@ -3880,8 +3880,8 @@
FrameView& frameView = *mainFrameView();
smallestUnobscuredSize.scale(1 / m_viewportConfiguration.initialScaleIgnoringContentSize());
largestUnobscuredSize.scale(1 / m_viewportConfiguration.initialScaleIgnoringContentSize());
- frameView.setSizeForCSSSmallViewportUnits(roundedIntSize(smallestUnobscuredSize));
- frameView.setSizeForCSSLargeViewportUnits(roundedIntSize(largestUnobscuredSize));
+ frameView.setSizeForCSSSmallViewportUnits(smallestUnobscuredSize);
+ frameView.setSizeForCSSLargeViewportUnits(largestUnobscuredSize);
}
void WebPage::applicationWillResignActive()
Modified: trunk/Tools/ChangeLog (285344 => 285345)
--- trunk/Tools/ChangeLog 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Tools/ChangeLog 2021-11-05 17:43:33 UTC (rev 285345)
@@ -1,3 +1,22 @@
+2021-11-05 Devin Rousso <drou...@apple.com>
+
+ [css-values-4] viewport units should be floats
+ https://bugs.webkit.org/show_bug.cgi?id=231644
+ <rdar://problem/84172685>
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
+ (evaluateForNumber):
+ (getElementHeight):
+ (TEST.CSSViewportUnits.AllSame):
+ (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
+ (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
+ (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
+
+ * TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm:
+ (TEST.WebKit.ViewportSizeForViewportUnits):
+
2021-11-05 Jonathan Bedard <jbed...@apple.com>
[ic-stats.py] Change shebang to Python 3
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm (285344 => 285345)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/ViewportSizeForViewportUnits.mm 2021-11-05 17:43:33 UTC (rev 285345)
@@ -98,7 +98,7 @@
EXPECT_WK_STREQ(NSInvalidArgumentException, exception.name);
exceptionRaised = true;
}
- EXPECT_TRUE(exceptionRaised);
+ EXPECT_FALSE(exceptionRaised);
exceptionRaised = false;
@try {
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm (285344 => 285345)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm 2021-11-05 17:34:07 UTC (rev 285344)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm 2021-11-05 17:43:33 UTC (rev 285345)
@@ -30,14 +30,14 @@
#import <WebKit/WKWebViewPrivate.h>
#import <wtf/RetainPtr.h>
-static int evaluateForInt(WKWebView *webView, NSString *script)
+static double evaluateForNumber(WKWebView *webView, NSString *script)
{
- return [(NSNumber *)[webView objectByEvaluatingJavaScript:script] intValue];
+ return [(NSNumber *)[webView objectByEvaluatingJavaScript:script] doubleValue];
}
-static int getElementHeight(WKWebView *webView, NSString *elementID)
+static double getElementHeight(WKWebView *webView, NSString *elementID)
{
- return evaluateForInt(webView, [NSString stringWithFormat:@"document.getElementById('%@').getBoundingClientRect().height", elementID]);
+ return evaluateForNumber(webView, [NSString stringWithFormat:@"document.getElementById('%@').getBoundingClientRect().height", elementID]);
}
TEST(CSSViewportUnits, AllSame)
@@ -45,25 +45,25 @@
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
[webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
- EXPECT_EQ(320, getElementHeight(webView.get(), @"vw"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"vh"));
- EXPECT_EQ(320, getElementHeight(webView.get(), @"vmin"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"vmax"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"vw"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"vh"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"vmin"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"vmax"));
- EXPECT_EQ(320, getElementHeight(webView.get(), @"svw"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"svh"));
- EXPECT_EQ(320, getElementHeight(webView.get(), @"svmin"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"svmax"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"svw"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"svh"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"svmin"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"svmax"));
- EXPECT_EQ(320, getElementHeight(webView.get(), @"lvw"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"lvh"));
- EXPECT_EQ(320, getElementHeight(webView.get(), @"lvmin"));
- EXPECT_EQ(500, getElementHeight(webView.get(), @"lvmax"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"lvw"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"lvh"));
+ EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"lvmin"));
+ EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"lvmax"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
}
#if PLATFORM(IOS_FAMILY)
@@ -71,85 +71,85 @@
TEST(CSSViewportUnits, EmptyUnobscuredSizeOverrides)
{
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
- [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10, 20)
+ [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10.5, 20.5)
maximumUnobscuredSizeOverride:CGSizeZero];
[webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
- EXPECT_EQ(10, getElementHeight(webView.get(), @"vw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"vh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"vmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"vmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vmax"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"lvw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"lvh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"lvmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"lvmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvmax"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
}
TEST(CSSViewportUnits, SameUnobscuredSizeOverrides)
{
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
- [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10, 20)
- maximumUnobscuredSizeOverride:CGSizeMake(10, 20)];
+ [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10.5, 20.5)
+ maximumUnobscuredSizeOverride:CGSizeMake(10.5, 20.5)];
[webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
- EXPECT_EQ(10, getElementHeight(webView.get(), @"vw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"vh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"vmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"vmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vmax"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"lvw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"lvh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"lvmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"lvmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvmax"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
}
TEST(CSSViewportUnits, DifferentUnobscuredSizeOverrides)
{
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
- [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10, 20)
- maximumUnobscuredSizeOverride:CGSizeMake(30, 40)];
+ [webView _overrideLayoutParametersWithMinimumLayoutSize:CGSizeMake(10.5, 20.5)
+ maximumUnobscuredSizeOverride:CGSizeMake(30.5, 40.5)];
[webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
- EXPECT_EQ(30, getElementHeight(webView.get(), @"vw"));
- EXPECT_EQ(40, getElementHeight(webView.get(), @"vh"));
- EXPECT_EQ(30, getElementHeight(webView.get(), @"vmin"));
- EXPECT_EQ(40, getElementHeight(webView.get(), @"vmax"));
+ EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"vw"));
+ EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"vh"));
+ EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"vmin"));
+ EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"vmax"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svw"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svh"));
- EXPECT_EQ(10, getElementHeight(webView.get(), @"svmin"));
- EXPECT_EQ(20, getElementHeight(webView.get(), @"svmax"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
+ EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
+ EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
- EXPECT_EQ(30, getElementHeight(webView.get(), @"lvw"));
- EXPECT_EQ(40, getElementHeight(webView.get(), @"lvh"));
- EXPECT_EQ(30, getElementHeight(webView.get(), @"lvmin"));
- EXPECT_EQ(40, getElementHeight(webView.get(), @"lvmax"));
+ EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"lvw"));
+ EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"lvh"));
+ EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"lvmin"));
+ EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"lvmax"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
- EXPECT_EQ(evaluateForInt(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
+ EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
}
#endif // PLATFORM(IOS_FAMILY)
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes