Chromium Code Reviews| Index: content/browser/web_contents/web_drag_source_mac.mm |
| diff --git a/content/browser/web_contents/web_drag_source_mac.mm b/content/browser/web_contents/web_drag_source_mac.mm |
| index 14321f4787920969514adcfabf8c2cead77202ee..39d722740d787948c7de5e2ee004e15289d69186 100644 |
| --- a/content/browser/web_contents/web_drag_source_mac.mm |
| +++ b/content/browser/web_contents/web_drag_source_mac.mm |
| @@ -22,6 +22,7 @@ |
| #include "content/browser/download/drag_download_file.h" |
| #include "content/browser/download/drag_download_util.h" |
| #include "content/browser/renderer_host/render_view_host_impl.h" |
| +#include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "content/browser/web_contents/web_contents_impl.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "content/public/common/content_client.h" |
| @@ -109,6 +110,7 @@ void PromiseWriterHelper(const DropData& drop_data, |
| - (id)initWithContents:(content::WebContentsImpl*)contents |
| view:(NSView*)contentsView |
| dropData:(const DropData*)dropData |
| + sourceRWH:(content::RenderWidgetHostImpl*)sourceRWH |
| image:(NSImage*)image |
| offset:(NSPoint)offset |
| pasteboard:(NSPasteboard*)pboard |
| @@ -123,6 +125,7 @@ void PromiseWriterHelper(const DropData& drop_data, |
| dropData_.reset(new DropData(*dropData)); |
| DCHECK(dropData_.get()); |
| + dragStartRWH_ = sourceRWH->GetWeakPtr(); |
| dragImage_.reset([image retain]); |
| imageOffset_ = offset; |
| @@ -271,9 +274,7 @@ void PromiseWriterHelper(const DropData& drop_data, |
| return; |
| contents_->SystemDragEnded(); |
| - RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>( |
| - contents_->GetRenderViewHost()); |
| - if (rvh) { |
| + if (dragStartRWH_) { |
| // Convert |screenPoint| to view coordinates and flip it. |
| NSPoint localPoint = NSZeroPoint; |
| if ([contentsView_ window]) |
| @@ -290,8 +291,18 @@ void PromiseWriterHelper(const DropData& drop_data, |
| if (operation == (NSDragOperationMove | NSDragOperationCopy)) |
| operation &= ~NSDragOperationMove; |
| - contents_->DragSourceEndedAt(localPoint.x, localPoint.y, screenPoint.x, |
| - screenPoint.y, static_cast<blink::WebDragOperation>(operation)); |
| + if (dragStartRWH_.get() == contents_->GetRenderViewHost()->GetWidget()) { |
| + contents_->DragSourceEndedAt( |
| + localPoint.x, localPoint.y, screenPoint.x, screenPoint.y, |
| + static_cast<blink::WebDragOperation>(operation)); |
| + } |
| + |
| + // TODO(paulmeyer): In the OOPIF case, should |client_loc| be converted to |
| + // the coordinates local to |drag_start_rwh_|? |
| + dragStartRWH_->DragSourceEndedAt( |
|
dcheng
2016/11/17 17:44:19
I think we should be plumbing the start RWH throug
|
| + gfx::Point(localPoint.x, localPoint.y), |
| + gfx::Point(screenPoint.x, screenPoint.y), |
| + static_cast<blink::WebDragOperation>(operation)); |
| } |
| // Make sure the pasteboard owner isn't us. |