| 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 5a18188771175f635344fb342c9b6c0b0ac91bbf..33e42c7c50b82523e12f95a44f3f1d7885518270 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 {
|
| @@ -128,6 +130,25 @@ void PointerEventManager::sendMouseAndPossiblyPointerNodeTransitionEvents(
|
| exitedNode, mouseEvent, true, isFrameBoundaryTransition);
|
| }
|
|
|
| +PlatformMouseEvent PointerEventManager::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;
|
| +}
|
| +
|
| void PointerEventManager::sendNodeTransitionEvents(
|
| PassRefPtrWillBeRawPtr<EventTarget> prpExitedTarget,
|
| PassRefPtrWillBeRawPtr<EventTarget> prpEnteredTarget,
|
| @@ -157,7 +178,9 @@ void PointerEventManager::sendNodeTransitionEvents(
|
| pointerEvent, EventTypeNames::pointerout, enteredTarget));
|
| } else {
|
| dispatchMouseEvent(exitedTarget,
|
| - EventTypeNames::mouseout, mouseEvent, enteredTarget);
|
| + EventTypeNames::mouseout,
|
| + mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
|
| + enteredTarget);
|
| }
|
| }
|
|
|
| @@ -226,8 +249,9 @@ void PointerEventManager::sendNodeTransitionEvents(
|
| !exitedNodeHasCapturingAncestor);
|
| } else {
|
| dispatchMouseEvent(exitedAncestors[j].get(),
|
| - EventTypeNames::mouseleave, mouseEvent, enteredTarget,
|
| - 0, !exitedNodeHasCapturingAncestor);
|
| + EventTypeNames::mouseleave,
|
| + mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
|
| + enteredTarget, 0, !exitedNodeHasCapturingAncestor);
|
| }
|
| }
|
|
|
|
|