Index: ui/base/clipboard/clipboard_mac.mm |
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm |
index da915e3c58017f8303b022349846f89d8e8d4b0e..a6d92e50732aa9ef19b74566091559ecfc06ed29 100644 |
--- a/ui/base/clipboard/clipboard_mac.mm |
+++ b/ui/base/clipboard/clipboard_mac.mm |
@@ -26,6 +26,9 @@ namespace ui { |
namespace { |
+// Source tag format type. |
+NSString* const kSourceTagPboardType = @"org.chromium.source-tag-data"; |
+ |
// Would be nice if this were in UTCoreTypes.h, but it isn't |
NSString* const kUTTypeURLName = @"public.url-name"; |
@@ -90,7 +93,9 @@ Clipboard::~Clipboard() { |
DCHECK(CalledOnValidThread()); |
} |
-void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) { |
+void Clipboard::WriteObjectsImpl(Buffer buffer, |
+ const ObjectMap& objects, |
+ SourceTag tag) { |
DCHECK(CalledOnValidThread()); |
DCHECK_EQ(buffer, BUFFER_STANDARD); |
@@ -101,6 +106,7 @@ void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) { |
iter != objects.end(); ++iter) { |
DispatchObject(static_cast<ObjectType>(iter->first), iter->second); |
} |
+ WriteSourceTag(tag); |
} |
void Clipboard::WriteText(const char* text_data, size_t text_len) { |
@@ -212,6 +218,13 @@ void Clipboard::WriteData(const FormatType& format, |
forType:format.ToNSString()]; |
} |
+void Clipboard::WriteSourceTag(SourceTag tag) { |
+ if (tag != SourceTag()) { |
+ ObjectMapParam binary = SourceTag2Binary(tag); |
+ WriteData(GetSourceTagFormatType(), &binary[0], binary.size()); |
+ } |
+} |
+ |
// Write an extra flavor that signifies WebKit was the last to modify the |
// pasteboard. This flavor has no data. |
void Clipboard::WriteWebSmartPaste() { |
@@ -410,6 +423,13 @@ void Clipboard::ReadData(const FormatType& format, std::string* result) const { |
result->assign(static_cast<const char*>([data bytes]), [data length]); |
} |
+Clipboard::SourceTag Clipboard::ReadSourceTag(Buffer buffer) const { |
+ DCHECK_EQ(buffer, BUFFER_STANDARD); |
+ std::string result; |
+ ReadData(GetSourceTagFormatType(), &result); |
+ return Binary2SourceTag(result); |
+} |
+ |
// static |
Clipboard::FormatType Clipboard::GetFormatType( |
const std::string& format_string) { |
@@ -485,4 +505,10 @@ const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() { |
return type; |
} |
+// static |
+const Clipboard::FormatType& Clipboard::GetSourceTagFormatType() { |
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kSourceTagPboardType)); |
+ return type; |
+} |
+ |
} // namespace ui |