blob: ad2fa8df394a3bf1efada994bddb7ba07425098c [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"
Blink Reformata30d4232018-04-07 15:31:0611#include "third_party/blink/public/platform/file_path_conversion.h"
12#include "third_party/blink/public/platform/url_conversion.h"
13#include "third_party/blink/public/platform/web_drag_data.h"
14#include "third_party/blink/public/platform/web_string.h"
15#include "third_party/blink/public/platform/web_vector.h"
Maksim Sisova33072d22019-01-24 15:44:2516#include "ui/base/clipboard/clipboard_constants.h"
[email protected]dc293a72013-07-01 11:11:2217
[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;
Blink Reformat1c4d759e2017-04-09 16:34:5427 result.key_modifiers = drag_data.ModifierKeyState();
Richard Li49fe04d2018-10-21 09:07:1928 result.referrer_policy = network::mojom::ReferrerPolicy::kDefault;
[email protected]dc293a72013-07-01 11:11:2229
Darwin Huang87ffab862018-12-08 01:52:4730 for (const WebDragData::Item& item : drag_data.Items()) {
Blink Reformat1c4d759e2017-04-09 16:34:5431 switch (item.storage_type) {
32 case WebDragData::Item::kStorageTypeString: {
33 base::string16 str_type(item.string_type.Utf16());
Maksim Sisova33072d22019-01-24 15:44:2534 if (base::EqualsASCII(str_type, ui::kMimeTypeText)) {
Blink Reformat1c4d759e2017-04-09 16:34:5435 result.text = WebString::ToNullableString16(item.string_data);
[email protected]dc293a72013-07-01 11:11:2236 break;
37 }
Maksim Sisova33072d22019-01-24 15:44:2538 if (base::EqualsASCII(str_type, ui::kMimeTypeURIList)) {
Blink Reformat1c4d759e2017-04-09 16:34:5439 result.url = blink::WebStringToGURL(item.string_data);
40 result.url_title = item.title.Utf16();
[email protected]dc293a72013-07-01 11:11:2241 break;
42 }
Maksim Sisova33072d22019-01-24 15:44:2543 if (base::EqualsASCII(str_type, ui::kMimeTypeDownloadURL)) {
Blink Reformat1c4d759e2017-04-09 16:34:5444 result.download_metadata = item.string_data.Utf16();
[email protected]dc293a72013-07-01 11:11:2245 break;
46 }
Maksim Sisova33072d22019-01-24 15:44:2547 if (base::EqualsASCII(str_type, ui::kMimeTypeHTML)) {
Blink Reformat1c4d759e2017-04-09 16:34:5448 result.html = WebString::ToNullableString16(item.string_data);
49 result.html_base_url = item.base_url;
[email protected]dc293a72013-07-01 11:11:2250 break;
51 }
52 result.custom_data.insert(
Blink Reformat1c4d759e2017-04-09 16:34:5453 std::make_pair(item.string_type.Utf16(), item.string_data.Utf16()));
[email protected]dc293a72013-07-01 11:11:2254 break;
55 }
Blink Reformat1c4d759e2017-04-09 16:34:5456 case WebDragData::Item::kStorageTypeBinaryData:
Florin Malitaa7ecc49b2017-07-24 17:21:0557 DCHECK(result.file_contents.empty());
58 result.file_contents.reserve(item.binary_data.size());
59 item.binary_data.ForEachSegment([&result](const char* segment,
60 size_t segment_size,
61 size_t segment_offset) {
62 result.file_contents.append(segment, segment_size);
63 return true;
64 });
Blink Reformat1c4d759e2017-04-09 16:34:5465 result.file_contents_source_url = item.binary_data_source_url;
dcheng3dd85612017-02-08 10:46:2366#if defined(OS_WIN)
67 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5468 item.binary_data_filename_extension.Utf16();
dcheng3dd85612017-02-08 10:46:2369#else
70 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5471 item.binary_data_filename_extension.Utf8();
dcheng3dd85612017-02-08 10:46:2372#endif
73 result.file_contents_content_disposition =
Blink Reformat1c4d759e2017-04-09 16:34:5474 item.binary_data_content_disposition.Utf8();
[email protected]dc293a72013-07-01 11:11:2275 break;
Blink Reformat1c4d759e2017-04-09 16:34:5476 case WebDragData::Item::kStorageTypeFilename:
[email protected]dc293a72013-07-01 11:11:2277 // TODO(varunjain): This only works on chromeos. Support win/mac/gtk.
Blink Reformat1c4d759e2017-04-09 16:34:5478 result.filenames.push_back(
79 ui::FileInfo(blink::WebStringToFilePath(item.filename_data),
80 blink::WebStringToFilePath(item.display_name_data)));
[email protected]dc293a72013-07-01 11:11:2281 break;
Blink Reformat1c4d759e2017-04-09 16:34:5482 case WebDragData::Item::kStorageTypeFileSystemFile: {
[email protected]60ed95f2014-04-23 12:19:4883 DropData::FileSystemFileInfo info;
Blink Reformat1c4d759e2017-04-09 16:34:5484 info.url = item.file_system_url;
85 info.size = item.file_system_file_size;
86 info.filesystem_id = item.file_system_id.Ascii();
[email protected]60ed95f2014-04-23 12:19:4887 result.file_system_files.push_back(info);
88 break;
89 }
[email protected]dc293a72013-07-01 11:11:2290 }
91 }
92
93 return result;
94}
95
96} // namespace content