| Index: ui/base/clipboard/clipboard.cc
|
| diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc
|
| index 2473723e35939c99a4f1190be70a24b5df851f44..e384c6528d70dbc4bdd01ad8832b5704d1f3864e 100644
|
| --- a/ui/base/clipboard/clipboard.cc
|
| +++ b/ui/base/clipboard/clipboard.cc
|
| @@ -92,6 +92,15 @@ 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);
|
| +
|
| +// The union serves to easily convert SourceTag into its binary representation
|
| +// and vice versa.
|
| +union SourceTag2BinaryHelper {
|
| + Clipboard::SourceTag tag;
|
| + uint8 bytes[kSourceTagSize];
|
| +};
|
| +
|
| } // namespace
|
|
|
| const char Clipboard::kMimeTypeText[] = "text/plain";
|
| @@ -102,6 +111,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 +180,14 @@ void Clipboard::DestroyClipboardForCurrentThread() {
|
| }
|
| }
|
|
|
| +void Clipboard::WriteObjects(Buffer buffer,
|
| + const ObjectMap& objects,
|
| + SourceTag tag) {
|
| + WriteObjectsImpl(buffer, objects, tag);
|
| + if (!write_objects_callback_.is_null())
|
| + write_objects_callback_.Run(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()))
|
|
|