| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 145ca56f2c48310fe311a0a6a815d587128fc250..52abdd498f8610065576fab48c39c980666d15a2 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;
|
|
|
| @@ -2404,17 +2443,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));
|
| }
|
| @@ -2436,11 +2473,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,
|
|
|