Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: ui/base/dragdrop/os_exchange_data.h

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/base/dragdrop/file_info.cc ('k') | ui/base/dragdrop/os_exchange_data.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #ifndef UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_
6 #define UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_
7
8 #include "build/build_config.h"
9
10 #include <set>
11 #include <string>
12
13 #if defined(OS_WIN)
14 #include <objidl.h>
15 #endif
16
17 #include "base/basictypes.h"
18 #include "base/files/file_path.h"
19 #include "base/memory/scoped_ptr.h"
20 #include "ui/base/clipboard/clipboard.h"
21 #include "ui/base/dragdrop/download_file_interface.h"
22 #include "ui/base/ui_base_export.h"
23
24 class GURL;
25 class Pickle;
26
27 namespace gfx {
28 class ImageSkia;
29 class Vector2d;
30 }
31
32 namespace ui {
33
34 struct FileInfo;
35
36 ///////////////////////////////////////////////////////////////////////////////
37 //
38 // OSExchangeData
39 // An object that holds interchange data to be sent out to OS services like
40 // clipboard, drag and drop, etc. This object exposes an API that clients can
41 // use to specify raw data and its high level type. This object takes care of
42 // translating that into something the OS can understand.
43 //
44 ///////////////////////////////////////////////////////////////////////////////
45
46 // NOTE: Support for html and file contents is required by TabContentViewWin.
47 // TabContentsViewGtk uses a different class to handle drag support that does
48 // not use OSExchangeData. As such, file contents and html support is only
49 // compiled on windows.
50 class UI_BASE_EXPORT OSExchangeData {
51 public:
52 // CustomFormats are used for non-standard data types. For example, bookmark
53 // nodes are written using a CustomFormat.
54 // TODO(dcheng): Remove this completely and just use Clipboard::FormatType.
55 typedef Clipboard::FormatType CustomFormat;
56
57 // Enumeration of the known formats.
58 enum Format {
59 STRING = 1 << 0,
60 URL = 1 << 1,
61 FILE_NAME = 1 << 2,
62 PICKLED_DATA = 1 << 3,
63 #if defined(OS_WIN)
64 FILE_CONTENTS = 1 << 4,
65 #endif
66 #if defined(USE_AURA)
67 HTML = 1 << 5,
68 #endif
69 };
70
71 // Controls whether or not filenames should be converted to file: URLs when
72 // getting a URL.
73 enum FilenameToURLPolicy { CONVERT_FILENAMES, DO_NOT_CONVERT_FILENAMES, };
74
75 // Encapsulates the info about a file to be downloaded.
76 struct UI_BASE_EXPORT DownloadFileInfo {
77 DownloadFileInfo(const base::FilePath& filename,
78 DownloadFileProvider* downloader);
79 ~DownloadFileInfo();
80
81 base::FilePath filename;
82 scoped_refptr<DownloadFileProvider> downloader;
83 };
84
85 // Provider defines the platform specific part of OSExchangeData that
86 // interacts with the native system.
87 class UI_BASE_EXPORT Provider {
88 public:
89 Provider() {}
90 virtual ~Provider() {}
91
92 virtual Provider* Clone() const = 0;
93
94 virtual void MarkOriginatedFromRenderer() = 0;
95 virtual bool DidOriginateFromRenderer() const = 0;
96
97 virtual void SetString(const base::string16& data) = 0;
98 virtual void SetURL(const GURL& url, const base::string16& title) = 0;
99 virtual void SetFilename(const base::FilePath& path) = 0;
100 virtual void SetFilenames(
101 const std::vector<FileInfo>& file_names) = 0;
102 virtual void SetPickledData(const CustomFormat& format,
103 const Pickle& data) = 0;
104
105 virtual bool GetString(base::string16* data) const = 0;
106 virtual bool GetURLAndTitle(FilenameToURLPolicy policy,
107 GURL* url,
108 base::string16* title) const = 0;
109 virtual bool GetFilename(base::FilePath* path) const = 0;
110 virtual bool GetFilenames(
111 std::vector<FileInfo>* file_names) const = 0;
112 virtual bool GetPickledData(const CustomFormat& format,
113 Pickle* data) const = 0;
114
115 virtual bool HasString() const = 0;
116 virtual bool HasURL(FilenameToURLPolicy policy) const = 0;
117 virtual bool HasFile() const = 0;
118 virtual bool HasCustomFormat(const CustomFormat& format) const = 0;
119
120 #if (!defined(OS_CHROMEOS) && defined(USE_X11)) || defined(OS_WIN)
121 virtual void SetFileContents(const base::FilePath& filename,
122 const std::string& file_contents) = 0;
123 #endif
124 #if defined(OS_WIN)
125 virtual bool GetFileContents(base::FilePath* filename,
126 std::string* file_contents) const = 0;
127 virtual bool HasFileContents() const = 0;
128 virtual void SetDownloadFileInfo(const DownloadFileInfo& download) = 0;
129 #endif
130
131 #if defined(USE_AURA)
132 virtual void SetHtml(const base::string16& html, const GURL& base_url) = 0;
133 virtual bool GetHtml(base::string16* html, GURL* base_url) const = 0;
134 virtual bool HasHtml() const = 0;
135 #endif
136
137 #if defined(USE_AURA)
138 virtual void SetDragImage(const gfx::ImageSkia& image,
139 const gfx::Vector2d& cursor_offset) = 0;
140 virtual const gfx::ImageSkia& GetDragImage() const = 0;
141 virtual const gfx::Vector2d& GetDragImageOffset() const = 0;
142 #endif
143 };
144
145 // Creates the platform specific Provider.
146 static Provider* CreateProvider();
147
148 OSExchangeData();
149 // Creates an OSExchangeData with the specified provider. OSExchangeData
150 // takes ownership of the supplied provider.
151 explicit OSExchangeData(Provider* provider);
152
153 ~OSExchangeData();
154
155 // Returns the Provider, which actually stores and manages the data.
156 const Provider& provider() const { return *provider_; }
157 Provider& provider() { return *provider_; }
158
159 // Marks drag data as tainted if it originates from the renderer. This is used
160 // to avoid granting privileges to a renderer when dragging in tainted data,
161 // since it could allow potential escalation of privileges.
162 void MarkOriginatedFromRenderer();
163 bool DidOriginateFromRenderer() const;
164
165 // These functions add data to the OSExchangeData object of various Chrome
166 // types. The OSExchangeData object takes care of translating the data into
167 // a format suitable for exchange with the OS.
168 // NOTE WELL: Typically, a data object like this will contain only one of the
169 // following types of data. In cases where more data is held, the
170 // order in which these functions are called is _important_!
171 // ---> The order types are added to an OSExchangeData object controls
172 // the order of enumeration in our IEnumFORMATETC implementation!
173 // This comes into play when selecting the best (most preferable)
174 // data type for insertion into a DropTarget.
175 void SetString(const base::string16& data);
176 // A URL can have an optional title in some exchange formats.
177 void SetURL(const GURL& url, const base::string16& title);
178 // A full path to a file.
179 void SetFilename(const base::FilePath& path);
180 // Full path to one or more files. See also SetFilenames() in Provider.
181 void SetFilenames(
182 const std::vector<FileInfo>& file_names);
183 // Adds pickled data of the specified format.
184 void SetPickledData(const CustomFormat& format, const Pickle& data);
185
186 // These functions retrieve data of the specified type. If data exists, the
187 // functions return and the result is in the out parameter. If the data does
188 // not exist, the out parameter is not touched. The out parameter cannot be
189 // NULL.
190 bool GetString(base::string16* data) const;
191 bool GetURLAndTitle(FilenameToURLPolicy policy,
192 GURL* url,
193 base::string16* title) const;
194 // Return the path of a file, if available.
195 bool GetFilename(base::FilePath* path) const;
196 bool GetFilenames(
197 std::vector<FileInfo>* file_names) const;
198 bool GetPickledData(const CustomFormat& format, Pickle* data) const;
199
200 // Test whether or not data of certain types is present, without actually
201 // returning anything.
202 bool HasString() const;
203 bool HasURL(FilenameToURLPolicy policy) const;
204 bool HasFile() const;
205 bool HasCustomFormat(const CustomFormat& format) const;
206
207 // Returns true if this OSExchangeData has data in any of the formats in
208 // |formats| or any custom format in |custom_formats|.
209 bool HasAnyFormat(int formats,
210 const std::set<CustomFormat>& custom_formats) const;
211
212 #if defined(OS_WIN)
213 // Adds the bytes of a file (CFSTR_FILECONTENTS and CFSTR_FILEDESCRIPTOR on
214 // Windows).
215 void SetFileContents(const base::FilePath& filename,
216 const std::string& file_contents);
217 bool GetFileContents(base::FilePath* filename,
218 std::string* file_contents) const;
219
220 // Adds a download file with full path (CF_HDROP).
221 void SetDownloadFileInfo(const DownloadFileInfo& download);
222 #endif
223
224 #if defined(USE_AURA)
225 // Adds a snippet of HTML. |html| is just raw html but this sets both
226 // text/html and CF_HTML.
227 void SetHtml(const base::string16& html, const GURL& base_url);
228 bool GetHtml(base::string16* html, GURL* base_url) const;
229 #endif
230
231 private:
232 // Provides the actual data.
233 scoped_ptr<Provider> provider_;
234
235 DISALLOW_COPY_AND_ASSIGN(OSExchangeData);
236 };
237
238 } // namespace ui
239
240 #endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_
OLDNEW
« no previous file with comments | « ui/base/dragdrop/file_info.cc ('k') | ui/base/dragdrop/os_exchange_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698