| 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);
|
|
|
|
|