Index: ui/base/clipboard/clipboard.cc |
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc |
index 2473723e35939c99a4f1190be70a24b5df851f44..14b2f19f6039bc10dbedfe91d0b3dd8a23f521cb 100644 |
--- a/ui/base/clipboard/clipboard.cc |
+++ b/ui/base/clipboard/clipboard.cc |
@@ -92,6 +92,13 @@ static base::LazyInstance<ClipboardMap> g_clipboard_map = |
static base::LazyInstance<base::Lock>::Leaky |
g_clipboard_map_lock = LAZY_INSTANCE_INITIALIZER; |
+const std::size_t kSourceTagSize = sizeof(Clipboard::SourceTag); |
+ |
+union SourceTag2BinaryHelper { |
+ Clipboard::SourceTag tag; |
+ char bytes[kSourceTagSize]; |
dcheng
2013/02/06 22:31:40
Nit: uint8 instead of char for byte strings.
vasilii
2013/02/07 17:30:05
Done.
|
+}; |
+ |
} // namespace |
const char Clipboard::kMimeTypeText[] = "text/plain"; |
@@ -102,6 +109,22 @@ const char Clipboard::kMimeTypeRTF[] = "text/rtf"; |
const char Clipboard::kMimeTypePNG[] = "image/png"; |
// static |
+Clipboard::ObjectMapParam Clipboard::SourceTag2Binary(SourceTag tag) { |
+ SourceTag2BinaryHelper helper; |
+ helper.tag = tag; |
+ return ObjectMapParam(helper.bytes, helper.bytes + kSourceTagSize); |
+} |
+ |
+// static |
+Clipboard::SourceTag Clipboard::Binary2SourceTag(const std::string& binary) { |
+ if (binary.size() != kSourceTagSize) |
+ return SourceTag(); |
+ SourceTag2BinaryHelper helper; |
+ memcpy(helper.bytes, binary.c_str(), kSourceTagSize); |
+ return helper.tag; |
+} |
+ |
+// static |
void Clipboard::SetAllowedThreads( |
const std::vector<base::PlatformThreadId>& allowed_threads) { |
base::AutoLock lock(g_clipboard_map_lock.Get()); |
@@ -153,6 +176,15 @@ void Clipboard::DestroyClipboardForCurrentThread() { |
} |
} |
+void Clipboard::WriteObjects(Buffer buffer, |
+ const ObjectMap& objects, |
+ SourceTag tag) { |
+ WriteObjectsImpl(buffer, objects, tag); |
+ FOR_EACH_OBSERVER(ClipboardObserverForTesting, |
+ observer_list_, |
+ OnWriteObjects(buffer)); |
+} |
+ |
void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { |
// All types apart from CBF_WEBKIT need at least 1 non-empty param. |
if (type != CBF_WEBKIT && (params.empty() || params[0].empty())) |