Diff
Modified: trunk/LayoutTests/ChangeLog (246388 => 246389)
--- trunk/LayoutTests/ChangeLog 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/LayoutTests/ChangeLog 2019-06-13 03:21:36 UTC (rev 246389)
@@ -1,3 +1,13 @@
+2019-06-12 Simon Fraser <[email protected]>
+
+ paddingBoxRect() is wrong with RTL scrollbars on the left
+ https://bugs.webkit.org/show_bug.cgi?id=198816
+
+ Reviewed by Jon Lee.
+
+ * compositing/geometry/rtl-overflow-scroll-expected.html: Added.
+ * compositing/geometry/rtl-overflow-scroll.html: Added.
+
2019-06-12 Eric Carlson <[email protected]>
[High Sierra / Mojave Debug WK2] Layout Test media/video-restricted-invisible-autoplay-allowed-when-visible.html is a flaky failure
Added: trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html (0 => 246389)
--- trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html (rev 0)
+++ trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html 2019-06-13 03:21:36 UTC (rev 246389)
@@ -0,0 +1,37 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+ <style>
+ .scroller {
+ direction: rtl;
+ width: 300px;
+ height: 300px;
+ border: 5px solid black;
+ padding: 2px;
+ box-sizing: border-box;
+ overflow: hidden;
+ }
+
+ .contents {
+ width: 200%;
+ height: 200%;
+ background-color: green;
+ }
+
+ .scrollbar-hider {
+ position: absolute;
+ top: 8px;
+ left: 13px;
+ width: 16px;
+ height: 300px;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+ <div class="scroller">
+ <div class="contents"></div>
+ </div>
+ <div class="scrollbar-hider"></div>
+</body>
+</html>
Added: trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html (0 => 246389)
--- trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html (rev 0)
+++ trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html 2019-06-13 03:21:36 UTC (rev 246389)
@@ -0,0 +1,38 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+ <style>
+ .scroller {
+ direction: rtl;
+ width: 300px;
+ height: 300px;
+ border: 5px solid black;
+ padding: 2px;
+ box-sizing: border-box;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ }
+
+ .contents {
+ width: 200%;
+ height: 200%;
+ background-color: green;
+ }
+
+ .scrollbar-hider {
+ position: absolute;
+ top: 8px;
+ left: 13px;
+ width: 16px;
+ height: 300px;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+ <div class="scroller">
+ <div class="contents"></div>
+ </div>
+ <div class="scrollbar-hider"></div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (246388 => 246389)
--- trunk/Source/WebCore/ChangeLog 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/ChangeLog 2019-06-13 03:21:36 UTC (rev 246389)
@@ -1,3 +1,24 @@
+2019-06-12 Simon Fraser <[email protected]>
+
+ paddingBoxRect() is wrong with RTL scrollbars on the left
+ https://bugs.webkit.org/show_bug.cgi?id=198816
+
+ Reviewed by Jon Lee.
+
+ RenderBox::paddingBoxRect() needs to offset the left side of the box for the
+ vertical scrollbar, if it's placed on the left.
+
+ Test: compositing/geometry/rtl-overflow-scroll.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::paddingBoxRect const):
+ * rendering/RenderBox.h:
+ (WebCore::RenderBox::paddingBoxRect const): Deleted.
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateGeometry):
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::controlClipRect const):
+
2019-06-12 Youenn Fablet <[email protected]>
Use NSURLSession for WebSocket
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (246388 => 246389)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2019-06-13 03:21:36 UTC (rev 246389)
@@ -658,6 +658,16 @@
return style.getRoundedBorderFor(bounds).radii();
}
+LayoutRect RenderBox::paddingBoxRect() const
+{
+ auto verticalScrollbarWidth = this->verticalScrollbarWidth();
+ LayoutUnit offsetForScrollbar = shouldPlaceBlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth : 0;
+
+ return LayoutRect(borderLeft() + offsetForScrollbar, borderTop(),
+ width() - borderLeft() - borderRight() - verticalScrollbarWidth,
+ height() - borderTop() - borderBottom() - horizontalScrollbarHeight());
+}
+
LayoutRect RenderBox::contentBoxRect() const
{
return { contentBoxLocation(), contentSize() };
Modified: trunk/Source/WebCore/rendering/RenderBox.h (246388 => 246389)
--- trunk/Source/WebCore/rendering/RenderBox.h 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2019-06-13 03:21:36 UTC (rev 246389)
@@ -219,7 +219,7 @@
LayoutUnit paddingBoxWidth() const { return width() - borderLeft() - borderRight() - verticalScrollbarWidth(); }
LayoutUnit paddingBoxHeight() const { return height() - borderTop() - borderBottom() - horizontalScrollbarHeight(); }
- LayoutRect paddingBoxRect() const { return LayoutRect(borderLeft(), borderTop(), paddingBoxWidth(), paddingBoxHeight()); }
+ LayoutRect paddingBoxRect() const;
LayoutRect paddingBoxRectIncludingScrollbar() const { return LayoutRect(borderLeft(), borderTop(), width() - borderLeft() - borderRight(), height() - borderTop() - borderBottom()); }
// IE extensions. Used to calculate offsetWidth/Height. Overridden by inlines (RenderFlow)
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (246388 => 246389)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2019-06-13 03:21:36 UTC (rev 246389)
@@ -1216,11 +1216,11 @@
if (m_scrollContainerLayer) {
ASSERT(m_scrolledContentsLayer);
auto& renderBox = downcast<RenderBox>(renderer());
- LayoutRect paddingBoxIncludingScrollbar = renderBox.paddingBoxRectIncludingScrollbar();
+ LayoutRect paddingBox = renderBox.paddingBoxRect();
LayoutRect parentLayerBounds = clippingLayer() ? clippingBox : compositedBounds();
// FIXME: need to do some pixel snapping here.
- m_scrollContainerLayer->setPosition(FloatPoint(paddingBoxIncludingScrollbar.location() - parentLayerBounds.location()));
+ m_scrollContainerLayer->setPosition(FloatPoint(paddingBox.location() - parentLayerBounds.location()));
m_scrollContainerLayer->setSize(roundedIntSize(LayoutSize(renderBox.paddingBoxWidth(), renderBox.paddingBoxHeight())));
ScrollOffset scrollOffset = m_owningLayer.scrollOffset();
@@ -1230,12 +1230,12 @@
#endif
FloatSize oldScrollingLayerOffset = m_scrollContainerLayer->offsetFromRenderer();
- m_scrollContainerLayer->setOffsetFromRenderer(toFloatSize(paddingBoxIncludingScrollbar.location()));
+ m_scrollContainerLayer->setOffsetFromRenderer(toFloatSize(paddingBox.location()));
if (m_childClippingMaskLayer) {
m_childClippingMaskLayer->setPosition(m_scrollContainerLayer->position());
m_childClippingMaskLayer->setSize(m_scrollContainerLayer->size());
- m_childClippingMaskLayer->setOffsetFromRenderer(toFloatSize(paddingBoxIncludingScrollbar.location()));
+ m_childClippingMaskLayer->setOffsetFromRenderer(toFloatSize(paddingBox.location()));
}
bool paddingBoxOffsetChanged = oldScrollingLayerOffset != m_scrollContainerLayer->offsetFromRenderer();
@@ -1246,7 +1246,7 @@
m_scrolledContentsLayer->setSize(scrollSize);
m_scrolledContentsLayer->setScrollOffset(scrollOffset, GraphicsLayer::DontSetNeedsDisplay);
- m_scrolledContentsLayer->setOffsetFromRenderer(toLayoutSize(paddingBoxIncludingScrollbar.location()), GraphicsLayer::DontSetNeedsDisplay);
+ m_scrolledContentsLayer->setOffsetFromRenderer(toLayoutSize(paddingBox.location()), GraphicsLayer::DontSetNeedsDisplay);
adjustTiledBackingCoverage();
}
Modified: trunk/Source/WebCore/rendering/RenderListBox.cpp (246388 => 246389)
--- trunk/Source/WebCore/rendering/RenderListBox.cpp 2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderListBox.cpp 2019-06-13 03:21:36 UTC (rev 246389)
@@ -804,8 +804,6 @@
// Clip against the padding box, to give <option>s and overlay scrollbar some extra space
// to get painted.
LayoutRect clipRect = paddingBoxRect();
- if (shouldPlaceBlockDirectionScrollbarOnLeft())
- clipRect.move(m_vBar->occupiedWidth(), 0);
clipRect.moveBy(additionalOffset);
return clipRect;
}