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

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

Issue 2842483002: Set relatedtarget for dragleave/enter events (Closed)
Patch Set: Add event sender input automation Created 3 years, 7 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
« no previous file with comments | « third_party/WebKit/Source/core/input/MouseEventManager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/input/MouseEventManager.cpp
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
index 966780376fb1bc7464f78fdc74413cb579749d3d..addf6195e247338215a5507e231c3ad2d347d1d6 100644
--- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
@@ -893,21 +893,28 @@ bool MouseEventManager::TryStartDrag(
WebInputEventResult MouseEventManager::DispatchDragSrcEvent(
const AtomicString& event_type,
const WebMouseEvent& event) {
- return DispatchDragEvent(event_type, GetDragState().drag_src_.Get(), event,
- GetDragState().drag_data_transfer_.Get());
+ return DispatchDragEvent(event_type, GetDragState().drag_src_.Get(), nullptr,
+ event, GetDragState().drag_data_transfer_.Get());
}
WebInputEventResult MouseEventManager::DispatchDragEvent(
const AtomicString& event_type,
Node* drag_target,
+ Node* related_target,
const WebMouseEvent& event,
DataTransfer* data_transfer) {
FrameView* view = frame_->View();
-
// FIXME: We might want to dispatch a dragleave even if the view is gone.
if (!view)
return WebInputEventResult::kNotHandled;
+ // We should be setting relatedTarget correctly following the spec:
+ // https://html.spec.whatwg.org/multipage/interaction.html#dragevent
+ // At the same time this should prevent exposing a node from another document.
+ if (related_target &&
+ related_target->GetDocument() != drag_target->GetDocument())
+ related_target = nullptr;
+
const bool cancelable = event_type != EventTypeNames::dragleave &&
event_type != EventTypeNames::dragend;
@@ -919,7 +926,8 @@ WebInputEventResult MouseEventManager::DispatchDragEvent(
position.Y(), movement.X(), movement.Y(),
static_cast<WebInputEvent::Modifiers>(event.GetModifiers()), 0,
MouseEvent::WebInputEventModifiersToButtons(event.GetModifiers()),
- nullptr, TimeTicks::FromSeconds(event.TimeStampSeconds()), data_transfer,
+ related_target, TimeTicks::FromSeconds(event.TimeStampSeconds()),
+ data_transfer,
event.FromTouch() ? MouseEvent::kFromTouch
: MouseEvent::kRealOrIndistinguishable);
« no previous file with comments | « third_party/WebKit/Source/core/input/MouseEventManager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698