| Index: content/browser/web_contents/web_contents_view_aura.cc
|
| ===================================================================
|
| --- content/browser/web_contents/web_contents_view_aura.cc (revision 263053)
|
| +++ content/browser/web_contents/web_contents_view_aura.cc (working copy)
|
| @@ -1417,17 +1417,25 @@
|
| // WebContentsViewAura, aura::client::DragDropDelegate implementation:
|
|
|
| void WebContentsViewAura::OnDragEntered(const ui::DropTargetEvent& event) {
|
| - if (drag_dest_delegate_)
|
| - drag_dest_delegate_->DragInitialize(web_contents_);
|
| -
|
| + current_rvh_for_drag_ = web_contents_->GetRenderViewHost();
|
| current_drop_data_.reset(new DropData());
|
|
|
| PrepareDropData(current_drop_data_.get(), event.data());
|
| blink::WebDragOperationsMask op = ConvertToWeb(event.source_operations());
|
|
|
| + // Give the delegate an opportunity to cancel the drag.
|
| + if (!web_contents_->GetDelegate()->CanDragEnter(web_contents_,
|
| + *current_drop_data_.get(),
|
| + op)) {
|
| + current_drop_data_.reset(NULL);
|
| + return;
|
| + }
|
| +
|
| + if (drag_dest_delegate_)
|
| + drag_dest_delegate_->DragInitialize(web_contents_);
|
| +
|
| gfx::Point screen_pt =
|
| gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint();
|
| - current_rvh_for_drag_ = web_contents_->GetRenderViewHost();
|
| web_contents_->GetRenderViewHost()->DragTargetDragEnter(
|
| *current_drop_data_.get(), event.location(), screen_pt, op,
|
| ConvertAuraEventFlagsToWebInputEventModifiers(event.flags()));
|
| @@ -1443,6 +1451,9 @@
|
| if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
|
| OnDragEntered(event);
|
|
|
| + if (!current_drop_data_)
|
| + return ui::DragDropTypes::DRAG_NONE;
|
| +
|
| blink::WebDragOperationsMask op = ConvertToWeb(event.source_operations());
|
| gfx::Point screen_pt =
|
| gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint();
|
| @@ -1461,6 +1472,9 @@
|
| if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
|
| return;
|
|
|
| + if (!current_drop_data_)
|
| + return;
|
| +
|
| web_contents_->GetRenderViewHost()->DragTargetDragLeave();
|
| if (drag_dest_delegate_)
|
| drag_dest_delegate_->OnDragLeave();
|
| @@ -1473,6 +1487,9 @@
|
| if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
|
| OnDragEntered(event);
|
|
|
| + if (!current_drop_data_)
|
| + return ui::DragDropTypes::DRAG_NONE;
|
| +
|
| web_contents_->GetRenderViewHost()->DragTargetDrop(
|
| event.location(),
|
| gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint(),
|
|
|