Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(621)

Side by Side Diff: services/ui/clipboard/clipboard_impl.cc

Issue 2504403004: Mojo C++ bindings: switch the generated code of clipboard.mojom to use STL types. (Closed)
Patch Set: . Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/clipboard/clipboard_impl.h" 5 #include "services/ui/clipboard/clipboard_impl.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "mojo/common/common_type_converters.h" 11 #include "mojo/common/common_type_converters.h"
12 #include "mojo/public/cpp/bindings/array.h" 12 #include "mojo/public/cpp/bindings/array.h"
13 #include "mojo/public/cpp/bindings/string.h" 13 #include "mojo/public/cpp/bindings/string.h"
14 14
15 using mojo::Array;
16 using mojo::Map;
17 using mojo::String;
18
19 namespace ui { 15 namespace ui {
20 namespace clipboard { 16 namespace clipboard {
21 17
18 using DataMap = std::unordered_map<std::string, std::vector<uint8_t>>;
19
22 // ClipboardData contains data copied to the Clipboard for a variety of formats. 20 // 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. 21 // It mostly just provides APIs to cleanly access and manipulate this data.
24 class ClipboardImpl::ClipboardData { 22 class ClipboardImpl::ClipboardData {
25 public: 23 public:
26 ClipboardData() : sequence_number_(0) {} 24 ClipboardData() : sequence_number_(0) {}
27 ~ClipboardData() {} 25 ~ClipboardData() {}
28 26
29 uint64_t sequence_number() const { 27 uint64_t sequence_number() const {
30 return sequence_number_; 28 return sequence_number_;
31 } 29 }
32 30
33 Array<String> GetMimeTypes() const { 31 std::vector<std::string> GetMimeTypes() const {
34 Array<String> types(data_types_.size()); 32 std::vector<std::string> types(data_types_.size());
35 int i = 0; 33 int i = 0;
36 for (auto it = data_types_.begin(); it != data_types_.end(); ++it, ++i) 34 for (auto it = data_types_.begin(); it != data_types_.end(); ++it, ++i)
37 types[i] = it->first; 35 types[i] = it->first;
38 36
39 return types; 37 return types;
40 } 38 }
41 39
42 void SetData(Map<String, Array<uint8_t>> data) { 40 void SetData(const base::Optional<DataMap>& data) {
43 sequence_number_++; 41 sequence_number_++;
44 data_types_ = std::move(data); 42 data_types_ = data.value_or(DataMap());
45 } 43 }
46 44
47 void GetData(const String& mime_type, Array<uint8_t>* data) const { 45 void GetData(const std::string& mime_type,
46 base::Optional<std::vector<uint8_t>>* data) const {
48 auto it = data_types_.find(mime_type); 47 auto it = data_types_.find(mime_type);
49 if (it != data_types_.end()) 48 if (it != data_types_.end())
50 *data = it->second.Clone(); 49 data->emplace(it->second);
51 } 50 }
52 51
53 private: 52 private:
54 uint64_t sequence_number_; 53 uint64_t sequence_number_;
55 Map<String, Array<uint8_t>> data_types_; 54 DataMap data_types_;
56 55
57 DISALLOW_COPY_AND_ASSIGN(ClipboardData); 56 DISALLOW_COPY_AND_ASSIGN(ClipboardData);
58 }; 57 };
59 58
60 ClipboardImpl::ClipboardImpl() { 59 ClipboardImpl::ClipboardImpl() {
61 for (int i = 0; i < kNumClipboards; ++i) 60 for (int i = 0; i < kNumClipboards; ++i)
62 clipboard_state_[i].reset(new ClipboardData); 61 clipboard_state_[i].reset(new ClipboardData);
63 } 62 }
64 63
65 ClipboardImpl::~ClipboardImpl() { 64 ClipboardImpl::~ClipboardImpl() {
(...skipping 13 matching lines...) Expand all
79 void ClipboardImpl::GetAvailableMimeTypes( 78 void ClipboardImpl::GetAvailableMimeTypes(
80 Clipboard::Type clipboard_type, 79 Clipboard::Type clipboard_type,
81 const GetAvailableMimeTypesCallback& callback) { 80 const GetAvailableMimeTypesCallback& callback) {
82 int clipboard_num = static_cast<int>(clipboard_type); 81 int clipboard_num = static_cast<int>(clipboard_type);
83 callback.Run(clipboard_state_[clipboard_num]->sequence_number(), 82 callback.Run(clipboard_state_[clipboard_num]->sequence_number(),
84 clipboard_state_[clipboard_num]->GetMimeTypes()); 83 clipboard_state_[clipboard_num]->GetMimeTypes());
85 } 84 }
86 85
87 void ClipboardImpl::ReadClipboardData( 86 void ClipboardImpl::ReadClipboardData(
88 Clipboard::Type clipboard_type, 87 Clipboard::Type clipboard_type,
89 const String& mime_type, 88 const std::string& mime_type,
90 const ReadClipboardDataCallback& callback) { 89 const ReadClipboardDataCallback& callback) {
91 int clipboard_num = static_cast<int>(clipboard_type); 90 int clipboard_num = static_cast<int>(clipboard_type);
92 Array<uint8_t> mime_data(nullptr); 91 base::Optional<std::vector<uint8_t>> mime_data;
93 uint64_t sequence = clipboard_state_[clipboard_num]->sequence_number(); 92 uint64_t sequence = clipboard_state_[clipboard_num]->sequence_number();
94 clipboard_state_[clipboard_num]->GetData(mime_type, &mime_data); 93 clipboard_state_[clipboard_num]->GetData(mime_type, &mime_data);
95 callback.Run(sequence, std::move(mime_data)); 94 callback.Run(sequence, std::move(mime_data));
96 } 95 }
97 96
98 void ClipboardImpl::WriteClipboardData( 97 void ClipboardImpl::WriteClipboardData(
99 Clipboard::Type clipboard_type, 98 Clipboard::Type clipboard_type,
100 Map<String, Array<uint8_t>> data, 99 const base::Optional<DataMap>& data,
101 const WriteClipboardDataCallback& callback) { 100 const WriteClipboardDataCallback& callback) {
102 int clipboard_num = static_cast<int>(clipboard_type); 101 int clipboard_num = static_cast<int>(clipboard_type);
103 clipboard_state_[clipboard_num]->SetData(std::move(data)); 102 clipboard_state_[clipboard_num]->SetData(data);
104 callback.Run(clipboard_state_[clipboard_num]->sequence_number()); 103 callback.Run(clipboard_state_[clipboard_num]->sequence_number());
105 } 104 }
106 105
107 } // namespace clipboard 106 } // namespace clipboard
108 } // namespace ui 107 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698