| 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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. | 195 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. |
| 196 | 196 |
| 197 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 197 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
| 198 // it later, it might already be readable.) | 198 // it later, it might already be readable.) |
| 199 waiter.Init(); | 199 waiter.Init(); |
| 200 ASSERT_EQ(MOJO_RESULT_OK, | 200 ASSERT_EQ(MOJO_RESULT_OK, |
| 201 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); | 201 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); |
| 202 | 202 |
| 203 // Write to MP 0, port 0. | 203 // Write to MP 0, port 0. |
| 204 EXPECT_EQ(MOJO_RESULT_OK, | 204 EXPECT_EQ(MOJO_RESULT_OK, |
| 205 mp0->WriteMessage(0, | 205 mp0->WriteMessage(0, UserPointer<const void>(kHello), |
| 206 kHello, sizeof(kHello), | 206 sizeof(kHello), NULL, |
| 207 NULL, | |
| 208 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 207 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 209 | 208 |
| 210 // Wait. | 209 // Wait. |
| 211 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 210 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 212 EXPECT_EQ(123u, context); | 211 EXPECT_EQ(123u, context); |
| 213 mp1->RemoveWaiter(1, &waiter); | 212 mp1->RemoveWaiter(1, &waiter); |
| 214 | 213 |
| 215 // Read from MP 1, port 1. | 214 // Read from MP 1, port 1. |
| 216 EXPECT_EQ(MOJO_RESULT_OK, | 215 EXPECT_EQ(MOJO_RESULT_OK, |
| 217 mp1->ReadMessage(1, UserPointer<void>(buffer), | 216 mp1->ReadMessage(1, UserPointer<void>(buffer), |
| 218 MakeUserPointer(&buffer_size), NULL, NULL, | 217 MakeUserPointer(&buffer_size), NULL, NULL, |
| 219 MOJO_READ_MESSAGE_FLAG_NONE)); | 218 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 220 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 219 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
| 221 EXPECT_STREQ(kHello, buffer); | 220 EXPECT_STREQ(kHello, buffer); |
| 222 | 221 |
| 223 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. | 222 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. |
| 224 | 223 |
| 225 waiter.Init(); | 224 waiter.Init(); |
| 226 ASSERT_EQ(MOJO_RESULT_OK, | 225 ASSERT_EQ(MOJO_RESULT_OK, |
| 227 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); | 226 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); |
| 228 | 227 |
| 229 EXPECT_EQ(MOJO_RESULT_OK, | 228 EXPECT_EQ(MOJO_RESULT_OK, |
| 230 mp1->WriteMessage(1, | 229 mp1->WriteMessage(1, UserPointer<const void>(kWorld), |
| 231 kWorld, sizeof(kWorld), | 230 sizeof(kWorld), NULL, |
| 232 NULL, | |
| 233 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 231 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 234 | 232 |
| 235 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 233 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 236 EXPECT_EQ(456u, context); | 234 EXPECT_EQ(456u, context); |
| 237 mp0->RemoveWaiter(0, &waiter); | 235 mp0->RemoveWaiter(0, &waiter); |
| 238 | 236 |
| 239 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 237 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 240 EXPECT_EQ(MOJO_RESULT_OK, | 238 EXPECT_EQ(MOJO_RESULT_OK, |
| 241 mp0->ReadMessage(0, UserPointer<void>(buffer), | 239 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 242 MakeUserPointer(&buffer_size), NULL, NULL, | 240 MakeUserPointer(&buffer_size), NULL, NULL, |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()))); | 292 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()))); |
| 295 ConnectMessagePipes(mp2, mp3); | 293 ConnectMessagePipes(mp2, mp3); |
| 296 | 294 |
| 297 // Write: MP 2, port 0 -> MP 3, port 1. | 295 // Write: MP 2, port 0 -> MP 3, port 1. |
| 298 | 296 |
| 299 waiter.Init(); | 297 waiter.Init(); |
| 300 ASSERT_EQ(MOJO_RESULT_OK, | 298 ASSERT_EQ(MOJO_RESULT_OK, |
| 301 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); | 299 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); |
| 302 | 300 |
| 303 EXPECT_EQ(MOJO_RESULT_OK, | 301 EXPECT_EQ(MOJO_RESULT_OK, |
| 304 mp2->WriteMessage(0, | 302 mp2->WriteMessage(0, UserPointer<const void>(kHello), |
| 305 kHello, sizeof(kHello), | 303 sizeof(kHello), NULL, |
| 306 NULL, | |
| 307 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 304 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 308 | 305 |
| 309 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 306 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 310 EXPECT_EQ(789u, context); | 307 EXPECT_EQ(789u, context); |
| 311 mp3->RemoveWaiter(1, &waiter); | 308 mp3->RemoveWaiter(1, &waiter); |
| 312 | 309 |
| 313 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. | 310 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. |
| 314 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 311 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 315 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 312 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 316 mp0->ReadMessage(0, UserPointer<void>(buffer), | 313 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 336 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 333 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
| 337 EXPECT_STREQ(kHello, buffer); | 334 EXPECT_STREQ(kHello, buffer); |
| 338 | 335 |
| 339 // Write: MP 0, port 0 -> MP 1, port 1 again. | 336 // Write: MP 0, port 0 -> MP 1, port 1 again. |
| 340 | 337 |
| 341 waiter.Init(); | 338 waiter.Init(); |
| 342 ASSERT_EQ(MOJO_RESULT_OK, | 339 ASSERT_EQ(MOJO_RESULT_OK, |
| 343 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); | 340 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123)); |
| 344 | 341 |
| 345 EXPECT_EQ(MOJO_RESULT_OK, | 342 EXPECT_EQ(MOJO_RESULT_OK, |
| 346 mp0->WriteMessage(0, | 343 mp0->WriteMessage(0, UserPointer<const void>(kWorld), |
| 347 kWorld, sizeof(kWorld), | 344 sizeof(kWorld), NULL, |
| 348 NULL, | |
| 349 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 345 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 350 | 346 |
| 351 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 347 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 352 EXPECT_EQ(123u, context); | 348 EXPECT_EQ(123u, context); |
| 353 mp1->RemoveWaiter(1, &waiter); | 349 mp1->RemoveWaiter(1, &waiter); |
| 354 | 350 |
| 355 // Make sure there's nothing on the other ports. | 351 // Make sure there's nothing on the other ports. |
| 356 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 352 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 357 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 353 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 358 mp0->ReadMessage(0, UserPointer<void>(buffer), | 354 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 // Connect message pipes. MP 0, port 1 will be attached to channel 0 and | 389 // Connect message pipes. MP 0, port 1 will be attached to channel 0 and |
| 394 // connected to MP 1, port 0, which will be attached to channel 1. This leaves | 390 // connected to MP 1, port 0, which will be attached to channel 1. This leaves |
| 395 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints. | 391 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints. |
| 396 | 392 |
| 397 scoped_refptr<MessagePipe> mp0(new MessagePipe( | 393 scoped_refptr<MessagePipe> mp0(new MessagePipe( |
| 398 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()), | 394 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()), |
| 399 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()))); | 395 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()))); |
| 400 | 396 |
| 401 // Write to MP 0, port 0. | 397 // Write to MP 0, port 0. |
| 402 EXPECT_EQ(MOJO_RESULT_OK, | 398 EXPECT_EQ(MOJO_RESULT_OK, |
| 403 mp0->WriteMessage(0, | 399 mp0->WriteMessage(0, UserPointer<const void>(kHello), |
| 404 kHello, sizeof(kHello), | 400 sizeof(kHello), NULL, |
| 405 NULL, | |
| 406 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 401 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 407 | 402 |
| 408 BootstrapMessagePipeNoWait(0, mp0); | 403 BootstrapMessagePipeNoWait(0, mp0); |
| 409 | 404 |
| 410 | 405 |
| 411 // Close MP 0, port 0 before channel 1 is even connected. | 406 // Close MP 0, port 0 before channel 1 is even connected. |
| 412 mp0->Close(0); | 407 mp0->Close(0); |
| 413 | 408 |
| 414 scoped_refptr<MessagePipe> mp1(new MessagePipe( | 409 scoped_refptr<MessagePipe> mp1(new MessagePipe( |
| 415 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()), | 410 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()), |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 | 462 |
| 468 // Write to MP 0, port 0. | 463 // Write to MP 0, port 0. |
| 469 { | 464 { |
| 470 DispatcherTransport | 465 DispatcherTransport |
| 471 transport(test::DispatcherTryStartTransport(dispatcher.get())); | 466 transport(test::DispatcherTryStartTransport(dispatcher.get())); |
| 472 EXPECT_TRUE(transport.is_valid()); | 467 EXPECT_TRUE(transport.is_valid()); |
| 473 | 468 |
| 474 std::vector<DispatcherTransport> transports; | 469 std::vector<DispatcherTransport> transports; |
| 475 transports.push_back(transport); | 470 transports.push_back(transport); |
| 476 EXPECT_EQ(MOJO_RESULT_OK, | 471 EXPECT_EQ(MOJO_RESULT_OK, |
| 477 mp0->WriteMessage(0, kHello, sizeof(kHello), &transports, | 472 mp0->WriteMessage(0, UserPointer<const void>(kHello), |
| 473 sizeof(kHello), &transports, |
| 478 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 474 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 479 transport.End(); | 475 transport.End(); |
| 480 | 476 |
| 481 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 477 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
| 482 // |dispatcher| is destroyed. | 478 // |dispatcher| is destroyed. |
| 483 EXPECT_TRUE(dispatcher->HasOneRef()); | 479 EXPECT_TRUE(dispatcher->HasOneRef()); |
| 484 dispatcher = NULL; | 480 dispatcher = NULL; |
| 485 } | 481 } |
| 486 | 482 |
| 487 // Wait. | 483 // Wait. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 509 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 505 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
| 510 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 506 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
| 511 | 507 |
| 512 // Add the waiter now, before it becomes readable to avoid a race. | 508 // Add the waiter now, before it becomes readable to avoid a race. |
| 513 waiter.Init(); | 509 waiter.Init(); |
| 514 ASSERT_EQ(MOJO_RESULT_OK, | 510 ASSERT_EQ(MOJO_RESULT_OK, |
| 515 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); | 511 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456)); |
| 516 | 512 |
| 517 // Write to "local_mp", port 1. | 513 // Write to "local_mp", port 1. |
| 518 EXPECT_EQ(MOJO_RESULT_OK, | 514 EXPECT_EQ(MOJO_RESULT_OK, |
| 519 local_mp->WriteMessage(1, kHello, sizeof(kHello), NULL, | 515 local_mp->WriteMessage(1, UserPointer<const void>(kHello), |
| 516 sizeof(kHello), NULL, |
| 520 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 517 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 521 | 518 |
| 522 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately | 519 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately |
| 523 // here. (We don't crash if I sleep and then close.) | 520 // here. (We don't crash if I sleep and then close.) |
| 524 | 521 |
| 525 // Wait for the dispatcher to become readable. | 522 // Wait for the dispatcher to become readable. |
| 526 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 523 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 527 EXPECT_EQ(456u, context); | 524 EXPECT_EQ(456u, context); |
| 528 dispatcher->RemoveWaiter(&waiter); | 525 dispatcher->RemoveWaiter(&waiter); |
| 529 | 526 |
| 530 // Read from the dispatcher. | 527 // Read from the dispatcher. |
| 531 memset(read_buffer, 0, sizeof(read_buffer)); | 528 memset(read_buffer, 0, sizeof(read_buffer)); |
| 532 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 529 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 533 EXPECT_EQ(MOJO_RESULT_OK, | 530 EXPECT_EQ(MOJO_RESULT_OK, |
| 534 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 531 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 535 MakeUserPointer(&read_buffer_size), 0, NULL, | 532 MakeUserPointer(&read_buffer_size), 0, NULL, |
| 536 MOJO_READ_MESSAGE_FLAG_NONE)); | 533 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 537 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 534 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 538 EXPECT_STREQ(kHello, read_buffer); | 535 EXPECT_STREQ(kHello, read_buffer); |
| 539 | 536 |
| 540 // Prepare to wait on "local_mp", port 1. | 537 // Prepare to wait on "local_mp", port 1. |
| 541 waiter.Init(); | 538 waiter.Init(); |
| 542 ASSERT_EQ(MOJO_RESULT_OK, | 539 ASSERT_EQ(MOJO_RESULT_OK, |
| 543 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); | 540 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789)); |
| 544 | 541 |
| 545 // Write to the dispatcher. | 542 // Write to the dispatcher. |
| 546 EXPECT_EQ(MOJO_RESULT_OK, | 543 EXPECT_EQ(MOJO_RESULT_OK, |
| 547 dispatcher->WriteMessage(kHello, sizeof(kHello), NULL, | 544 dispatcher->WriteMessage(UserPointer<const void>(kHello), |
| 545 sizeof(kHello), NULL, |
| 548 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 546 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 549 | 547 |
| 550 // Wait. | 548 // Wait. |
| 551 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 549 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 552 EXPECT_EQ(789u, context); | 550 EXPECT_EQ(789u, context); |
| 553 local_mp->RemoveWaiter(1, &waiter); | 551 local_mp->RemoveWaiter(1, &waiter); |
| 554 | 552 |
| 555 // Read from "local_mp", port 1. | 553 // Read from "local_mp", port 1. |
| 556 memset(read_buffer, 0, sizeof(read_buffer)); | 554 memset(read_buffer, 0, sizeof(read_buffer)); |
| 557 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 555 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 | 618 |
| 621 // Write to MP 0, port 0. | 619 // Write to MP 0, port 0. |
| 622 { | 620 { |
| 623 DispatcherTransport | 621 DispatcherTransport |
| 624 transport(test::DispatcherTryStartTransport(dispatcher.get())); | 622 transport(test::DispatcherTryStartTransport(dispatcher.get())); |
| 625 EXPECT_TRUE(transport.is_valid()); | 623 EXPECT_TRUE(transport.is_valid()); |
| 626 | 624 |
| 627 std::vector<DispatcherTransport> transports; | 625 std::vector<DispatcherTransport> transports; |
| 628 transports.push_back(transport); | 626 transports.push_back(transport); |
| 629 EXPECT_EQ(MOJO_RESULT_OK, | 627 EXPECT_EQ(MOJO_RESULT_OK, |
| 630 mp0->WriteMessage(0, kHello, sizeof(kHello), &transports, | 628 mp0->WriteMessage(0, UserPointer<const void>(kHello), |
| 629 sizeof(kHello), &transports, |
| 631 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 630 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 632 transport.End(); | 631 transport.End(); |
| 633 | 632 |
| 634 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 633 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
| 635 // |dispatcher| is destroyed. | 634 // |dispatcher| is destroyed. |
| 636 EXPECT_TRUE(dispatcher->HasOneRef()); | 635 EXPECT_TRUE(dispatcher->HasOneRef()); |
| 637 dispatcher = NULL; | 636 dispatcher = NULL; |
| 638 } | 637 } |
| 639 | 638 |
| 640 // Wait. | 639 // Wait. |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 | 735 |
| 737 // Write to MP 0, port 0. | 736 // Write to MP 0, port 0. |
| 738 { | 737 { |
| 739 DispatcherTransport | 738 DispatcherTransport |
| 740 transport(test::DispatcherTryStartTransport(dispatcher.get())); | 739 transport(test::DispatcherTryStartTransport(dispatcher.get())); |
| 741 EXPECT_TRUE(transport.is_valid()); | 740 EXPECT_TRUE(transport.is_valid()); |
| 742 | 741 |
| 743 std::vector<DispatcherTransport> transports; | 742 std::vector<DispatcherTransport> transports; |
| 744 transports.push_back(transport); | 743 transports.push_back(transport); |
| 745 EXPECT_EQ(MOJO_RESULT_OK, | 744 EXPECT_EQ(MOJO_RESULT_OK, |
| 746 mp0->WriteMessage(0, kWorld, sizeof(kWorld), &transports, | 745 mp0->WriteMessage(0, UserPointer<const void>(kWorld), |
| 746 sizeof(kWorld), &transports, |
| 747 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 747 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 748 transport.End(); | 748 transport.End(); |
| 749 | 749 |
| 750 // |dispatcher| should have been closed. This is |DCHECK()|ed when the | 750 // |dispatcher| should have been closed. This is |DCHECK()|ed when the |
| 751 // |dispatcher| is destroyed. | 751 // |dispatcher| is destroyed. |
| 752 EXPECT_TRUE(dispatcher->HasOneRef()); | 752 EXPECT_TRUE(dispatcher->HasOneRef()); |
| 753 dispatcher = NULL; | 753 dispatcher = NULL; |
| 754 } | 754 } |
| 755 | 755 |
| 756 // Wait. | 756 // Wait. |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 | 835 |
| 836 mp1->Close(1); | 836 mp1->Close(1); |
| 837 | 837 |
| 838 RestoreInitialState(); | 838 RestoreInitialState(); |
| 839 } | 839 } |
| 840 } | 840 } |
| 841 | 841 |
| 842 } // namespace | 842 } // namespace |
| 843 } // namespace system | 843 } // namespace system |
| 844 } // namespace mojo | 844 } // namespace mojo |
| OLD | NEW |