blob: 6d60b216ba1bff8dd028c1ca8d4f628732753376 [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:
59 result.file_contents.assign(item.binary_data.Data(),
60 item.binary_data.size());
61 result.file_contents_source_url = item.binary_data_source_url;
dcheng3dd85612017-02-08 10:46:2362#if defined(OS_WIN)
63 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5464 item.binary_data_filename_extension.Utf16();
dcheng3dd85612017-02-08 10:46:2365#else
66 result.file_contents_filename_extension =
Blink Reformat1c4d759e2017-04-09 16:34:5467 item.binary_data_filename_extension.Utf8();
dcheng3dd85612017-02-08 10:46:2368#endif
69 result.file_contents_content_disposition =
Blink Reformat1c4d759e2017-04-09 16:34:5470 item.binary_data_content_disposition.Utf8();
[email protected]dc293a72013-07-01 11:11:2271 break;
Blink Reformat1c4d759e2017-04-09 16:34:5472 case WebDragData::Item::kStorageTypeFilename:
[email protected]dc293a72013-07-01 11:11:2273 // TODO(varunjain): This only works on chromeos. Support win/mac/gtk.
Blink Reformat1c4d759e2017-04-09 16:34:5474 result.filenames.push_back(
75 ui::FileInfo(blink::WebStringToFilePath(item.filename_data),
76 blink::WebStringToFilePath(item.display_name_data)));
[email protected]dc293a72013-07-01 11:11:2277 break;
Blink Reformat1c4d759e2017-04-09 16:34:5478 case WebDragData::Item::kStorageTypeFileSystemFile: {
[email protected]60ed95f2014-04-23 12:19:4879 DropData::FileSystemFileInfo info;
Blink Reformat1c4d759e2017-04-09 16:34:5480 info.url = item.file_system_url;
81 info.size = item.file_system_file_size;
82 info.filesystem_id = item.file_system_id.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