WebCore/ChangeLog

 12010-12-02 Dimitri Glazkov <dglazkov@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 REGRESSION(r72783): DOMActivate fires multiple times from input type=file
 6 https://bugs.webkit.org/show_bug.cgi?id=50396
 7
 8 No new tests. (OOPS!)
 9
 10 * dom/EventContext.cpp: Reverted changes made in r72783.
 11 * dom/EventContext.h: Ditto.
 12 * dom/Node.cpp:
 13 (WebCore::Node::containsIncludingShadowDOM): Added.
 14 (WebCore::Node::dispatchGenericEvent): Reverted changes made in r72783.
 15 * dom/Node.h: Added decl.
 16 * html/HTMLLabelElement.cpp:
 17 (WebCore::HTMLLabelElement::defaultEventHandler): Reverted changes made in r72783.
 18
1192010-12-02 Vincent Scheib <scheib@chromium.org>
220
321 Reviewed by Darin Fisher.

WebCore/dom/EventContext.cpp

@@EventContext::EventContext(PassRefPtr<Node> node, PassRefPtr<EventTarget> curren
4141{
4242}
4343
44 void EventContext::defaultEventHandler(Event* event) const
45 {
46  event->setTarget(m_target.get());
47  event->setCurrentTarget(m_currentTarget.get());
48  m_node->defaultEventHandler(event);
49 }
50 
5144void EventContext::handleLocalEvents(Event* event) const
5245{
5346 event->setTarget(m_target.get());

WebCore/dom/EventContext.h

@@public:
4242
4343 Node* node() const;
4444 EventTarget* target() const;
45  void defaultEventHandler(Event*) const;
4645 void handleLocalEvents(Event*) const;
4746
4847private:

WebCore/dom/Node.cpp

@@bool Node::contains(const Node* node) const
11921192 return this == node || node->isDescendantOf(this);
11931193}
11941194
 1195bool Node::containsIncludingShadowDOM(Node* node)
 1196{
 1197 if (!node)
 1198 return false;
 1199 if (this == node)
 1200 return true;
 1201 for (ContainerNode* n = node->parentOrHostNode(); n; n = n->parentOrHostNode()) {
 1202 if (n == this)
 1203 return true;
 1204 }
 1205 return false;
 1206}
 1207
11951208void Node::attach()
11961209{
11971210 ASSERT(!attached());

@@doneDispatching:
26342647 if (event->bubbles()) {
26352648 size_t size = ancestors.size();
26362649 for (size_t i = 0; i < size; ++i) {
2637  ancestors[i].defaultEventHandler(event.get());
 2650 ancestors[i].node()->defaultEventHandler(event.get());
26382651 ASSERT(!event->defaultPrevented());
26392652 if (event->defaultHandled())
26402653 goto doneWithDefault;

WebCore/dom/Node.h

@@public:
385385 void checkSetPrefix(const AtomicString& prefix, ExceptionCode&);
386386 bool isDescendantOf(const Node*) const;
387387 bool contains(const Node*) const;
 388 bool containsIncludingShadowDOM(Node*);
388389
389390 // This method is used to do strict error-checking when adding children via
390391 // the public DOM API (e.g., appendChild()).

WebCore/html/HTMLLabelElement.cpp

@@void HTMLLabelElement::defaultEventHandler(Event* evt)
119119
120120 // If we can't find a control or if the control received the click
121121 // event, then there's no need for us to do anything.
122  if (!element || (evt->target() && element->contains(evt->target()->toNode())))
 122 if (!element || (evt->target() && element->containsIncludingShadowDOM(evt->target()->toNode())))
123123 return;
124124
125125 processingClick = true;