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

Unified Diff: content/renderer/render_view_impl.cc

Issue 1723763002: Add WebDragData to blink::WebView::dragtargetDrop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile on aura Created 4 years, 7 months 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/renderer/render_view_impl.cc
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 887808994d2868d6ccc657be2820289c97d3ccc9..9b120ae1ae14793f8de8634c191f66fb1b7ff8e1 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -426,6 +426,45 @@ class WebWidgetLockTarget : public MouseLockDispatcher::LockTarget {
blink::WebWidget* webwidget_;
};
+WebDragData DropMetaDataToWebDragData(
+ const std::vector<DropData::MetaData>& drop_meta_data) {
+ std::vector<WebDragData::Item> item_list;
+ for (const auto& meta_data_item : drop_meta_data) {
+ if (meta_data_item.kind == DropData::Kind::STRING) {
+ WebDragData::Item item;
+ item.storageType = WebDragData::Item::StorageTypeString;
+ item.stringType = meta_data_item.mime_type;
+ item_list.push_back(item);
+ continue;
+ }
+
+ // TODO(hush): crbug.com/584789. Blink needs to support creating a file with
+ // just the mimetype. This is needed to drag files to WebView on Android
+ // platform.
+ if ((meta_data_item.kind == DropData::Kind::FILENAME) &&
+ !meta_data_item.filename.empty()) {
+ WebDragData::Item item;
+ item.storageType = WebDragData::Item::StorageTypeFilename;
+ item.filenameData = meta_data_item.filename.AsUTF16Unsafe();
+ item_list.push_back(item);
+ continue;
+ }
+
+ if (meta_data_item.kind == DropData::Kind::FILESYSTEMFILE) {
+ WebDragData::Item item;
+ item.storageType = WebDragData::Item::StorageTypeFileSystemFile;
+ item.fileSystemURL = meta_data_item.file_system_url;
+ item_list.push_back(item);
+ continue;
+ }
+ }
+
+ WebDragData result;
+ result.initialize();
+ result.setItems(item_list);
+ return result;
+}
+
WebDragData DropDataToWebDragData(const DropData& drop_data) {
std::vector<WebDragData::Item> item_list;
@@ -2449,17 +2488,15 @@ void RenderViewImpl::OnAllowBindings(int enabled_bindings_flags) {
main_render_frame_->MaybeEnableMojoBindings();
}
-void RenderViewImpl::OnDragTargetDragEnter(const DropData& drop_data,
- const gfx::Point& client_point,
- const gfx::Point& screen_point,
- WebDragOperationsMask ops,
- int key_modifiers) {
+void RenderViewImpl::OnDragTargetDragEnter(
+ const std::vector<DropData::MetaData>& drop_meta_data,
+ const gfx::Point& client_point,
+ const gfx::Point& screen_point,
+ WebDragOperationsMask ops,
+ int key_modifiers) {
WebDragOperation operation = webview()->dragTargetDragEnter(
- DropDataToWebDragData(drop_data),
- ConvertWindowPointToViewport(client_point),
- screen_point,
- ops,
- key_modifiers);
+ DropMetaDataToWebDragData(drop_meta_data), client_point, screen_point,
+ ops, key_modifiers);
Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation));
}
@@ -2481,11 +2518,12 @@ void RenderViewImpl::OnDragTargetDragLeave() {
webview()->dragTargetDragLeave();
}
-void RenderViewImpl::OnDragTargetDrop(const gfx::Point& client_point,
+void RenderViewImpl::OnDragTargetDrop(const DropData& drop_data,
+ const gfx::Point& client_point,
const gfx::Point& screen_point,
int key_modifiers) {
- webview()->dragTargetDrop(
- ConvertWindowPointToViewport(client_point), screen_point, key_modifiers);
+ webview()->dragTargetDrop(DropDataToWebDragData(drop_data), client_point,
+ screen_point, key_modifiers);
}
void RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point,

Powered by Google App Engine
This is Rietveld 408576698