| Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| index 7e47ca1262db223305a146c552435bad1dd47e56..8a1ecee6972e5d68721b2cdf4e57ca9c6a29d8d9 100644
|
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
|
| @@ -4,8 +4,10 @@
|
|
|
| #include "core/input/PointerEventManager.h"
|
|
|
| +#include "core/dom/ElementTraversal.h"
|
| #include "core/dom/shadow/FlatTreeTraversal.h"
|
| #include "core/events/MouseEvent.h"
|
| +#include "core/html/HTMLCanvasElement.h"
|
| #include "core/input/EventHandler.h"
|
|
|
| namespace blink {
|
| @@ -58,6 +60,25 @@ WebInputEventResult dispatchMouseEvent(
|
| return WebInputEventResult::NotHandled;
|
| }
|
|
|
| +PlatformMouseEvent mouseEventWithRegion(Node* node, const PlatformMouseEvent& mouseEvent)
|
| +{
|
| + if (!node->isElementNode())
|
| + return mouseEvent;
|
| +
|
| + Element* element = toElement(node);
|
| + if (!element->isInCanvasSubtree())
|
| + return mouseEvent;
|
| +
|
| + HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAncestorOrSelf(*element);
|
| + // In this case, the event target is canvas and mouse rerouting doesn't happen.
|
| + if (canvas == element)
|
| + return mouseEvent;
|
| + String region = canvas->getIdFromControl(element);
|
| + PlatformMouseEvent newMouseEvent = mouseEvent;
|
| + newMouseEvent.setRegion(region);
|
| + return newMouseEvent;
|
| +}
|
| +
|
| } // namespace
|
|
|
| WebInputEventResult PointerEventManager::dispatchPointerEvent(
|
| @@ -159,7 +180,9 @@ void PointerEventManager::sendNodeTransitionEvents(
|
| pointerEvent, EventTypeNames::pointerout, enteredTarget));
|
| if (sendMouseEvent) {
|
| dispatchMouseEvent(exitedTarget,
|
| - EventTypeNames::mouseout, mouseEvent, enteredTarget);
|
| + EventTypeNames::mouseout,
|
| + mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
|
| + enteredTarget);
|
| }
|
| }
|
|
|
| @@ -227,8 +250,9 @@ void PointerEventManager::sendNodeTransitionEvents(
|
| !exitedNodeHasCapturingAncestor);
|
| if (sendMouseEvent) {
|
| dispatchMouseEvent(exitedAncestors[j].get(),
|
| - EventTypeNames::mouseleave, mouseEvent, enteredTarget,
|
| - 0, !exitedNodeHasCapturingAncestor);
|
| + EventTypeNames::mouseleave,
|
| + mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
|
| + enteredTarget, 0, !exitedNodeHasCapturingAncestor);
|
| }
|
| }
|
|
|
|
|