| 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 "mojo/public/cpp/bindings/lib/connector.h" | 5 #include "mojo/public/cpp/bindings/lib/connector.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdlib.h> | 8 #include <stdlib.h> |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 TEST_F(ConnectorTest, PauseWithQueuedMessages) { | 520 TEST_F(ConnectorTest, PauseWithQueuedMessages) { |
| 521 internal::Connector connector0(std::move(handle0_), | 521 internal::Connector connector0(std::move(handle0_), |
| 522 internal::Connector::SINGLE_THREADED_SEND, | 522 internal::Connector::SINGLE_THREADED_SEND, |
| 523 base::ThreadTaskRunnerHandle::Get()); | 523 base::ThreadTaskRunnerHandle::Get()); |
| 524 internal::Connector connector1(std::move(handle1_), | 524 internal::Connector connector1(std::move(handle1_), |
| 525 internal::Connector::SINGLE_THREADED_SEND, | 525 internal::Connector::SINGLE_THREADED_SEND, |
| 526 base::ThreadTaskRunnerHandle::Get()); | 526 base::ThreadTaskRunnerHandle::Get()); |
| 527 | 527 |
| 528 const char kText[] = "hello world"; | 528 const char kText[] = "hello world"; |
| 529 | 529 |
| 530 // Queue up two messages. |
| 530 Message message; | 531 Message message; |
| 531 AllocMessage(kText, &message); | 532 AllocMessage(kText, &message); |
| 532 | |
| 533 // Queue up two messages. | |
| 534 connector0.Accept(&message); | 533 connector0.Accept(&message); |
| 534 AllocMessage(kText, &message); |
| 535 connector0.Accept(&message); | 535 connector0.Accept(&message); |
| 536 | 536 |
| 537 base::RunLoop run_loop; | 537 base::RunLoop run_loop; |
| 538 // Configure the accumulator such that it pauses after the first message is | 538 // Configure the accumulator such that it pauses after the first message is |
| 539 // received. | 539 // received. |
| 540 MessageAccumulator accumulator([&connector1, &run_loop]() { | 540 MessageAccumulator accumulator([&connector1, &run_loop]() { |
| 541 connector1.PauseIncomingMethodCallProcessing(); | 541 connector1.PauseIncomingMethodCallProcessing(); |
| 542 run_loop.Quit(); | 542 run_loop.Quit(); |
| 543 }); | 543 }); |
| 544 connector1.set_incoming_receiver(&accumulator); | 544 connector1.set_incoming_receiver(&accumulator); |
| 545 | 545 |
| 546 run_loop.Run(); | 546 run_loop.Run(); |
| 547 | 547 |
| 548 // As we paused after the first message we should only have gotten one | 548 // As we paused after the first message we should only have gotten one |
| 549 // message. | 549 // message. |
| 550 ASSERT_EQ(1u, accumulator.size()); | 550 ASSERT_EQ(1u, accumulator.size()); |
| 551 } | 551 } |
| 552 | 552 |
| 553 TEST_F(ConnectorTest, ProcessWhenNested) { | 553 TEST_F(ConnectorTest, ProcessWhenNested) { |
| 554 internal::Connector connector0(std::move(handle0_), | 554 internal::Connector connector0(std::move(handle0_), |
| 555 internal::Connector::SINGLE_THREADED_SEND, | 555 internal::Connector::SINGLE_THREADED_SEND, |
| 556 base::ThreadTaskRunnerHandle::Get()); | 556 base::ThreadTaskRunnerHandle::Get()); |
| 557 internal::Connector connector1(std::move(handle1_), | 557 internal::Connector connector1(std::move(handle1_), |
| 558 internal::Connector::SINGLE_THREADED_SEND, | 558 internal::Connector::SINGLE_THREADED_SEND, |
| 559 base::ThreadTaskRunnerHandle::Get()); | 559 base::ThreadTaskRunnerHandle::Get()); |
| 560 | 560 |
| 561 const char kText[] = "hello world"; | 561 const char kText[] = "hello world"; |
| 562 | 562 |
| 563 // Queue up two messages. |
| 563 Message message; | 564 Message message; |
| 564 AllocMessage(kText, &message); | 565 AllocMessage(kText, &message); |
| 565 | |
| 566 // Queue up two messages. | |
| 567 connector0.Accept(&message); | 566 connector0.Accept(&message); |
| 567 AllocMessage(kText, &message); |
| 568 connector0.Accept(&message); | 568 connector0.Accept(&message); |
| 569 | 569 |
| 570 base::RunLoop run_loop; | 570 base::RunLoop run_loop; |
| 571 MessageAccumulator accumulator; | 571 MessageAccumulator accumulator; |
| 572 // When the accumulator gets the first message it spins a nested message | 572 // When the accumulator gets the first message it spins a nested message |
| 573 // loop. The loop is quit when another message is received. | 573 // loop. The loop is quit when another message is received. |
| 574 accumulator.set_closure([&accumulator, &connector1, &run_loop]() { | 574 accumulator.set_closure([&accumulator, &connector1, &run_loop]() { |
| 575 base::RunLoop nested_run_loop; | 575 base::RunLoop nested_run_loop; |
| 576 base::MessageLoop::ScopedNestableTaskAllower allow( | 576 base::MessageLoop::ScopedNestableTaskAllower allow( |
| 577 base::MessageLoop::current()); | 577 base::MessageLoop::current()); |
| 578 accumulator.set_closure([&nested_run_loop]() { nested_run_loop.Quit(); }); | 578 accumulator.set_closure([&nested_run_loop]() { nested_run_loop.Quit(); }); |
| 579 nested_run_loop.Run(); | 579 nested_run_loop.Run(); |
| 580 run_loop.Quit(); | 580 run_loop.Quit(); |
| 581 }); | 581 }); |
| 582 connector1.set_incoming_receiver(&accumulator); | 582 connector1.set_incoming_receiver(&accumulator); |
| 583 | 583 |
| 584 run_loop.Run(); | 584 run_loop.Run(); |
| 585 | 585 |
| 586 ASSERT_EQ(2u, accumulator.size()); | 586 ASSERT_EQ(2u, accumulator.size()); |
| 587 } | 587 } |
| 588 | 588 |
| 589 } // namespace | 589 } // namespace |
| 590 } // namespace test | 590 } // namespace test |
| 591 } // namespace mojo | 591 } // namespace mojo |
| OLD | NEW |