Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Unified Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 1815093002: Canvas2d: fix event.region being null on mouseleave/out events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698