1 // Copyright (c) 2012 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 "ui/base/dragdrop/os_exchange_data.h"
6
7 #include <utility>
8 #include <vector>
9
10 #include "base/callback.h"
11 #include "base/pickle.h"
12 #include "build/build_config.h"
13 #include "ui/base/clipboard/clipboard_format_type.h"
14 #include "ui/base/dragdrop/os_exchange_data_provider_factory.h"
15 #include "url/gurl.h"
16
17 namespace ui {
18
DownloadFileInfo(const base::FilePath & filename,std::unique_ptr<DownloadFileProvider> downloader)19 OSExchangeData::DownloadFileInfo::DownloadFileInfo(
20 const base::FilePath& filename,
21 std::unique_ptr<DownloadFileProvider> downloader)
22 : filename(filename), downloader(std::move(downloader)) {}
23
24 OSExchangeData::DownloadFileInfo::~DownloadFileInfo() = default;
25
OSExchangeData()26 OSExchangeData::OSExchangeData()
27 : provider_(OSExchangeDataProviderFactory::CreateProvider()) {
28 }
29
OSExchangeData(std::unique_ptr<Provider> provider)30 OSExchangeData::OSExchangeData(std::unique_ptr<Provider> provider)
31 : provider_(std::move(provider)) {
32 }
33
~OSExchangeData()34 OSExchangeData::~OSExchangeData() {
35 }
36
MarkOriginatedFromRenderer()37 void OSExchangeData::MarkOriginatedFromRenderer() {
38 provider_->MarkOriginatedFromRenderer();
39 }
40
DidOriginateFromRenderer() const41 bool OSExchangeData::DidOriginateFromRenderer() const {
42 return provider_->DidOriginateFromRenderer();
43 }
44
SetString(const base::string16 & data)45 void OSExchangeData::SetString(const base::string16& data) {
46 provider_->SetString(data);
47 }
48
SetURL(const GURL & url,const base::string16 & title)49 void OSExchangeData::SetURL(const GURL& url, const base::string16& title) {
50 provider_->SetURL(url, title);
51 }
52
SetFilename(const base::FilePath & path)53 void OSExchangeData::SetFilename(const base::FilePath& path) {
54 provider_->SetFilename(path);
55 }
56
SetFilenames(const std::vector<FileInfo> & filenames)57 void OSExchangeData::SetFilenames(
58 const std::vector<FileInfo>& filenames) {
59 provider_->SetFilenames(filenames);
60 }
61
SetPickledData(const ClipboardFormatType & format,const base::Pickle & data)62 void OSExchangeData::SetPickledData(const ClipboardFormatType& format,
63 const base::Pickle& data) {
64 provider_->SetPickledData(format, data);
65 }
66
GetString(base::string16 * data) const67 bool OSExchangeData::GetString(base::string16* data) const {
68 return provider_->GetString(data);
69 }
70
GetURLAndTitle(FilenameToURLPolicy policy,GURL * url,base::string16 * title) const71 bool OSExchangeData::GetURLAndTitle(FilenameToURLPolicy policy,
72 GURL* url,
73 base::string16* title) const {
74 return provider_->GetURLAndTitle(policy, url, title);
75 }
76
GetFilename(base::FilePath * path) const77 bool OSExchangeData::GetFilename(base::FilePath* path) const {
78 return provider_->GetFilename(path);
79 }
80
GetFilenames(std::vector<FileInfo> * filenames) const81 bool OSExchangeData::GetFilenames(std::vector<FileInfo>* filenames) const {
82 return provider_->GetFilenames(filenames);
83 }
84
GetPickledData(const ClipboardFormatType & format,base::Pickle * data) const85 bool OSExchangeData::GetPickledData(const ClipboardFormatType& format,
86 base::Pickle* data) const {
87 return provider_->GetPickledData(format, data);
88 }
89
HasString() const90 bool OSExchangeData::HasString() const {
91 return provider_->HasString();
92 }
93
HasURL(FilenameToURLPolicy policy) const94 bool OSExchangeData::HasURL(FilenameToURLPolicy policy) const {
95 return provider_->HasURL(policy);
96 }
97
HasFile() const98 bool OSExchangeData::HasFile() const {
99 return provider_->HasFile();
100 }
101
HasCustomFormat(const ClipboardFormatType & format) const102 bool OSExchangeData::HasCustomFormat(const ClipboardFormatType& format) const {
103 return provider_->HasCustomFormat(format);
104 }
105
HasAnyFormat(int formats,const std::set<ClipboardFormatType> & format_types) const106 bool OSExchangeData::HasAnyFormat(
107 int formats,
108 const std::set<ClipboardFormatType>& format_types) const {
109 if ((formats & STRING) != 0 && HasString())
110 return true;
111 if ((formats & URL) != 0 && HasURL(CONVERT_FILENAMES))
112 return true;
113 #if defined(OS_WIN)
114 if ((formats & FILE_CONTENTS) != 0 && provider_->HasFileContents())
115 return true;
116 #endif
117 #if defined(USE_AURA)
118 if ((formats & HTML) != 0 && provider_->HasHtml())
119 return true;
120 #endif
121 if ((formats & FILE_NAME) != 0 && provider_->HasFile())
122 return true;
123 for (const auto& format : format_types) {
124 if (HasCustomFormat(format))
125 return true;
126 }
127 return false;
128 }
129
130 #if defined(OS_WIN)
SetFileContents(const base::FilePath & filename,const std::string & file_contents)131 void OSExchangeData::SetFileContents(const base::FilePath& filename,
132 const std::string& file_contents) {
133 provider_->SetFileContents(filename, file_contents);
134 }
135
GetFileContents(base::FilePath * filename,std::string * file_contents) const136 bool OSExchangeData::GetFileContents(base::FilePath* filename,
137 std::string* file_contents) const {
138 return provider_->GetFileContents(filename, file_contents);
139 }
140
HasVirtualFilenames() const141 bool OSExchangeData::HasVirtualFilenames() const {
142 return provider_->HasVirtualFilenames();
143 }
144
GetVirtualFilenames(std::vector<FileInfo> * filenames) const145 bool OSExchangeData::GetVirtualFilenames(
146 std::vector<FileInfo>* filenames) const {
147 return provider_->GetVirtualFilenames(filenames);
148 }
149
GetVirtualFilesAsTempFiles(base::OnceCallback<void (const std::vector<std::pair<base::FilePath,base::FilePath>> &)> callback) const150 bool OSExchangeData::GetVirtualFilesAsTempFiles(
151 base::OnceCallback<
152 void(const std::vector<std::pair<base::FilePath, base::FilePath>>&)>
153 callback) const {
154 return provider_->GetVirtualFilesAsTempFiles(std::move(callback));
155 }
156
SetDownloadFileInfo(DownloadFileInfo * download)157 void OSExchangeData::SetDownloadFileInfo(DownloadFileInfo* download) {
158 provider_->SetDownloadFileInfo(download);
159 }
160 #endif
161
162 #if defined(USE_AURA)
HasHtml() const163 bool OSExchangeData::HasHtml() const {
164 return provider_->HasHtml();
165 }
166
SetHtml(const base::string16 & html,const GURL & base_url)167 void OSExchangeData::SetHtml(const base::string16& html, const GURL& base_url) {
168 provider_->SetHtml(html, base_url);
169 }
170
GetHtml(base::string16 * html,GURL * base_url) const171 bool OSExchangeData::GetHtml(base::string16* html, GURL* base_url) const {
172 return provider_->GetHtml(html, base_url);
173 }
174 #endif
175
176 } // namespace ui
177