From c30a6232df03e1efbd9f3b226777b07e087a1122 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 12 Oct 2020 14:27:29 +0200 Subject: BASELINE: Update Chromium to 85.0.4183.140 Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen --- chromium/components/exo/drag_drop_operation.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'chromium/components/exo/drag_drop_operation.cc') diff --git a/chromium/components/exo/drag_drop_operation.cc b/chromium/components/exo/drag_drop_operation.cc index 1fee5aa1595..e7ad6b32e7d 100644 --- a/chromium/components/exo/drag_drop_operation.cc +++ b/chromium/components/exo/drag_drop_operation.cc @@ -78,8 +78,10 @@ base::WeakPtr DragDropOperation::Create( DataSource* source, Surface* origin, Surface* icon, + const gfx::Point& drag_start_point, ui::DragDropTypes::DragEventSource event_source) { - auto* dnd_op = new DragDropOperation(source, origin, icon, event_source); + auto* dnd_op = new DragDropOperation(source, origin, icon, drag_start_point, + event_source); return dnd_op->weak_ptr_factory_.GetWeakPtr(); } @@ -87,11 +89,12 @@ DragDropOperation::DragDropOperation( DataSource* source, Surface* origin, Surface* icon, + const gfx::Point& drag_start_point, ui::DragDropTypes::DragEventSource event_source) : SurfaceTreeHost("ExoDragDropOperation"), source_(std::make_unique(source, this)), origin_(std::make_unique(origin, this)), - drag_start_point_(display::Screen::GetScreen()->GetCursorScreenPoint()), + drag_start_point_(drag_start_point), os_exchange_data_(std::make_unique()), event_source_(event_source), weak_ptr_factory_(this) { @@ -185,6 +188,7 @@ void DragDropOperation::CaptureDragIcon() { viz::CopyOutputRequest::ResultFormat::RGBA_BITMAP, base::BindOnce(&DragDropOperation::OnDragIconCaptured, weak_ptr_factory_.GetWeakPtr())); + request->set_result_task_runner(base::SequencedTaskRunnerHandle::Get()); host_window()->layer()->RequestCopyOfOutput(std::move(request)); } @@ -235,6 +239,8 @@ void DragDropOperation::StartDragDropOperation() { uint32_t dnd_operations = DndActionsToDragOperations(source_->get()->GetActions()); + base::WeakPtr weak_ptr = weak_ptr_factory_.GetWeakPtr(); + started_by_this_object_ = true; // This triggers a nested run loop that terminates when the drag and drop // operation is completed. @@ -243,6 +249,10 @@ void DragDropOperation::StartDragDropOperation() { origin_->get()->window(), drag_start_point_, dnd_operations, event_source_); + // The instance deleted during StartDragAndDrop's nested RunLoop. + if (!weak_ptr) + return; + if (op) { // Success -- cgit v1.2.1