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 <stdint.h> | 5 #include <stdint.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 103 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
104 | 104 |
105 embedder::PlatformChannelPair channel_pair; | 105 embedder::PlatformChannelPair channel_pair; |
106 platform_handles_[0] = channel_pair.PassServerHandle(); | 106 platform_handles_[0] = channel_pair.PassServerHandle(); |
107 platform_handles_[1] = channel_pair.PassClientHandle(); | 107 platform_handles_[1] = channel_pair.PassClientHandle(); |
108 } | 108 } |
109 | 109 |
110 void TearDownOnIOThread() { | 110 void TearDownOnIOThread() { |
111 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 111 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
112 | 112 |
113 if (channels_[0].get()) { | 113 if (channels_[0]) { |
114 channels_[0]->Shutdown(); | 114 channels_[0]->Shutdown(); |
115 channels_[0] = nullptr; | 115 channels_[0] = nullptr; |
116 } | 116 } |
117 if (channels_[1].get()) { | 117 if (channels_[1]) { |
118 channels_[1]->Shutdown(); | 118 channels_[1]->Shutdown(); |
119 channels_[1] = nullptr; | 119 channels_[1] = nullptr; |
120 } | 120 } |
121 } | 121 } |
122 | 122 |
123 void CreateAndInitChannel(unsigned channel_index) { | 123 void CreateAndInitChannel(unsigned channel_index) { |
124 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 124 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
125 CHECK(channel_index == 0 || channel_index == 1); | 125 CHECK(channel_index == 0 || channel_index == 1); |
126 CHECK(!channels_[channel_index].get()); | 126 CHECK(!channels_[channel_index]); |
127 | 127 |
128 channels_[channel_index] = new Channel(&platform_support_); | 128 channels_[channel_index] = new Channel(&platform_support_); |
129 CHECK(channels_[channel_index]->Init( | 129 CHECK(channels_[channel_index]->Init( |
130 RawChannel::Create(platform_handles_[channel_index].Pass()))); | 130 RawChannel::Create(platform_handles_[channel_index].Pass()))); |
131 } | 131 } |
132 | 132 |
133 void BootstrapChannelEndpointsOnIOThread(scoped_refptr<ChannelEndpoint> ep0, | 133 void BootstrapChannelEndpointsOnIOThread(scoped_refptr<ChannelEndpoint> ep0, |
134 scoped_refptr<ChannelEndpoint> ep1) { | 134 scoped_refptr<ChannelEndpoint> ep1) { |
135 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 135 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
136 | 136 |
137 if (!channels_[0].get()) | 137 if (!channels_[0]) |
138 CreateAndInitChannel(0); | 138 CreateAndInitChannel(0); |
139 if (!channels_[1].get()) | 139 if (!channels_[1]) |
140 CreateAndInitChannel(1); | 140 CreateAndInitChannel(1); |
141 | 141 |
142 channels_[0]->AttachAndRunEndpoint(ep0, true); | 142 channels_[0]->AttachAndRunEndpoint(ep0, true); |
143 channels_[1]->AttachAndRunEndpoint(ep1, true); | 143 channels_[1]->AttachAndRunEndpoint(ep1, true); |
144 } | 144 } |
145 | 145 |
146 void BootstrapChannelEndpointOnIOThread(unsigned channel_index, | 146 void BootstrapChannelEndpointOnIOThread(unsigned channel_index, |
147 scoped_refptr<ChannelEndpoint> ep) { | 147 scoped_refptr<ChannelEndpoint> ep) { |
148 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 148 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
149 CHECK(channel_index == 0 || channel_index == 1); | 149 CHECK(channel_index == 0 || channel_index == 1); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 186 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
187 BootstrapChannelEndpoints(ep0, ep1); | 187 BootstrapChannelEndpoints(ep0, ep1); |
188 | 188 |
189 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. | 189 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. |
190 | 190 |
191 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 191 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
192 // it later, it might already be readable.) | 192 // it later, it might already be readable.) |
193 waiter.Init(); | 193 waiter.Init(); |
194 ASSERT_EQ( | 194 ASSERT_EQ( |
195 MOJO_RESULT_OK, | 195 MOJO_RESULT_OK, |
196 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 196 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
197 | 197 |
198 // Write to MP 0, port 0. | 198 // Write to MP 0, port 0. |
199 EXPECT_EQ( | 199 EXPECT_EQ( |
200 MOJO_RESULT_OK, | 200 MOJO_RESULT_OK, |
201 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 201 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
202 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 202 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
203 | 203 |
204 // Wait. | 204 // Wait. |
205 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 205 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
206 EXPECT_EQ(123u, context); | 206 EXPECT_EQ(123u, context); |
207 hss = HandleSignalsState(); | 207 hss = HandleSignalsState(); |
208 mp1->RemoveWaiter(1, &waiter, &hss); | 208 mp1->RemoveAwakable(1, &waiter, &hss); |
209 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 209 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
210 hss.satisfied_signals); | 210 hss.satisfied_signals); |
211 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 211 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
212 | 212 |
213 // Read from MP 1, port 1. | 213 // Read from MP 1, port 1. |
214 EXPECT_EQ(MOJO_RESULT_OK, | 214 EXPECT_EQ(MOJO_RESULT_OK, |
215 mp1->ReadMessage(1, UserPointer<void>(buffer), | 215 mp1->ReadMessage(1, UserPointer<void>(buffer), |
216 MakeUserPointer(&buffer_size), nullptr, nullptr, | 216 MakeUserPointer(&buffer_size), nullptr, nullptr, |
217 MOJO_READ_MESSAGE_FLAG_NONE)); | 217 MOJO_READ_MESSAGE_FLAG_NONE)); |
218 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 218 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
219 EXPECT_STREQ(kHello, buffer); | 219 EXPECT_STREQ(kHello, buffer); |
220 | 220 |
221 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. | 221 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. |
222 | 222 |
223 waiter.Init(); | 223 waiter.Init(); |
224 ASSERT_EQ( | 224 ASSERT_EQ( |
225 MOJO_RESULT_OK, | 225 MOJO_RESULT_OK, |
226 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); | 226 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); |
227 | 227 |
228 EXPECT_EQ( | 228 EXPECT_EQ( |
229 MOJO_RESULT_OK, | 229 MOJO_RESULT_OK, |
230 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), | 230 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), |
231 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 231 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
232 | 232 |
233 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 233 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
234 EXPECT_EQ(456u, context); | 234 EXPECT_EQ(456u, context); |
235 hss = HandleSignalsState(); | 235 hss = HandleSignalsState(); |
236 mp0->RemoveWaiter(0, &waiter, &hss); | 236 mp0->RemoveAwakable(0, &waiter, &hss); |
237 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 237 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
238 hss.satisfied_signals); | 238 hss.satisfied_signals); |
239 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 239 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
240 | 240 |
241 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 241 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
242 EXPECT_EQ(MOJO_RESULT_OK, | 242 EXPECT_EQ(MOJO_RESULT_OK, |
243 mp0->ReadMessage(0, UserPointer<void>(buffer), | 243 mp0->ReadMessage(0, UserPointer<void>(buffer), |
244 MakeUserPointer(&buffer_size), nullptr, nullptr, | 244 MakeUserPointer(&buffer_size), nullptr, nullptr, |
245 MOJO_READ_MESSAGE_FLAG_NONE)); | 245 MOJO_READ_MESSAGE_FLAG_NONE)); |
246 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); | 246 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); |
247 EXPECT_STREQ(kWorld, buffer); | 247 EXPECT_STREQ(kWorld, buffer); |
248 | 248 |
249 // Close MP 0, port 0. | 249 // Close MP 0, port 0. |
250 mp0->Close(0); | 250 mp0->Close(0); |
251 | 251 |
252 // Try to wait for MP 1, port 1 to become readable. This will eventually fail | 252 // Try to wait for MP 1, port 1 to become readable. This will eventually fail |
253 // when it realizes that MP 0, port 0 has been closed. (It may also fail | 253 // when it realizes that MP 0, port 0 has been closed. (It may also fail |
254 // immediately.) | 254 // immediately.) |
255 waiter.Init(); | 255 waiter.Init(); |
256 hss = HandleSignalsState(); | 256 hss = HandleSignalsState(); |
257 MojoResult result = | 257 MojoResult result = |
258 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); | 258 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); |
259 if (result == MOJO_RESULT_OK) { | 259 if (result == MOJO_RESULT_OK) { |
260 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 260 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
261 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 261 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
262 EXPECT_EQ(789u, context); | 262 EXPECT_EQ(789u, context); |
263 hss = HandleSignalsState(); | 263 hss = HandleSignalsState(); |
264 mp1->RemoveWaiter(1, &waiter, &hss); | 264 mp1->RemoveAwakable(1, &waiter, &hss); |
265 } | 265 } |
266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
267 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 267 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
268 | 268 |
269 // And MP 1, port 1. | 269 // And MP 1, port 1. |
270 mp1->Close(1); | 270 mp1->Close(1); |
271 } | 271 } |
272 | 272 |
273 TEST_F(RemoteMessagePipeTest, PeerClosed) { | 273 TEST_F(RemoteMessagePipeTest, PeerClosed) { |
274 Waiter waiter; | 274 Waiter waiter; |
(...skipping 10 matching lines...) Expand all Loading... |
285 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 285 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
286 BootstrapChannelEndpoints(ep0, ep1); | 286 BootstrapChannelEndpoints(ep0, ep1); |
287 | 287 |
288 // Close MP 0, port 0. | 288 // Close MP 0, port 0. |
289 mp0->Close(0); | 289 mp0->Close(0); |
290 | 290 |
291 // Try to wait for MP 1, port 1 to be signaled with peer closed. | 291 // Try to wait for MP 1, port 1 to be signaled with peer closed. |
292 waiter.Init(); | 292 waiter.Init(); |
293 hss = HandleSignalsState(); | 293 hss = HandleSignalsState(); |
294 MojoResult result = | 294 MojoResult result = |
295 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 101, &hss); | 295 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 101, &hss); |
296 if (result == MOJO_RESULT_OK) { | 296 if (result == MOJO_RESULT_OK) { |
297 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 297 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
298 EXPECT_EQ(101u, context); | 298 EXPECT_EQ(101u, context); |
299 hss = HandleSignalsState(); | 299 hss = HandleSignalsState(); |
300 mp1->RemoveWaiter(1, &waiter, &hss); | 300 mp1->RemoveAwakable(1, &waiter, &hss); |
301 } | 301 } |
302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
303 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 303 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
304 | 304 |
305 // And MP 1, port 1. | 305 // And MP 1, port 1. |
306 mp1->Close(1); | 306 mp1->Close(1); |
307 } | 307 } |
308 | 308 |
309 TEST_F(RemoteMessagePipeTest, Multiplex) { | 309 TEST_F(RemoteMessagePipeTest, Multiplex) { |
310 static const char kHello[] = "hello"; | 310 static const char kHello[] = "hello"; |
(...skipping 21 matching lines...) Expand all Loading... |
332 // message pipe on the other side. | 332 // message pipe on the other side. |
333 scoped_refptr<ChannelEndpoint> ep2; | 333 scoped_refptr<ChannelEndpoint> ep2; |
334 scoped_refptr<MessagePipe> mp2(MessagePipe::CreateLocalProxy(&ep2)); | 334 scoped_refptr<MessagePipe> mp2(MessagePipe::CreateLocalProxy(&ep2)); |
335 ASSERT_TRUE(channels(0)); | 335 ASSERT_TRUE(channels(0)); |
336 ChannelEndpointId remote_id = channels(0)->AttachAndRunEndpoint(ep2, false); | 336 ChannelEndpointId remote_id = channels(0)->AttachAndRunEndpoint(ep2, false); |
337 EXPECT_TRUE(remote_id.is_remote()); | 337 EXPECT_TRUE(remote_id.is_remote()); |
338 | 338 |
339 waiter.Init(); | 339 waiter.Init(); |
340 ASSERT_EQ( | 340 ASSERT_EQ( |
341 MOJO_RESULT_OK, | 341 MOJO_RESULT_OK, |
342 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 342 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
343 | 343 |
344 EXPECT_EQ(MOJO_RESULT_OK, | 344 EXPECT_EQ(MOJO_RESULT_OK, |
345 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), | 345 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), |
346 sizeof(remote_id), nullptr, | 346 sizeof(remote_id), nullptr, |
347 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 347 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
348 | 348 |
349 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 349 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
350 EXPECT_EQ(123u, context); | 350 EXPECT_EQ(123u, context); |
351 hss = HandleSignalsState(); | 351 hss = HandleSignalsState(); |
352 mp1->RemoveWaiter(1, &waiter, &hss); | 352 mp1->RemoveAwakable(1, &waiter, &hss); |
353 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 353 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
354 hss.satisfied_signals); | 354 hss.satisfied_signals); |
355 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 355 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
356 | 356 |
357 ChannelEndpointId received_id; | 357 ChannelEndpointId received_id; |
358 buffer_size = static_cast<uint32_t>(sizeof(received_id)); | 358 buffer_size = static_cast<uint32_t>(sizeof(received_id)); |
359 EXPECT_EQ(MOJO_RESULT_OK, | 359 EXPECT_EQ(MOJO_RESULT_OK, |
360 mp1->ReadMessage(1, UserPointer<void>(&received_id), | 360 mp1->ReadMessage(1, UserPointer<void>(&received_id), |
361 MakeUserPointer(&buffer_size), nullptr, nullptr, | 361 MakeUserPointer(&buffer_size), nullptr, nullptr, |
362 MOJO_READ_MESSAGE_FLAG_NONE)); | 362 MOJO_READ_MESSAGE_FLAG_NONE)); |
363 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); | 363 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); |
364 EXPECT_EQ(remote_id, received_id); | 364 EXPECT_EQ(remote_id, received_id); |
365 | 365 |
366 // Warning: The local side of mp3 is port 0, not port 1. | 366 // Warning: The local side of mp3 is port 0, not port 1. |
367 scoped_refptr<MessagePipe> mp3 = | 367 scoped_refptr<MessagePipe> mp3 = |
368 channels(1)->PassIncomingMessagePipe(received_id); | 368 channels(1)->PassIncomingMessagePipe(received_id); |
369 ASSERT_TRUE(mp3.get()); | 369 ASSERT_TRUE(mp3); |
370 | 370 |
371 // Write: MP 2, port 0 -> MP 3, port 1. | 371 // Write: MP 2, port 0 -> MP 3, port 1. |
372 | 372 |
373 waiter.Init(); | 373 waiter.Init(); |
374 ASSERT_EQ( | 374 ASSERT_EQ( |
375 MOJO_RESULT_OK, | 375 MOJO_RESULT_OK, |
376 mp3->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr)); | 376 mp3->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr)); |
377 | 377 |
378 EXPECT_EQ( | 378 EXPECT_EQ( |
379 MOJO_RESULT_OK, | 379 MOJO_RESULT_OK, |
380 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 380 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
381 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 381 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
382 | 382 |
383 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 383 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
384 EXPECT_EQ(789u, context); | 384 EXPECT_EQ(789u, context); |
385 hss = HandleSignalsState(); | 385 hss = HandleSignalsState(); |
386 mp3->RemoveWaiter(0, &waiter, &hss); | 386 mp3->RemoveAwakable(0, &waiter, &hss); |
387 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 387 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
388 hss.satisfied_signals); | 388 hss.satisfied_signals); |
389 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 389 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
390 | 390 |
391 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. | 391 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. |
392 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 392 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
393 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 393 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
394 mp0->ReadMessage(0, UserPointer<void>(buffer), | 394 mp0->ReadMessage(0, UserPointer<void>(buffer), |
395 MakeUserPointer(&buffer_size), nullptr, nullptr, | 395 MakeUserPointer(&buffer_size), nullptr, nullptr, |
396 MOJO_READ_MESSAGE_FLAG_NONE)); | 396 MOJO_READ_MESSAGE_FLAG_NONE)); |
(...skipping 15 matching lines...) Expand all Loading... |
412 MakeUserPointer(&buffer_size), nullptr, nullptr, | 412 MakeUserPointer(&buffer_size), nullptr, nullptr, |
413 MOJO_READ_MESSAGE_FLAG_NONE)); | 413 MOJO_READ_MESSAGE_FLAG_NONE)); |
414 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 414 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
415 EXPECT_STREQ(kHello, buffer); | 415 EXPECT_STREQ(kHello, buffer); |
416 | 416 |
417 // Write: MP 0, port 0 -> MP 1, port 1 again. | 417 // Write: MP 0, port 0 -> MP 1, port 1 again. |
418 | 418 |
419 waiter.Init(); | 419 waiter.Init(); |
420 ASSERT_EQ( | 420 ASSERT_EQ( |
421 MOJO_RESULT_OK, | 421 MOJO_RESULT_OK, |
422 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 422 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
423 | 423 |
424 EXPECT_EQ( | 424 EXPECT_EQ( |
425 MOJO_RESULT_OK, | 425 MOJO_RESULT_OK, |
426 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), | 426 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), |
427 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 427 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
428 | 428 |
429 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 429 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
430 EXPECT_EQ(123u, context); | 430 EXPECT_EQ(123u, context); |
431 hss = HandleSignalsState(); | 431 hss = HandleSignalsState(); |
432 mp1->RemoveWaiter(1, &waiter, &hss); | 432 mp1->RemoveAwakable(1, &waiter, &hss); |
433 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 433 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
434 hss.satisfied_signals); | 434 hss.satisfied_signals); |
435 EXPECT_EQ(kAllSignals | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 435 EXPECT_EQ(kAllSignals | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
436 hss.satisfiable_signals); | 436 hss.satisfiable_signals); |
437 | 437 |
438 // Make sure there's nothing on the other ports. | 438 // Make sure there's nothing on the other ports. |
439 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 439 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
440 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 440 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
441 mp0->ReadMessage(0, UserPointer<void>(buffer), | 441 mp0->ReadMessage(0, UserPointer<void>(buffer), |
442 MakeUserPointer(&buffer_size), nullptr, nullptr, | 442 MakeUserPointer(&buffer_size), nullptr, nullptr, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 BootstrapChannelEndpointNoWait(0, ep0); | 493 BootstrapChannelEndpointNoWait(0, ep0); |
494 | 494 |
495 scoped_refptr<ChannelEndpoint> ep1; | 495 scoped_refptr<ChannelEndpoint> ep1; |
496 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 496 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
497 | 497 |
498 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 498 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
499 // it later, it might already be readable.) | 499 // it later, it might already be readable.) |
500 waiter.Init(); | 500 waiter.Init(); |
501 ASSERT_EQ( | 501 ASSERT_EQ( |
502 MOJO_RESULT_OK, | 502 MOJO_RESULT_OK, |
503 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 503 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
504 | 504 |
505 BootstrapChannelEndpointNoWait(1, ep1); | 505 BootstrapChannelEndpointNoWait(1, ep1); |
506 | 506 |
507 // Wait. | 507 // Wait. |
508 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 508 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
509 EXPECT_EQ(123u, context); | 509 EXPECT_EQ(123u, context); |
510 hss = HandleSignalsState(); | 510 hss = HandleSignalsState(); |
511 // Note: MP 1, port 1 should definitely should be readable, but it may or may | 511 // Note: MP 1, port 1 should definitely should be readable, but it may or may |
512 // not appear as writable (there's a race, and it may not have noticed that | 512 // not appear as writable (there's a race, and it may not have noticed that |
513 // the other side was closed yet -- e.g., inserting a sleep here would make it | 513 // the other side was closed yet -- e.g., inserting a sleep here would make it |
514 // much more likely to notice that it's no longer writable). | 514 // much more likely to notice that it's no longer writable). |
515 mp1->RemoveWaiter(1, &waiter, &hss); | 515 mp1->RemoveAwakable(1, &waiter, &hss); |
516 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 516 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
517 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 517 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
518 | 518 |
519 // Read from MP 1, port 1. | 519 // Read from MP 1, port 1. |
520 EXPECT_EQ(MOJO_RESULT_OK, | 520 EXPECT_EQ(MOJO_RESULT_OK, |
521 mp1->ReadMessage(1, UserPointer<void>(buffer), | 521 mp1->ReadMessage(1, UserPointer<void>(buffer), |
522 MakeUserPointer(&buffer_size), nullptr, nullptr, | 522 MakeUserPointer(&buffer_size), nullptr, nullptr, |
523 MOJO_READ_MESSAGE_FLAG_NONE)); | 523 MOJO_READ_MESSAGE_FLAG_NONE)); |
524 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 524 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
525 EXPECT_STREQ(kHello, buffer); | 525 EXPECT_STREQ(kHello, buffer); |
(...skipping 29 matching lines...) Expand all Loading... |
555 mp0->Close(0); | 555 mp0->Close(0); |
556 | 556 |
557 scoped_refptr<ChannelEndpoint> ep1; | 557 scoped_refptr<ChannelEndpoint> ep1; |
558 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 558 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
559 | 559 |
560 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 560 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
561 // it later, it might already be readable.) | 561 // it later, it might already be readable.) |
562 waiter.Init(); | 562 waiter.Init(); |
563 ASSERT_EQ( | 563 ASSERT_EQ( |
564 MOJO_RESULT_OK, | 564 MOJO_RESULT_OK, |
565 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 565 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
566 | 566 |
567 BootstrapChannelEndpointNoWait(1, ep1); | 567 BootstrapChannelEndpointNoWait(1, ep1); |
568 | 568 |
569 // Wait. | 569 // Wait. |
570 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 570 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
571 EXPECT_EQ(123u, context); | 571 EXPECT_EQ(123u, context); |
572 hss = HandleSignalsState(); | 572 hss = HandleSignalsState(); |
573 // Note: MP 1, port 1 should definitely should be readable, but it may or may | 573 // Note: MP 1, port 1 should definitely should be readable, but it may or may |
574 // not appear as writable (there's a race, and it may not have noticed that | 574 // not appear as writable (there's a race, and it may not have noticed that |
575 // the other side was closed yet -- e.g., inserting a sleep here would make it | 575 // the other side was closed yet -- e.g., inserting a sleep here would make it |
576 // much more likely to notice that it's no longer writable). | 576 // much more likely to notice that it's no longer writable). |
577 mp1->RemoveWaiter(1, &waiter, &hss); | 577 mp1->RemoveAwakable(1, &waiter, &hss); |
578 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 578 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
579 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 579 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
580 | 580 |
581 // Read from MP 1, port 1. | 581 // Read from MP 1, port 1. |
582 EXPECT_EQ(MOJO_RESULT_OK, | 582 EXPECT_EQ(MOJO_RESULT_OK, |
583 mp1->ReadMessage(1, UserPointer<void>(buffer), | 583 mp1->ReadMessage(1, UserPointer<void>(buffer), |
584 MakeUserPointer(&buffer_size), nullptr, nullptr, | 584 MakeUserPointer(&buffer_size), nullptr, nullptr, |
585 MOJO_READ_MESSAGE_FLAG_NONE)); | 585 MOJO_READ_MESSAGE_FLAG_NONE)); |
586 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 586 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
587 EXPECT_STREQ(kHello, buffer); | 587 EXPECT_STREQ(kHello, buffer); |
(...skipping 18 matching lines...) Expand all Loading... |
606 scoped_refptr<MessagePipeDispatcher> dispatcher( | 606 scoped_refptr<MessagePipeDispatcher> dispatcher( |
607 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); | 607 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); |
608 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); | 608 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); |
609 dispatcher->Init(local_mp, 0); | 609 dispatcher->Init(local_mp, 0); |
610 | 610 |
611 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 611 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
612 // it later, it might already be readable.) | 612 // it later, it might already be readable.) |
613 waiter.Init(); | 613 waiter.Init(); |
614 ASSERT_EQ( | 614 ASSERT_EQ( |
615 MOJO_RESULT_OK, | 615 MOJO_RESULT_OK, |
616 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 616 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
617 | 617 |
618 // Write to MP 0, port 0. | 618 // Write to MP 0, port 0. |
619 { | 619 { |
620 DispatcherTransport transport( | 620 DispatcherTransport transport( |
621 test::DispatcherTryStartTransport(dispatcher.get())); | 621 test::DispatcherTryStartTransport(dispatcher.get())); |
622 EXPECT_TRUE(transport.is_valid()); | 622 EXPECT_TRUE(transport.is_valid()); |
623 | 623 |
624 std::vector<DispatcherTransport> transports; | 624 std::vector<DispatcherTransport> transports; |
625 transports.push_back(transport); | 625 transports.push_back(transport); |
626 EXPECT_EQ( | 626 EXPECT_EQ( |
627 MOJO_RESULT_OK, | 627 MOJO_RESULT_OK, |
628 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 628 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
629 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 629 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
630 transport.End(); | 630 transport.End(); |
631 | 631 |
632 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 632 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
633 // |dispatcher| is destroyed. | 633 // |dispatcher| is destroyed. |
634 EXPECT_TRUE(dispatcher->HasOneRef()); | 634 EXPECT_TRUE(dispatcher->HasOneRef()); |
635 dispatcher = nullptr; | 635 dispatcher = nullptr; |
636 } | 636 } |
637 | 637 |
638 // Wait. | 638 // Wait. |
639 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 639 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
640 EXPECT_EQ(123u, context); | 640 EXPECT_EQ(123u, context); |
641 hss = HandleSignalsState(); | 641 hss = HandleSignalsState(); |
642 mp1->RemoveWaiter(1, &waiter, &hss); | 642 mp1->RemoveAwakable(1, &waiter, &hss); |
643 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 643 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
644 hss.satisfied_signals); | 644 hss.satisfied_signals); |
645 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 645 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
646 | 646 |
647 // Read from MP 1, port 1. | 647 // Read from MP 1, port 1. |
648 char read_buffer[100] = {0}; | 648 char read_buffer[100] = {0}; |
649 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 649 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
650 DispatcherVector read_dispatchers; | 650 DispatcherVector read_dispatchers; |
651 uint32_t read_num_dispatchers = 10; // Maximum to get. | 651 uint32_t read_num_dispatchers = 10; // Maximum to get. |
652 EXPECT_EQ( | 652 EXPECT_EQ( |
653 MOJO_RESULT_OK, | 653 MOJO_RESULT_OK, |
654 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 654 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
655 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 655 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
656 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 656 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
657 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 657 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
658 EXPECT_STREQ(kHello, read_buffer); | 658 EXPECT_STREQ(kHello, read_buffer); |
659 EXPECT_EQ(1u, read_dispatchers.size()); | 659 EXPECT_EQ(1u, read_dispatchers.size()); |
660 EXPECT_EQ(1u, read_num_dispatchers); | 660 EXPECT_EQ(1u, read_num_dispatchers); |
661 ASSERT_TRUE(read_dispatchers[0].get()); | 661 ASSERT_TRUE(read_dispatchers[0]); |
662 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 662 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
663 | 663 |
664 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 664 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
665 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 665 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
666 | 666 |
667 // Add the waiter now, before it becomes readable to avoid a race. | 667 // Add the waiter now, before it becomes readable to avoid a race. |
668 waiter.Init(); | 668 waiter.Init(); |
669 ASSERT_EQ(MOJO_RESULT_OK, | 669 ASSERT_EQ(MOJO_RESULT_OK, |
670 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, | 670 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, |
671 nullptr)); | 671 nullptr)); |
672 | 672 |
673 // Write to "local_mp", port 1. | 673 // Write to "local_mp", port 1. |
674 EXPECT_EQ( | 674 EXPECT_EQ( |
675 MOJO_RESULT_OK, | 675 MOJO_RESULT_OK, |
676 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), | 676 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
677 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 677 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
678 | 678 |
679 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately | 679 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately |
680 // here. (We don't crash if I sleep and then close.) | 680 // here. (We don't crash if I sleep and then close.) |
681 | 681 |
682 // Wait for the dispatcher to become readable. | 682 // Wait for the dispatcher to become readable. |
683 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 683 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
684 EXPECT_EQ(456u, context); | 684 EXPECT_EQ(456u, context); |
685 hss = HandleSignalsState(); | 685 hss = HandleSignalsState(); |
686 dispatcher->RemoveWaiter(&waiter, &hss); | 686 dispatcher->RemoveAwakable(&waiter, &hss); |
687 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 687 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
688 hss.satisfied_signals); | 688 hss.satisfied_signals); |
689 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 689 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
690 | 690 |
691 // Read from the dispatcher. | 691 // Read from the dispatcher. |
692 memset(read_buffer, 0, sizeof(read_buffer)); | 692 memset(read_buffer, 0, sizeof(read_buffer)); |
693 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 693 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
694 EXPECT_EQ(MOJO_RESULT_OK, | 694 EXPECT_EQ(MOJO_RESULT_OK, |
695 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 695 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
696 MakeUserPointer(&read_buffer_size), 0, | 696 MakeUserPointer(&read_buffer_size), 0, |
697 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 697 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
698 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 698 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
699 EXPECT_STREQ(kHello, read_buffer); | 699 EXPECT_STREQ(kHello, read_buffer); |
700 | 700 |
701 // Prepare to wait on "local_mp", port 1. | 701 // Prepare to wait on "local_mp", port 1. |
702 waiter.Init(); | 702 waiter.Init(); |
703 ASSERT_EQ(MOJO_RESULT_OK, | 703 ASSERT_EQ(MOJO_RESULT_OK, |
704 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 704 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
705 nullptr)); | 705 nullptr)); |
706 | 706 |
707 // Write to the dispatcher. | 707 // Write to the dispatcher. |
708 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 708 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
709 UserPointer<const void>(kHello), sizeof(kHello), | 709 UserPointer<const void>(kHello), sizeof(kHello), |
710 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 710 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
711 | 711 |
712 // Wait. | 712 // Wait. |
713 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 713 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
714 EXPECT_EQ(789u, context); | 714 EXPECT_EQ(789u, context); |
715 hss = HandleSignalsState(); | 715 hss = HandleSignalsState(); |
716 local_mp->RemoveWaiter(1, &waiter, &hss); | 716 local_mp->RemoveAwakable(1, &waiter, &hss); |
717 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 717 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
718 hss.satisfied_signals); | 718 hss.satisfied_signals); |
719 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 719 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
720 | 720 |
721 // Read from "local_mp", port 1. | 721 // Read from "local_mp", port 1. |
722 memset(read_buffer, 0, sizeof(read_buffer)); | 722 memset(read_buffer, 0, sizeof(read_buffer)); |
723 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 723 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
724 EXPECT_EQ(MOJO_RESULT_OK, | 724 EXPECT_EQ(MOJO_RESULT_OK, |
725 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 725 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
726 MakeUserPointer(&read_buffer_size), nullptr, | 726 MakeUserPointer(&read_buffer_size), nullptr, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); | 780 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); |
781 scoped_refptr<ChannelEndpoint> ep1; | 781 scoped_refptr<ChannelEndpoint> ep1; |
782 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 782 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
783 BootstrapChannelEndpoints(ep0, ep1); | 783 BootstrapChannelEndpoints(ep0, ep1); |
784 | 784 |
785 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 785 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
786 // it later, it might already be readable.) | 786 // it later, it might already be readable.) |
787 waiter.Init(); | 787 waiter.Init(); |
788 ASSERT_EQ( | 788 ASSERT_EQ( |
789 MOJO_RESULT_OK, | 789 MOJO_RESULT_OK, |
790 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 790 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
791 | 791 |
792 // Write to MP 0, port 0. | 792 // Write to MP 0, port 0. |
793 { | 793 { |
794 DispatcherTransport transport( | 794 DispatcherTransport transport( |
795 test::DispatcherTryStartTransport(dispatcher.get())); | 795 test::DispatcherTryStartTransport(dispatcher.get())); |
796 EXPECT_TRUE(transport.is_valid()); | 796 EXPECT_TRUE(transport.is_valid()); |
797 | 797 |
798 std::vector<DispatcherTransport> transports; | 798 std::vector<DispatcherTransport> transports; |
799 transports.push_back(transport); | 799 transports.push_back(transport); |
800 EXPECT_EQ( | 800 EXPECT_EQ( |
801 MOJO_RESULT_OK, | 801 MOJO_RESULT_OK, |
802 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 802 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
803 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 803 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
804 transport.End(); | 804 transport.End(); |
805 | 805 |
806 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 806 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
807 // |dispatcher| is destroyed. | 807 // |dispatcher| is destroyed. |
808 EXPECT_TRUE(dispatcher->HasOneRef()); | 808 EXPECT_TRUE(dispatcher->HasOneRef()); |
809 dispatcher = nullptr; | 809 dispatcher = nullptr; |
810 } | 810 } |
811 | 811 |
812 // Wait. | 812 // Wait. |
813 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 813 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
814 EXPECT_EQ(123u, context); | 814 EXPECT_EQ(123u, context); |
815 hss = HandleSignalsState(); | 815 hss = HandleSignalsState(); |
816 mp1->RemoveWaiter(1, &waiter, &hss); | 816 mp1->RemoveAwakable(1, &waiter, &hss); |
817 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 817 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
818 hss.satisfied_signals); | 818 hss.satisfied_signals); |
819 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 819 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
820 | 820 |
821 // Read from MP 1, port 1. | 821 // Read from MP 1, port 1. |
822 char read_buffer[100] = {0}; | 822 char read_buffer[100] = {0}; |
823 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 823 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
824 DispatcherVector read_dispatchers; | 824 DispatcherVector read_dispatchers; |
825 uint32_t read_num_dispatchers = 10; // Maximum to get. | 825 uint32_t read_num_dispatchers = 10; // Maximum to get. |
826 EXPECT_EQ( | 826 EXPECT_EQ( |
827 MOJO_RESULT_OK, | 827 MOJO_RESULT_OK, |
828 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 828 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
829 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 829 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
830 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 830 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
831 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 831 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
832 EXPECT_STREQ(kHello, read_buffer); | 832 EXPECT_STREQ(kHello, read_buffer); |
833 EXPECT_EQ(1u, read_dispatchers.size()); | 833 EXPECT_EQ(1u, read_dispatchers.size()); |
834 EXPECT_EQ(1u, read_num_dispatchers); | 834 EXPECT_EQ(1u, read_num_dispatchers); |
835 ASSERT_TRUE(read_dispatchers[0].get()); | 835 ASSERT_TRUE(read_dispatchers[0]); |
836 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 836 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
837 | 837 |
838 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 838 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
839 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 839 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
840 | 840 |
841 // |dispatcher| should already be readable and not writable. | 841 // |dispatcher| should already be readable and not writable. |
842 hss = dispatcher->GetHandleSignalsState(); | 842 hss = dispatcher->GetHandleSignalsState(); |
843 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 843 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
844 hss.satisfied_signals); | 844 hss.satisfied_signals); |
845 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 845 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 scoped_refptr<ChannelEndpoint> ep1; | 896 scoped_refptr<ChannelEndpoint> ep1; |
897 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 897 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
898 BootstrapChannelEndpoints(ep0, ep1); | 898 BootstrapChannelEndpoints(ep0, ep1); |
899 | 899 |
900 // We'll try to pass this dispatcher. | 900 // We'll try to pass this dispatcher. |
901 scoped_refptr<SharedBufferDispatcher> dispatcher; | 901 scoped_refptr<SharedBufferDispatcher> dispatcher; |
902 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( | 902 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( |
903 platform_support(), | 903 platform_support(), |
904 SharedBufferDispatcher::kDefaultCreateOptions, | 904 SharedBufferDispatcher::kDefaultCreateOptions, |
905 100, &dispatcher)); | 905 100, &dispatcher)); |
906 ASSERT_TRUE(dispatcher.get()); | 906 ASSERT_TRUE(dispatcher); |
907 | 907 |
908 // Make a mapping. | 908 // Make a mapping. |
909 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping0; | 909 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping0; |
910 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( | 910 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( |
911 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); | 911 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); |
912 ASSERT_TRUE(mapping0); | 912 ASSERT_TRUE(mapping0); |
913 ASSERT_TRUE(mapping0->GetBase()); | 913 ASSERT_TRUE(mapping0->GetBase()); |
914 ASSERT_EQ(100u, mapping0->GetLength()); | 914 ASSERT_EQ(100u, mapping0->GetLength()); |
915 static_cast<char*>(mapping0->GetBase())[0] = 'A'; | 915 static_cast<char*>(mapping0->GetBase())[0] = 'A'; |
916 static_cast<char*>(mapping0->GetBase())[50] = 'B'; | 916 static_cast<char*>(mapping0->GetBase())[50] = 'B'; |
917 static_cast<char*>(mapping0->GetBase())[99] = 'C'; | 917 static_cast<char*>(mapping0->GetBase())[99] = 'C'; |
918 | 918 |
919 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 919 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
920 // it later, it might already be readable.) | 920 // it later, it might already be readable.) |
921 waiter.Init(); | 921 waiter.Init(); |
922 ASSERT_EQ( | 922 ASSERT_EQ( |
923 MOJO_RESULT_OK, | 923 MOJO_RESULT_OK, |
924 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 924 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
925 | 925 |
926 // Write to MP 0, port 0. | 926 // Write to MP 0, port 0. |
927 { | 927 { |
928 DispatcherTransport transport( | 928 DispatcherTransport transport( |
929 test::DispatcherTryStartTransport(dispatcher.get())); | 929 test::DispatcherTryStartTransport(dispatcher.get())); |
930 EXPECT_TRUE(transport.is_valid()); | 930 EXPECT_TRUE(transport.is_valid()); |
931 | 931 |
932 std::vector<DispatcherTransport> transports; | 932 std::vector<DispatcherTransport> transports; |
933 transports.push_back(transport); | 933 transports.push_back(transport); |
934 EXPECT_EQ( | 934 EXPECT_EQ( |
935 MOJO_RESULT_OK, | 935 MOJO_RESULT_OK, |
936 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 936 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
937 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 937 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
938 transport.End(); | 938 transport.End(); |
939 | 939 |
940 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 940 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
941 // |dispatcher| is destroyed. | 941 // |dispatcher| is destroyed. |
942 EXPECT_TRUE(dispatcher->HasOneRef()); | 942 EXPECT_TRUE(dispatcher->HasOneRef()); |
943 dispatcher = nullptr; | 943 dispatcher = nullptr; |
944 } | 944 } |
945 | 945 |
946 // Wait. | 946 // Wait. |
947 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 947 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
948 EXPECT_EQ(123u, context); | 948 EXPECT_EQ(123u, context); |
949 hss = HandleSignalsState(); | 949 hss = HandleSignalsState(); |
950 mp1->RemoveWaiter(1, &waiter, &hss); | 950 mp1->RemoveAwakable(1, &waiter, &hss); |
951 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 951 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
952 hss.satisfied_signals); | 952 hss.satisfied_signals); |
953 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 953 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
954 | 954 |
955 // Read from MP 1, port 1. | 955 // Read from MP 1, port 1. |
956 char read_buffer[100] = {0}; | 956 char read_buffer[100] = {0}; |
957 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 957 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
958 DispatcherVector read_dispatchers; | 958 DispatcherVector read_dispatchers; |
959 uint32_t read_num_dispatchers = 10; // Maximum to get. | 959 uint32_t read_num_dispatchers = 10; // Maximum to get. |
960 EXPECT_EQ( | 960 EXPECT_EQ( |
961 MOJO_RESULT_OK, | 961 MOJO_RESULT_OK, |
962 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 962 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
963 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 963 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
964 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 964 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
965 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 965 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
966 EXPECT_STREQ(kHello, read_buffer); | 966 EXPECT_STREQ(kHello, read_buffer); |
967 EXPECT_EQ(1u, read_dispatchers.size()); | 967 EXPECT_EQ(1u, read_dispatchers.size()); |
968 EXPECT_EQ(1u, read_num_dispatchers); | 968 EXPECT_EQ(1u, read_num_dispatchers); |
969 ASSERT_TRUE(read_dispatchers[0].get()); | 969 ASSERT_TRUE(read_dispatchers[0]); |
970 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 970 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
971 | 971 |
972 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, read_dispatchers[0]->GetType()); | 972 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, read_dispatchers[0]->GetType()); |
973 dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()); | 973 dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()); |
974 | 974 |
975 // Make another mapping. | 975 // Make another mapping. |
976 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; | 976 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; |
977 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( | 977 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( |
978 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); | 978 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); |
979 ASSERT_TRUE(mapping1); | 979 ASSERT_TRUE(mapping1); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 // be passed. | 1033 // be passed. |
1034 scoped_refptr<PlatformHandleDispatcher> dispatcher( | 1034 scoped_refptr<PlatformHandleDispatcher> dispatcher( |
1035 new PlatformHandleDispatcher( | 1035 new PlatformHandleDispatcher( |
1036 mojo::test::PlatformHandleFromFILE(fp.Pass()))); | 1036 mojo::test::PlatformHandleFromFILE(fp.Pass()))); |
1037 | 1037 |
1038 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 1038 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
1039 // it later, it might already be readable.) | 1039 // it later, it might already be readable.) |
1040 waiter.Init(); | 1040 waiter.Init(); |
1041 ASSERT_EQ( | 1041 ASSERT_EQ( |
1042 MOJO_RESULT_OK, | 1042 MOJO_RESULT_OK, |
1043 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 1043 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
1044 | 1044 |
1045 // Write to MP 0, port 0. | 1045 // Write to MP 0, port 0. |
1046 { | 1046 { |
1047 DispatcherTransport transport( | 1047 DispatcherTransport transport( |
1048 test::DispatcherTryStartTransport(dispatcher.get())); | 1048 test::DispatcherTryStartTransport(dispatcher.get())); |
1049 EXPECT_TRUE(transport.is_valid()); | 1049 EXPECT_TRUE(transport.is_valid()); |
1050 | 1050 |
1051 std::vector<DispatcherTransport> transports; | 1051 std::vector<DispatcherTransport> transports; |
1052 transports.push_back(transport); | 1052 transports.push_back(transport); |
1053 EXPECT_EQ( | 1053 EXPECT_EQ( |
1054 MOJO_RESULT_OK, | 1054 MOJO_RESULT_OK, |
1055 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), | 1055 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), |
1056 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1056 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
1057 transport.End(); | 1057 transport.End(); |
1058 | 1058 |
1059 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 1059 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
1060 // |dispatcher| is destroyed. | 1060 // |dispatcher| is destroyed. |
1061 EXPECT_TRUE(dispatcher->HasOneRef()); | 1061 EXPECT_TRUE(dispatcher->HasOneRef()); |
1062 dispatcher = nullptr; | 1062 dispatcher = nullptr; |
1063 } | 1063 } |
1064 | 1064 |
1065 // Wait. | 1065 // Wait. |
1066 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1066 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
1067 EXPECT_EQ(123u, context); | 1067 EXPECT_EQ(123u, context); |
1068 hss = HandleSignalsState(); | 1068 hss = HandleSignalsState(); |
1069 mp1->RemoveWaiter(1, &waiter, &hss); | 1069 mp1->RemoveAwakable(1, &waiter, &hss); |
1070 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1070 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
1071 hss.satisfied_signals); | 1071 hss.satisfied_signals); |
1072 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1072 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
1073 | 1073 |
1074 // Read from MP 1, port 1. | 1074 // Read from MP 1, port 1. |
1075 char read_buffer[100] = {0}; | 1075 char read_buffer[100] = {0}; |
1076 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1076 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
1077 DispatcherVector read_dispatchers; | 1077 DispatcherVector read_dispatchers; |
1078 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1078 uint32_t read_num_dispatchers = 10; // Maximum to get. |
1079 EXPECT_EQ( | 1079 EXPECT_EQ( |
1080 MOJO_RESULT_OK, | 1080 MOJO_RESULT_OK, |
1081 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1081 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
1082 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1082 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
1083 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 1083 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
1084 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 1084 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
1085 EXPECT_STREQ(kWorld, read_buffer); | 1085 EXPECT_STREQ(kWorld, read_buffer); |
1086 EXPECT_EQ(1u, read_dispatchers.size()); | 1086 EXPECT_EQ(1u, read_dispatchers.size()); |
1087 EXPECT_EQ(1u, read_num_dispatchers); | 1087 EXPECT_EQ(1u, read_num_dispatchers); |
1088 ASSERT_TRUE(read_dispatchers[0].get()); | 1088 ASSERT_TRUE(read_dispatchers[0]); |
1089 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 1089 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
1090 | 1090 |
1091 EXPECT_EQ(Dispatcher::kTypePlatformHandle, read_dispatchers[0]->GetType()); | 1091 EXPECT_EQ(Dispatcher::kTypePlatformHandle, read_dispatchers[0]->GetType()); |
1092 dispatcher = | 1092 dispatcher = |
1093 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()); | 1093 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()); |
1094 | 1094 |
1095 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass(); | 1095 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass(); |
1096 EXPECT_TRUE(h.is_valid()); | 1096 EXPECT_TRUE(h.is_valid()); |
1097 | 1097 |
1098 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass(); | 1098 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass(); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 scoped_refptr<MessagePipeDispatcher> dispatcher( | 1170 scoped_refptr<MessagePipeDispatcher> dispatcher( |
1171 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); | 1171 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); |
1172 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); | 1172 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); |
1173 dispatcher->Init(local_mp, 0); | 1173 dispatcher->Init(local_mp, 0); |
1174 | 1174 |
1175 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 1175 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
1176 // it later, it might already be readable.) | 1176 // it later, it might already be readable.) |
1177 waiter.Init(); | 1177 waiter.Init(); |
1178 ASSERT_EQ( | 1178 ASSERT_EQ( |
1179 MOJO_RESULT_OK, | 1179 MOJO_RESULT_OK, |
1180 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); | 1180 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); |
1181 | 1181 |
1182 // Write to MP 0, port 0. | 1182 // Write to MP 0, port 0. |
1183 { | 1183 { |
1184 DispatcherTransport transport( | 1184 DispatcherTransport transport( |
1185 test::DispatcherTryStartTransport(dispatcher.get())); | 1185 test::DispatcherTryStartTransport(dispatcher.get())); |
1186 EXPECT_TRUE(transport.is_valid()); | 1186 EXPECT_TRUE(transport.is_valid()); |
1187 | 1187 |
1188 std::vector<DispatcherTransport> transports; | 1188 std::vector<DispatcherTransport> transports; |
1189 transports.push_back(transport); | 1189 transports.push_back(transport); |
1190 EXPECT_EQ( | 1190 EXPECT_EQ( |
1191 MOJO_RESULT_OK, | 1191 MOJO_RESULT_OK, |
1192 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 1192 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
1193 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1193 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
1194 transport.End(); | 1194 transport.End(); |
1195 | 1195 |
1196 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 1196 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
1197 // |dispatcher| is destroyed. | 1197 // |dispatcher| is destroyed. |
1198 EXPECT_TRUE(dispatcher->HasOneRef()); | 1198 EXPECT_TRUE(dispatcher->HasOneRef()); |
1199 dispatcher = nullptr; | 1199 dispatcher = nullptr; |
1200 } | 1200 } |
1201 | 1201 |
1202 // Wait. | 1202 // Wait. |
1203 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1203 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
1204 EXPECT_EQ(123u, context); | 1204 EXPECT_EQ(123u, context); |
1205 hss = HandleSignalsState(); | 1205 hss = HandleSignalsState(); |
1206 mp1->RemoveWaiter(1, &waiter, &hss); | 1206 mp1->RemoveAwakable(1, &waiter, &hss); |
1207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
1208 hss.satisfied_signals); | 1208 hss.satisfied_signals); |
1209 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1209 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
1210 | 1210 |
1211 // Read from MP 1, port 1. | 1211 // Read from MP 1, port 1. |
1212 char read_buffer[100] = {0}; | 1212 char read_buffer[100] = {0}; |
1213 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1213 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
1214 DispatcherVector read_dispatchers; | 1214 DispatcherVector read_dispatchers; |
1215 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1215 uint32_t read_num_dispatchers = 10; // Maximum to get. |
1216 EXPECT_EQ( | 1216 EXPECT_EQ( |
1217 MOJO_RESULT_OK, | 1217 MOJO_RESULT_OK, |
1218 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1218 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
1219 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1219 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
1220 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 1220 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
1221 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1221 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
1222 EXPECT_STREQ(kHello, read_buffer); | 1222 EXPECT_STREQ(kHello, read_buffer); |
1223 EXPECT_EQ(1u, read_dispatchers.size()); | 1223 EXPECT_EQ(1u, read_dispatchers.size()); |
1224 EXPECT_EQ(1u, read_num_dispatchers); | 1224 EXPECT_EQ(1u, read_num_dispatchers); |
1225 ASSERT_TRUE(read_dispatchers[0].get()); | 1225 ASSERT_TRUE(read_dispatchers[0]); |
1226 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 1226 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
1227 | 1227 |
1228 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 1228 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
1229 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 1229 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
1230 read_dispatchers.clear(); | 1230 read_dispatchers.clear(); |
1231 | 1231 |
1232 // Now pass it back. | 1232 // Now pass it back. |
1233 | 1233 |
1234 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do | 1234 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do |
1235 // it later, it might already be readable.) | 1235 // it later, it might already be readable.) |
1236 waiter.Init(); | 1236 waiter.Init(); |
1237 ASSERT_EQ( | 1237 ASSERT_EQ( |
1238 MOJO_RESULT_OK, | 1238 MOJO_RESULT_OK, |
1239 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); | 1239 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); |
1240 | 1240 |
1241 // Write to MP 1, port 1. | 1241 // Write to MP 1, port 1. |
1242 { | 1242 { |
1243 DispatcherTransport transport( | 1243 DispatcherTransport transport( |
1244 test::DispatcherTryStartTransport(dispatcher.get())); | 1244 test::DispatcherTryStartTransport(dispatcher.get())); |
1245 EXPECT_TRUE(transport.is_valid()); | 1245 EXPECT_TRUE(transport.is_valid()); |
1246 | 1246 |
1247 std::vector<DispatcherTransport> transports; | 1247 std::vector<DispatcherTransport> transports; |
1248 transports.push_back(transport); | 1248 transports.push_back(transport); |
1249 EXPECT_EQ( | 1249 EXPECT_EQ( |
1250 MOJO_RESULT_OK, | 1250 MOJO_RESULT_OK, |
1251 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), | 1251 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), |
1252 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1252 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
1253 transport.End(); | 1253 transport.End(); |
1254 | 1254 |
1255 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 1255 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
1256 // |dispatcher| is destroyed. | 1256 // |dispatcher| is destroyed. |
1257 EXPECT_TRUE(dispatcher->HasOneRef()); | 1257 EXPECT_TRUE(dispatcher->HasOneRef()); |
1258 dispatcher = nullptr; | 1258 dispatcher = nullptr; |
1259 } | 1259 } |
1260 | 1260 |
1261 // Wait. | 1261 // Wait. |
1262 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1262 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
1263 EXPECT_EQ(456u, context); | 1263 EXPECT_EQ(456u, context); |
1264 hss = HandleSignalsState(); | 1264 hss = HandleSignalsState(); |
1265 mp0->RemoveWaiter(0, &waiter, &hss); | 1265 mp0->RemoveAwakable(0, &waiter, &hss); |
1266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
1267 hss.satisfied_signals); | 1267 hss.satisfied_signals); |
1268 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1268 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
1269 | 1269 |
1270 // Read from MP 0, port 0. | 1270 // Read from MP 0, port 0. |
1271 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1271 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
1272 read_num_dispatchers = 10; // Maximum to get. | 1272 read_num_dispatchers = 10; // Maximum to get. |
1273 EXPECT_EQ( | 1273 EXPECT_EQ( |
1274 MOJO_RESULT_OK, | 1274 MOJO_RESULT_OK, |
1275 mp0->ReadMessage(0, UserPointer<void>(read_buffer), | 1275 mp0->ReadMessage(0, UserPointer<void>(read_buffer), |
1276 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1276 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
1277 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 1277 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
1278 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 1278 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
1279 EXPECT_STREQ(kWorld, read_buffer); | 1279 EXPECT_STREQ(kWorld, read_buffer); |
1280 EXPECT_EQ(1u, read_dispatchers.size()); | 1280 EXPECT_EQ(1u, read_dispatchers.size()); |
1281 EXPECT_EQ(1u, read_num_dispatchers); | 1281 EXPECT_EQ(1u, read_num_dispatchers); |
1282 ASSERT_TRUE(read_dispatchers[0].get()); | 1282 ASSERT_TRUE(read_dispatchers[0]); |
1283 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 1283 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
1284 | 1284 |
1285 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 1285 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
1286 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 1286 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
1287 read_dispatchers.clear(); | 1287 read_dispatchers.clear(); |
1288 | 1288 |
1289 // Add the waiter now, before it becomes readable to avoid a race. | 1289 // Add the waiter now, before it becomes readable to avoid a race. |
1290 waiter.Init(); | 1290 waiter.Init(); |
1291 ASSERT_EQ(MOJO_RESULT_OK, | 1291 ASSERT_EQ(MOJO_RESULT_OK, |
1292 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 1292 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
1293 nullptr)); | 1293 nullptr)); |
1294 | 1294 |
1295 // Write to "local_mp", port 1. | 1295 // Write to "local_mp", port 1. |
1296 EXPECT_EQ( | 1296 EXPECT_EQ( |
1297 MOJO_RESULT_OK, | 1297 MOJO_RESULT_OK, |
1298 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), | 1298 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
1299 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1299 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
1300 | 1300 |
1301 // Wait for the dispatcher to become readable. | 1301 // Wait for the dispatcher to become readable. |
1302 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1302 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
1303 EXPECT_EQ(789u, context); | 1303 EXPECT_EQ(789u, context); |
1304 hss = HandleSignalsState(); | 1304 hss = HandleSignalsState(); |
1305 dispatcher->RemoveWaiter(&waiter, &hss); | 1305 dispatcher->RemoveAwakable(&waiter, &hss); |
1306 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1306 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
1307 hss.satisfied_signals); | 1307 hss.satisfied_signals); |
1308 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1308 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
1309 | 1309 |
1310 // Read from the dispatcher. | 1310 // Read from the dispatcher. |
1311 memset(read_buffer, 0, sizeof(read_buffer)); | 1311 memset(read_buffer, 0, sizeof(read_buffer)); |
1312 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1312 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
1313 EXPECT_EQ(MOJO_RESULT_OK, | 1313 EXPECT_EQ(MOJO_RESULT_OK, |
1314 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 1314 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
1315 MakeUserPointer(&read_buffer_size), 0, | 1315 MakeUserPointer(&read_buffer_size), 0, |
1316 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1316 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
1317 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1317 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
1318 EXPECT_STREQ(kHello, read_buffer); | 1318 EXPECT_STREQ(kHello, read_buffer); |
1319 | 1319 |
1320 // Prepare to wait on "local_mp", port 1. | 1320 // Prepare to wait on "local_mp", port 1. |
1321 waiter.Init(); | 1321 waiter.Init(); |
1322 ASSERT_EQ(MOJO_RESULT_OK, | 1322 ASSERT_EQ(MOJO_RESULT_OK, |
1323 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 1323 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
1324 nullptr)); | 1324 nullptr)); |
1325 | 1325 |
1326 // Write to the dispatcher. | 1326 // Write to the dispatcher. |
1327 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 1327 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
1328 UserPointer<const void>(kHello), sizeof(kHello), | 1328 UserPointer<const void>(kHello), sizeof(kHello), |
1329 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1329 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
1330 | 1330 |
1331 // Wait. | 1331 // Wait. |
1332 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1332 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
1333 EXPECT_EQ(789u, context); | 1333 EXPECT_EQ(789u, context); |
1334 hss = HandleSignalsState(); | 1334 hss = HandleSignalsState(); |
1335 local_mp->RemoveWaiter(1, &waiter, &hss); | 1335 local_mp->RemoveAwakable(1, &waiter, &hss); |
1336 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1336 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
1337 hss.satisfied_signals); | 1337 hss.satisfied_signals); |
1338 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 1338 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
1339 | 1339 |
1340 // Read from "local_mp", port 1. | 1340 // Read from "local_mp", port 1. |
1341 memset(read_buffer, 0, sizeof(read_buffer)); | 1341 memset(read_buffer, 0, sizeof(read_buffer)); |
1342 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1342 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
1343 EXPECT_EQ(MOJO_RESULT_OK, | 1343 EXPECT_EQ(MOJO_RESULT_OK, |
1344 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 1344 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
1345 MakeUserPointer(&read_buffer_size), nullptr, | 1345 MakeUserPointer(&read_buffer_size), nullptr, |
1346 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1346 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
1347 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1347 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
1348 EXPECT_STREQ(kHello, read_buffer); | 1348 EXPECT_STREQ(kHello, read_buffer); |
1349 | 1349 |
1350 // TODO(vtl): Also test the cases where messages are written and read (at | 1350 // TODO(vtl): Also test the cases where messages are written and read (at |
1351 // various points) on the message pipe being passed around. | 1351 // various points) on the message pipe being passed around. |
1352 | 1352 |
1353 // Close everything that belongs to us. | 1353 // Close everything that belongs to us. |
1354 mp0->Close(0); | 1354 mp0->Close(0); |
1355 mp1->Close(1); | 1355 mp1->Close(1); |
1356 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 1356 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
1357 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. | 1357 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. |
1358 local_mp->Close(1); | 1358 local_mp->Close(1); |
1359 } | 1359 } |
1360 | 1360 |
1361 } // namespace | 1361 } // namespace |
1362 } // namespace system | 1362 } // namespace system |
1363 } // namespace mojo | 1363 } // namespace mojo |
OLD | NEW |