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. |