- 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