summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-06 17:31:32 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-06 17:31:32 +0000
commitcbf932bb18756d3387c540d34232b1582ecabcd9 (patch)
tree05e056dbcebeec46ad479f1160bc54a5850f7062 /mojo
parentc0f66510a3dae5a7724b1063109863972f3dc34c (diff)
downloadchromium_src-cbf932bb18756d3387c540d34232b1582ecabcd9.zip
chromium_src-cbf932bb18756d3387c540d34232b1582ecabcd9.tar.gz
chromium_src-cbf932bb18756d3387c540d34232b1582ecabcd9.tar.bz2
Simpler bindings, fewer files!
R=davemoore@chromium.org Review URL: https://codereview.chromium.org/60803002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233283 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
-rw-r--r--mojo/mojo.gyp14
-rw-r--r--mojo/public/bindings/sample/generated/sample_bar.cc19
-rw-r--r--mojo/public/bindings/sample/generated/sample_bar.h44
-rw-r--r--mojo/public/bindings/sample/generated/sample_bar_serialization.cc40
-rw-r--r--mojo/public/bindings/sample/generated/sample_bar_serialization.h31
-rw-r--r--mojo/public/bindings/sample/generated/sample_foo.cc19
-rw-r--r--mojo/public/bindings/sample/generated/sample_foo.h81
-rw-r--r--mojo/public/bindings/sample/generated/sample_foo_serialization.cc76
-rw-r--r--mojo/public/bindings/sample/generated/sample_service.cc266
-rw-r--r--mojo/public/bindings/sample/generated/sample_service.h114
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_internal.h (renamed from mojo/public/bindings/sample/generated/sample_foo_serialization.h)24
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_proxy.cc55
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_proxy.h26
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_serialization.cc53
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_serialization.h73
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_stub.cc28
-rw-r--r--mojo/public/bindings/sample/generated/sample_service_stub.h20
-rw-r--r--mojo/public/bindings/sample/sample_test.cc4
18 files changed, 398 insertions, 589 deletions
diff --git a/mojo/mojo.gyp b/mojo/mojo.gyp
index 1ae37e8..607a362 100644
--- a/mojo/mojo.gyp
+++ b/mojo/mojo.gyp
@@ -266,19 +266,9 @@
'mojo_bindings',
],
'sources': [
- 'public/bindings/sample/generated/sample_bar.cc',
- 'public/bindings/sample/generated/sample_bar.h',
- 'public/bindings/sample/generated/sample_bar_serialization.cc',
- 'public/bindings/sample/generated/sample_bar_serialization.h',
- 'public/bindings/sample/generated/sample_foo.cc',
- 'public/bindings/sample/generated/sample_foo.h',
- 'public/bindings/sample/generated/sample_foo_serialization.cc',
- 'public/bindings/sample/generated/sample_foo_serialization.h',
+ 'public/bindings/sample/generated/sample_service.cc',
'public/bindings/sample/generated/sample_service.h',
- 'public/bindings/sample/generated/sample_service_proxy.cc',
- 'public/bindings/sample/generated/sample_service_serialization.cc',
- 'public/bindings/sample/generated/sample_service_serialization.h',
- 'public/bindings/sample/generated/sample_service_stub.cc',
+ 'public/bindings/sample/generated/sample_service_internal.h',
'public/bindings/sample/sample_test.cc',
],
},
diff --git a/mojo/public/bindings/sample/generated/sample_bar.cc b/mojo/public/bindings/sample/generated/sample_bar.cc
deleted file mode 100644
index e4f2daf..0000000
--- a/mojo/public/bindings/sample/generated/sample_bar.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_bar.h"
-
-namespace sample {
-
-// static
-Bar* Bar::New(mojo::Buffer* buf) {
- return new (buf->Allocate(sizeof(Bar))) Bar();
-}
-
-Bar::Bar() {
- _header_.num_bytes = sizeof(*this);
- _header_.num_fields = 3;
-}
-
-} // namespace sample
diff --git a/mojo/public/bindings/sample/generated/sample_bar.h b/mojo/public/bindings/sample/generated/sample_bar.h
deleted file mode 100644
index d6ca189..0000000
--- a/mojo/public/bindings/sample/generated/sample_bar.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_
-
-#include "mojo/public/bindings/lib/bindings.h"
-
-namespace sample {
-
-#pragma pack(push, 1)
-
-class Bar {
- public:
- static Bar* New(mojo::Buffer* buf);
-
- void set_alpha(uint8_t alpha) { alpha_ = alpha; }
- void set_beta(uint8_t beta) { beta_ = beta; }
- void set_gamma(uint8_t gamma) { gamma_ = gamma; }
-
- uint8_t alpha() const { return alpha_; }
- uint8_t beta() const { return beta_; }
- uint8_t gamma() const { return gamma_; }
-
- private:
- friend class mojo::internal::ObjectTraits<Bar>;
-
- Bar();
- ~Bar(); // NOT IMPLEMENTED
-
- mojo::internal::StructHeader _header_;
- uint8_t alpha_;
- uint8_t beta_;
- uint8_t gamma_;
- uint8_t _pad0_[5];
-};
-MOJO_COMPILE_ASSERT(sizeof(Bar) == 16, bad_sizeof_Bar);
-
-#pragma pack(pop)
-
-} // namespace sample
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_BAR_H_
diff --git a/mojo/public/bindings/sample/generated/sample_bar_serialization.cc b/mojo/public/bindings/sample/generated/sample_bar_serialization.cc
deleted file mode 100644
index ec02505..0000000
--- a/mojo/public/bindings/sample/generated/sample_bar_serialization.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_bar_serialization.h"
-
-#include <string.h>
-
-#include "mojo/public/bindings/sample/generated/sample_bar.h"
-
-namespace mojo {
-namespace internal {
-
-// static
-size_t ObjectTraits<sample::Bar>::ComputeSizeOf(
- const sample::Bar* bar) {
- return sizeof(*bar);
-}
-
-// static
-sample::Bar* ObjectTraits<sample::Bar>::Clone(
- const sample::Bar* bar, Buffer* buf) {
- sample::Bar* clone = sample::Bar::New(buf);
- memcpy(clone, bar, sizeof(*bar));
- return clone;
-}
-
-// static
-void ObjectTraits<sample::Bar>::EncodePointersAndHandles(
- sample::Bar* bar, std::vector<mojo::Handle>* handles) {
-}
-
-// static
-bool ObjectTraits<sample::Bar>::DecodePointersAndHandles(
- sample::Bar* bar, const mojo::Message& message) {
- return true;
-}
-
-} // namespace internal
-} // namespace mojo
diff --git a/mojo/public/bindings/sample/generated/sample_bar_serialization.h b/mojo/public/bindings/sample/generated/sample_bar_serialization.h
deleted file mode 100644
index 8947e75..0000000
--- a/mojo/public/bindings/sample/generated/sample_bar_serialization.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_
-
-#include "mojo/public/bindings/lib/bindings_serialization.h"
-
-namespace sample {
-class Bar;
-}
-
-namespace mojo {
-namespace internal {
-
-template <>
-class ObjectTraits<sample::Bar> {
- public:
- static size_t ComputeSizeOf(const sample::Bar* bar);
- static sample::Bar* Clone(const sample::Bar* bar, Buffer* buf);
- static void EncodePointersAndHandles(sample::Bar* bar,
- std::vector<mojo::Handle>* handles);
- static bool DecodePointersAndHandles(sample::Bar* bar,
- const mojo::Message& message);
-};
-
-} // namespace internal
-} // namespace mojo
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_BAR_SERIALIZATION_H_
diff --git a/mojo/public/bindings/sample/generated/sample_foo.cc b/mojo/public/bindings/sample/generated/sample_foo.cc
deleted file mode 100644
index d5d99e4..0000000
--- a/mojo/public/bindings/sample/generated/sample_foo.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_foo.h"
-
-namespace sample {
-
-// static
-Foo* Foo::New(mojo::Buffer* buf) {
- return new (buf->Allocate(sizeof(Foo))) Foo();
-}
-
-Foo::Foo() {
- _header_.num_bytes = sizeof(*this);
- _header_.num_fields = 10;
-}
-
-} // namespace sample
diff --git a/mojo/public/bindings/sample/generated/sample_foo.h b/mojo/public/bindings/sample/generated/sample_foo.h
deleted file mode 100644
index 396f209..0000000
--- a/mojo/public/bindings/sample/generated/sample_foo.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_
-
-#include "mojo/public/bindings/lib/bindings.h"
-
-namespace sample {
-class Bar;
-
-#pragma pack(push, 1)
-
-class Foo {
- public:
- static Foo* New(mojo::Buffer* buf);
-
- void set_x(int32_t x) { x_ = x; }
- void set_y(int32_t y) { y_ = y; }
- void set_a(bool a) { a_ = a; }
- void set_b(bool b) { b_ = b; }
- void set_c(bool c) { c_ = c; }
- void set_bar(Bar* bar) { bar_.ptr = bar; }
- void set_data(mojo::Array<uint8_t>* data) { data_.ptr = data; }
- void set_extra_bars(mojo::Array<Bar*>* extra_bars) {
- extra_bars_.ptr = extra_bars;
- }
- void set_name(mojo::String* name) {
- name_.ptr = name;
- }
- void set_files(mojo::Array<mojo::Handle>* files) {
- files_.ptr = files;
- }
-
- int32_t x() const { return x_; }
- int32_t y() const { return y_; }
- bool a() const { return a_; }
- bool b() const { return b_; }
- bool c() const { return c_; }
- const Bar* bar() const { return bar_.ptr; }
- const mojo::Array<uint8_t>* data() const { return data_.ptr; }
- const mojo::Array<Bar*>* extra_bars() const {
- // NOTE: extra_bars is an optional field!
- return _header_.num_fields >= 8 ? extra_bars_.ptr : NULL;
- }
- const mojo::String* name() const {
- // NOTE: name is also an optional field!
- return _header_.num_fields >= 9 ? name_.ptr : NULL;
- }
- const mojo::Array<mojo::Handle>* files() const {
- // NOTE: files is also an optional field!
- return _header_.num_fields >= 10 ? files_.ptr : NULL;
- }
-
- private:
- friend class mojo::internal::ObjectTraits<Foo>;
-
- Foo();
- ~Foo(); // NOT IMPLEMENTED
-
- mojo::internal::StructHeader _header_;
- int32_t x_;
- int32_t y_;
- uint8_t a_ : 1;
- uint8_t b_ : 1;
- uint8_t c_ : 1;
- uint8_t _pad0_[7];
- mojo::internal::StructPointer<Bar> bar_;
- mojo::internal::ArrayPointer<uint8_t> data_;
- mojo::internal::ArrayPointer<Bar*> extra_bars_;
- mojo::internal::StringPointer name_;
- mojo::internal::ArrayPointer<mojo::Handle> files_;
-};
-MOJO_COMPILE_ASSERT(sizeof(Foo) == 64, bad_sizeof_Foo);
-
-#pragma pack(pop)
-
-} // namespace sample
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_FOO_H_
diff --git a/mojo/public/bindings/sample/generated/sample_foo_serialization.cc b/mojo/public/bindings/sample/generated/sample_foo_serialization.cc
deleted file mode 100644
index e79ad24..0000000
--- a/mojo/public/bindings/sample/generated/sample_foo_serialization.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_foo_serialization.h"
-
-#include <string.h>
-
-#include "mojo/public/bindings/sample/generated/sample_bar_serialization.h"
-#include "mojo/public/bindings/sample/generated/sample_foo.h"
-
-namespace mojo {
-namespace internal {
-
-// static
-size_t ObjectTraits<sample::Foo>::ComputeSizeOf(
- const sample::Foo* foo) {
- return sizeof(*foo) +
- mojo::internal::ComputeSizeOf(foo->bar()) +
- mojo::internal::ComputeSizeOf(foo->data()) +
- mojo::internal::ComputeSizeOf(foo->extra_bars()) +
- mojo::internal::ComputeSizeOf(foo->name()) +
- mojo::internal::ComputeSizeOf(foo->files());
-}
-
-// static
-sample::Foo* ObjectTraits<sample::Foo>::Clone(
- const sample::Foo* foo, Buffer* buf) {
- sample::Foo* clone = sample::Foo::New(buf);
- memcpy(clone, foo, sizeof(*foo));
-
- clone->set_bar(mojo::internal::Clone(foo->bar(), buf));
- clone->set_data(mojo::internal::Clone(foo->data(), buf));
- clone->set_extra_bars(mojo::internal::Clone(foo->extra_bars(), buf));
- clone->set_name(mojo::internal::Clone(foo->name(), buf));
- clone->set_files(mojo::internal::Clone(foo->files(), buf));
-
- return clone;
-}
-
-// static
-void ObjectTraits<sample::Foo>::EncodePointersAndHandles(
- sample::Foo* foo, std::vector<mojo::Handle>* handles) {
- Encode(&foo->bar_, handles);
- Encode(&foo->data_, handles);
- Encode(&foo->extra_bars_, handles);
- Encode(&foo->name_, handles);
- Encode(&foo->files_, handles);
-}
-
-// static
-bool ObjectTraits<sample::Foo>::DecodePointersAndHandles(
- sample::Foo* foo, const mojo::Message& message) {
- if (!Decode(&foo->bar_, message))
- return false;
- if (!Decode(&foo->data_, message))
- return false;
- if (foo->_header_.num_fields >= 8) {
- if (!Decode(&foo->extra_bars_, message))
- return false;
- }
- if (foo->_header_.num_fields >= 9) {
- if (!Decode(&foo->name_, message))
- return false;
- }
- if (foo->_header_.num_fields >= 10) {
- if (!Decode(&foo->files_, message))
- return false;
- }
-
- // TODO: validate
- return true;
-}
-
-} // namespace internal
-} // namespace mojo
diff --git a/mojo/public/bindings/sample/generated/sample_service.cc b/mojo/public/bindings/sample/generated/sample_service.cc
new file mode 100644
index 0000000..42f3445
--- /dev/null
+++ b/mojo/public/bindings/sample/generated/sample_service.cc
@@ -0,0 +1,266 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/public/bindings/sample/generated/sample_service.h"
+
+#include "mojo/public/bindings/lib/message_builder.h"
+#include "mojo/public/bindings/sample/generated/sample_service_internal.h"
+
+namespace sample {
+namespace internal {
+
+const uint32_t kService_Frobinate_Name = 1;
+
+#pragma pack(push, 1)
+
+class Service_Frobinate_Params {
+ public:
+ static Service_Frobinate_Params* New(mojo::Buffer* buf);
+
+ void set_foo(Foo* foo) { foo_.ptr = foo; }
+ void set_baz(bool baz) { baz_ = baz; }
+ void set_port(mojo::Handle port) { port_ = port; }
+
+ const Foo* foo() const { return foo_.ptr; }
+ bool baz() const { return baz_; }
+ mojo::Handle port() const {
+ // NOTE: port is an optional field!
+ return _header_.num_fields >= 3 ? port_ : mojo::kInvalidHandle;
+ }
+
+ private:
+ friend class mojo::internal::ObjectTraits<Service_Frobinate_Params>;
+
+ Service_Frobinate_Params();
+ ~Service_Frobinate_Params(); // NOT IMPLEMENTED
+
+ mojo::internal::StructHeader _header_;
+ mojo::internal::StructPointer<Foo> foo_;
+ uint8_t baz_ : 1;
+ uint8_t _pad0_[3];
+ mojo::Handle port_;
+};
+MOJO_COMPILE_ASSERT(sizeof(Service_Frobinate_Params) == 24,
+ bad_sizeof_Service_Frobinate_Params);
+
+#pragma pack(pop)
+
+// static
+Service_Frobinate_Params* Service_Frobinate_Params::New(mojo::Buffer* buf) {
+ return new (buf->Allocate(sizeof(Service_Frobinate_Params)))
+ Service_Frobinate_Params();
+}
+
+Service_Frobinate_Params::Service_Frobinate_Params() {
+ _header_.num_bytes = sizeof(*this);
+ _header_.num_fields = 3;
+}
+
+} // namespace internal
+
+// static
+Bar* Bar::New(mojo::Buffer* buf) {
+ return new (buf->Allocate(sizeof(Bar))) Bar();
+}
+
+Bar::Bar() {
+ _header_.num_bytes = sizeof(*this);
+ _header_.num_fields = 3;
+}
+
+// static
+Foo* Foo::New(mojo::Buffer* buf) {
+ return new (buf->Allocate(sizeof(Foo))) Foo();
+}
+
+Foo::Foo() {
+ _header_.num_bytes = sizeof(*this);
+ _header_.num_fields = 10;
+}
+
+ServiceProxy::ServiceProxy(mojo::MessageReceiver* receiver)
+ : receiver_(receiver) {
+}
+
+void ServiceProxy::Frobinate(const Foo* foo, bool baz, mojo::Handle port) {
+ size_t payload_size =
+ mojo::internal::Align(sizeof(internal::Service_Frobinate_Params));
+ payload_size += mojo::internal::ComputeSizeOf(foo);
+
+ mojo::MessageBuilder builder(internal::kService_Frobinate_Name, payload_size);
+
+ // We now go about allocating the anonymous Frobinate_Params struct. It
+ // holds the parameters to the Frobinate message.
+ //
+ // Notice how foo is cloned. This causes a copy of foo to be generated
+ // within the same buffer as the Frobinate_Params struct. That's what we
+ // need in order to generate a contiguous blob of message data.
+
+ internal::Service_Frobinate_Params* params =
+ internal::Service_Frobinate_Params::New(builder.buffer());
+ params->set_foo(mojo::internal::Clone(foo, builder.buffer()));
+ params->set_baz(baz);
+ params->set_port(port);
+
+ // NOTE: If foo happened to be a graph with cycles, then Clone would not
+ // have returned.
+
+ // Next step is to encode pointers and handles so that messages become
+ // hermetic. Pointers become offsets and handles becomes indices into the
+ // handles array.
+ mojo::Message message;
+ mojo::internal::EncodePointersAndHandles(params, &message.handles);
+
+ // Finally, we get the generated message data, and forward it to the
+ // receiver.
+ message.data = builder.Finish();
+
+ receiver_->Accept(&message);
+}
+
+bool ServiceStub::Accept(mojo::Message* message) {
+ switch (message->data->header.name) {
+ case internal::kService_Frobinate_Name: {
+ internal::Service_Frobinate_Params* params =
+ reinterpret_cast<internal::Service_Frobinate_Params*>(
+ message->data->payload);
+
+ if (!mojo::internal::DecodePointersAndHandles(params, *message))
+ return false;
+
+ Frobinate(params->foo(), params->baz(), params->port());
+ break;
+ }
+ }
+ return true;
+}
+
+} // namespace sample
+
+namespace mojo {
+namespace internal {
+
+// static
+size_t ObjectTraits<sample::Bar>::ComputeSizeOf(
+ const sample::Bar* bar) {
+ return sizeof(*bar);
+}
+
+// static
+sample::Bar* ObjectTraits<sample::Bar>::Clone(
+ const sample::Bar* bar, Buffer* buf) {
+ sample::Bar* clone = sample::Bar::New(buf);
+ memcpy(clone, bar, sizeof(*bar));
+ return clone;
+}
+
+// static
+void ObjectTraits<sample::Bar>::EncodePointersAndHandles(
+ sample::Bar* bar, std::vector<mojo::Handle>* handles) {
+}
+
+// static
+bool ObjectTraits<sample::Bar>::DecodePointersAndHandles(
+ sample::Bar* bar, const mojo::Message& message) {
+ return true;
+}
+
+// static
+size_t ObjectTraits<sample::Foo>::ComputeSizeOf(
+ const sample::Foo* foo) {
+ return sizeof(*foo) +
+ mojo::internal::ComputeSizeOf(foo->bar()) +
+ mojo::internal::ComputeSizeOf(foo->data()) +
+ mojo::internal::ComputeSizeOf(foo->extra_bars()) +
+ mojo::internal::ComputeSizeOf(foo->name()) +
+ mojo::internal::ComputeSizeOf(foo->files());
+}
+
+// static
+sample::Foo* ObjectTraits<sample::Foo>::Clone(
+ const sample::Foo* foo, Buffer* buf) {
+ sample::Foo* clone = sample::Foo::New(buf);
+ memcpy(clone, foo, sizeof(*foo));
+
+ clone->set_bar(mojo::internal::Clone(foo->bar(), buf));
+ clone->set_data(mojo::internal::Clone(foo->data(), buf));
+ clone->set_extra_bars(mojo::internal::Clone(foo->extra_bars(), buf));
+ clone->set_name(mojo::internal::Clone(foo->name(), buf));
+ clone->set_files(mojo::internal::Clone(foo->files(), buf));
+
+ return clone;
+}
+
+// static
+void ObjectTraits<sample::Foo>::EncodePointersAndHandles(
+ sample::Foo* foo, std::vector<mojo::Handle>* handles) {
+ Encode(&foo->bar_, handles);
+ Encode(&foo->data_, handles);
+ Encode(&foo->extra_bars_, handles);
+ Encode(&foo->name_, handles);
+ Encode(&foo->files_, handles);
+}
+
+// static
+bool ObjectTraits<sample::Foo>::DecodePointersAndHandles(
+ sample::Foo* foo, const mojo::Message& message) {
+ if (!Decode(&foo->bar_, message))
+ return false;
+ if (!Decode(&foo->data_, message))
+ return false;
+ if (foo->_header_.num_fields >= 8) {
+ if (!Decode(&foo->extra_bars_, message))
+ return false;
+ }
+ if (foo->_header_.num_fields >= 9) {
+ if (!Decode(&foo->name_, message))
+ return false;
+ }
+ if (foo->_header_.num_fields >= 10) {
+ if (!Decode(&foo->files_, message))
+ return false;
+ }
+
+ // TODO: validate
+ return true;
+}
+
+template <>
+class ObjectTraits<sample::internal::Service_Frobinate_Params> {
+ public:
+ static void EncodePointersAndHandles(
+ sample::internal::Service_Frobinate_Params* params,
+ std::vector<mojo::Handle>* handles);
+ static bool DecodePointersAndHandles(
+ sample::internal::Service_Frobinate_Params* params,
+ const mojo::Message& message);
+};
+
+// static
+void ObjectTraits<sample::internal::Service_Frobinate_Params>::
+ EncodePointersAndHandles(
+ sample::internal::Service_Frobinate_Params* params,
+ std::vector<mojo::Handle>* handles) {
+ Encode(&params->foo_, handles);
+ EncodeHandle(&params->port_, handles);
+}
+
+// static
+bool ObjectTraits<sample::internal::Service_Frobinate_Params>::
+ DecodePointersAndHandles(
+ sample::internal::Service_Frobinate_Params* params,
+ const mojo::Message& message) {
+ if (!Decode(&params->foo_, message))
+ return false;
+ if (params->_header_.num_fields >= 3) {
+ if (!DecodeHandle(&params->port_, message.handles))
+ return false;
+ }
+
+ // TODO: validate
+ return true;
+}
+
+} // namespace internal
+} // namespace mojo
diff --git a/mojo/public/bindings/sample/generated/sample_service.h b/mojo/public/bindings/sample/generated/sample_service.h
index 0fe8466..9a77aa0 100644
--- a/mojo/public/bindings/sample/generated/sample_service.h
+++ b/mojo/public/bindings/sample/generated/sample_service.h
@@ -6,15 +6,127 @@
#define MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_H_
#include "mojo/public/bindings/lib/bindings.h"
+#include "mojo/public/bindings/lib/message.h"
namespace sample {
-class Foo;
+
+#pragma pack(push, 1)
+
+class Bar {
+ public:
+ static Bar* New(mojo::Buffer* buf);
+
+ void set_alpha(uint8_t alpha) { alpha_ = alpha; }
+ void set_beta(uint8_t beta) { beta_ = beta; }
+ void set_gamma(uint8_t gamma) { gamma_ = gamma; }
+
+ uint8_t alpha() const { return alpha_; }
+ uint8_t beta() const { return beta_; }
+ uint8_t gamma() const { return gamma_; }
+
+ private:
+ friend class mojo::internal::ObjectTraits<Bar>;
+
+ Bar();
+ ~Bar(); // NOT IMPLEMENTED
+
+ mojo::internal::StructHeader _header_;
+ uint8_t alpha_;
+ uint8_t beta_;
+ uint8_t gamma_;
+ uint8_t _pad0_[5];
+};
+MOJO_COMPILE_ASSERT(sizeof(Bar) == 16, bad_sizeof_Bar);
+
+#pragma pack(pop)
+
+#pragma pack(push, 1)
+
+class Foo {
+ public:
+ static Foo* New(mojo::Buffer* buf);
+
+ void set_x(int32_t x) { x_ = x; }
+ void set_y(int32_t y) { y_ = y; }
+ void set_a(bool a) { a_ = a; }
+ void set_b(bool b) { b_ = b; }
+ void set_c(bool c) { c_ = c; }
+ void set_bar(Bar* bar) { bar_.ptr = bar; }
+ void set_data(mojo::Array<uint8_t>* data) { data_.ptr = data; }
+ void set_extra_bars(mojo::Array<Bar*>* extra_bars) {
+ extra_bars_.ptr = extra_bars;
+ }
+ void set_name(mojo::String* name) {
+ name_.ptr = name;
+ }
+ void set_files(mojo::Array<mojo::Handle>* files) {
+ files_.ptr = files;
+ }
+
+ int32_t x() const { return x_; }
+ int32_t y() const { return y_; }
+ bool a() const { return a_; }
+ bool b() const { return b_; }
+ bool c() const { return c_; }
+ const Bar* bar() const { return bar_.ptr; }
+ const mojo::Array<uint8_t>* data() const { return data_.ptr; }
+ const mojo::Array<Bar*>* extra_bars() const {
+ // NOTE: extra_bars is an optional field!
+ return _header_.num_fields >= 8 ? extra_bars_.ptr : NULL;
+ }
+ const mojo::String* name() const {
+ // NOTE: name is also an optional field!
+ return _header_.num_fields >= 9 ? name_.ptr : NULL;
+ }
+ const mojo::Array<mojo::Handle>* files() const {
+ // NOTE: files is also an optional field!
+ return _header_.num_fields >= 10 ? files_.ptr : NULL;
+ }
+
+ private:
+ friend class mojo::internal::ObjectTraits<Foo>;
+
+ Foo();
+ ~Foo(); // NOT IMPLEMENTED
+
+ mojo::internal::StructHeader _header_;
+ int32_t x_;
+ int32_t y_;
+ uint8_t a_ : 1;
+ uint8_t b_ : 1;
+ uint8_t c_ : 1;
+ uint8_t _pad0_[7];
+ mojo::internal::StructPointer<Bar> bar_;
+ mojo::internal::ArrayPointer<uint8_t> data_;
+ mojo::internal::ArrayPointer<Bar*> extra_bars_;
+ mojo::internal::StringPointer name_;
+ mojo::internal::ArrayPointer<mojo::Handle> files_;
+};
+MOJO_COMPILE_ASSERT(sizeof(Foo) == 64, bad_sizeof_Foo);
+
+#pragma pack(pop)
class Service {
public:
virtual void Frobinate(const Foo* foo, bool baz, mojo::Handle port) = 0;
};
+class ServiceProxy : public Service {
+ public:
+ explicit ServiceProxy(mojo::MessageReceiver* receiver);
+
+ virtual void Frobinate(const Foo* Foo, bool baz, mojo::Handle port)
+ MOJO_OVERRIDE;
+
+ private:
+ mojo::MessageReceiver* receiver_;
+};
+
+class ServiceStub : public Service, public mojo::MessageReceiver {
+ public:
+ virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE;
+};
+
} // namespace sample
#endif // MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_H_
diff --git a/mojo/public/bindings/sample/generated/sample_foo_serialization.h b/mojo/public/bindings/sample/generated/sample_service_internal.h
index 58b7714..fde2b3d 100644
--- a/mojo/public/bindings/sample/generated/sample_foo_serialization.h
+++ b/mojo/public/bindings/sample/generated/sample_service_internal.h
@@ -2,19 +2,29 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_
+#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
+#define MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
-#include "mojo/public/bindings/lib/bindings_serialization.h"
+#include <string.h>
-namespace sample {
-class Foo;
-}
+#include "mojo/public/bindings/lib/bindings_serialization.h"
+#include "mojo/public/bindings/sample/generated/sample_service.h"
namespace mojo {
namespace internal {
template <>
+class ObjectTraits<sample::Bar> {
+ public:
+ static size_t ComputeSizeOf(const sample::Bar* bar);
+ static sample::Bar* Clone(const sample::Bar* bar, Buffer* buf);
+ static void EncodePointersAndHandles(sample::Bar* bar,
+ std::vector<mojo::Handle>* handles);
+ static bool DecodePointersAndHandles(sample::Bar* bar,
+ const mojo::Message& message);
+};
+
+template <>
class ObjectTraits<sample::Foo> {
public:
static size_t ComputeSizeOf(const sample::Foo* foo);
@@ -28,4 +38,4 @@ class ObjectTraits<sample::Foo> {
} // namespace internal
} // namespace mojo
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_FOO_SERIALIZATION_H_
+#endif // MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
diff --git a/mojo/public/bindings/sample/generated/sample_service_proxy.cc b/mojo/public/bindings/sample/generated/sample_service_proxy.cc
deleted file mode 100644
index 3248c2a..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_proxy.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_service_proxy.h"
-
-#include <stdlib.h>
-
-#include "mojo/public/bindings/lib/message.h"
-#include "mojo/public/bindings/lib/message_builder.h"
-#include "mojo/public/bindings/sample/generated/sample_service_serialization.h"
-
-namespace sample {
-
-ServiceProxy::ServiceProxy(mojo::MessageReceiver* receiver)
- : receiver_(receiver) {
-}
-
-void ServiceProxy::Frobinate(const Foo* foo, bool baz, mojo::Handle port) {
- size_t payload_size =
- mojo::internal::Align(sizeof(internal::Service_Frobinate_Params));
- payload_size += mojo::internal::ComputeSizeOf(foo);
-
- mojo::MessageBuilder builder(internal::kService_Frobinate_Name, payload_size);
-
- // We now go about allocating the anonymous Frobinate_Params struct. It
- // holds the parameters to the Frobinate message.
- //
- // Notice how foo is cloned. This causes a copy of foo to be generated
- // within the same buffer as the Frobinate_Params struct. That's what we
- // need in order to generate a contiguous blob of message data.
-
- internal::Service_Frobinate_Params* params =
- internal::Service_Frobinate_Params::New(builder.buffer());
- params->set_foo(mojo::internal::Clone(foo, builder.buffer()));
- params->set_baz(baz);
- params->set_port(port);
-
- // NOTE: If foo happened to be a graph with cycles, then Clone would not
- // have returned.
-
- // Next step is to encode pointers and handles so that messages become
- // hermetic. Pointers become offsets and handles becomes indices into the
- // handles array.
- mojo::Message message;
- mojo::internal::EncodePointersAndHandles(params, &message.handles);
-
- // Finally, we get the generated message data, and forward it to the
- // receiver.
- message.data = builder.Finish();
-
- receiver_->Accept(&message);
-}
-
-} // namespace sample
diff --git a/mojo/public/bindings/sample/generated/sample_service_proxy.h b/mojo/public/bindings/sample/generated/sample_service_proxy.h
deleted file mode 100644
index 55df5c9..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_proxy.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_PROXY_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_PROXY_H_
-
-#include "mojo/public/bindings/lib/message.h"
-#include "mojo/public/bindings/sample/generated/sample_service.h"
-
-namespace sample {
-
-class ServiceProxy : public Service {
- public:
- explicit ServiceProxy(mojo::MessageReceiver* receiver);
-
- virtual void Frobinate(const Foo* Foo, bool baz, mojo::Handle port)
- MOJO_OVERRIDE;
-
- private:
- mojo::MessageReceiver* receiver_;
-};
-
-} // namespace test
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_PROXY_H_
diff --git a/mojo/public/bindings/sample/generated/sample_service_serialization.cc b/mojo/public/bindings/sample/generated/sample_service_serialization.cc
deleted file mode 100644
index 899f746..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_serialization.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_service_serialization.h"
-
-namespace sample {
-namespace internal {
-
-// static
-Service_Frobinate_Params* Service_Frobinate_Params::New(mojo::Buffer* buf) {
- return new (buf->Allocate(sizeof(Service_Frobinate_Params)))
- Service_Frobinate_Params();
-}
-
-Service_Frobinate_Params::Service_Frobinate_Params() {
- _header_.num_bytes = sizeof(*this);
- _header_.num_fields = 3;
-}
-
-} // namespace internal
-} // namespace sample
-
-namespace mojo {
-namespace internal {
-
-// static
-void ObjectTraits<sample::internal::Service_Frobinate_Params>::
- EncodePointersAndHandles(
- sample::internal::Service_Frobinate_Params* params,
- std::vector<mojo::Handle>* handles) {
- Encode(&params->foo_, handles);
- EncodeHandle(&params->port_, handles);
-}
-
-// static
-bool ObjectTraits<sample::internal::Service_Frobinate_Params>::
- DecodePointersAndHandles(
- sample::internal::Service_Frobinate_Params* params,
- const mojo::Message& message) {
- if (!Decode(&params->foo_, message))
- return false;
- if (params->_header_.num_fields >= 3) {
- if (!DecodeHandle(&params->port_, message.handles))
- return false;
- }
-
- // TODO: validate
- return true;
-}
-
-} // namespace internal
-} // namespace mojo
diff --git a/mojo/public/bindings/sample/generated/sample_service_serialization.h b/mojo/public/bindings/sample/generated/sample_service_serialization.h
deleted file mode 100644
index 5a7044b..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_serialization.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
-
-#include <string.h>
-
-#include "mojo/public/bindings/lib/bindings_serialization.h"
-#include "mojo/public/bindings/sample/generated/sample_foo_serialization.h"
-#include "mojo/public/bindings/sample/generated/sample_service.h"
-
-namespace sample {
-namespace internal {
-
-const uint32_t kService_Frobinate_Name = 1;
-
-#pragma pack(push, 1)
-
-class Service_Frobinate_Params {
- public:
- static Service_Frobinate_Params* New(mojo::Buffer* buf);
-
- void set_foo(Foo* foo) { foo_.ptr = foo; }
- void set_baz(bool baz) { baz_ = baz; }
- void set_port(mojo::Handle port) { port_ = port; }
-
- const Foo* foo() const { return foo_.ptr; }
- bool baz() const { return baz_; }
- mojo::Handle port() const {
- // NOTE: port is an optional field!
- return _header_.num_fields >= 3 ? port_ : mojo::kInvalidHandle;
- }
-
- private:
- friend class mojo::internal::ObjectTraits<Service_Frobinate_Params>;
-
- Service_Frobinate_Params();
- ~Service_Frobinate_Params(); // NOT IMPLEMENTED
-
- mojo::internal::StructHeader _header_;
- mojo::internal::StructPointer<Foo> foo_;
- uint8_t baz_ : 1;
- uint8_t _pad0_[3];
- mojo::Handle port_;
-};
-MOJO_COMPILE_ASSERT(sizeof(Service_Frobinate_Params) == 24,
- bad_sizeof_Service_Frobinate_Params);
-
-#pragma pack(pop)
-
-} // namespace internal
-} // namespace sample
-
-namespace mojo {
-namespace internal {
-
-template <>
-class ObjectTraits<sample::internal::Service_Frobinate_Params> {
- public:
- static void EncodePointersAndHandles(
- sample::internal::Service_Frobinate_Params* params,
- std::vector<mojo::Handle>* handles);
- static bool DecodePointersAndHandles(
- sample::internal::Service_Frobinate_Params* params,
- const mojo::Message& message);
-};
-
-} // namespace internal
-} // namespace mojo
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_SERIALIZATION_H_
diff --git a/mojo/public/bindings/sample/generated/sample_service_stub.cc b/mojo/public/bindings/sample/generated/sample_service_stub.cc
deleted file mode 100644
index c26a26d..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_stub.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/bindings/sample/generated/sample_service_stub.h"
-
-#include "mojo/public/bindings/sample/generated/sample_service_serialization.h"
-
-namespace sample {
-
-bool ServiceStub::Accept(mojo::Message* message) {
- switch (message->data->header.name) {
- case internal::kService_Frobinate_Name: {
- internal::Service_Frobinate_Params* params =
- reinterpret_cast<internal::Service_Frobinate_Params*>(
- message->data->payload);
-
- if (!mojo::internal::DecodePointersAndHandles(params, *message))
- return false;
-
- Frobinate(params->foo(), params->baz(), params->port());
- break;
- }
- }
- return true;
-}
-
-} // namespace sample
diff --git a/mojo/public/bindings/sample/generated/sample_service_stub.h b/mojo/public/bindings/sample/generated/sample_service_stub.h
deleted file mode 100644
index 0de1d91..0000000
--- a/mojo/public/bindings/sample/generated/sample_service_stub.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_STUB_H_
-#define MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_STUB_H_
-
-#include "mojo/public/bindings/lib/message.h"
-#include "mojo/public/bindings/sample/generated/sample_service.h"
-
-namespace sample {
-
-class ServiceStub : public Service, public mojo::MessageReceiver {
- public:
- virtual bool Accept(mojo::Message* message) MOJO_OVERRIDE;
-};
-
-} // namespace sample
-
-#endif // MOJO_GENERATED_BINDINGS_SAMPLE_SERVICE_STUB_H_
diff --git a/mojo/public/bindings/sample/sample_test.cc b/mojo/public/bindings/sample/sample_test.cc
index bad221d..7fb999e 100644
--- a/mojo/public/bindings/sample/sample_test.cc
+++ b/mojo/public/bindings/sample/sample_test.cc
@@ -6,11 +6,7 @@
#include <string>
-#include "mojo/public/bindings/sample/generated/sample_bar.h"
-#include "mojo/public/bindings/sample/generated/sample_foo.h"
#include "mojo/public/bindings/sample/generated/sample_service.h"
-#include "mojo/public/bindings/sample/generated/sample_service_proxy.h"
-#include "mojo/public/bindings/sample/generated/sample_service_stub.h"
namespace sample {