blob: 4b3875b28792d9bd41c6f1096eb0d8381fb9069f [file] [log] [blame]
[email protected]dc293a72013-07-01 11:11:221// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/renderer/drop_data_builder.h"
6
avi1023d012015-12-25 02:39:147#include <stddef.h>
8
[email protected]dc293a72013-07-01 11:11:229#include "base/strings/string_util.h"
10#include "content/public/common/drop_data.h"
kinukob473f002016-02-22 05:23:1911#include "third_party/WebKit/public/platform/FilePathConversion.h"
brettwdfbcc3b2016-01-20 01:49:1712#include "third_party/WebKit/public/platform/URLConversion.h"
[email protected]dc293a72013-07-01 11:11:2213#include "third_party/WebKit/public/platform/WebDragData.h"
14#include "third_party/WebKit/public/platform/WebString.h"
15#include "third_party/WebKit/public/platform/WebVector.h"
16#include "ui/base/clipboard/clipboard.h"
17
[email protected]180ef242013-11-07 06:50:4618using blink::WebDragData;
kinuko365b58f2017-01-26 03:15:3619using blink::WebString;
[email protected]180ef242013-11-07 06:50:4620using blink::WebVector;
[email protected]dc293a72013-07-01 11:11:2221
22namespace content {
23
ajose1e515a62015-07-28 23:42:2724// static
[email protected]dc293a72013-07-01 11:11:2225DropData DropDataBuilder::Build(const WebDragData& drag_data) {
26 DropData result;
wjmaclean0562edf2016-05-17 17:40:4227 result.key_modifiers = drag_data.modifierKeyState();
[email protected]180ef242013-11-07 06:50:4628 result.referrer_policy = blink::WebReferrerPolicyDefault;
[email protected]dc293a72013-07-01 11:11:2229
30 const WebVector<WebDragData::Item>& item_list = drag_data.items();
31 for (size_t i = 0; i < item_list.size(); ++i) {
32 const WebDragData::Item& item = item_list[i];
33 switch (item.storageType) {
34 case WebDragData::Item::StorageTypeString: {
kinuko365b58f2017-01-26 03:15:3635 base::string16 str_type(item.stringType.utf16());
brettw85111672015-07-23 21:56:3536 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeText)) {
kinuko365b58f2017-01-26 03:15:3637 result.text = WebString::toNullableString16(item.stringData);
[email protected]dc293a72013-07-01 11:11:2238 break;
39 }
brettw85111672015-07-23 21:56:3540 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeURIList)) {
brettwdfbcc3b2016-01-20 01:49:1741 result.url = blink::WebStringToGURL(item.stringData);
kinuko365b58f2017-01-26 03:15:3642 result.url_title = item.title.utf16();
[email protected]dc293a72013-07-01 11:11:2243 break;
44 }
brettw85111672015-07-23 21:56:3545 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeDownloadURL)) {
kinuko365b58f2017-01-26 03:15:3646 result.download_metadata = item.stringData.utf16();
[email protected]dc293a72013-07-01 11:11:2247 break;
48 }
brettw85111672015-07-23 21:56:3549 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeHTML)) {
kinuko365b58f2017-01-26 03:15:3650 result.html = WebString::toNullableString16(item.stringData);
[email protected]dc293a72013-07-01 11:11:2251 result.html_base_url = item.baseURL;
52 break;
53 }
54 result.custom_data.insert(
kinuko365b58f2017-01-26 03:15:3655 std::make_pair(item.stringType.utf16(), item.stringData.utf16()));
[email protected]dc293a72013-07-01 11:11:2256 break;
57 }
58 case WebDragData::Item::StorageTypeBinaryData:
59 result.file_contents.assign(item.binaryData.data(),
60 item.binaryData.size());
dcheng3dd85612017-02-08 10:46:2361 result.file_contents_source_url = item.binaryDataSourceURL;
62#if defined(OS_WIN)
63 result.file_contents_filename_extension =
64 item.binaryDataFilenameExtension.utf16();
65#else
66 result.file_contents_filename_extension =
67 item.binaryDataFilenameExtension.utf8();
68#endif
69 result.file_contents_content_disposition =
70 item.binaryDataContentDisposition.utf8();
[email protected]dc293a72013-07-01 11:11:2271 break;
72 case WebDragData::Item::StorageTypeFilename:
73 // TODO(varunjain): This only works on chromeos. Support win/mac/gtk.
[email protected]17ea0ae22014-03-28 21:54:4674 result.filenames.push_back(ui::FileInfo(
kinukob473f002016-02-22 05:23:1975 blink::WebStringToFilePath(item.filenameData),
76 blink::WebStringToFilePath(item.displayNameData)));
[email protected]dc293a72013-07-01 11:11:2277 break;
[email protected]60ed95f2014-04-23 12:19:4878 case WebDragData::Item::StorageTypeFileSystemFile: {
79 DropData::FileSystemFileInfo info;
80 info.url = item.fileSystemURL;
81 info.size = item.fileSystemFileSize;
hironoda08349d2016-12-14 07:36:1682 info.filesystem_id = item.fileSystemId.ascii();
[email protected]60ed95f2014-04-23 12:19:4883 result.file_system_files.push_back(info);
84 break;
85 }
[email protected]dc293a72013-07-01 11:11:2286 }
87 }
88
89 return result;
90}
91
92} // namespace content