Title: [290306] trunk
Revision
290306
Author
[email protected]
Date
2022-02-22 07:45:55 -0800 (Tue, 22 Feb 2022)

Log Message

Make pointer-events checks for SVG take in account inert subtrees
https://bugs.webkit.org/show_bug.cgi?id=235836

Reviewed by Antti Koivisto.

LayoutTests/imported/w3c:

Added tests for both inert attribute & modal dialog cases.

* web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added.
* web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html: Added.
* web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added.
* web-platform-tests/inert/inert-svg-hittest.tentative.html: Added.

Source/WebCore:

Re-using visibleToHitTesting in SVG code isn't possible, because visibleToHitTesting removes visibility: hidden;
content from hit-testing, which we do not want to here, since pointer-events has values for SVG which still
allow clicking content regardless of their visibility value (pointer-events: painted/fill/stroke/all).

Instead, we add an inert-aware effectivePointerEvents, similar to effectiveUserSelect and re-use that across the codebase.

Tests: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html
       imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html

* rendering/RenderElement.cpp:
(WebCore::RenderElement::styleWillChange):
* rendering/RenderElement.h:
(WebCore::RenderElement::visibleToHitTesting const):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::layerStyleChanged):
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::effectivePointerEvents const):
* rendering/svg/LegacyRenderSVGModelObject.cpp:
(WebCore::LegacyRenderSVGModelObject::checkIntersection):
(WebCore::LegacyRenderSVGModelObject::checkEnclosure):
* rendering/svg/LegacyRenderSVGShape.cpp:
(WebCore::LegacyRenderSVGShape::nodeAtFloatPoint):
* rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::nodeAtFloatPoint):
* rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::checkIntersection):
(WebCore::RenderSVGModelObject::checkEnclosure):
* rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::nodeAtPoint):
* rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::nodeAtFloatPoint):
* rendering/svg/SVGInlineTextBox.cpp:
(WebCore::SVGInlineTextBox::nodeAtPoint):

LayoutTests:

iOS doesn't support test_actions, so it needs different baselines.

* platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added.
* platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (290305 => 290306)


--- trunk/LayoutTests/ChangeLog	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/LayoutTests/ChangeLog	2022-02-22 15:45:55 UTC (rev 290306)
@@ -1,3 +1,15 @@
+2022-02-22  Tim Nguyen  <[email protected]>
+
+        Make pointer-events checks for SVG take in account inert subtrees
+        https://bugs.webkit.org/show_bug.cgi?id=235836
+
+        Reviewed by Antti Koivisto.
+
+        iOS doesn't support test_actions, so it needs different baselines.
+
+        * platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added.
+        * platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added.
+
 2022-02-22  Jonathan Bedard  <[email protected]>
 
         Unreviewed, reverting r290220.

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (290305 => 290306)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2022-02-22 15:45:55 UTC (rev 290306)
@@ -1,3 +1,17 @@
+2022-02-22  Tim Nguyen  <[email protected]>
+
+        Make pointer-events checks for SVG take in account inert subtrees
+        https://bugs.webkit.org/show_bug.cgi?id=235836
+
+        Reviewed by Antti Koivisto.
+
+        Added tests for both inert attribute & modal dialog cases.
+
+        * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt: Added.
+        * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html: Added.
+        * web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt: Added.
+        * web-platform-tests/inert/inert-svg-hittest.tentative.html: Added.
+
 2022-02-22  Marcos Caceres  <[email protected]>
 
         Permission API: handle non-fully active documents

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt (0 => 290306)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,4 @@
+
+PASS Hit-testing doesn't reach contents of an inert SVG
+PASS Hit-testing can reach contents of a no longer inert SVG
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html (0 => 290306)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Hit-testing with SVG made inert by modal dialog</title>
+<link rel="author" title="Tim Nguyen" href=""
+<link rel="help" href=""
+<meta assert="assert" content="SVG made inert by modal dialog should be unreachable with hit-testing">
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+
+<div id="wrapper">
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
+        <rect width="500" height="500" id="target" fill="red">
+    </svg>
+</div>
+
+<dialog id="dialog">Content behind the open modal dialog should not be clickable</dialog>
+
+<style>
+dialog::backdrop {
+    display: none;
+}
+</style>
+
+<script>
+const dialog = document.getElementById("dialog");
+const wrapper = document.getElementById("wrapper");
+const target = document.getElementById("target");
+
+promise_test(async function() {
+    dialog.showModal();
+    this.add_cleanup(() => dialog.close());
+
+    let reachedTarget = false;
+    target.addEventListener("mousedown", () => {
+        reachedTarget = true;
+    }, { once: true });
+
+    await new test_driver.Actions()
+        .pointerMove(0, 0, { origin: wrapper })
+        .pointerDown()
+        .send();
+    this.add_cleanup(() => test_driver.click(document.body));
+
+    assert_false(target.matches(":active"), "target is not active");
+    assert_false(target.matches(":hover"), "target is not hovered");
+    assert_false(reachedTarget, "target didn't get event");
+}, "Hit-testing doesn't reach contents of an inert SVG");
+
+promise_test(async function() {
+    assert_false(dialog.open, "dialog is closed");
+
+    let reachedTarget = false;
+    target.addEventListener("mousedown", () => {
+        reachedTarget = true;
+    }, { once: true });
+
+    await new test_driver.Actions()
+        .pointerMove(0, 0, { origin: wrapper })
+        .pointerDown()
+        .send();
+    this.add_cleanup(() => test_driver.click(document.body));
+
+    assert_true(target.matches(":active"), "target is active");
+    assert_true(reachedTarget, "target got event");
+}, "Hit-testing can reach contents of a no longer inert SVG");
+</script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt (0 => 290306)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,4 @@
+
+PASS Hit-testing doesn't reach contents of an inert SVG
+PASS Hit-testing can reach contents of a no longer inert SVG
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html (0 => 290306)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Hit-testing with inert SVG</title>
+<link rel="author" title="Tim Nguyen" href=""
+<link rel="help" href=""
+<meta assert="assert" content="SVG inside element with inert attribute should be unreachable with hit-testing">
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+
+<div id="wrapper">
+    <div inert id="svg-container">
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
+            <rect width="500" height="500" id="target" fill="red">
+        </svg>
+    </div>
+</div>
+
+<script>
+const wrapper = document.getElementById("wrapper");
+const target = document.getElementById("target");
+
+promise_test(async function() {
+    let reachedTarget = false;
+    target.addEventListener("mousedown", () => {
+        reachedTarget = true;
+    }, { once: true });
+
+    let reachedWrapper = false;
+    wrapper.addEventListener("mousedown", () => {
+        reachedWrapper = true;
+    }, { once: true });
+
+    await new test_driver.Actions()
+        .pointerMove(0, 0, { origin: wrapper })
+        .pointerDown()
+        .send();
+    this.add_cleanup(() => test_driver.click(document.body));
+
+    assert_false(target.matches(":active"), "target is not active");
+    assert_false(target.matches(":hover"), "target is not hovered");
+    assert_false(reachedTarget, "target didn't get event");
+
+    assert_true(wrapper.matches(":hover"), "wrapper is hovered");
+    assert_true(reachedWrapper, "wrapper got event");
+}, "Hit-testing doesn't reach contents of an inert SVG");
+
+promise_test(async function() {
+    document.querySelector("#svg-container").inert = false;
+
+    let reachedTarget = false;
+    target.addEventListener("mousedown", () => {
+        reachedTarget = true;
+    }, { once: true });
+
+    await new test_driver.Actions()
+        .pointerMove(0, 0, { origin: wrapper })
+        .pointerDown()
+        .send();
+    this.add_cleanup(() => test_driver.click(document.body));
+
+    assert_true(target.matches(":active"), "target is active");
+    assert_true(target.matches(":hover"), "target is hovered");
+    assert_true(reachedTarget, "target got event");
+
+    assert_true(wrapper.matches(":hover"), "wrapper is hovered");
+}, "Hit-testing can reach contents of a no longer inert SVG");
+</script>

Added: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt (0 => 290306)


--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest-expected.txt	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,4 @@
+
+PASS Hit-testing doesn't reach contents of an inert SVG
+FAIL Hit-testing can reach contents of a no longer inert SVG assert_true: target is active expected true got false
+

Added: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt (0 => 290306)


--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative-expected.txt	2022-02-22 15:45:55 UTC (rev 290306)
@@ -0,0 +1,4 @@
+
+FAIL Hit-testing doesn't reach contents of an inert SVG assert_true: wrapper is hovered expected true got false
+FAIL Hit-testing can reach contents of a no longer inert SVG assert_true: target is active expected true got false
+

Modified: trunk/Source/WebCore/ChangeLog (290305 => 290306)


--- trunk/Source/WebCore/ChangeLog	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/ChangeLog	2022-02-22 15:45:55 UTC (rev 290306)
@@ -1,5 +1,46 @@
 2022-02-22  Tim Nguyen  <[email protected]>
 
+        Make pointer-events checks for SVG take in account inert subtrees
+        https://bugs.webkit.org/show_bug.cgi?id=235836
+
+        Reviewed by Antti Koivisto.
+
+        Re-using visibleToHitTesting in SVG code isn't possible, because visibleToHitTesting removes visibility: hidden;
+        content from hit-testing, which we do not want to here, since pointer-events has values for SVG which still
+        allow clicking content regardless of their visibility value (pointer-events: painted/fill/stroke/all).
+
+        Instead, we add an inert-aware effectivePointerEvents, similar to effectiveUserSelect and re-use that across the codebase.
+
+        Tests: imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html
+               imported/w3c/web-platform-tests/inert/inert-svg-hittest.tentative.html
+
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::styleWillChange):
+        * rendering/RenderElement.h:
+        (WebCore::RenderElement::visibleToHitTesting const):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::layerStyleChanged):
+        * rendering/style/RenderStyle.h:
+        (WebCore::RenderStyle::effectivePointerEvents const):
+        * rendering/svg/LegacyRenderSVGModelObject.cpp:
+        (WebCore::LegacyRenderSVGModelObject::checkIntersection):
+        (WebCore::LegacyRenderSVGModelObject::checkEnclosure):
+        * rendering/svg/LegacyRenderSVGShape.cpp:
+        (WebCore::LegacyRenderSVGShape::nodeAtFloatPoint):
+        * rendering/svg/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::nodeAtFloatPoint):
+        * rendering/svg/RenderSVGModelObject.cpp:
+        (WebCore::RenderSVGModelObject::checkIntersection):
+        (WebCore::RenderSVGModelObject::checkEnclosure):
+        * rendering/svg/RenderSVGShape.cpp:
+        (WebCore::RenderSVGShape::nodeAtPoint):
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::nodeAtFloatPoint):
+        * rendering/svg/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::nodeAtPoint):
+
+2022-02-22  Tim Nguyen  <[email protected]>
+
         Rename RenderStyle::userSelectIncludingInert to RenderStyle::effectiveUserSelect
         https://bugs.webkit.org/show_bug.cgi?id=237033
 

Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/RenderElement.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -844,10 +844,8 @@
         }
 
         auto needsInvalidateEventRegion = [&] {
-            if (m_style.effectiveInert() != newStyle.effectiveInert())
+            if (m_style.effectivePointerEvents() != newStyle.effectivePointerEvents())
                 return true;
-            if (m_style.pointerEvents() != newStyle.pointerEvents())
-                return true;
 #if ENABLE(TOUCH_ACTION_REGIONS)
             if (m_style.effectiveTouchActions() != newStyle.effectiveTouchActions())
                 return true;

Modified: trunk/Source/WebCore/rendering/RenderElement.h (290305 => 290306)


--- trunk/Source/WebCore/rendering/RenderElement.h	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/RenderElement.h	2022-02-22 15:45:55 UTC (rev 290306)
@@ -159,13 +159,10 @@
 
     bool visibleToHitTesting(std::optional<HitTestRequest> hitTestRequest = std::nullopt) const
     {
-        if (style().effectiveInert())
-            return false;
-
         if (style().visibility() != Visibility::Visible)
             return false;
 
-        if ((!hitTestRequest || !hitTestRequest->ignoreCSSPointerEventsProperty()) && style().pointerEvents() == PointerEvents::None)
+        if ((!hitTestRequest || !hitTestRequest->ignoreCSSPointerEventsProperty()) && style().effectivePointerEvents() == PointerEvents::None)
             return false;
 
         return true;

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -1731,7 +1731,7 @@
 
     if (diff >= StyleDifference::RecompositeLayer) {
         if (layer.isComposited()) {
-            bool hitTestingStateChanged = oldStyle && (oldStyle->pointerEvents() != newStyle.pointerEvents() || oldStyle->effectiveInert() != newStyle.effectiveInert());
+            bool hitTestingStateChanged = oldStyle && (oldStyle->effectivePointerEvents() != newStyle.effectivePointerEvents());
             if (is<RenderWidget>(layer.renderer()) || hitTestingStateChanged) {
                 // For RenderWidgets this is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
                 layer.setNeedsCompositingConfigurationUpdate();

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (290305 => 290306)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2022-02-22 15:45:55 UTC (rev 290306)
@@ -713,6 +713,7 @@
     LineAlign lineAlign() const { return static_cast<LineAlign>(m_rareInheritedData->lineAlign); }
 
     PointerEvents pointerEvents() const { return static_cast<PointerEvents>(m_inheritedFlags.pointerEvents); }
+    PointerEvents effectivePointerEvents() const { return effectiveInert() ? PointerEvents::None : pointerEvents(); }
     const AnimationList* animations() const { return m_rareNonInheritedData->animations.get(); }
     const AnimationList* transitions() const { return m_rareNonInheritedData->transitions.get(); }
 

Modified: trunk/Source/WebCore/rendering/svg/LegacyRenderSVGModelObject.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/LegacyRenderSVGModelObject.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/LegacyRenderSVGModelObject.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -169,7 +169,7 @@
     
 bool LegacyRenderSVGModelObject::checkIntersection(RenderElement* renderer, const FloatRect& rect)
 {
-    if (!renderer || renderer->style().pointerEvents() == PointerEvents::None)
+    if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None)
         return false;
     if (!isGraphicsElement(*renderer))
         return false;
@@ -182,7 +182,7 @@
 
 bool LegacyRenderSVGModelObject::checkEnclosure(RenderElement* renderer, const FloatRect& rect)
 {
-    if (!renderer || renderer->style().pointerEvents() == PointerEvents::None)
+    if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None)
         return false;
     if (!isGraphicsElement(*renderer))
         return false;

Modified: trunk/Source/WebCore/rendering/svg/LegacyRenderSVGShape.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/LegacyRenderSVGShape.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/LegacyRenderSVGShape.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -354,7 +354,7 @@
 
     SVGHitTestCycleDetectionScope hitTestScope(*this);
 
-    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().pointerEvents());
+    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().effectivePointerEvents());
     bool isVisible = (style().visibility() == Visibility::Visible);
     if (isVisible || !hitRules.requireVisible) {
         const SVGRenderStyle& svgStyle = style().svgStyle();

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -216,7 +216,7 @@
     if (hitTestAction != HitTestForeground)
         return false;
 
-    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_IMAGE_HITTESTING, request, style().pointerEvents());
+    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_IMAGE_HITTESTING, request, style().effectivePointerEvents());
     bool isVisible = (style().visibility() == Visibility::Visible);
     if (isVisible || !hitRules.requireVisible) {
         FloatPoint localPoint = valueOrDefault(localToParentTransform().inverse()).mapPoint(pointInParent);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -254,7 +254,7 @@
 
 bool RenderSVGModelObject::checkIntersection(RenderElement* renderer, const FloatRect& rect)
 {
-    if (!renderer || renderer->style().pointerEvents() == PointerEvents::None)
+    if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None)
         return false;
     if (!isGraphicsElement(*renderer))
         return false;
@@ -266,7 +266,7 @@
 
 bool RenderSVGModelObject::checkEnclosure(RenderElement* renderer, const FloatRect& rect)
 {
-    if (!renderer || renderer->style().pointerEvents() == PointerEvents::None)
+    if (!renderer || renderer->style().effectivePointerEvents() == PointerEvents::None)
         return false;
     if (!isGraphicsElement(*renderer))
         return false;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -358,7 +358,7 @@
 
     SVGHitTestCycleDetectionScope hitTestScope(*this);
 
-    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().pointerEvents());
+    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_PATH_HITTESTING, request, style().effectivePointerEvents());
     bool isVisible = (style().visibility() == Visibility::Visible);
     if (isVisible || !hitRules.requireVisible) {
         const SVGRenderStyle& svgStyle = style().svgStyle();

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -404,7 +404,7 @@
 
 bool RenderSVGText::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction)
 {
-    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, style().pointerEvents());
+    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, style().effectivePointerEvents());
     bool isVisible = (style().visibility() == Visibility::Visible);
     if (isVisible || !hitRules.requireVisible) {
         if ((hitRules.canHitStroke && (style().svgStyle().hasStroke() || !hitRules.requireStroke))

Modified: trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp (290305 => 290306)


--- trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp	2022-02-22 15:42:48 UTC (rev 290305)
+++ trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp	2022-02-22 15:45:55 UTC (rev 290306)
@@ -635,7 +635,7 @@
     // FIXME: integrate with LegacyInlineTextBox::nodeAtPoint better.
     ASSERT(!isLineBreak());
 
-    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, renderer().style().pointerEvents());
+    PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_TEXT_HITTESTING, request, renderer().style().effectivePointerEvents());
     bool isVisible = renderer().style().visibility() == Visibility::Visible;
     if (isVisible || !hitRules.requireVisible) {
         if ((hitRules.canHitStroke && (renderer().style().svgStyle().hasStroke() || !hitRules.requireStroke))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to