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

Side by Side Diff: mojo/public/bindings/sample/generated/sample_service.cc

Issue 53173008: Add mojom_bindings_generator.gypi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One more rename Created 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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 "mojo/public/bindings/sample/generated/sample_service.h"
6
7 #include "mojo/public/bindings/lib/message_builder.h"
8 #include "mojo/public/bindings/sample/generated/sample_service_internal.h"
9
10 namespace sample {
11 namespace {
12 const uint32_t kService_Frobinate_Name = 1;
13
14 #pragma pack(push, 1)
15 #if defined(__clang__)
16 #pragma clang diagnostic push
17 #pragma clang diagnostic ignored "-Wunused-private-field"
18 #endif
19 class Service_Frobinate_Params {
20 public:
21 static Service_Frobinate_Params* New(mojo::Buffer* buf) {
22 return new (buf->Allocate(sizeof(Service_Frobinate_Params)))
23 Service_Frobinate_Params();
24 }
25
26 void set_foo(Foo* foo) { foo_.ptr = foo; }
27 void set_baz(bool baz) { baz_ = baz; }
28 void set_port(mojo::Handle port) { port_ = port; }
29
30 const Foo* foo() const { return foo_.ptr; }
31 bool baz() const { return baz_; }
32 mojo::Handle port() const {
33 // NOTE: port is an optional field!
34 return _header_.num_fields >= 3 ? port_ : mojo::kInvalidHandle;
35 }
36
37 private:
38 friend class mojo::internal::ObjectTraits<Service_Frobinate_Params>;
39
40 Service_Frobinate_Params() {
41 _header_.num_bytes = sizeof(*this);
42 _header_.num_fields = 3;
43 }
44
45 mojo::internal::StructHeader _header_;
46 mojo::internal::StructPointer<Foo> foo_;
47 uint8_t baz_ : 1;
48 uint8_t _pad0_[3];
49 mojo::Handle port_;
50 };
51 MOJO_COMPILE_ASSERT(sizeof(Service_Frobinate_Params) == 24,
52 bad_sizeof_Service_Frobinate_Params);
53
54 const uint32_t kServiceClient_DidFrobinate_Name = 0;
55
56 class ServiceClient_DidFrobinate_Params {
57 public:
58 static ServiceClient_DidFrobinate_Params* New(mojo::Buffer* buf) {
59 return new (buf->Allocate(sizeof(ServiceClient_DidFrobinate_Params)))
60 ServiceClient_DidFrobinate_Params();
61 }
62
63 void set_result(int32_t result) { result_ = result; }
64
65 int32_t result() const { return result_; }
66
67 private:
68 friend class mojo::internal::ObjectTraits<ServiceClient_DidFrobinate_Params>;
69
70 ServiceClient_DidFrobinate_Params() {
71 _header_.num_bytes = sizeof(*this);
72 _header_.num_fields = 3;
73 }
74
75 mojo::internal::StructHeader _header_;
76 int32_t result_;
77 uint8_t _pad0_[4];
78 };
79 MOJO_COMPILE_ASSERT(sizeof(ServiceClient_DidFrobinate_Params) == 16,
80 bad_sizeof_ServiceClient_DidFrobinate_Params);
81
82 #if defined(__clang__)
83 #pragma clang diagnostic pop
84 #endif
85 #pragma pack(pop)
86
87 } // namespace
88
89 // static
90 Bar* Bar::New(mojo::Buffer* buf) {
91 return new (buf->Allocate(sizeof(Bar))) Bar();
92 }
93
94 Bar::Bar() {
95 _header_.num_bytes = sizeof(*this);
96 _header_.num_fields = 3;
97 }
98
99 // static
100 Foo* Foo::New(mojo::Buffer* buf) {
101 return new (buf->Allocate(sizeof(Foo))) Foo();
102 }
103
104 Foo::Foo() {
105 _header_.num_bytes = sizeof(*this);
106 _header_.num_fields = 10;
107 }
108
109 ServiceProxy::ServiceProxy(mojo::MessageReceiver* receiver)
110 : receiver_(receiver) {
111 }
112
113 void ServiceProxy::Frobinate(const Foo* foo, bool baz, mojo::Handle port) {
114 size_t payload_size =
115 mojo::internal::Align(sizeof(Service_Frobinate_Params));
116 payload_size += mojo::internal::ComputeSizeOf(foo);
117
118 mojo::MessageBuilder builder(kService_Frobinate_Name, payload_size);
119
120 // We now go about allocating the anonymous Frobinate_Params struct. It
121 // holds the parameters to the Frobinate message.
122 //
123 // Notice how foo is cloned. This causes a copy of foo to be generated
124 // within the same buffer as the Frobinate_Params struct. That's what we
125 // need in order to generate a contiguous blob of message data.
126
127 Service_Frobinate_Params* params =
128 Service_Frobinate_Params::New(builder.buffer());
129 params->set_foo(mojo::internal::Clone(foo, builder.buffer()));
130 params->set_baz(baz);
131 params->set_port(port);
132
133 // NOTE: If foo happened to be a graph with cycles, then Clone would not
134 // have returned.
135
136 // Next step is to encode pointers and handles so that messages become
137 // hermetic. Pointers become offsets and handles becomes indices into the
138 // handles array.
139 mojo::Message message;
140 mojo::internal::EncodePointersAndHandles(params, &message.handles);
141
142 // Finally, we get the generated message data, and forward it to the
143 // receiver.
144 message.data = builder.Finish();
145
146 receiver_->Accept(&message);
147 }
148
149 bool ServiceStub::Accept(mojo::Message* message) {
150 switch (message->data->header.name) {
151 case kService_Frobinate_Name: {
152 Service_Frobinate_Params* params =
153 reinterpret_cast<Service_Frobinate_Params*>(
154 message->data->payload);
155
156 if (!mojo::internal::DecodePointersAndHandles(params, *message))
157 return false;
158
159 Frobinate(params->foo(), params->baz(), params->port());
160 break;
161 }
162 }
163 return true;
164 }
165
166 ServiceClientProxy::ServiceClientProxy(mojo::MessageReceiver* receiver)
167 : receiver_(receiver) {
168 }
169
170 void ServiceClientProxy::DidFrobinate(int32_t result) {
171 size_t payload_size =
172 mojo::internal::Align(sizeof(ServiceClient_DidFrobinate_Params));
173
174
175 mojo::MessageBuilder builder(kServiceClient_DidFrobinate_Name, payload_size);
176
177 ServiceClient_DidFrobinate_Params* params =
178 ServiceClient_DidFrobinate_Params::New(builder.buffer());
179
180 params->set_result(result);
181
182 mojo::Message message;
183 mojo::internal::EncodePointersAndHandles(params, &message.handles);
184
185 message.data = builder.Finish();
186
187 receiver_->Accept(&message);
188 }
189
190
191 bool ServiceClientStub::Accept(mojo::Message* message) {
192 switch (message->data->header.name) {
193 case kServiceClient_DidFrobinate_Name: {
194 ServiceClient_DidFrobinate_Params* params =
195 reinterpret_cast<ServiceClient_DidFrobinate_Params*>(
196 message->data->payload);
197
198 if (!mojo::internal::DecodePointersAndHandles(params, *message))
199 return false;
200 DidFrobinate(params->result());
201 break;
202 }
203
204 }
205 return true;
206 }
207
208 } // namespace sample
209
210 namespace mojo {
211 namespace internal {
212
213 // static
214 size_t ObjectTraits<sample::Bar>::ComputeSizeOf(
215 const sample::Bar* bar) {
216 return sizeof(*bar);
217 }
218
219 // static
220 sample::Bar* ObjectTraits<sample::Bar>::Clone(
221 const sample::Bar* bar, Buffer* buf) {
222 sample::Bar* clone = sample::Bar::New(buf);
223 memcpy(clone, bar, sizeof(*bar));
224 return clone;
225 }
226
227 // static
228 void ObjectTraits<sample::Bar>::EncodePointersAndHandles(
229 sample::Bar* bar, std::vector<Handle>* handles) {
230 }
231
232 // static
233 bool ObjectTraits<sample::Bar>::DecodePointersAndHandles(
234 sample::Bar* bar, const Message& message) {
235 return true;
236 }
237
238 // static
239 size_t ObjectTraits<sample::Foo>::ComputeSizeOf(
240 const sample::Foo* foo) {
241 return sizeof(*foo) +
242 mojo::internal::ComputeSizeOf(foo->bar()) +
243 mojo::internal::ComputeSizeOf(foo->data()) +
244 mojo::internal::ComputeSizeOf(foo->extra_bars()) +
245 mojo::internal::ComputeSizeOf(foo->name()) +
246 mojo::internal::ComputeSizeOf(foo->files());
247 }
248
249 // static
250 sample::Foo* ObjectTraits<sample::Foo>::Clone(
251 const sample::Foo* foo, Buffer* buf) {
252 sample::Foo* clone = sample::Foo::New(buf);
253 memcpy(clone, foo, sizeof(*foo));
254
255 clone->set_bar(mojo::internal::Clone(foo->bar(), buf));
256 clone->set_data(mojo::internal::Clone(foo->data(), buf));
257 clone->set_extra_bars(mojo::internal::Clone(foo->extra_bars(), buf));
258 clone->set_name(mojo::internal::Clone(foo->name(), buf));
259 clone->set_files(mojo::internal::Clone(foo->files(), buf));
260
261 return clone;
262 }
263
264 // static
265 void ObjectTraits<sample::Foo>::EncodePointersAndHandles(
266 sample::Foo* foo, std::vector<Handle>* handles) {
267 Encode(&foo->bar_, handles);
268 Encode(&foo->data_, handles);
269 Encode(&foo->extra_bars_, handles);
270 Encode(&foo->name_, handles);
271 Encode(&foo->files_, handles);
272 }
273
274 // static
275 bool ObjectTraits<sample::Foo>::DecodePointersAndHandles(
276 sample::Foo* foo, const Message& message) {
277 if (!Decode(&foo->bar_, message))
278 return false;
279 if (!Decode(&foo->data_, message))
280 return false;
281 if (foo->_header_.num_fields >= 8) {
282 if (!Decode(&foo->extra_bars_, message))
283 return false;
284 }
285 if (foo->_header_.num_fields >= 9) {
286 if (!Decode(&foo->name_, message))
287 return false;
288 }
289 if (foo->_header_.num_fields >= 10) {
290 if (!Decode(&foo->files_, message))
291 return false;
292 }
293
294 // TODO: validate
295 return true;
296 }
297
298 template <>
299 class ObjectTraits<sample::Service_Frobinate_Params> {
300 public:
301 static void EncodePointersAndHandles(
302 sample::Service_Frobinate_Params* params,
303 std::vector<Handle>* handles) {
304 Encode(&params->foo_, handles);
305 EncodeHandle(&params->port_, handles);
306 }
307
308 static bool DecodePointersAndHandles(
309 sample::Service_Frobinate_Params* params,
310 const Message& message){
311 if (!Decode(&params->foo_, message))
312 return false;
313 if (params->_header_.num_fields >= 3) {
314 if (!DecodeHandle(&params->port_, message.handles))
315 return false;
316 }
317
318 // TODO: validate
319 return true;
320 }
321 };
322
323 template <>
324 class ObjectTraits<sample::ServiceClient_DidFrobinate_Params> {
325 public:
326 static void EncodePointersAndHandles(
327 sample::ServiceClient_DidFrobinate_Params* params,
328 std::vector<Handle>* handles) {
329 }
330
331 static bool DecodePointersAndHandles(
332 sample::ServiceClient_DidFrobinate_Params* params,
333 const Message& message) {
334 return true;
335 }
336 };
337
338 } // namespace internal
339 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698