| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 <stdlib.h> | 5 #include <stdlib.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 | 7 |
| 8 #include "mojo/public/bindings/lib/connector.h" | 8 #include "mojo/public/bindings/lib/connector.h" |
| 9 #include "mojo/public/bindings/lib/message_queue.h" | 9 #include "mojo/public/bindings/lib/message_queue.h" |
| 10 #include "mojo/public/environment/environment.h" | 10 #include "mojo/public/environment/environment.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 internal::Connector connector1(handle1_.Pass()); | 76 internal::Connector connector1(handle1_.Pass()); |
| 77 | 77 |
| 78 const char kText[] = "hello world"; | 78 const char kText[] = "hello world"; |
| 79 | 79 |
| 80 Message message; | 80 Message message; |
| 81 AllocMessage(kText, &message); | 81 AllocMessage(kText, &message); |
| 82 | 82 |
| 83 connector0.Accept(&message); | 83 connector0.Accept(&message); |
| 84 | 84 |
| 85 MessageAccumulator accumulator; | 85 MessageAccumulator accumulator; |
| 86 connector1.SetIncomingReceiver(&accumulator); | 86 connector1.set_incoming_receiver(&accumulator); |
| 87 | 87 |
| 88 PumpMessages(); | 88 PumpMessages(); |
| 89 | 89 |
| 90 ASSERT_FALSE(accumulator.IsEmpty()); | 90 ASSERT_FALSE(accumulator.IsEmpty()); |
| 91 | 91 |
| 92 Message message_received; | 92 Message message_received; |
| 93 accumulator.Pop(&message_received); | 93 accumulator.Pop(&message_received); |
| 94 | 94 |
| 95 EXPECT_EQ(std::string(kText), | 95 EXPECT_EQ(std::string(kText), |
| 96 std::string( | 96 std::string( |
| 97 reinterpret_cast<char*>(message_received.data->payload))); | 97 reinterpret_cast<char*>(message_received.data->payload))); |
| 98 } | 98 } |
| 99 | 99 |
| 100 TEST_F(ConnectorTest, Basic_EarlyIncomingReceiver) { | 100 TEST_F(ConnectorTest, Basic_EarlyIncomingReceiver) { |
| 101 internal::Connector connector0(handle0_.Pass()); | 101 internal::Connector connector0(handle0_.Pass()); |
| 102 internal::Connector connector1(handle1_.Pass()); | 102 internal::Connector connector1(handle1_.Pass()); |
| 103 | 103 |
| 104 MessageAccumulator accumulator; | 104 MessageAccumulator accumulator; |
| 105 connector1.SetIncomingReceiver(&accumulator); | 105 connector1.set_incoming_receiver(&accumulator); |
| 106 | 106 |
| 107 const char kText[] = "hello world"; | 107 const char kText[] = "hello world"; |
| 108 | 108 |
| 109 Message message; | 109 Message message; |
| 110 AllocMessage(kText, &message); | 110 AllocMessage(kText, &message); |
| 111 | 111 |
| 112 connector0.Accept(&message); | 112 connector0.Accept(&message); |
| 113 | 113 |
| 114 PumpMessages(); | 114 PumpMessages(); |
| 115 | 115 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 130 const char* kText[] = { "hello", "world" }; | 130 const char* kText[] = { "hello", "world" }; |
| 131 | 131 |
| 132 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 132 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
| 133 Message message; | 133 Message message; |
| 134 AllocMessage(kText[i], &message); | 134 AllocMessage(kText[i], &message); |
| 135 | 135 |
| 136 connector0.Accept(&message); | 136 connector0.Accept(&message); |
| 137 } | 137 } |
| 138 | 138 |
| 139 MessageAccumulator accumulator; | 139 MessageAccumulator accumulator; |
| 140 connector1.SetIncomingReceiver(&accumulator); | 140 connector1.set_incoming_receiver(&accumulator); |
| 141 | 141 |
| 142 PumpMessages(); | 142 PumpMessages(); |
| 143 | 143 |
| 144 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 144 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
| 145 ASSERT_FALSE(accumulator.IsEmpty()); | 145 ASSERT_FALSE(accumulator.IsEmpty()); |
| 146 | 146 |
| 147 Message message_received; | 147 Message message_received; |
| 148 accumulator.Pop(&message_received); | 148 accumulator.Pop(&message_received); |
| 149 | 149 |
| 150 EXPECT_EQ(std::string(kText[i]), | 150 EXPECT_EQ(std::string(kText[i]), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 ScopedMessagePipeHandle handles[2]; | 185 ScopedMessagePipeHandle handles[2]; |
| 186 CreateMessagePipe(&handles[0], &handles[1]); | 186 CreateMessagePipe(&handles[0], &handles[1]); |
| 187 message.handles.push_back(handles[0].release()); | 187 message.handles.push_back(handles[0].release()); |
| 188 | 188 |
| 189 connector0.Accept(&message); | 189 connector0.Accept(&message); |
| 190 | 190 |
| 191 // The message should have been transferred, releasing the handles. | 191 // The message should have been transferred, releasing the handles. |
| 192 EXPECT_TRUE(message.handles.empty()); | 192 EXPECT_TRUE(message.handles.empty()); |
| 193 | 193 |
| 194 MessageAccumulator accumulator; | 194 MessageAccumulator accumulator; |
| 195 connector1.SetIncomingReceiver(&accumulator); | 195 connector1.set_incoming_receiver(&accumulator); |
| 196 | 196 |
| 197 PumpMessages(); | 197 PumpMessages(); |
| 198 | 198 |
| 199 ASSERT_FALSE(accumulator.IsEmpty()); | 199 ASSERT_FALSE(accumulator.IsEmpty()); |
| 200 | 200 |
| 201 Message message_received; | 201 Message message_received; |
| 202 accumulator.Pop(&message_received); | 202 accumulator.Pop(&message_received); |
| 203 | 203 |
| 204 EXPECT_EQ(std::string(kText), | 204 EXPECT_EQ(std::string(kText), |
| 205 std::string( | 205 std::string( |
| 206 reinterpret_cast<char*>(message_received.data->payload))); | 206 reinterpret_cast<char*>(message_received.data->payload))); |
| 207 ASSERT_EQ(1U, message_received.handles.size()); | 207 ASSERT_EQ(1U, message_received.handles.size()); |
| 208 | 208 |
| 209 // Now send a message to the transferred handle and confirm it's sent through | 209 // Now send a message to the transferred handle and confirm it's sent through |
| 210 // to the orginal pipe. | 210 // to the orginal pipe. |
| 211 // TODO(vtl): Do we need a better way of "downcasting" the handle types? | 211 // TODO(vtl): Do we need a better way of "downcasting" the handle types? |
| 212 ScopedMessagePipeHandle smph; | 212 ScopedMessagePipeHandle smph; |
| 213 smph.reset(MessagePipeHandle(message_received.handles[0].value())); | 213 smph.reset(MessagePipeHandle(message_received.handles[0].value())); |
| 214 message_received.handles[0] = Handle(); // |smph| now owns this handle. | 214 message_received.handles[0] = Handle(); // |smph| now owns this handle. |
| 215 | 215 |
| 216 internal::Connector connector_received(smph.Pass()); | 216 internal::Connector connector_received(smph.Pass()); |
| 217 internal::Connector connector_original(handles[1].Pass()); | 217 internal::Connector connector_original(handles[1].Pass()); |
| 218 | 218 |
| 219 AllocMessage(kText, &message); | 219 AllocMessage(kText, &message); |
| 220 | 220 |
| 221 connector_received.Accept(&message); | 221 connector_received.Accept(&message); |
| 222 connector_original.SetIncomingReceiver(&accumulator); | 222 connector_original.set_incoming_receiver(&accumulator); |
| 223 PumpMessages(); | 223 PumpMessages(); |
| 224 | 224 |
| 225 ASSERT_FALSE(accumulator.IsEmpty()); | 225 ASSERT_FALSE(accumulator.IsEmpty()); |
| 226 | 226 |
| 227 accumulator.Pop(&message_received); | 227 accumulator.Pop(&message_received); |
| 228 | 228 |
| 229 EXPECT_EQ(std::string(kText), | 229 EXPECT_EQ(std::string(kText), |
| 230 std::string( | 230 std::string( |
| 231 reinterpret_cast<char*>(message_received.data->payload))); | 231 reinterpret_cast<char*>(message_received.data->payload))); |
| 232 } | 232 } |
| 233 | 233 |
| 234 } // namespace test | 234 } // namespace test |
| 235 } // namespace mojo | 235 } // namespace mojo |
| OLD | NEW |