| Index: mojo/public/cpp/bindings/tests/router_unittest.cc
|
| diff --git a/mojo/public/cpp/bindings/tests/router_unittest.cc b/mojo/public/cpp/bindings/tests/router_unittest.cc
|
| index cf07e3097c0707c040d07bc4e38d101c1fc25511..e88f0e828ec4a7cb7ed7c516e3a6782c80cbb3e7 100644
|
| --- a/mojo/public/cpp/bindings/tests/router_unittest.cc
|
| +++ b/mojo/public/cpp/bindings/tests/router_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include <utility>
|
|
|
| #include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| #include "mojo/message_pump/message_pump_mojo.h"
|
| #include "mojo/public/cpp/bindings/tests/message_queue.h"
|
| #include "mojo/public/cpp/bindings/tests/router_test_util.h"
|
| @@ -48,9 +49,11 @@ TEST_F(RouterTest, BasicRequestResponse) {
|
| AllocRequestMessage(1, "hello", &request);
|
|
|
| MessageQueue message_queue;
|
| - router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue));
|
| + base::RunLoop run_loop;
|
| + router0.AcceptWithResponder(
|
| + &request, new MessageAccumulator(&message_queue, run_loop.QuitClosure()));
|
|
|
| - PumpMessages();
|
| + run_loop.Run();
|
|
|
| EXPECT_FALSE(message_queue.IsEmpty());
|
|
|
| @@ -64,10 +67,12 @@ TEST_F(RouterTest, BasicRequestResponse) {
|
| Message request2;
|
| AllocRequestMessage(1, "hello again", &request2);
|
|
|
| - router0.AcceptWithResponder(&request2,
|
| - new MessageAccumulator(&message_queue));
|
| + base::RunLoop run_loop2;
|
| + router0.AcceptWithResponder(
|
| + &request2,
|
| + new MessageAccumulator(&message_queue, run_loop2.QuitClosure()));
|
|
|
| - PumpMessages();
|
| + run_loop2.Run();
|
|
|
| EXPECT_FALSE(message_queue.IsEmpty());
|
|
|
| @@ -130,9 +135,13 @@ TEST_F(RouterTest, RequestWithNoReceiver) {
|
| AllocRequestMessage(1, "hello", &request);
|
|
|
| MessageQueue message_queue;
|
| + base::RunLoop run_loop, run_loop2;
|
| + router0.set_connection_error_handler(run_loop.QuitClosure());
|
| + router1.set_connection_error_handler(run_loop2.QuitClosure());
|
| router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue));
|
|
|
| - PumpMessages();
|
| + run_loop.Run();
|
| + run_loop2.Run();
|
|
|
| EXPECT_TRUE(router0.encountered_error());
|
| EXPECT_TRUE(router1.encountered_error());
|
| @@ -145,15 +154,19 @@ TEST_F(RouterTest, LazyResponses) {
|
| internal::Router router0(std::move(handle0_), internal::FilterChain());
|
| internal::Router router1(std::move(handle1_), internal::FilterChain());
|
|
|
| - LazyResponseGenerator generator;
|
| + base::RunLoop run_loop;
|
| + LazyResponseGenerator generator(run_loop.QuitClosure());
|
| router1.set_incoming_receiver(&generator);
|
|
|
| Message request;
|
| AllocRequestMessage(1, "hello", &request);
|
|
|
| MessageQueue message_queue;
|
| - router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue));
|
| - PumpMessages();
|
| + base::RunLoop run_loop2;
|
| + router0.AcceptWithResponder(
|
| + &request,
|
| + new MessageAccumulator(&message_queue, run_loop2.QuitClosure()));
|
| + run_loop.Run();
|
|
|
| // The request has been received but the response has not been sent yet.
|
| EXPECT_TRUE(message_queue.IsEmpty());
|
| @@ -161,7 +174,7 @@ TEST_F(RouterTest, LazyResponses) {
|
| // Send the response.
|
| EXPECT_TRUE(generator.responder_is_valid());
|
| generator.CompleteWithResponse();
|
| - PumpMessages();
|
| + run_loop2.Run();
|
|
|
| // Check the response.
|
| EXPECT_FALSE(message_queue.IsEmpty());
|
| @@ -171,20 +184,26 @@ TEST_F(RouterTest, LazyResponses) {
|
| std::string(reinterpret_cast<const char*>(response.payload())));
|
|
|
| // Send a second message on the pipe.
|
| + base::RunLoop run_loop3;
|
| + LazyResponseGenerator generator2(run_loop3.QuitClosure());
|
| +
|
| + router1.set_incoming_receiver(&generator2);
|
| Message request2;
|
| AllocRequestMessage(1, "hello again", &request2);
|
|
|
| - router0.AcceptWithResponder(&request2,
|
| - new MessageAccumulator(&message_queue));
|
| - PumpMessages();
|
| + base::RunLoop run_loop4;
|
| + router0.AcceptWithResponder(
|
| + &request2,
|
| + new MessageAccumulator(&message_queue, run_loop4.QuitClosure()));
|
| + run_loop3.Run();
|
|
|
| // The request has been received but the response has not been sent yet.
|
| EXPECT_TRUE(message_queue.IsEmpty());
|
|
|
| // Send the second response.
|
| - EXPECT_TRUE(generator.responder_is_valid());
|
| - generator.CompleteWithResponse();
|
| - PumpMessages();
|
| + EXPECT_TRUE(generator2.responder_is_valid());
|
| + generator2.CompleteWithResponse();
|
| + run_loop4.Run();
|
|
|
| // Check the second response.
|
| EXPECT_FALSE(message_queue.IsEmpty());
|
| @@ -197,17 +216,26 @@ TEST_F(RouterTest, LazyResponses) {
|
| // sending a response, then we trigger connection error at both sides. Moreover,
|
| // both sides still appear to have a valid message pipe handle bound.
|
| TEST_F(RouterTest, MissingResponses) {
|
| + base::RunLoop run_loop0, run_loop1;
|
| internal::Router router0(std::move(handle0_), internal::FilterChain());
|
| bool error_handler_called0 = false;
|
| router0.set_connection_error_handler(
|
| - [&error_handler_called0]() { error_handler_called0 = true; });
|
| + [&error_handler_called0, &run_loop0]() {
|
| + error_handler_called0 = true;
|
| + run_loop0.Quit();
|
| + });
|
|
|
| internal::Router router1(std::move(handle1_), internal::FilterChain());
|
| bool error_handler_called1 = false;
|
| router1.set_connection_error_handler(
|
| - [&error_handler_called1]() { error_handler_called1 = true; });
|
| + [&error_handler_called1, &run_loop1]() {
|
| + error_handler_called1 = true;
|
| + run_loop1.Quit();
|
| + });
|
|
|
| - LazyResponseGenerator generator;
|
| + base::RunLoop run_loop3;
|
| + LazyResponseGenerator generator(run_loop3.QuitClosure());
|
| + router1.set_incoming_receiver(&generator);
|
| router1.set_incoming_receiver(&generator);
|
|
|
| Message request;
|
| @@ -215,14 +243,15 @@ TEST_F(RouterTest, MissingResponses) {
|
|
|
| MessageQueue message_queue;
|
| router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue));
|
| - PumpMessages();
|
| + run_loop3.Run();
|
|
|
| // The request has been received but no response has been sent.
|
| EXPECT_TRUE(message_queue.IsEmpty());
|
|
|
| // Destroy the responder MessagerReceiver but don't send any response.
|
| generator.CompleteWithoutResponse();
|
| - PumpMessages();
|
| + run_loop0.Run();
|
| + run_loop1.Run();
|
|
|
| // Check that no response was received.
|
| EXPECT_TRUE(message_queue.IsEmpty());
|
| @@ -245,7 +274,8 @@ TEST_F(RouterTest, LateResponse) {
|
| // MessageReceiver, which was given to us via AcceptWithResponder,
|
| // after the router has gone away.
|
|
|
| - LazyResponseGenerator generator;
|
| + base::RunLoop run_loop;
|
| + LazyResponseGenerator generator(run_loop.QuitClosure());
|
| {
|
| internal::Router router0(std::move(handle0_), internal::FilterChain());
|
| internal::Router router1(std::move(handle1_), internal::FilterChain());
|
| @@ -259,7 +289,7 @@ TEST_F(RouterTest, LateResponse) {
|
| router0.AcceptWithResponder(&request,
|
| new MessageAccumulator(&message_queue));
|
|
|
| - PumpMessages();
|
| + run_loop.Run();
|
|
|
| EXPECT_TRUE(generator.has_responder());
|
| }
|
|
|