| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/run_loop.h" |
| 11 #include "mojo/message_pump/message_pump_mojo.h" | 12 #include "mojo/message_pump/message_pump_mojo.h" |
| 12 #include "mojo/public/cpp/bindings/array.h" | 13 #include "mojo/public/cpp/bindings/array.h" |
| 13 #include "mojo/public/cpp/bindings/binding.h" | 14 #include "mojo/public/cpp/bindings/binding.h" |
| 14 #include "mojo/public/cpp/bindings/lib/array_internal.h" | 15 #include "mojo/public/cpp/bindings/lib/array_internal.h" |
| 15 #include "mojo/public/cpp/bindings/lib/array_serialization.h" | 16 #include "mojo/public/cpp/bindings/lib/array_serialization.h" |
| 16 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" | 17 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" |
| 17 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 18 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
| 18 #include "mojo/public/cpp/bindings/string.h" | 19 #include "mojo/public/cpp/bindings/string.h" |
| 19 #include "mojo/public/cpp/test_support/test_utils.h" | 20 #include "mojo/public/cpp/test_support/test_utils.h" |
| 20 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" | 21 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
| (...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 void* raw_buf = buf.Leak(); | 1044 void* raw_buf = buf.Leak(); |
| 1044 mojo::internal::BoundsChecker bounds_checker(data, | 1045 mojo::internal::BoundsChecker bounds_checker(data, |
| 1045 static_cast<uint32_t>(size), 1); | 1046 static_cast<uint32_t>(size), 1); |
| 1046 EXPECT_FALSE( | 1047 EXPECT_FALSE( |
| 1047 internal::HandleUnion_Data::Validate(raw_buf, &bounds_checker, false)); | 1048 internal::HandleUnion_Data::Validate(raw_buf, &bounds_checker, false)); |
| 1048 free(raw_buf); | 1049 free(raw_buf); |
| 1049 } | 1050 } |
| 1050 | 1051 |
| 1051 class SmallCacheImpl : public SmallCache { | 1052 class SmallCacheImpl : public SmallCache { |
| 1052 public: | 1053 public: |
| 1053 SmallCacheImpl() : int_value_(0) {} | 1054 explicit SmallCacheImpl(const base::Closure& closure) |
| 1055 : int_value_(0), closure_(closure) {} |
| 1054 ~SmallCacheImpl() override {} | 1056 ~SmallCacheImpl() override {} |
| 1055 int64_t int_value() const { return int_value_; } | 1057 int64_t int_value() const { return int_value_; } |
| 1056 | 1058 |
| 1057 private: | 1059 private: |
| 1058 void SetIntValue(int64_t int_value) override { int_value_ = int_value; } | 1060 void SetIntValue(int64_t int_value) override { |
| 1061 int_value_ = int_value; |
| 1062 closure_.Run(); |
| 1063 } |
| 1059 void GetIntValue(const GetIntValueCallback& callback) override { | 1064 void GetIntValue(const GetIntValueCallback& callback) override { |
| 1060 callback.Run(int_value_); | 1065 callback.Run(int_value_); |
| 1061 } | 1066 } |
| 1062 | 1067 |
| 1063 int64_t int_value_; | 1068 int64_t int_value_; |
| 1069 base::Closure closure_; |
| 1064 }; | 1070 }; |
| 1065 | 1071 |
| 1066 TEST(UnionTest, InterfaceInUnion) { | 1072 TEST(UnionTest, InterfaceInUnion) { |
| 1067 base::MessageLoop run_loop(common::MessagePumpMojo::Create()); | 1073 base::MessageLoop message_loop(common::MessagePumpMojo::Create()); |
| 1068 SmallCacheImpl impl; | 1074 base::RunLoop run_loop; |
| 1075 SmallCacheImpl impl(run_loop.QuitClosure()); |
| 1069 SmallCachePtr ptr; | 1076 SmallCachePtr ptr; |
| 1070 Binding<SmallCache> bindings(&impl, GetProxy(&ptr)); | 1077 Binding<SmallCache> bindings(&impl, GetProxy(&ptr)); |
| 1071 | 1078 |
| 1072 HandleUnionPtr handle(HandleUnion::New()); | 1079 HandleUnionPtr handle(HandleUnion::New()); |
| 1073 handle->set_f_small_cache(std::move(ptr)); | 1080 handle->set_f_small_cache(std::move(ptr)); |
| 1074 | 1081 |
| 1075 handle->get_f_small_cache()->SetIntValue(10); | 1082 handle->get_f_small_cache()->SetIntValue(10); |
| 1076 run_loop.RunUntilIdle(); | 1083 run_loop.Run(); |
| 1077 EXPECT_EQ(10, impl.int_value()); | 1084 EXPECT_EQ(10, impl.int_value()); |
| 1078 } | 1085 } |
| 1079 | 1086 |
| 1080 TEST(UnionTest, InterfaceInUnionSerialization) { | 1087 TEST(UnionTest, InterfaceInUnionSerialization) { |
| 1081 base::MessageLoop run_loop(common::MessagePumpMojo::Create()); | 1088 base::MessageLoop message_loop(common::MessagePumpMojo::Create()); |
| 1082 SmallCacheImpl impl; | 1089 base::RunLoop run_loop; |
| 1090 SmallCacheImpl impl(run_loop.QuitClosure()); |
| 1083 SmallCachePtr ptr; | 1091 SmallCachePtr ptr; |
| 1084 Binding<SmallCache> bindings(&impl, GetProxy(&ptr)); | 1092 Binding<SmallCache> bindings(&impl, GetProxy(&ptr)); |
| 1085 | 1093 |
| 1086 HandleUnionPtr handle(HandleUnion::New()); | 1094 HandleUnionPtr handle(HandleUnion::New()); |
| 1087 handle->set_f_small_cache(std::move(ptr)); | 1095 handle->set_f_small_cache(std::move(ptr)); |
| 1088 size_t size = GetSerializedSize_(handle, false); | 1096 size_t size = GetSerializedSize_(handle, false); |
| 1089 EXPECT_EQ(16U, size); | 1097 EXPECT_EQ(16U, size); |
| 1090 | 1098 |
| 1091 mojo::internal::FixedBufferForTesting buf(size); | 1099 mojo::internal::FixedBufferForTesting buf(size); |
| 1092 internal::HandleUnion_Data* data = nullptr; | 1100 internal::HandleUnion_Data* data = nullptr; |
| 1093 SerializeUnion_(std::move(handle), &buf, &data, false); | 1101 SerializeUnion_(std::move(handle), &buf, &data, false); |
| 1094 | 1102 |
| 1095 std::vector<Handle> handles; | 1103 std::vector<Handle> handles; |
| 1096 data->EncodePointersAndHandles(&handles); | 1104 data->EncodePointersAndHandles(&handles); |
| 1097 EXPECT_EQ(1U, handles.size()); | 1105 EXPECT_EQ(1U, handles.size()); |
| 1098 data->DecodePointersAndHandles(&handles); | 1106 data->DecodePointersAndHandles(&handles); |
| 1099 | 1107 |
| 1100 HandleUnionPtr handle2(HandleUnion::New()); | 1108 HandleUnionPtr handle2(HandleUnion::New()); |
| 1101 Deserialize_(data, &handle2, nullptr); | 1109 Deserialize_(data, &handle2, nullptr); |
| 1102 | 1110 |
| 1103 handle2->get_f_small_cache()->SetIntValue(10); | 1111 handle2->get_f_small_cache()->SetIntValue(10); |
| 1104 run_loop.RunUntilIdle(); | 1112 run_loop.Run(); |
| 1105 EXPECT_EQ(10, impl.int_value()); | 1113 EXPECT_EQ(10, impl.int_value()); |
| 1106 } | 1114 } |
| 1107 | 1115 |
| 1108 class UnionInterfaceImpl : public UnionInterface { | 1116 class UnionInterfaceImpl : public UnionInterface { |
| 1109 public: | 1117 public: |
| 1110 UnionInterfaceImpl() {} | 1118 UnionInterfaceImpl() {} |
| 1111 ~UnionInterfaceImpl() override {} | 1119 ~UnionInterfaceImpl() override {} |
| 1112 | 1120 |
| 1113 private: | 1121 private: |
| 1114 void Echo(PodUnionPtr in, const EchoCallback& callback) override { | 1122 void Echo(PodUnionPtr in, const EchoCallback& callback) override { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1125 PodUnionPtr pod(PodUnion::New()); | 1133 PodUnionPtr pod(PodUnion::New()); |
| 1126 pod->set_f_int16(16); | 1134 pod->set_f_int16(16); |
| 1127 | 1135 |
| 1128 ptr->Echo(std::move(pod), | 1136 ptr->Echo(std::move(pod), |
| 1129 [](PodUnionPtr out) { EXPECT_EQ(16, out->get_f_int16()); }); | 1137 [](PodUnionPtr out) { EXPECT_EQ(16, out->get_f_int16()); }); |
| 1130 run_loop.RunUntilIdle(); | 1138 run_loop.RunUntilIdle(); |
| 1131 } | 1139 } |
| 1132 | 1140 |
| 1133 } // namespace test | 1141 } // namespace test |
| 1134 } // namespace mojo | 1142 } // namespace mojo |
| OLD | NEW |