blob: f0b7fecfdfa00edf8649c0a49e5159c07c92b850 [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;
Blink Reformat1c4d759e2017-04-09 16:34:5427 result.key_modifiers = drag_data.ModifierKeyState();
28 result.referrer_policy = blink::kWebReferrerPolicyDefault;
[email protected]dc293a72013-07-01 11:11:2229
Blink Reformat1c4d759e2017-04-09 16:34:5430 const WebVector<WebDragData::Item>& item_list = drag_data.Items();
[email protected]dc293a72013-07-01 11:11:2231 for (size_t i = 0; i < item_list.size(); ++i) {
32 const WebDragData::Item& item = item_list[i];
Blink Reformat1c4d759e2017-04-09 16:34:5433 switch (item.storage_type) {
34 case WebDragData::Item::kStorageTypeString: {
35 base::string16 str_type(item.string_type.Utf16());
brettw85111672015-07-23 21:56:3536 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeText)) {
Blink Reformat1c4d759e2017-04-09 16:34:5437 result.text = WebString::ToNullableString16(item.string_data);
[email protected]dc293a72013-07-01 11:11:2238 break;
39 }
brettw85111672015-07-23 21:56:3540 if (base::EqualsASCII(str_type, ui::Clipboard::kMimeTypeURIList)) {
Blink Reformat1c4d759e2017-04-09 16:34:5441 result.url = blink::WebStringToGURL(item.string_data);
42 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)) {
Blink Reformat1c4d759e2017-04-09 16:34:5446 result.download_metadata = item.string_data.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)) {
Blink Reformat1c4d759e2017-04-09 16:34:5450 result.html = WebString::ToNullableString16(item.string_data);
51 result.html_base_url = item.base_url;
[email protected]dc293a72013-07-01 11:11:2252 break;
53 }
54 result.custom_data.insert(
Blink Reformat1c4d759e2017-04-09 16:34:5455 std::make_pair(item.string_type.Utf16(), item.string_data.Utf16()));
[email protected]dc293a72013-07-01 11:11:2256 break;
57 }
Blink Reformat1c4d759e2017-04-09 16:34:5458 case WebDragData::Item::kStorageTypeBinaryData:
Florin Malitaa7ecc49b2017-07-24 17:21:0559 DCHECK(result.file_contents.empty());
60 result.file_contents.reserve(item.binary_data.size());
61 item.binary_data.ForEachSegment([&result](const char* segment,
62 size_t segment_size,
63 size_t segment_offset) {
64 result.file_contents.append(segment, segment_size);
65 return true;
66 });
Blink Reformat1c4d759e2017-04-09 16:34:5467 result.file_contents_source_url = item.binary_data_source_url;
dcheng3dd85612017-02-08 10:46:2368#if defined(OS_WIN)
69 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5470 item.binary_data_filename_extension.Utf16();
dcheng3dd85612017-02-08 10:46:2371#else
72 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5473 item.binary_data_filename_extension.Utf8();
dcheng3dd85612017-02-08 10:46:2374#endif
75 result.file_contents_content_disposition =
Blink Reformat1c4d759e2017-04-09 16:34:5476 item.binary_data_content_disposition.Utf8();
[email protected]dc293a72013-07-01 11:11:2277 break;
Blink Reformat1c4d759e2017-04-09 16:34:5478 case WebDragData::Item::kStorageTypeFilename:
[email protected]dc293a72013-07-01 11:11:2279 // TODO(varunjain): This only works on chromeos. Support win/mac/gtk.
Blink Reformat1c4d759e2017-04-09 16:34:5480 result.filenames.push_back(
81 ui::FileInfo(blink::WebStringToFilePath(item.filename_data),
82 blink::WebStringToFilePath(item.display_name_data)));
[email protected]dc293a72013-07-01 11:11:2283 break;
Blink Reformat1c4d759e2017-04-09 16:34:5484 case WebDragData::Item::kStorageTypeFileSystemFile: {
[email protected]60ed95f2014-04-23 12:19:4885 DropData::FileSystemFileInfo info;
Blink Reformat1c4d759e2017-04-09 16:34:5486 info.url = item.file_system_url;
87 info.size = item.file_system_file_size;
88 info.filesystem_id = item.file_system_id.Ascii();
[email protected]60ed95f2014-04-23 12:19:4889 result.file_system_files.push_back(info);
90 break;
91 }
[email protected]dc293a72013-07-01 11:11:2292 }
93 }
94
95 return result;
96}
97
98} // namespace content