[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da
dglazkov at chromium.org
dglazkov at chromium.org
Wed Dec 22 17:58:05 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit e32b39faa36baac9a62c73fc1f987aaa37bc1d57
Author: dglazkov at chromium.org <dglazkov at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Dec 3 17:56:04 2010 +0000
2010-12-03 Dimitri Glazkov <dglazkov at chromium.org>
Reviewed by Darin Adler.
REGRESSION(r72783): DOMActivate fires multiple times from input type=file
https://bugs.webkit.org/show_bug.cgi?id=50396
* fast/events/shadow-boundary-crossing-2-expected.txt: Changed expectations.
* fast/events/shadow-boundary-crossing-2.html: Added the correct test for event
retargeting, renamed previous test to be more specific in what it tests.
2010-12-03 Dimitri Glazkov <dglazkov at chromium.org>
Reviewed by Darin Adler.
REGRESSION(r72783): DOMActivate fires multiple times from input type=file
https://bugs.webkit.org/show_bug.cgi?id=50396
Test: fast/events/shadow-boundary-crossing-2.html
* dom/EventContext.cpp: Reverted changes made in r72783.
* dom/EventContext.h: Ditto.
* dom/Node.cpp:
(WebCore::Node::containsIncludingShadowDOM): Added.
(WebCore::Node::dispatchGenericEvent): Reverted changes made in r72783.
* dom/Node.h: Added decl.
* html/HTMLLabelElement.cpp:
(WebCore::HTMLLabelElement::defaultEventHandler): Reverted changes made in r72783.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73270 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index ddf9634..0d6591e 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2010-12-03 Dimitri Glazkov <dglazkov at chromium.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(r72783): DOMActivate fires multiple times from input type=file
+ https://bugs.webkit.org/show_bug.cgi?id=50396
+
+ * fast/events/shadow-boundary-crossing-2-expected.txt: Changed expectations.
+ * fast/events/shadow-boundary-crossing-2.html: Added the correct test for event
+ retargeting, renamed previous test to be more specific in what it tests.
+
2010-12-03 Abhishek Arya <inferno at chromium.org>
Unreviewed.
diff --git a/LayoutTests/fast/events/shadow-boundary-crossing-2-expected.txt b/LayoutTests/fast/events/shadow-boundary-crossing-2-expected.txt
index 3c6936c..a2f1ece 100644
--- a/LayoutTests/fast/events/shadow-boundary-crossing-2-expected.txt
+++ b/LayoutTests/fast/events/shadow-boundary-crossing-2-expected.txt
@@ -3,7 +3,8 @@ Tests to ensure that shadow DOM boundary is not crossed during event propagation
See bug 46015 for details.
Mutation events should not propagate out of the shadow DOM: PASS
-Events for default event handler should also be retargeted: PASS
+Label should look beyond shadow boundary to detect if it encloses its associated element: PASS
+Events for default event handler should not be retargeted: PASS
Other events should be retargeted: PASS
After event dispatch, the event object should not reveal shadow DOM: PASS
Focusing same shadow DOM element repeatedly should not trigger multiple focus/blur events: PASS
diff --git a/LayoutTests/fast/events/shadow-boundary-crossing-2.html b/LayoutTests/fast/events/shadow-boundary-crossing-2.html
index 0754493..91b362f 100644
--- a/LayoutTests/fast/events/shadow-boundary-crossing-2.html
+++ b/LayoutTests/fast/events/shadow-boundary-crossing-2.html
@@ -21,6 +21,17 @@ function clickOn(element)
eventSender.mouseUp();
}
+function clickOnLeftQuarterOf(element)
+{
+ if (!window.eventSender)
+ return;
+
+ var x = element.offsetLeft + element.offsetWidth / 4;
+ var y = element.offsetTop + element.offsetHeight / 2;
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseDown();
+ eventSender.mouseUp();
+}
function leapForward()
{
@@ -45,7 +56,7 @@ var tests = {
log('Mutation events should not propagate out of the shadow DOM', !mutationEventFired);
textarea.parentNode.removeChild(textarea);
},
- defaultEventRetargeting: function()
+ labelSyntheticClick: function()
{
var count = 0;
var label = document.body.appendChild(document.createElement('label'));
@@ -58,9 +69,24 @@ var tests = {
count++;
}, false);
clickOn(searchInput);
- log("Events for default event handler should also be retargeted", count == 1);
+ log("Label should look beyond shadow boundary to detect if it encloses its associated element", count == 1);
label.parentNode.removeChild(label);
},
+ defaultEventRetargeting: function()
+ {
+ var count = 0;
+ var fileInput = document.body.appendChild(document.createElement('input'));
+ fileInput.setAttribute('type', 'file');
+ var counter = function()
+ {
+ count++;
+ }
+ document.body.addEventListener('DOMActivate', counter, false);
+ clickOnLeftQuarterOf(fileInput);
+ log("Events for default event handler should not be retargeted", count == 1);
+ document.body.removeEventListener('DOMActivate', counter, false);
+ fileInput.parentNode.removeChild(fileInput);
+ },
eventInProgress: function()
{
var textInput = document.body.appendChild(document.createElement('input'));
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 0cca51a..d792d66 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,21 @@
+2010-12-03 Dimitri Glazkov <dglazkov at chromium.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(r72783): DOMActivate fires multiple times from input type=file
+ https://bugs.webkit.org/show_bug.cgi?id=50396
+
+ Test: fast/events/shadow-boundary-crossing-2.html
+
+ * dom/EventContext.cpp: Reverted changes made in r72783.
+ * dom/EventContext.h: Ditto.
+ * dom/Node.cpp:
+ (WebCore::Node::containsIncludingShadowDOM): Added.
+ (WebCore::Node::dispatchGenericEvent): Reverted changes made in r72783.
+ * dom/Node.h: Added decl.
+ * html/HTMLLabelElement.cpp:
+ (WebCore::HTMLLabelElement::defaultEventHandler): Reverted changes made in r72783.
+
2010-12-03 Patrick Gansterer <paroga at webkit.org>
Reviewed by Andreas Kling.
diff --git a/WebCore/dom/EventContext.cpp b/WebCore/dom/EventContext.cpp
index e5fe0ee..2a5c521 100644
--- a/WebCore/dom/EventContext.cpp
+++ b/WebCore/dom/EventContext.cpp
@@ -41,13 +41,6 @@ EventContext::EventContext(PassRefPtr<Node> node, PassRefPtr<EventTarget> curren
{
}
-void EventContext::defaultEventHandler(Event* event) const
-{
- event->setTarget(m_target.get());
- event->setCurrentTarget(m_currentTarget.get());
- m_node->defaultEventHandler(event);
-}
-
void EventContext::handleLocalEvents(Event* event) const
{
event->setTarget(m_target.get());
diff --git a/WebCore/dom/EventContext.h b/WebCore/dom/EventContext.h
index 8331b4d..9bab9d4 100644
--- a/WebCore/dom/EventContext.h
+++ b/WebCore/dom/EventContext.h
@@ -42,7 +42,6 @@ public:
Node* node() const;
EventTarget* target() const;
- void defaultEventHandler(Event*) const;
void handleLocalEvents(Event*) const;
private:
diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp
index 3bfeab2..d6ffc68 100644
--- a/WebCore/dom/Node.cpp
+++ b/WebCore/dom/Node.cpp
@@ -1193,6 +1193,17 @@ bool Node::contains(const Node* node) const
return this == node || node->isDescendantOf(this);
}
+bool Node::containsIncludingShadowDOM(Node* node)
+{
+ if (!node)
+ return false;
+ for (Node* n = node; n; n = n->parentOrHostNode()) {
+ if (n == this)
+ return true;
+ }
+ return false;
+}
+
void Node::attach()
{
ASSERT(!attached());
@@ -2635,7 +2646,7 @@ doneDispatching:
if (event->bubbles()) {
size_t size = ancestors.size();
for (size_t i = 0; i < size; ++i) {
- ancestors[i].defaultEventHandler(event.get());
+ ancestors[i].node()->defaultEventHandler(event.get());
ASSERT(!event->defaultPrevented());
if (event->defaultHandled())
goto doneWithDefault;
diff --git a/WebCore/dom/Node.h b/WebCore/dom/Node.h
index 9fcea1e..9921795 100644
--- a/WebCore/dom/Node.h
+++ b/WebCore/dom/Node.h
@@ -385,6 +385,7 @@ public:
void checkSetPrefix(const AtomicString& prefix, ExceptionCode&);
bool isDescendantOf(const Node*) const;
bool contains(const Node*) const;
+ bool containsIncludingShadowDOM(Node*);
// This method is used to do strict error-checking when adding children via
// the public DOM API (e.g., appendChild()).
diff --git a/WebCore/html/HTMLLabelElement.cpp b/WebCore/html/HTMLLabelElement.cpp
index 1e44e2a..97a0c65 100644
--- a/WebCore/html/HTMLLabelElement.cpp
+++ b/WebCore/html/HTMLLabelElement.cpp
@@ -119,7 +119,7 @@ void HTMLLabelElement::defaultEventHandler(Event* evt)
// If we can't find a control or if the control received the click
// event, then there's no need for us to do anything.
- if (!element || (evt->target() && element->contains(evt->target()->toNode())))
+ if (!element || (evt->target() && element->containsIncludingShadowDOM(evt->target()->toNode())))
return;
processingClick = true;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list