Title: [102734] trunk
- Revision
- 102734
- Author
- [email protected]
- Date
- 2011-12-13 20:59:33 -0800 (Tue, 13 Dec 2011)
Log Message
HTML details summary not working with form controls
https://bugs.webkit.org/show_bug.cgi?id=74398
Patch by Hajime Morrita <[email protected]> on 2011-12-13
Reviewed by Kent Tamura.
Source/WebCore:
Allowed HTMLSummaryElement to skip the toggle logic if the event
target is a form control.
Test: fast/html/details-click-controls.html
* html/HTMLSummaryElement.cpp:
(WebCore::isClickableControl):
(WebCore::HTMLSummaryElement::defaultEventHandler):
LayoutTests:
* fast/html/details-click-controls-expected.txt: Added.
* fast/html/details-click-controls.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (102733 => 102734)
--- trunk/LayoutTests/ChangeLog 2011-12-14 04:56:56 UTC (rev 102733)
+++ trunk/LayoutTests/ChangeLog 2011-12-14 04:59:33 UTC (rev 102734)
@@ -1,3 +1,13 @@
+2011-12-13 Hajime Morrita <[email protected]>
+
+ HTML details summary not working with form controls
+ https://bugs.webkit.org/show_bug.cgi?id=74398
+
+ Reviewed by Kent Tamura.
+
+ * fast/html/details-click-controls-expected.txt: Added.
+ * fast/html/details-click-controls.html: Added.
+
2011-12-13 Dmitry Lomov <[email protected]>
https://bugs.webkit.org/show_bug.cgi?id=74456
Added: trunk/LayoutTests/fast/html/details-click-controls-expected.txt (0 => 102734)
--- trunk/LayoutTests/fast/html/details-click-controls-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/html/details-click-controls-expected.txt 2011-12-14 04:59:33 UTC (rev 102734)
@@ -0,0 +1,6 @@
+PASS details.open is false
+PASS details.open is false
+PASS details.open is false
+PASS details.open is false
+PASS details.open is true
+
Added: trunk/LayoutTests/fast/html/details-click-controls.html (0 => 102734)
--- trunk/LayoutTests/fast/html/details-click-controls.html (rev 0)
+++ trunk/LayoutTests/fast/html/details-click-controls.html 2011-12-14 04:59:33 UTC (rev 102734)
@@ -0,0 +1,44 @@
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<details id="d">
+<summary>
+ <input type="button" value="button" id="buttonControl">
+ <input type="text" value="text" id="textControl">
+ <textarea value="textarea" id="textareaControl"></textarea>
+ <div id="block">This is clickable summary text</div>
+</summary>
+This is a detail.
+</details>
+<script>
+function clickOn(id)
+{
+ var control = document.getElementById(id);
+ var x = control.offsetLeft;
+ var y = control.offsetTop;
+ var delta = 5;
+ eventSender.mouseMoveTo(x + delta, y + delta);
+ eventSender.mouseDown();
+ eventSender.mouseUp();
+}
+
+if (window.eventSender) {
+ details = document.getElementById("d");
+ shouldBeFalse("details.open");
+ clickOn("buttonControl");
+ shouldBeFalse("details.open");
+ clickOn("textControl");
+ shouldBeFalse("details.open");
+ clickOn("textareaControl");
+ shouldBeFalse("details.open");
+ clickOn("block");
+ shouldBeTrue("details.open");
+ details.style.display = "none";
+}
+
+
+</script>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (102733 => 102734)
--- trunk/Source/WebCore/ChangeLog 2011-12-14 04:56:56 UTC (rev 102733)
+++ trunk/Source/WebCore/ChangeLog 2011-12-14 04:59:33 UTC (rev 102734)
@@ -1,3 +1,19 @@
+2011-12-13 Hajime Morrita <[email protected]>
+
+ HTML details summary not working with form controls
+ https://bugs.webkit.org/show_bug.cgi?id=74398
+
+ Reviewed by Kent Tamura.
+
+ Allowed HTMLSummaryElement to skip the toggle logic if the event
+ target is a form control.
+
+ Test: fast/html/details-click-controls.html
+
+ * html/HTMLSummaryElement.cpp:
+ (WebCore::isClickableControl):
+ (WebCore::HTMLSummaryElement::defaultEventHandler):
+
2011-12-13 James Wei <[email protected]>
Optimize to not use pow() in the inner loop in AudioParamTimeline
Modified: trunk/Source/WebCore/html/HTMLSummaryElement.cpp (102733 => 102734)
--- trunk/Source/WebCore/html/HTMLSummaryElement.cpp 2011-12-14 04:56:56 UTC (rev 102733)
+++ trunk/Source/WebCore/html/HTMLSummaryElement.cpp 2011-12-14 04:59:33 UTC (rev 102734)
@@ -93,15 +93,27 @@
return 0;
}
+static bool isClickableControl(Node* node)
+{
+ if (!node->isElementNode())
+ return false;
+ Element* element = toElement(node);
+ if (element->isFormControlElement())
+ return true;
+ Element* host = toElement(element->shadowAncestorNode());
+ return host && host->isFormControlElement();
+}
+
void HTMLSummaryElement::defaultEventHandler(Event* event)
{
HTMLElement::defaultEventHandler(event);
if (!isMainSummary() || !renderer() || !renderer()->isSummary() || !event->isMouseEvent() || event->type() != eventNames().clickEvent || event->defaultHandled())
return;
-
MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
if (mouseEvent->button() != LeftButton)
return;
+ if (isClickableControl(event->target()->toNode()))
+ return;
if (HTMLDetailsElement* details = detailsElement())
details->toggleOpen();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes