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

Side by Side Diff: ui/base/clipboard/clipboard.h

Issue 12298037: Revert 183123 (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1417/src/
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « content/public/browser/browser_context.h ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_H_ 5 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_H_
6 #define UI_BASE_CLIPBOARD_CLIPBOARD_H_ 6 #define UI_BASE_CLIPBOARD_CLIPBOARD_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/callback.h"
13 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
14 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
15 #include "base/process.h" 14 #include "base/process.h"
16 #include "base/shared_memory.h" 15 #include "base/shared_memory.h"
17 #include "base/string16.h" 16 #include "base/string16.h"
18 #include "base/threading/thread_checker.h" 17 #include "base/threading/thread_checker.h"
19 #include "base/threading/platform_thread.h" 18 #include "base/threading/platform_thread.h"
20 #include "ui/base/ui_export.h" 19 #include "ui/base/ui_export.h"
21 20
22 #if defined(TOOLKIT_GTK) 21 #if defined(TOOLKIT_GTK)
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // size gfx::Size struct 162 // size gfx::Size struct
164 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory 163 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory
165 // object containing the bitmap data. 164 // object containing the bitmap data.
166 // size gfx::Size struct 165 // size gfx::Size struct
167 // CBF_DATA format char array 166 // CBF_DATA format char array
168 // data byte array 167 // data byte array
169 typedef std::vector<char> ObjectMapParam; 168 typedef std::vector<char> ObjectMapParam;
170 typedef std::vector<ObjectMapParam> ObjectMapParams; 169 typedef std::vector<ObjectMapParam> ObjectMapParams;
171 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap; 170 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap;
172 171
173 // WriteObject() caller can use the SourceTag that will be stored in the
174 // clipboard. NULL value means "no tag".
175 typedef void* SourceTag;
176 static ObjectMapParam SourceTag2Binary(SourceTag tag);
177 static SourceTag Binary2SourceTag(const std::string& serialization);
178
179 // Buffer designates which clipboard the action should be applied to. 172 // Buffer designates which clipboard the action should be applied to.
180 // Only platforms that use the X Window System support the selection 173 // Only platforms that use the X Window System support the selection
181 // buffer. 174 // buffer.
182 enum Buffer { 175 enum Buffer {
183 BUFFER_STANDARD, 176 BUFFER_STANDARD,
184 BUFFER_SELECTION, 177 BUFFER_SELECTION,
185 }; 178 };
186 179
187 // The callback is called after Clipboard::WriteObjects().
188 // Don't use it for notification about changed OS clipboard.
189 void set_write_objects_callback_for_testing(
190 const base::Callback<void(Buffer)>& cb) {
191 write_objects_callback_ = cb;
192 }
193
194 static bool IsValidBuffer(int32 buffer) { 180 static bool IsValidBuffer(int32 buffer) {
195 switch (buffer) { 181 switch (buffer) {
196 case BUFFER_STANDARD: 182 case BUFFER_STANDARD:
197 return true; 183 return true;
198 #if defined(USE_X11) && !defined(OS_CHROMEOS) 184 #if defined(USE_X11) && !defined(OS_CHROMEOS)
199 case BUFFER_SELECTION: 185 case BUFFER_SELECTION:
200 return true; 186 return true;
201 #endif 187 #endif
202 } 188 }
203 return false; 189 return false;
(...skipping 17 matching lines...) Expand all
221 207
222 // Destroys the clipboard for the current thread. Usually, this will clean up 208 // Destroys the clipboard for the current thread. Usually, this will clean up
223 // all clipboards, except on Windows. (Previous code leaks the IO thread 209 // all clipboards, except on Windows. (Previous code leaks the IO thread
224 // clipboard, so it shouldn't be a problem.) 210 // clipboard, so it shouldn't be a problem.)
225 static void DestroyClipboardForCurrentThread(); 211 static void DestroyClipboardForCurrentThread();
226 212
227 // Write a bunch of objects to the system clipboard. Copies are made of the 213 // Write a bunch of objects to the system clipboard. Copies are made of the
228 // contents of |objects|. On Windows they are copied to the system clipboard. 214 // contents of |objects|. On Windows they are copied to the system clipboard.
229 // On linux they are copied into a structure owned by the Clipboard object and 215 // On linux they are copied into a structure owned by the Clipboard object and
230 // kept until the system clipboard is set again. 216 // kept until the system clipboard is set again.
231 // SourceTag is optional value to be stored in the clipboard, NULL won't be 217 void WriteObjects(Buffer buffer, const ObjectMap& objects);
232 // stored.
233 void WriteObjects(Buffer buffer, const ObjectMap& objects, SourceTag tag);
234 218
235 // Returns a sequence number which uniquely identifies clipboard state. 219 // Returns a sequence number which uniquely identifies clipboard state.
236 // This can be used to version the data on the clipboard and determine 220 // This can be used to version the data on the clipboard and determine
237 // whether it has changed. 221 // whether it has changed.
238 uint64 GetSequenceNumber(Buffer buffer); 222 uint64 GetSequenceNumber(Buffer buffer);
239 223
240 // Tests whether the clipboard contains a certain format 224 // Tests whether the clipboard contains a certain format
241 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const; 225 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const;
242 226
243 // Clear the clipboard data. 227 // Clear the clipboard data.
(...skipping 26 matching lines...) Expand all
270 const string16& type, 254 const string16& type,
271 string16* result) const; 255 string16* result) const;
272 256
273 // Reads a bookmark from the clipboard, if available. 257 // Reads a bookmark from the clipboard, if available.
274 void ReadBookmark(string16* title, std::string* url) const; 258 void ReadBookmark(string16* title, std::string* url) const;
275 259
276 // Reads raw data from the clipboard with the given format type. Stores result 260 // Reads raw data from the clipboard with the given format type. Stores result
277 // as a byte vector. 261 // as a byte vector.
278 void ReadData(const FormatType& format, std::string* result) const; 262 void ReadData(const FormatType& format, std::string* result) const;
279 263
280 // Reads Source tag from the clipboard, if available.
281 SourceTag ReadSourceTag(Buffer buffer) const;
282
283 // Gets the FormatType corresponding to an arbitrary format string, 264 // Gets the FormatType corresponding to an arbitrary format string,
284 // registering it with the system if needed. Due to Windows/Linux 265 // registering it with the system if needed. Due to Windows/Linux
285 // limitiations, |format_string| must never be controlled by the user. 266 // limitiations, |format_string| must never be controlled by the user.
286 static FormatType GetFormatType(const std::string& format_string); 267 static FormatType GetFormatType(const std::string& format_string);
287 268
288 // Get format identifiers for various types. 269 // Get format identifiers for various types.
289 static const FormatType& GetUrlFormatType(); 270 static const FormatType& GetUrlFormatType();
290 static const FormatType& GetUrlWFormatType(); 271 static const FormatType& GetUrlWFormatType();
291 static const FormatType& GetMozUrlFormatType(); 272 static const FormatType& GetMozUrlFormatType();
292 static const FormatType& GetPlainTextFormatType(); 273 static const FormatType& GetPlainTextFormatType();
293 static const FormatType& GetPlainTextWFormatType(); 274 static const FormatType& GetPlainTextWFormatType();
294 static const FormatType& GetFilenameFormatType(); 275 static const FormatType& GetFilenameFormatType();
295 static const FormatType& GetFilenameWFormatType(); 276 static const FormatType& GetFilenameWFormatType();
296 static const FormatType& GetWebKitSmartPasteFormatType(); 277 static const FormatType& GetWebKitSmartPasteFormatType();
297 // Win: MS HTML Format, Other: Generic HTML format 278 // Win: MS HTML Format, Other: Generic HTML format
298 static const FormatType& GetHtmlFormatType(); 279 static const FormatType& GetHtmlFormatType();
299 static const FormatType& GetRtfFormatType(); 280 static const FormatType& GetRtfFormatType();
300 static const FormatType& GetBitmapFormatType(); 281 static const FormatType& GetBitmapFormatType();
301 // TODO(raymes): Unify web custom data and pepper custom data: 282 // TODO(raymes): Unify web custom data and pepper custom data:
302 // crbug.com/158399. 283 // crbug.com/158399.
303 static const FormatType& GetWebCustomDataFormatType(); 284 static const FormatType& GetWebCustomDataFormatType();
304 static const FormatType& GetPepperCustomDataFormatType(); 285 static const FormatType& GetPepperCustomDataFormatType();
305 static const FormatType& GetSourceTagFormatType();
306 286
307 // Embeds a pointer to a SharedMemory object pointed to by |bitmap_handle| 287 // Embeds a pointer to a SharedMemory object pointed to by |bitmap_handle|
308 // belonging to |process| into a shared bitmap [CBF_SMBITMAP] slot in 288 // belonging to |process| into a shared bitmap [CBF_SMBITMAP] slot in
309 // |objects|. The pointer is deleted by DispatchObjects(). 289 // |objects|. The pointer is deleted by DispatchObjects().
310 // 290 //
311 // On non-Windows platforms, |process| is ignored. 291 // On non-Windows platforms, |process| is ignored.
312 static void ReplaceSharedMemHandle(ObjectMap* objects, 292 static void ReplaceSharedMemHandle(ObjectMap* objects,
313 base::SharedMemoryHandle bitmap_handle, 293 base::SharedMemoryHandle bitmap_handle,
314 base::ProcessHandle process); 294 base::ProcessHandle process);
315 #if defined(OS_WIN) 295 #if defined(OS_WIN)
316 // Firefox text/html 296 // Firefox text/html
317 static const FormatType& GetTextHtmlFormatType(); 297 static const FormatType& GetTextHtmlFormatType();
318 static const FormatType& GetCFHDropFormatType(); 298 static const FormatType& GetCFHDropFormatType();
319 static const FormatType& GetFileDescriptorFormatType(); 299 static const FormatType& GetFileDescriptorFormatType();
320 static const FormatType& GetFileContentFormatZeroType(); 300 static const FormatType& GetFileContentFormatZeroType();
321 #endif 301 #endif
322 302
323 private: 303 private:
324 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest); 304 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest);
325 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest); 305 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest);
326 friend class ClipboardTest; 306 friend class ClipboardTest;
327 307
328 Clipboard(); 308 Clipboard();
329 ~Clipboard(); 309 ~Clipboard();
330 310
331 void DispatchObject(ObjectType type, const ObjectMapParams& params); 311 void DispatchObject(ObjectType type, const ObjectMapParams& params);
332 312
333 void WriteObjectsImpl(Buffer buffer, const ObjectMap& objects, SourceTag tag);
334
335 void WriteText(const char* text_data, size_t text_len); 313 void WriteText(const char* text_data, size_t text_len);
336 314
337 void WriteHTML(const char* markup_data, 315 void WriteHTML(const char* markup_data,
338 size_t markup_len, 316 size_t markup_len,
339 const char* url_data, 317 const char* url_data,
340 size_t url_len); 318 size_t url_len);
341 319
342 void WriteRTF(const char* rtf_data, size_t data_len); 320 void WriteRTF(const char* rtf_data, size_t data_len);
343 321
344 void WriteBookmark(const char* title_data, 322 void WriteBookmark(const char* title_data,
345 size_t title_len, 323 size_t title_len,
346 const char* url_data, 324 const char* url_data,
347 size_t url_len); 325 size_t url_len);
348 326
349 void WriteWebSmartPaste(); 327 void WriteWebSmartPaste();
350 328
351 void WriteBitmap(const char* pixel_data, const char* size_data); 329 void WriteBitmap(const char* pixel_data, const char* size_data);
352 330
353 void WriteData(const FormatType& format, 331 void WriteData(const FormatType& format,
354 const char* data_data, 332 const char* data_data,
355 size_t data_len); 333 size_t data_len);
356
357 void WriteSourceTag(SourceTag tag);
358 #if defined(OS_WIN) 334 #if defined(OS_WIN)
359 void WriteBitmapFromHandle(HBITMAP source_hbitmap, 335 void WriteBitmapFromHandle(HBITMAP source_hbitmap,
360 const gfx::Size& size); 336 const gfx::Size& size);
361 337
362 // Safely write to system clipboard. Free |handle| on failure. 338 // Safely write to system clipboard. Free |handle| on failure.
363 void WriteToClipboard(unsigned int format, HANDLE handle); 339 void WriteToClipboard(unsigned int format, HANDLE handle);
364 340
365 static void ParseBookmarkClipboardFormat(const string16& bookmark, 341 static void ParseBookmarkClipboardFormat(const string16& bookmark,
366 string16* title, 342 string16* title,
367 std::string* url); 343 std::string* url);
(...skipping 23 matching lines...) Expand all
391 typedef std::map<std::string, std::pair<char*, size_t> > TargetMap; 367 typedef std::map<std::string, std::pair<char*, size_t> > TargetMap;
392 368
393 private: 369 private:
394 // Write changes to gtk clipboard. 370 // Write changes to gtk clipboard.
395 void SetGtkClipboard(Buffer buffer); 371 void SetGtkClipboard(Buffer buffer);
396 // Insert a mapping into clipboard_data_. 372 // Insert a mapping into clipboard_data_.
397 void InsertMapping(const char* key, char* data, size_t data_len); 373 void InsertMapping(const char* key, char* data, size_t data_len);
398 374
399 // Find the gtk clipboard for the passed buffer enum. 375 // Find the gtk clipboard for the passed buffer enum.
400 GtkClipboard* LookupBackingClipboard(Buffer clipboard) const; 376 GtkClipboard* LookupBackingClipboard(Buffer clipboard) const;
401 // Reads raw data from the specified clipboard with the given format type.
402 void ReadDataImpl(Buffer buffer,
403 const FormatType& format,
404 std::string* result) const;
405 377
406 TargetMap* clipboard_data_; 378 TargetMap* clipboard_data_;
407 GtkClipboard* clipboard_; 379 GtkClipboard* clipboard_;
408 GtkClipboard* primary_selection_; 380 GtkClipboard* primary_selection_;
409 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 381 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS)
410 private: 382 private:
411 // Reads raw data from the specified clipboard with the given format type.
412 void ReadDataImpl(Buffer buffer,
413 const FormatType& format,
414 std::string* result) const;
415 // We keep our implementation details private because otherwise we bring in 383 // We keep our implementation details private because otherwise we bring in
416 // the X11 headers and break chrome compile. 384 // the X11 headers and break chrome compile.
417 class AuraX11Details; 385 class AuraX11Details;
418 scoped_ptr<AuraX11Details> aurax11_details_; 386 scoped_ptr<AuraX11Details> aurax11_details_;
419 #endif 387 #endif
420 base::Callback<void(Buffer)> write_objects_callback_;
421 388
422 DISALLOW_COPY_AND_ASSIGN(Clipboard); 389 DISALLOW_COPY_AND_ASSIGN(Clipboard);
423 }; 390 };
424 391
425 } // namespace ui 392 } // namespace ui
426 393
427 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_ 394 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_
OLDNEW
« no previous file with comments | « content/public/browser/browser_context.h ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698