Title: [270339] trunk
- Revision
- 270339
- Author
- [email protected]
- Date
- 2020-12-01 19:35:37 -0800 (Tue, 01 Dec 2020)
Log Message
Toggling pointer-events on body does not re-enable scrolling on child
https://bugs.webkit.org/show_bug.cgi?id=218533
<rdar://problem/71009746>
Reviewed by Simon Fraser.
Source/WebCore:
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::changeRequiresRecompositeLayer const):
Changes to the CSS `pointer-events` property should also also indicate that a recomposite is
required (`StyleDifference::RecompositeLayer`), resulting in `RenderElement::styleWillChange`
being called, which invalidates the event region since the value of the CSS `pointer-events`
property has changed.
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::layerStyleChanged):
Don't limit `StyleDifference::RecompositeLayer` changes to only affect `RenderWidget`.
LayoutTests:
* fast/scrolling/ios/overflow-scroll-pointer-events.html: Added.
* fast/scrolling/ios/overflow-scroll-pointer-events-expected.txt: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (270338 => 270339)
--- trunk/LayoutTests/ChangeLog 2020-12-02 03:25:42 UTC (rev 270338)
+++ trunk/LayoutTests/ChangeLog 2020-12-02 03:35:37 UTC (rev 270339)
@@ -1,3 +1,14 @@
+2020-12-01 Devin Rousso <[email protected]>
+
+ Toggling pointer-events on body does not re-enable scrolling on child
+ https://bugs.webkit.org/show_bug.cgi?id=218533
+ <rdar://problem/71009746>
+
+ Reviewed by Simon Fraser.
+
+ * fast/scrolling/ios/overflow-scroll-pointer-events.html: Added.
+ * fast/scrolling/ios/overflow-scroll-pointer-events-expected.txt: Added.
+
2020-12-01 Chris Fleizach <[email protected]>
AX: VoiceOver does not announce the aria-checked state for ARIA treeitem
Added: trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events-expected.txt (0 => 270339)
--- trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events-expected.txt 2020-12-02 03:35:37 UTC (rev 270339)
@@ -0,0 +1,11 @@
+Tests that toggling `pointer-events: none;` doesn't prevent scrolling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS innerScrollElement.scrollTop is 0
+Disabling pointer events...
+PASS innerScrollElement.scrollTop is 0
+Enabling pointer events...
+PASS innerScrollElement.scrollTop is 150
+
Added: trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events.html (0 => 270339)
--- trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events.html (rev 0)
+++ trunk/LayoutTests/fast/scrolling/ios/overflow-scroll-pointer-events.html 2020-12-02 03:35:37 UTC (rev 270339)
@@ -0,0 +1,61 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
+<head>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<script src=""
+<script src=""
+<script src=""
+<style>
+.disable-scroll { pointer-events: none; }
+.outer-scroll { height: 100%; }
+.inner-scroll { height: 100%; overflow-y: auto; }
+.box { height: 100%; }
+</style>
+<script>
+if (window.testRunner)
+ testRunner.waitUntilDone();
+
+async function runTest() {
+ if (!window.testRunner) {
+ finishJSTest();
+ return;
+ }
+
+ description("Tests that toggling `pointer-events: none;` doesn't prevent scrolling.");
+
+ globalThis.outerScrollElement = document.querySelector(".outer-scroll");
+ globalThis.innerScrollElement = document.querySelector(".inner-scroll");
+
+ shouldBe("innerScrollElement.scrollTop", "0");
+
+ debug("Disabling pointer events...");
+ outerScrollElement.classList.add("disable-scroll");
+ await UIHelper.animationFrame();
+ await touchAndDragFromPointToPoint(150, 300, 150, 150);
+ await liftUpAtPoint(150, 150);
+ await UIHelper.animationFrame();
+ shouldBe("innerScrollElement.scrollTop", "0");
+
+ debug("Enabling pointer events...");
+ outerScrollElement.classList.remove("disable-scroll");
+ await UIHelper.animationFrame();
+ await touchAndDragFromPointToPoint(150, 300, 150, 150);
+ await liftUpAtPoint(150, 150);
+ await UIHelper.animationFrame();
+ shouldBe("innerScrollElement.scrollTop", "150");
+
+ finishJSTest();
+}
+</script>
+<body _onload_="runTest()">
+ <div class="outer-scroll">
+ <div class="inner-scroll">
+ <div class="box" style="background-color: red;"></div>
+ <div class="box" style="background-color: green;"></div>
+ <div class="box" style="background-color: blue;"></div>
+ </div>
+ </div>
+ <p id="description"></p>
+ <div id="console"></div>
+ <script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (270338 => 270339)
--- trunk/Source/WebCore/ChangeLog 2020-12-02 03:25:42 UTC (rev 270338)
+++ trunk/Source/WebCore/ChangeLog 2020-12-02 03:35:37 UTC (rev 270339)
@@ -1,3 +1,22 @@
+2020-12-01 Devin Rousso <[email protected]>
+
+ Toggling pointer-events on body does not re-enable scrolling on child
+ https://bugs.webkit.org/show_bug.cgi?id=218533
+ <rdar://problem/71009746>
+
+ Reviewed by Simon Fraser.
+
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::changeRequiresRecompositeLayer const):
+ Changes to the CSS `pointer-events` property should also also indicate that a recomposite is
+ required (`StyleDifference::RecompositeLayer`), resulting in `RenderElement::styleWillChange`
+ being called, which invalidates the event region since the value of the CSS `pointer-events`
+ property has changed.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::layerStyleChanged):
+ Don't limit `StyleDifference::RecompositeLayer` changes to only affect `RenderWidget`.
+
2020-12-01 Simon Fraser <[email protected]>
Simplify some callsites of WheelEventTestMonitor
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (270338 => 270339)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2020-12-02 03:25:42 UTC (rev 270338)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2020-12-02 03:35:37 UTC (rev 270339)
@@ -1681,9 +1681,14 @@
}
}
- // This is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
- if (diff == StyleDifference::RecompositeLayer && layer.isComposited() && is<RenderWidget>(layer.renderer()))
- layer.setNeedsCompositingConfigurationUpdate();
+ if (diff == StyleDifference::RecompositeLayer && layer.isComposited()) {
+ if (oldStyle && oldStyle->pointerEvents() != newStyle.pointerEvents())
+ layer.setNeedsCompositingConfigurationUpdate();
+ else if (is<RenderWidget>(layer.renderer())) {
+ // This is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
+ layer.setNeedsCompositingConfigurationUpdate();
+ }
+ }
if (diff >= StyleDifference::RecompositeLayer && oldStyle && recompositeChangeRequiresGeometryUpdate(*oldStyle, newStyle)) {
// FIXME: transform changes really need to trigger layout. See RenderElement::adjustStyleDifference().
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (270338 => 270339)
--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2020-12-02 03:25:42 UTC (rev 270338)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2020-12-02 03:35:37 UTC (rev 270339)
@@ -1167,6 +1167,9 @@
bool RenderStyle::changeRequiresRecompositeLayer(const RenderStyle& other, OptionSet<StyleDifferenceContextSensitiveProperty>&) const
{
+ if (m_inheritedFlags.pointerEvents != other.m_inheritedFlags.pointerEvents)
+ return true;
+
if (m_rareNonInheritedData.ptr() != other.m_rareNonInheritedData.ptr()) {
if (m_rareNonInheritedData->transformStyle3D != other.m_rareNonInheritedData->transformStyle3D
|| m_rareNonInheritedData->backfaceVisibility != other.m_rareNonInheritedData->backfaceVisibility
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes