Index: third_party/WebKit/Source/core/page/DragController.cpp |
diff --git a/third_party/WebKit/Source/core/page/DragController.cpp b/third_party/WebKit/Source/core/page/DragController.cpp |
index 0be7eaeadf9e19192115fdf043a20fa3d9f9fab6..ffcb50ab6643b444d6de046e1bf67ce389c2c606 100644 |
--- a/third_party/WebKit/Source/core/page/DragController.cpp |
+++ b/third_party/WebKit/Source/core/page/DragController.cpp |
@@ -601,9 +601,13 @@ bool DragController::concludeEditDrag(DragData* dragData) { |
? InsertMode::Smart |
: InsertMode::Simple; |
- if (!innerFrame->editor().deleteSelectionAfterDraggingWithEvents( |
- innerFrame->editor().findEventTargetFromSelection(), deleteMode, |
- dragCaret.base())) |
+ innerFrame->editor().deleteSelectionWithSmartDelete( |
+ EditCommandSource::kMenuOrKeyBinding, deleteMode, |
+ InputEvent::InputType::DeleteByDrag, dragCaret.base()); |
+ |
+ // 'beforeinput' event handler may destroy drop frame. |
+ if (innerFrame->document()->frame() != innerFrame || |
+ !element->isConnected()) |
return false; |
innerFrame->selection().setSelection( |
@@ -612,19 +616,16 @@ bool DragController::concludeEditDrag(DragData* dragData) { |
.build()); |
if (innerFrame->selection().isAvailable()) { |
DCHECK(m_documentUnderMouse); |
- if (!innerFrame->editor().replaceSelectionAfterDraggingWithEvents( |
- element, dragData, fragment, range, insertMode, dragSourceType)) |
- return false; |
+ innerFrame->editor().replaceSelectionAfterDragging(fragment, insertMode, |
+ dragSourceType); |
} |
} else { |
if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) { |
DCHECK(m_documentUnderMouse); |
- if (!innerFrame->editor().replaceSelectionAfterDraggingWithEvents( |
- element, dragData, fragment, range, |
- dragData->canSmartReplace() ? InsertMode::Smart |
- : InsertMode::Simple, |
- dragSourceType)) |
- return false; |
+ innerFrame->editor().replaceSelectionAfterDragging( |
+ fragment, dragData->canSmartReplace() ? InsertMode::Smart |
+ : InsertMode::Simple, |
+ dragSourceType); |
} |
} |
} else { |
@@ -634,14 +635,15 @@ bool DragController::concludeEditDrag(DragData* dragData) { |
if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) { |
DCHECK(m_documentUnderMouse); |
- if (!innerFrame->editor().replaceSelectionAfterDraggingWithEvents( |
- element, dragData, |
- createFragmentFromText(EphemeralRange(range), text), range, |
- InsertMode::Simple, DragSourceType::PlainTextSource)) |
- return false; |
+ innerFrame->editor().replaceSelectionAfterDragging( |
+ createFragmentFromText(EphemeralRange(range), text), |
+ InsertMode::Simple, DragSourceType::PlainTextSource); |
} |
} |
+ // 'beforeinput' event handler may destroy drop frame. |
+ if (!innerFrame->document() || innerFrame->document()->frame() != innerFrame) |
+ return false; |
if (rootEditableElement) { |
if (LocalFrame* frame = rootEditableElement->document().frame()) { |
frame->eventHandler().updateDragStateAfterEditDragIfNeeded( |