Title: [87027] trunk
Revision
87027
Author
[email protected]
Date
2011-05-21 23:58:30 -0700 (Sat, 21 May 2011)

Log Message

2011-05-21  Dirk Schulze  <[email protected]>

        Reviewed by Darin Adler.

        REGRESSION(r66731): pointer-events are broken in some cases
        https://bugs.webkit.org/show_bug.cgi?id=45467

        The SVGSVGElement shouldn't be the target of a mouse event, if its pointer-events attribute is set
        to 'none'. This matches the behavior on Firefox where an embedded SVG element is the target of an event,
        if none of its childs caught the event. This is the case for all pointer-events other than 'none'.

        Tests: svg/custom/pointer-events-on-svg-with-pointer.xhtml
               svg/custom/pointer-events-on-svg-without-pointer.xhtml

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
2011-05-21  Dirk Schulze  <[email protected]>

        Reviewed by Darin Adler.

        REGRESSION(r66731): pointer-events are broken in some cases
        https://bugs.webkit.org/show_bug.cgi?id=45467

        Check that an embedded SVG element doesn't have a pointer, if pointer-events is set to 'none'.

        * svg/custom/pointer-events-on-svg-with-pointer-expected.txt: Added.
        * svg/custom/pointer-events-on-svg-with-pointer.xhtml: Added.
        * svg/custom/pointer-events-on-svg-without-pointer-expected.txt: Added.
        * svg/custom/pointer-events-on-svg-without-pointer.xhtml: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (87026 => 87027)


--- trunk/LayoutTests/ChangeLog	2011-05-22 04:44:27 UTC (rev 87026)
+++ trunk/LayoutTests/ChangeLog	2011-05-22 06:58:30 UTC (rev 87027)
@@ -1,3 +1,17 @@
+2011-05-21  Dirk Schulze  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        REGRESSION(r66731): pointer-events are broken in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=45467
+
+        Check that an embedded SVG element doesn't have a pointer, if pointer-events is set to 'none'.
+
+        * svg/custom/pointer-events-on-svg-with-pointer-expected.txt: Added.
+        * svg/custom/pointer-events-on-svg-with-pointer.xhtml: Added.
+        * svg/custom/pointer-events-on-svg-without-pointer-expected.txt: Added.
+        * svg/custom/pointer-events-on-svg-without-pointer.xhtml: Added.
+
 2011-05-21  Dan Bernstein  <[email protected]>
 
         Reviewed by Darin Adler.

Added: trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer-expected.txt (0 => 87027)


--- trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer-expected.txt	2011-05-22 06:58:30 UTC (rev 87027)
@@ -0,0 +1,3 @@
+PASSED: SVGSVGElement had pointer
+
+

Added: trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml (0 => 87027)


--- trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pointer-events-on-svg-with-pointer.xhtml	2011-05-22 06:58:30 UTC (rev 87027)
@@ -0,0 +1,45 @@
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<body style="margin: 0px; padding: 0px">
+<p></p>
+<div style="position:absolute; top:50px; left:0px; width:100px; height:100px; background-color:blue;"></div>
+<svg xmlns="http://www.w3.org/2000/svg" style="position:absolute; top:50px; left:0px; width:100px; height:100px;">
+    <rect width="100" height="100" fill="green" pointer-events="none"/>
+</svg>
+<script>
+    var svg = document.getElementsByTagName("svg")[0];
+    var container = document.getElementsByTagName("div")[0];
+    var p = document.getElementsByTagName("p")[0];
+
+    container.addEventListener("mousedown", failed, false);
+    svg.addEventListener("mousedown", passed, false);
+
+    function stop() {
+        container.removeEventListener("mousedown", passed, false);
+        svg.removeEventListener("mousedown", failed, false);
+
+        if (window.layoutTestController)
+            layoutTestController.notifyDone();
+    }
+        
+    function failed() {
+        p.innerHTML = 'FAILED: HTMLDivElement had pointer';
+        stop();
+    }
+
+    function passed() {
+        p.innerHTML = 'PASSED: SVGSVGElement had pointer';
+        stop();
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.waitUntilDone();
+        layoutTestController.dumpAsText();
+    }
+
+    if (window.eventSender) {
+        eventSender.mouseMoveTo(50, 75);
+        eventSender.mouseDown();
+    }
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer-expected.txt (0 => 87027)


--- trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer-expected.txt	2011-05-22 06:58:30 UTC (rev 87027)
@@ -0,0 +1,3 @@
+PASSED: HTMLDivElement had pointer
+
+

Added: trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer.xhtml (0 => 87027)


--- trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer.xhtml	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pointer-events-on-svg-without-pointer.xhtml	2011-05-22 06:58:30 UTC (rev 87027)
@@ -0,0 +1,45 @@
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<body style="margin: 0px; padding: 0px">
+<p></p>
+<div style="position:absolute; top:50px; left:0px; width:100px; height:100px; background-color:blue;"></div>
+<svg xmlns="http://www.w3.org/2000/svg" style="position:absolute; top:50px; left:0px; width:100px; height:100px;" pointer-events="none">
+    <rect width="100" height="100" fill="green" pointer-events="none"/>
+</svg>
+<script>
+    var svg = document.getElementsByTagName("svg")[0];
+    var container = document.getElementsByTagName("div")[0];
+    var p = document.getElementsByTagName("p")[0];
+
+    container.addEventListener("mousedown", passed, false);
+    svg.addEventListener("mousedown", failed, false);
+
+    function stop() {
+        container.removeEventListener("mousedown", failed, false);
+        svg.removeEventListener("mousedown", passed, false);
+
+        if (window.layoutTestController)
+            layoutTestController.notifyDone();
+    }
+        
+    function failed() {
+        p.innerHTML = 'FAILED: SVGSVGElement had pointer';
+        stop();
+    }
+
+    function passed() {
+        p.innerHTML = 'PASSED: HTMLDivElement had pointer';
+        stop();
+    }
+
+    if (window.layoutTestController) {
+        layoutTestController.waitUntilDone();
+        layoutTestController.dumpAsText();
+    }
+
+    if (window.eventSender) {
+        eventSender.mouseMoveTo(50, 75);
+        eventSender.mouseDown();
+    }
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (87026 => 87027)


--- trunk/Source/WebCore/ChangeLog	2011-05-22 04:44:27 UTC (rev 87026)
+++ trunk/Source/WebCore/ChangeLog	2011-05-22 06:58:30 UTC (rev 87027)
@@ -1,3 +1,20 @@
+2011-05-21  Dirk Schulze  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        REGRESSION(r66731): pointer-events are broken in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=45467
+
+        The SVGSVGElement shouldn't be the target of a mouse event, if its pointer-events attribute is set
+        to 'none'. This matches the behavior on Firefox where an embedded SVG element is the target of an event,
+        if none of its childs caught the event. This is the case for all pointer-events other than 'none'.
+
+        Tests: svg/custom/pointer-events-on-svg-with-pointer.xhtml
+               svg/custom/pointer-events-on-svg-without-pointer.xhtml
+
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::nodeAtPoint):
+
 2011-05-21  Dan Bernstein  <[email protected]>
 
         Reviewed by Darin Adler.

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (87026 => 87027)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2011-05-22 04:44:27 UTC (rev 87026)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2011-05-22 06:58:30 UTC (rev 87027)
@@ -340,7 +340,7 @@
     }
 
     // If we didn't early exit above, we've just hit the container <svg> element. Unlike SVG 1.1, 2nd Edition allows container elements to be hit.
-    if (hitTestAction == HitTestBlockBackground) {
+    if (hitTestAction == HitTestBlockBackground && style()->pointerEvents() != PE_NONE) {
         // Only return true here, if the last hit testing phase 'BlockBackground' is executed. If we'd return true in the 'Foreground' phase,
         // hit testing would stop immediately. For SVG only trees this doesn't matter. Though when we have a <foreignObject> subtree we need
         // to be able to detect hits on the background of a <div> element. If we'd return true here in the 'Foreground' phase, we are not able 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to