Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Unified Diff: content/browser/web_contents/web_drag_source_mac.mm

Issue 2509933002: Drag-and-drop: Target drag messages (the sequel). (Closed)
Patch Set: Rebased. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698