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) { |