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

Unified Diff: ui/base/clipboard/clipboard.h

Issue 8801038: Make Clipboard::FormatType an opaque handle type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/content_common.gypi ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/clipboard/clipboard.h
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h
index 39cb5d4b27c4b79862fd93015d6d0eb5d2a5293a..be8d46061c2df72ecaa042e020df7e0ce9679af9 100644
--- a/ui/base/clipboard/clipboard.h
+++ b/ui/base/clipboard/clipboard.h
@@ -16,6 +16,10 @@
#include "base/string16.h"
#include "ui/base/ui_export.h"
+#if defined(TOOLKIT_USES_GTK)
+#include <gdk/gdk.h>
+#endif
+
namespace gfx {
class Size;
}
@@ -27,11 +31,54 @@ class SkBitmap;
typedef struct _GtkClipboard GtkClipboard;
#endif
+#ifdef __OBJC__
+@class NSString;
+#else
+class NSString;
+#endif
+
namespace ui {
class UI_EXPORT Clipboard {
public:
- typedef std::string FormatType;
+ // Platform neutral holder for native data representation of a clipboard type.
+ struct UI_EXPORT FormatType {
+ FormatType();
+ ~FormatType();
+
+ std::string Serialize() const;
+ static FormatType Deserialize(const std::string& serialization);
+
+ private:
+ friend class Clipboard;
+
+ bool Equals(const FormatType& other) const;
+
+#if defined(OS_WIN)
+ explicit FormatType(UINT native_format);
+ UINT ToUINT() const { return data_; }
+ UINT data_;
+#elif defined(USE_AURA)
+ explicit FormatType(const std::string& native_format);
+ const std::string& ToString() const { return data_; }
+ std::string data_;
+#elif defined(TOOLKIT_USES_GTK)
+ explicit FormatType(const std::string& native_format);
+ explicit FormatType(const GdkAtom& native_format);
+ const GdkAtom& ToGdkAtom() const { return data_; }
+ GdkAtom data_;
+#elif defined(OS_MACOSX)
+ public:
+ FormatType(const FormatType& other);
+ FormatType& operator=(const FormatType& other);
+ private:
+ explicit FormatType(NSString* native_format);
+ NSString* ToNSString() const { return data_; }
+ NSString* data_;
+#else
+#error No FormatType definition.
+#endif
+ };
// ObjectType designates the type of data to be stored in the clipboard. This
// designation is shared across all OSes. The system-specific designation
@@ -132,11 +179,6 @@ class UI_EXPORT Clipboard {
// Tests whether the clipboard contains a certain format
bool IsFormatAvailable(const FormatType& format, Buffer buffer) const;
- // As above, but instead of interpreting |format| by some platform-specific
- // definition, interpret it as a literal MIME type.
- bool IsFormatAvailableByString(const std::string& format,
- Buffer buffer) const;
-
void ReadAvailableTypes(Buffer buffer, std::vector<string16>* types,
bool* contains_filenames) const;
@@ -170,23 +212,26 @@ class UI_EXPORT Clipboard {
// Reads raw data from the clipboard with the given format type. Stores result
// as a byte vector.
- // TODO(dcheng): Due to platform limitations on Windows, we should make sure
- // format is never controlled by the user.
- void ReadData(const std::string& format, std::string* result) const;
-
- // Get format Identifiers for various types.
- static FormatType GetUrlFormatType();
- static FormatType GetUrlWFormatType();
- static FormatType GetMozUrlFormatType();
- static FormatType GetPlainTextFormatType();
- static FormatType GetPlainTextWFormatType();
- static FormatType GetFilenameFormatType();
- static FormatType GetFilenameWFormatType();
- static FormatType GetWebKitSmartPasteFormatType();
+ void ReadData(const FormatType& format, std::string* result) const;
+
+ // Gets the FormatType corresponding to an arbitrary format string,
+ // registering it with the system if needed. Due to Windows/Linux
+ // limitiations, |format_string| must never be controlled by the user.
+ static FormatType GetFormatType(const std::string& format_string);
+
+ // Get format identifiers for various types.
+ static const FormatType& GetUrlFormatType();
+ static const FormatType& GetUrlWFormatType();
+ static const FormatType& GetMozUrlFormatType();
+ static const FormatType& GetPlainTextFormatType();
+ static const FormatType& GetPlainTextWFormatType();
+ static const FormatType& GetFilenameFormatType();
+ static const FormatType& GetFilenameWFormatType();
+ static const FormatType& GetWebKitSmartPasteFormatType();
// Win: MS HTML Format, Other: Generic HTML format
- static FormatType GetHtmlFormatType();
- static FormatType GetBitmapFormatType();
- static FormatType GetWebCustomDataFormatType();
+ static const FormatType& GetHtmlFormatType();
+ static const FormatType& GetBitmapFormatType();
+ static const FormatType& GetWebCustomDataFormatType();
// Embeds a pointer to a SharedMemory object pointed to by |bitmap_handle|
// belonging to |process| into a shared bitmap [CBF_SMBITMAP] slot in
@@ -198,10 +243,10 @@ class UI_EXPORT Clipboard {
base::ProcessHandle process);
#if defined(OS_WIN)
// Firefox text/html
- static FormatType GetTextHtmlFormatType();
- static FormatType GetCFHDropFormatType();
- static FormatType GetFileDescriptorFormatType();
- static FormatType GetFileContentFormatZeroType();
+ static const FormatType& GetTextHtmlFormatType();
+ static const FormatType& GetCFHDropFormatType();
+ static const FormatType& GetFileDescriptorFormatType();
+ static const FormatType& GetFileContentFormatZeroType();
#endif
private:
@@ -226,9 +271,9 @@ class UI_EXPORT Clipboard {
void WriteBitmap(const char* pixel_data, const char* size_data);
- // |format_name| is an ASCII string and should be NULL-terminated.
- void WriteData(const char* format_name, size_t format_len,
- const char* data_data, size_t data_len);
+ void WriteData(const FormatType& format,
+ const char* data_data,
+ size_t data_len);
#if defined(OS_WIN)
void WriteBitmapFromHandle(HBITMAP source_hbitmap,
const gfx::Size& size);
@@ -262,7 +307,7 @@ class UI_EXPORT Clipboard {
// contents of clipboard_data_.
public:
- typedef std::map<FormatType, std::pair<char*, size_t> > TargetMap;
+ typedef std::map<std::string, std::pair<char*, size_t> > TargetMap;
private:
// Write changes to gtk clipboard.
« no previous file with comments | « content/content_common.gypi ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698