Chromium Code Reviews| Index: ui/base/clipboard/clipboard_chromeos.cc |
| diff --git a/ui/base/clipboard/clipboard_chromeos.cc b/ui/base/clipboard/clipboard_chromeos.cc |
| index d810c6fe27ea74a8ca7808dc197420f880e081dc..1fb7e3bec24e8977efcaa8e8805f3333c51f94c0 100644 |
| --- a/ui/base/clipboard/clipboard_chromeos.cc |
| +++ b/ui/base/clipboard/clipboard_chromeos.cc |
| @@ -34,6 +34,7 @@ enum AuraClipboardFormat { |
| BITMAP = 1 << 4, |
| CUSTOM = 1 << 5, |
| WEB = 1 << 6, |
| + SOURCETAG = 1 << 7, |
| }; |
| // ClipboardData contains data copied to the Clipboard for a variety of formats. |
| @@ -42,6 +43,7 @@ class ClipboardData { |
| public: |
| ClipboardData() |
| : bitmap_data_(), |
| + source_tag_(), |
| web_smart_paste_(false), |
| format_(0) {} |
| @@ -118,6 +120,12 @@ class ClipboardData { |
| format_ |= WEB; |
| } |
| + Clipboard::SourceTag source_tag() const { return source_tag_; } |
| + void set_source_tag(Clipboard::SourceTag tag) { |
| + source_tag_ = tag; |
| + format_ |= SOURCETAG; |
| + } |
| + |
| private: |
| // Plain text in UTF8 format. |
| std::string text_; |
| @@ -144,6 +152,9 @@ class ClipboardData { |
| std::string custom_data_format_; |
| std::string custom_data_data_; |
| + // SourceTag. |
| + Clipboard::SourceTag source_tag_; |
| + |
| // WebKit smart paste data. |
| bool web_smart_paste_; |
| @@ -296,6 +307,13 @@ class AuraClipboard { |
| *result = data->custom_data_data(); |
| } |
| + Clipboard::SourceTag ReadSourceTag() const { |
| + if (!HasFormat(SOURCETAG)) |
| + return Clipboard::SourceTag(); |
| + const ClipboardData* data = GetData(); |
| + return data->source_tag(); |
| + } |
| + |
| // Writes |data| to the top of the clipboard stack. |
| void WriteData(ClipboardData* data) { |
| DCHECK(data); |
| @@ -399,6 +417,11 @@ class ClipboardDataBuilder { |
| data->SetCustomData(format, std::string(data_data, data_len)); |
| } |
| + static void WriteSourceTag(Clipboard::SourceTag tag) { |
| + ClipboardData* data = GetCurrentData(); |
| + data->set_source_tag(tag); |
| + } |
| + |
| private: |
| static ClipboardData* GetCurrentData() { |
| if (!current_data_) |
| @@ -448,13 +471,16 @@ Clipboard::~Clipboard() { |
| DeleteClipboard(); |
| } |
| -void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) { |
| +void Clipboard::WriteObjectsImpl(Buffer buffer, |
| + const ObjectMap& objects, |
| + SourceTag tag) { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(IsValidBuffer(buffer)); |
| for (ObjectMap::const_iterator iter = objects.begin(); |
| iter != objects.end(); ++iter) { |
| DispatchObject(static_cast<ObjectType>(iter->first), iter->second); |
| } |
| + WriteSourceTag(tag); |
| ClipboardDataBuilder::CommitToClipboard(); |
| } |
| @@ -561,6 +587,11 @@ void Clipboard::ReadData(const FormatType& format, std::string* result) const { |
| GetClipboard()->ReadData(format.ToString(), result); |
| } |
| +Clipboard::SourceTag Clipboard::ReadSourceTag() const { |
|
dcheng
2013/02/06 22:31:40
Can we just use ReadData() and WriteData() like th
vasilii
2013/02/07 17:30:05
Unfortunately no. ClipboardData has an explicit me
dcheng
2013/02/08 05:42:19
... yikes. That's a bug. This is fine for now, but
|
| + DCHECK(CalledOnValidThread()); |
| + return GetClipboard()->ReadSourceTag(); |
| +} |
| + |
| uint64 Clipboard::GetSequenceNumber(Buffer buffer) { |
| DCHECK(CalledOnValidThread()); |
| return GetClipboard()->GetNumClipboardEntries(); |
| @@ -602,6 +633,11 @@ void Clipboard::WriteData(const FormatType& format, |
| ClipboardDataBuilder::WriteData(format.ToString(), data_data, data_len); |
| } |
| +void Clipboard::WriteSourceTag(SourceTag tag) { |
| + if (tag != SourceTag()) |
| + ClipboardDataBuilder::WriteSourceTag(tag); |
| +} |
| + |
| // static |
| Clipboard::FormatType Clipboard::GetFormatType( |
| const std::string& format_string) { |