OLD | NEW |
| (Empty) |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/mus/clipboard/clipboard_impl.h" | |
6 | |
7 #include <string.h> | |
8 #include <utility> | |
9 | |
10 #include "base/macros.h" | |
11 #include "mojo/common/common_type_converters.h" | |
12 #include "mojo/public/cpp/bindings/array.h" | |
13 #include "mojo/public/cpp/bindings/string.h" | |
14 | |
15 using mojo::Array; | |
16 using mojo::Map; | |
17 using mojo::String; | |
18 | |
19 namespace mus { | |
20 namespace clipboard { | |
21 | |
22 // ClipboardData contains data copied to the Clipboard for a variety of formats. | |
23 // It mostly just provides APIs to cleanly access and manipulate this data. | |
24 class ClipboardImpl::ClipboardData { | |
25 public: | |
26 ClipboardData() : sequence_number_(0) {} | |
27 ~ClipboardData() {} | |
28 | |
29 uint64_t sequence_number() const { | |
30 return sequence_number_; | |
31 } | |
32 | |
33 Array<String> GetMimeTypes() const { | |
34 Array<String> types(data_types_.size()); | |
35 int i = 0; | |
36 for (auto it = data_types_.begin(); it != data_types_.end(); ++it, ++i) | |
37 types[i] = it->first; | |
38 | |
39 return types; | |
40 } | |
41 | |
42 void SetData(Map<String, Array<uint8_t>> data) { | |
43 sequence_number_++; | |
44 data_types_ = std::move(data); | |
45 } | |
46 | |
47 void GetData(const String& mime_type, Array<uint8_t>* data) const { | |
48 auto it = data_types_.find(mime_type); | |
49 if (it != data_types_.end()) | |
50 *data = it->second.Clone(); | |
51 } | |
52 | |
53 private: | |
54 uint64_t sequence_number_; | |
55 Map<String, Array<uint8_t>> data_types_; | |
56 | |
57 DISALLOW_COPY_AND_ASSIGN(ClipboardData); | |
58 }; | |
59 | |
60 ClipboardImpl::ClipboardImpl() { | |
61 for (int i = 0; i < kNumClipboards; ++i) | |
62 clipboard_state_[i].reset(new ClipboardData); | |
63 } | |
64 | |
65 ClipboardImpl::~ClipboardImpl() { | |
66 } | |
67 | |
68 void ClipboardImpl::AddBinding(mojom::ClipboardRequest request) { | |
69 bindings_.AddBinding(this, std::move(request)); | |
70 } | |
71 | |
72 void ClipboardImpl::GetSequenceNumber( | |
73 Clipboard::Type clipboard_type, | |
74 const GetSequenceNumberCallback& callback) { | |
75 callback.Run( | |
76 clipboard_state_[static_cast<int>(clipboard_type)]->sequence_number()); | |
77 } | |
78 | |
79 void ClipboardImpl::GetAvailableMimeTypes( | |
80 Clipboard::Type clipboard_type, | |
81 const GetAvailableMimeTypesCallback& callback) { | |
82 int clipboard_num = static_cast<int>(clipboard_type); | |
83 callback.Run(clipboard_state_[clipboard_num]->sequence_number(), | |
84 clipboard_state_[clipboard_num]->GetMimeTypes()); | |
85 } | |
86 | |
87 void ClipboardImpl::ReadClipboardData( | |
88 Clipboard::Type clipboard_type, | |
89 const String& mime_type, | |
90 const ReadClipboardDataCallback& callback) { | |
91 int clipboard_num = static_cast<int>(clipboard_type); | |
92 Array<uint8_t> mime_data(nullptr); | |
93 uint64_t sequence = clipboard_state_[clipboard_num]->sequence_number(); | |
94 clipboard_state_[clipboard_num]->GetData(mime_type, &mime_data); | |
95 callback.Run(sequence, std::move(mime_data)); | |
96 } | |
97 | |
98 void ClipboardImpl::WriteClipboardData( | |
99 Clipboard::Type clipboard_type, | |
100 Map<String, Array<uint8_t>> data, | |
101 const WriteClipboardDataCallback& callback) { | |
102 int clipboard_num = static_cast<int>(clipboard_type); | |
103 clipboard_state_[clipboard_num]->SetData(std::move(data)); | |
104 callback.Run(clipboard_state_[clipboard_num]->sequence_number()); | |
105 } | |
106 | |
107 } // namespace clipboard | |
108 } // namespace mus | |
OLD | NEW |