Chromium Code Reviews| 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())) |