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..ac670ed9311ef13519156e3ad874dc2a5139bcd9 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 { |
|
Jói
2013/02/08 10:37:32
Suggest documenting that a union is used as a pick
vasilii
2013/02/08 12:37:12
Done.
|
| + Clipboard::SourceTag tag; |
| + uint8 bytes[kSourceTagSize]; |
| +}; |
| + |
| } // namespace |
| const char Clipboard::kMimeTypeText[] = "text/plain"; |
| @@ -102,6 +109,24 @@ const char Clipboard::kMimeTypeRTF[] = "text/rtf"; |
| const char Clipboard::kMimeTypePNG[] = "image/png"; |
| // static |
| +Clipboard::ObjectMapParam Clipboard::SourceTag2Binary(SourceTag tag) { |
| + SourceTag2BinaryHelper helper; |
| + helper.tag = tag; |
| + std::vector<char> bytes(kSourceTagSize); |
| + memcpy(&bytes[0], helper.bytes, kSourceTagSize); |
| + return bytes; |
| +} |
| + |
| +// 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 +178,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())) |