Title: [157177] trunk/Source/WebCore
Revision
157177
Author
[email protected]
Date
2013-10-09 13:05:13 -0700 (Wed, 09 Oct 2013)

Log Message

Rename EventRetargeter::adjustForRelatedTarget to EventPath::setRelatedTarget
https://bugs.webkit.org/show_bug.cgi?id=122539

Reviewed by Darin Adler.

Renamed EventRetargeter::adjustForRelatedTarget to EventPath::setRelatedTarget and got rid of
EventDispatchMediators for focus events. We set the related target inside EventDispatcher's
dispatch via Event::relatedTarget, which is now virtual and overridden by mouse/focus events.

* dom/Element.cpp: The following functions no longer use FocusEventDispatchMediators.
(WebCore::Element::dispatchFocusInEvent):
(WebCore::Element::dispatchFocusOutEvent):
(WebCore::Element::dispatchFocusEvent):
(WebCore::Element::dispatchBlurEvent):

* dom/Event.h:
(WebCore::Event::relatedTarget): Added as a virtual function.

* dom/EventDispatcher.cpp:
(WebCore::EventDispatcher::dispatchEvent): Cache Event*.
(WebCore::EventDispatcher::dispatch): Call setRelatedTargetToPath at the beginning to update
related targets in the path.

* dom/EventDispatcher.h:

* dom/EventRetargeter.cpp:
(WebCore::EventPath::EventPath): Initialize m_origin, used in EventPath::setRelatedTarget.
(WebCore::EventRetargeter::adjustTouchList):
(WebCore::EventPath::setRelatedTarget): Renamed from EventRetargeter::adjustForRelatedTarget.
Delegated the nullity checks to callers by taking references instead of pointers.
(WebCore::EventRetargeter::calculateAdjustedNodes):

* dom/EventRetargeter.h: Removed AdjustedNodes typedef. It's just a Vector of RefPtr<Node>.

* dom/FocusEvent.cpp: Removed FocusEventDispatchMediators for focus events.
* dom/FocusEvent.h:

* dom/MouseEvent.cpp:
(WebCore::MouseEvent::toElement): Cache the related target now that relatedTarget() is virtual.
(WebCore::MouseEvent::fromElement): Ditto.
(WebCore::MouseEventDispatchMediator::mediateAndDispatchEvent): No longer sets the related
targets since that's done in EventDispatcher::dispatch now.

* dom/MouseEvent.h:

* dom/Node.cpp: Removed obnoxious Node::dispatchScopedEventDispatchMediator.
(WebCore::Node::dispatchScopedEvent):
* dom/Node.h:

* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler): Cache the related
target in a local variable now that relatedTarget() is virtual.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (157176 => 157177)


--- trunk/Source/WebCore/ChangeLog	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/ChangeLog	2013-10-09 20:05:13 UTC (rev 157177)
@@ -1,3 +1,58 @@
+2013-10-08  Ryosuke Niwa  <[email protected]>
+
+        Rename EventRetargeter::adjustForRelatedTarget to EventPath::setRelatedTarget
+        https://bugs.webkit.org/show_bug.cgi?id=122539
+
+        Reviewed by Darin Adler.
+
+        Renamed EventRetargeter::adjustForRelatedTarget to EventPath::setRelatedTarget and got rid of
+        EventDispatchMediators for focus events. We set the related target inside EventDispatcher's
+        dispatch via Event::relatedTarget, which is now virtual and overridden by mouse/focus events.
+
+        * dom/Element.cpp: The following functions no longer use FocusEventDispatchMediators.
+        (WebCore::Element::dispatchFocusInEvent):
+        (WebCore::Element::dispatchFocusOutEvent):
+        (WebCore::Element::dispatchFocusEvent):
+        (WebCore::Element::dispatchBlurEvent):
+
+        * dom/Event.h:
+        (WebCore::Event::relatedTarget): Added as a virtual function.
+
+        * dom/EventDispatcher.cpp:
+        (WebCore::EventDispatcher::dispatchEvent): Cache Event*.
+        (WebCore::EventDispatcher::dispatch): Call setRelatedTargetToPath at the beginning to update
+        related targets in the path.
+
+        * dom/EventDispatcher.h:
+
+        * dom/EventRetargeter.cpp:
+        (WebCore::EventPath::EventPath): Initialize m_origin, used in EventPath::setRelatedTarget.
+        (WebCore::EventRetargeter::adjustTouchList):
+        (WebCore::EventPath::setRelatedTarget): Renamed from EventRetargeter::adjustForRelatedTarget.
+        Delegated the nullity checks to callers by taking references instead of pointers.
+        (WebCore::EventRetargeter::calculateAdjustedNodes):
+
+        * dom/EventRetargeter.h: Removed AdjustedNodes typedef. It's just a Vector of RefPtr<Node>.
+
+        * dom/FocusEvent.cpp: Removed FocusEventDispatchMediators for focus events.
+        * dom/FocusEvent.h:
+
+        * dom/MouseEvent.cpp:
+        (WebCore::MouseEvent::toElement): Cache the related target now that relatedTarget() is virtual.
+        (WebCore::MouseEvent::fromElement): Ditto.
+        (WebCore::MouseEventDispatchMediator::mediateAndDispatchEvent): No longer sets the related
+        targets since that's done in EventDispatcher::dispatch now.
+
+        * dom/MouseEvent.h:
+
+        * dom/Node.cpp: Removed obnoxious Node::dispatchScopedEventDispatchMediator.
+        (WebCore::Node::dispatchScopedEvent):
+        * dom/Node.h:
+
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler): Cache the related
+        target in a local variable now that relatedTarget() is virtual.
+
 2013-10-09  Chris Fleizach  <[email protected]>
 
         AX: VoiceOver does not speak aria-expanded state on iOS

Modified: trunk/Source/WebCore/dom/Element.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/Element.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/Element.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -2021,14 +2021,14 @@
 {
     ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden());
     ASSERT(eventType == eventNames().focusinEvent || eventType == eventNames().DOMFocusInEvent);
-    dispatchScopedEventDispatchMediator(FocusInEventDispatchMediator::create(FocusEvent::create(eventType, true, false, document().defaultView(), 0, oldFocusedElement)));
+    dispatchScopedEvent(FocusEvent::create(eventType, true, false, document().defaultView(), 0, oldFocusedElement));
 }
 
 void Element::dispatchFocusOutEvent(const AtomicString& eventType, PassRefPtr<Element> newFocusedElement)
 {
     ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden());
     ASSERT(eventType == eventNames().focusoutEvent || eventType == eventNames().DOMFocusOutEvent);
-    dispatchScopedEventDispatchMediator(FocusOutEventDispatchMediator::create(FocusEvent::create(eventType, true, false, document().defaultView(), 0, newFocusedElement)));
+    dispatchScopedEvent(FocusEvent::create(eventType, true, false, document().defaultView(), 0, newFocusedElement));
 }
 
 void Element::dispatchFocusEvent(PassRefPtr<Element> oldFocusedElement, FocusDirection)
@@ -2037,7 +2037,7 @@
         document().page()->chrome().client().elementDidFocus(this);
 
     RefPtr<FocusEvent> event = FocusEvent::create(eventNames().focusEvent, false, false, document().defaultView(), 0, oldFocusedElement);
-    EventDispatcher::dispatchEvent(this, FocusEventDispatchMediator::create(event.release()));
+    EventDispatcher::dispatchEvent(this, EventDispatchMediator::create(event.release()));
 }
 
 void Element::dispatchBlurEvent(PassRefPtr<Element> newFocusedElement)
@@ -2046,7 +2046,7 @@
         document().page()->chrome().client().elementDidBlur(this);
 
     RefPtr<FocusEvent> event = FocusEvent::create(eventNames().blurEvent, false, false, document().defaultView(), 0, newFocusedElement);
-    EventDispatcher::dispatchEvent(this, BlurEventDispatchMediator::create(event.release()));
+    EventDispatcher::dispatchEvent(this, EventDispatchMediator::create(event.release()));
 }
 
 

Modified: trunk/Source/WebCore/dom/Event.h (157176 => 157177)


--- trunk/Source/WebCore/dom/Event.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/Event.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -172,6 +172,8 @@
 
     virtual PassRefPtr<Event> cloneFor(HTMLIFrameElement*) const;
 
+    virtual EventTarget* relatedTarget() const { return nullptr; }
+
 protected:
     Event();
     Event(const AtomicString& type, bool canBubble, bool cancelable);

Modified: trunk/Source/WebCore/dom/EventDispatcher.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/EventDispatcher.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/EventDispatcher.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -30,6 +30,7 @@
 #include "EventContext.h"
 #include "EventDispatchMediator.h"
 #include "EventRetargeter.h"
+#include "FocusEvent.h"
 #include "FrameView.h"
 #include "HTMLInputElement.h"
 #include "HTMLMediaElement.h"
@@ -46,9 +47,10 @@
 bool EventDispatcher::dispatchEvent(Node* node, PassRefPtr<EventDispatchMediator> mediator)
 {
     ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden());
-    if (!mediator->event())
+    Event* event = mediator->event();
+    if (!event)
         return true;
-    EventDispatcher dispatcher(node, mediator->event());
+    EventDispatcher dispatcher(node, event);
     return mediator->mediateAndDispatchEvent(&dispatcher);
 }
 
@@ -100,6 +102,9 @@
 
 bool EventDispatcher::dispatch()
 {
+    if (EventTarget* relatedTarget = m_event->relatedTarget())
+        m_eventPath.setRelatedTarget(*relatedTarget);
+
 #ifndef NDEBUG
     ASSERT(!m_eventDispatched);
     m_eventDispatched = true;

Modified: trunk/Source/WebCore/dom/EventDispatcher.h (157176 => 157177)


--- trunk/Source/WebCore/dom/EventDispatcher.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/EventDispatcher.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -54,12 +54,14 @@
 
 class EventPath {
 public:
-    EventPath(Node&, Event&);
+    EventPath(Node& origin, Event&);
 
     bool isEmpty() const { return m_path.isEmpty(); }
     size_t size() const { return m_path.size(); }
     const EventContext& contextAt(size_t i) const { return *m_path[i]; }
     EventContext& contextAt(size_t i) { return *m_path[i]; }
+    
+    void setRelatedTarget(EventTarget&);
 
     bool hasEventListeners(const AtomicString& eventType) const;
 
@@ -70,6 +72,7 @@
 
 private:
     Vector<std::unique_ptr<EventContext>, 32> m_path;
+    RefPtr<Node> m_origin;
 };
 
 class EventDispatcher {

Modified: trunk/Source/WebCore/dom/EventRetargeter.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/EventRetargeter.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/EventRetargeter.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -75,6 +75,7 @@
 }
 
 EventPath::EventPath(Node& targetNode, Event& event)
+    : m_origin(&targetNode)
 {
     bool inDocument = targetNode.inDocument();
     bool isSVGElement = targetNode.isSVGElement();
@@ -109,16 +110,6 @@
     }
 }
 
-void EventRetargeter::adjustForMouseEvent(Node* node, const MouseEvent& mouseEvent, EventPath& eventPath)
-{
-    adjustForRelatedTarget(node, mouseEvent.relatedTarget(), eventPath);
-}
-
-void EventRetargeter::adjustForFocusEvent(Node* node, const FocusEvent& focusEvent, EventPath& eventPath)
-{
-    adjustForRelatedTarget(node, focusEvent.relatedTarget(), eventPath);
-}
-
 #if ENABLE(TOUCH_EVENTS)
 void EventRetargeter::adjustForTouchEvent(Node* node, const TouchEvent& touchEvent, EventPath& eventPath)
 {
@@ -148,7 +139,7 @@
     ASSERT(eventPathTouchLists.size() == eventPathSize);
     for (size_t i = 0; i < touchList->length(); ++i) {
         const Touch& touch = *touchList->item(i);
-        AdjustedNodes adjustedNodes;
+        Vector<RefPtr<Node>> adjustedNodes;
         calculateAdjustedNodes(node, touch.target()->toNode(), DoesNotStopAtBoundary, const_cast<EventPath&>(eventPath), adjustedNodes);
         ASSERT(adjustedNodes.size() == eventPathSize);
         for (size_t j = 0; j < eventPathSize; ++j)
@@ -157,20 +148,16 @@
 }
 #endif
 
-void EventRetargeter::adjustForRelatedTarget(const Node* node, EventTarget* relatedTarget, EventPath& eventPath)
+void EventPath::setRelatedTarget(EventTarget& relatedTarget)
 {
-    if (!node)
-        return;
-    if (!relatedTarget)
-        return;
-    Node* relatedNode = relatedTarget->toNode();
+    Node* relatedNode = relatedTarget.toNode();
     if (!relatedNode)
         return;
-    AdjustedNodes adjustedNodes;
-    calculateAdjustedNodes(node, relatedNode, StopAtBoundaryIfNeeded, eventPath, adjustedNodes);
-    ASSERT(adjustedNodes.size() <= eventPath.size());
+    Vector<RefPtr<Node>> adjustedNodes;
+    EventRetargeter::calculateAdjustedNodes(m_origin.get(), relatedNode, EventRetargeter::StopAtBoundaryIfNeeded, *this, adjustedNodes);
+    ASSERT(adjustedNodes.size() <= m_path.size());
     for (size_t i = 0; i < adjustedNodes.size(); ++i)
-        toMouseOrFocusEventContext(eventPath.contextAt(i)).setRelatedTarget(adjustedNodes[i]);
+        toMouseOrFocusEventContext(*m_path[i]).setRelatedTarget(adjustedNodes[i]);
 }
 
 static void buildRelatedNodeMap(const Node* relatedNode, HashMap<TreeScope*, Node*>& relatedNodeMap)
@@ -209,7 +196,7 @@
     return relatedNode;
 }
 
-void EventRetargeter::calculateAdjustedNodes(const Node* node, const Node* relatedNode, EventWithRelatedTargetDispatchBehavior eventWithRelatedTargetDispatchBehavior, EventPath& eventPath, AdjustedNodes& adjustedNodes)
+void EventRetargeter::calculateAdjustedNodes(const Node* node, const Node* relatedNode, EventWithRelatedTargetDispatchBehavior eventWithRelatedTargetDispatchBehavior, EventPath& eventPath, Vector<RefPtr<Node>>& adjustedNodes)
 {
     HashMap<TreeScope*, Node*> relatedNodeMap;
     buildRelatedNodeMap(relatedNode, relatedNodeMap);

Modified: trunk/Source/WebCore/dom/EventRetargeter.h (157176 => 157177)


--- trunk/Source/WebCore/dom/EventRetargeter.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/EventRetargeter.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -48,8 +48,6 @@
 
 class EventRetargeter {
 public:
-    static void adjustForMouseEvent(Node*, const MouseEvent&, EventPath&);
-    static void adjustForFocusEvent(Node*, const FocusEvent&, EventPath&);
 #if ENABLE(TOUCH_EVENTS)
     typedef Vector<RefPtr<TouchList> > EventPathTouchLists;
     static void adjustForTouchEvent(Node*, const TouchEvent&, EventPath&);
@@ -57,16 +55,16 @@
     static EventTarget& eventTargetRespectingTargetRules(Node& referenceNode);
 
 private:
-    typedef Vector<RefPtr<Node> > AdjustedNodes;
     enum EventWithRelatedTargetDispatchBehavior {
         StopAtBoundaryIfNeeded,
         DoesNotStopAtBoundary
     };
     static void adjustForRelatedTarget(const Node*, EventTarget* relatedTarget, EventPath&);
-    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, EventWithRelatedTargetDispatchBehavior, EventPath&, AdjustedNodes&);
+    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, EventWithRelatedTargetDispatchBehavior, EventPath&, Vector<RefPtr<Node>>& adjustedNodes);
 #if ENABLE(TOUCH_EVENTS)
     static void adjustTouchList(const Node*, const TouchList*, const EventPath&, EventPathTouchLists&);
 #endif
+    friend class EventPath;
 };
 
 inline EventTarget& EventRetargeter::eventTargetRespectingTargetRules(Node& referenceNode)

Modified: trunk/Source/WebCore/dom/FocusEvent.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/FocusEvent.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/FocusEvent.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -65,68 +65,4 @@
 {
 }
 
-PassRefPtr<FocusEventDispatchMediator> FocusEventDispatchMediator::create(PassRefPtr<FocusEvent> focusEvent)
-{
-    return adoptRef(new FocusEventDispatchMediator(focusEvent));
-}
-
-FocusEventDispatchMediator::FocusEventDispatchMediator(PassRefPtr<FocusEvent> focusEvent)
-    : EventDispatchMediator(focusEvent)
-{
-}
-
-bool FocusEventDispatchMediator::mediateAndDispatchEvent(EventDispatcher* dispatcher) const
-{
-    EventRetargeter::adjustForFocusEvent(dispatcher->node(), *event(), dispatcher->eventPath());
-    return EventDispatchMediator::mediateAndDispatchEvent(dispatcher);
-}
-
-PassRefPtr<BlurEventDispatchMediator> BlurEventDispatchMediator::create(PassRefPtr<FocusEvent> focusEvent)
-{
-    return adoptRef(new BlurEventDispatchMediator(focusEvent));
-}
-
-BlurEventDispatchMediator::BlurEventDispatchMediator(PassRefPtr<FocusEvent> focusEvent)
-    : EventDispatchMediator(focusEvent)
-{
-}
-
-bool BlurEventDispatchMediator::mediateAndDispatchEvent(EventDispatcher* dispatcher) const
-{
-    EventRetargeter::adjustForFocusEvent(dispatcher->node(), *event(), dispatcher->eventPath());
-    return EventDispatchMediator::mediateAndDispatchEvent(dispatcher);
-}
-
-PassRefPtr<FocusInEventDispatchMediator> FocusInEventDispatchMediator::create(PassRefPtr<FocusEvent> focusEvent)
-{
-    return adoptRef(new FocusInEventDispatchMediator(focusEvent));
-}
-
-FocusInEventDispatchMediator::FocusInEventDispatchMediator(PassRefPtr<FocusEvent> focusEvent)
-    : EventDispatchMediator(focusEvent)
-{
-}
-
-bool FocusInEventDispatchMediator::mediateAndDispatchEvent(EventDispatcher* dispatcher) const
-{
-    EventRetargeter::adjustForFocusEvent(dispatcher->node(), *event(), dispatcher->eventPath());
-    return EventDispatchMediator::mediateAndDispatchEvent(dispatcher);
-}
-
-PassRefPtr<FocusOutEventDispatchMediator> FocusOutEventDispatchMediator::create(PassRefPtr<FocusEvent> focusEvent)
-{
-    return adoptRef(new FocusOutEventDispatchMediator(focusEvent));
-}
-
-FocusOutEventDispatchMediator::FocusOutEventDispatchMediator(PassRefPtr<FocusEvent> focusEvent)
-    : EventDispatchMediator(focusEvent)
-{
-}
-
-bool FocusOutEventDispatchMediator::mediateAndDispatchEvent(EventDispatcher* dispatcher) const
-{
-    EventRetargeter::adjustForFocusEvent(dispatcher->node(), *event(), dispatcher->eventPath());
-    return EventDispatchMediator::mediateAndDispatchEvent(dispatcher);
-}
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/FocusEvent.h (157176 => 157177)


--- trunk/Source/WebCore/dom/FocusEvent.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/FocusEvent.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -56,7 +56,7 @@
         return adoptRef(new FocusEvent(type, initializer));
     }
 
-    EventTarget* relatedTarget() const { return m_relatedTarget.get(); }
+    virtual EventTarget* relatedTarget() const OVERRIDE FINAL { return m_relatedTarget.get(); }
     void setRelatedTarget(PassRefPtr<EventTarget> relatedTarget) { m_relatedTarget = relatedTarget; }
 
     virtual EventInterface eventInterface() const;
@@ -76,42 +76,6 @@
     return static_cast<FocusEvent*>(event);
 }
 
-class FocusEventDispatchMediator : public EventDispatchMediator {
-public:
-    static PassRefPtr<FocusEventDispatchMediator> create(PassRefPtr<FocusEvent>);
-private:
-    explicit FocusEventDispatchMediator(PassRefPtr<FocusEvent>);
-    FocusEvent* event() const { return static_cast<FocusEvent*>(EventDispatchMediator::event()); }
-    virtual bool mediateAndDispatchEvent(EventDispatcher*) const OVERRIDE;
-};
-
-class BlurEventDispatchMediator : public EventDispatchMediator {
-public:
-    static PassRefPtr<BlurEventDispatchMediator> create(PassRefPtr<FocusEvent>);
-private:
-    explicit BlurEventDispatchMediator(PassRefPtr<FocusEvent>);
-    FocusEvent* event() const { return static_cast<FocusEvent*>(EventDispatchMediator::event()); }
-    virtual bool mediateAndDispatchEvent(EventDispatcher*) const OVERRIDE;
-};
-
-class FocusInEventDispatchMediator : public EventDispatchMediator {
-public:
-    static PassRefPtr<FocusInEventDispatchMediator> create(PassRefPtr<FocusEvent>);
-private:
-    explicit FocusInEventDispatchMediator(PassRefPtr<FocusEvent>);
-    FocusEvent* event() const { return static_cast<FocusEvent*>(EventDispatchMediator::event()); }
-    virtual bool mediateAndDispatchEvent(EventDispatcher*) const OVERRIDE;
-};
-
-class FocusOutEventDispatchMediator : public EventDispatchMediator {
-public:
-    static PassRefPtr<FocusOutEventDispatchMediator> create(PassRefPtr<FocusEvent>);
-private:
-    explicit FocusOutEventDispatchMediator(PassRefPtr<FocusEvent>);
-    FocusEvent* event() const { return static_cast<FocusEvent*>(EventDispatchMediator::event()); }
-    virtual bool mediateAndDispatchEvent(EventDispatcher*) const OVERRIDE;
-};
-
 } // namespace WebCore
 
 #endif // FocusEvent_h

Modified: trunk/Source/WebCore/dom/MouseEvent.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/MouseEvent.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/MouseEvent.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -205,19 +205,23 @@
 Node* MouseEvent::toElement() const
 {
     // MSIE extension - "the object toward which the user is moving the mouse pointer"
-    if (type() == eventNames().mouseoutEvent || type() == eventNames().mouseleaveEvent)
-        return relatedTarget() ? relatedTarget()->toNode() : 0;
-    
-    return target() ? target()->toNode() : 0;
+    if (type() == eventNames().mouseoutEvent || type() == eventNames().mouseleaveEvent) {
+        EventTarget* relatedTarget = this->relatedTarget();
+        return relatedTarget ? relatedTarget->toNode() : nullptr;
+    }
+
+    return target() ? target()->toNode() : nullptr;
 }
 
 Node* MouseEvent::fromElement() const
 {
     // MSIE extension - "object from which activation or the mouse pointer is exiting during the event" (huh?)
-    if (type() != eventNames().mouseoutEvent && type() != eventNames().mouseleaveEvent)
-        return relatedTarget() ? relatedTarget()->toNode() : 0;
-    
-    return target() ? target()->toNode() : 0;
+    if (type() != eventNames().mouseoutEvent && type() != eventNames().mouseleaveEvent) {
+        EventTarget* relatedTarget = this->relatedTarget();
+        return relatedTarget ? relatedTarget->toNode() : nullptr;
+    }
+
+    return target() ? target()->toNode() : nullptr;
 }
 
 // FIXME: Fix positioning. e.g. We need to consider border/padding.
@@ -298,10 +302,8 @@
 
 bool MouseEventDispatchMediator::mediateAndDispatchEvent(EventDispatcher* dispatcher) const
 {
-    if (isSyntheticMouseEvent()) {
-        EventRetargeter::adjustForMouseEvent(dispatcher->node(), *event(),  dispatcher->eventPath());
+    if (isSyntheticMouseEvent())
         return dispatcher->dispatch();
-    }
 
     if (isDisabledFormControl(dispatcher->node()))
         return false;
@@ -309,10 +311,8 @@
     if (event()->type().isEmpty())
         return true; // Shouldn't happen.
 
-    ASSERT(!event()->target() || event()->target() != event()->relatedTarget());
-
     EventTarget* relatedTarget = event()->relatedTarget();
-    EventRetargeter::adjustForMouseEvent(dispatcher->node(), *event(),  dispatcher->eventPath());
+    ASSERT(!event()->target() || event()->target() != relatedTarget);
 
     dispatcher->dispatch();
     bool swallowEvent = event()->defaultHandled() || event()->defaultPrevented();

Modified: trunk/Source/WebCore/dom/MouseEvent.h (157176 => 157177)


--- trunk/Source/WebCore/dom/MouseEvent.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/MouseEvent.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -86,7 +86,7 @@
     // but we will match the standard DOM.
     unsigned short button() const { return m_button; }
     bool buttonDown() const { return m_buttonDown; }
-    EventTarget* relatedTarget() const { return m_relatedTarget.get(); }
+    virtual EventTarget* relatedTarget() const OVERRIDE FINAL { return m_relatedTarget.get(); }
     void setRelatedTarget(PassRefPtr<EventTarget> relatedTarget) { m_relatedTarget = relatedTarget; }
 
     Clipboard* clipboard() const { return m_clipboard.get(); }

Modified: trunk/Source/WebCore/dom/Node.cpp (157176 => 157177)


--- trunk/Source/WebCore/dom/Node.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/Node.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -2069,14 +2069,9 @@
 
 void Node::dispatchScopedEvent(PassRefPtr<Event> event)
 {
-    dispatchScopedEventDispatchMediator(EventDispatchMediator::create(event));
+    EventDispatcher::dispatchScopedEvent(*this, EventDispatchMediator::create(event));
 }
 
-void Node::dispatchScopedEventDispatchMediator(PassRefPtr<EventDispatchMediator> eventDispatchMediator)
-{
-    EventDispatcher::dispatchScopedEvent(*this, eventDispatchMediator);
-}
-
 bool Node::dispatchEvent(PassRefPtr<Event> event)
 {
     if (event->isMouseEvent())

Modified: trunk/Source/WebCore/dom/Node.h (157176 => 157177)


--- trunk/Source/WebCore/dom/Node.h	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/dom/Node.h	2013-10-09 20:05:13 UTC (rev 157177)
@@ -533,7 +533,6 @@
     virtual bool dispatchEvent(PassRefPtr<Event>) OVERRIDE;
 
     void dispatchScopedEvent(PassRefPtr<Event>);
-    void dispatchScopedEventDispatchMediator(PassRefPtr<EventDispatchMediator>);
 
     virtual void handleLocalEvents(Event*);
 

Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (157176 => 157177)


--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2013-10-09 18:22:08 UTC (rev 157176)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2013-10-09 20:05:13 UTC (rev 157177)
@@ -368,10 +368,11 @@
 
     // Poor man's mouseleave event detection.
     MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
-    if (!mouseEvent->relatedTarget() || !mouseEvent->relatedTarget()->toNode())
+    EventTarget* relatedTarget = mouseEvent->relatedTarget();
+    if (!relatedTarget || !relatedTarget->toNode())
         return;
 
-    if (this->containsIncludingShadowDOM(mouseEvent->relatedTarget()->toNode()))
+    if (this->containsIncludingShadowDOM(relatedTarget->toNode()))
         return;
 
     hide();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to