Index: chrome/browser/media/router/media_router_mojo_impl_unittest.cc |
diff --git a/chrome/browser/media/router/media_router_mojo_impl_unittest.cc b/chrome/browser/media/router/media_router_mojo_impl_unittest.cc |
index 6965b2722fabef7654d2f34e35da1fe40149a162..32d88f5e58a239fa1c4d4c0bbfb06ee7e7d33bc9 100644 |
--- a/chrome/browser/media/router/media_router_mojo_impl_unittest.cc |
+++ b/chrome/browser/media/router/media_router_mojo_impl_unittest.cc |
@@ -472,10 +472,14 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
// These should only be called once even if there is more than one observer |
// for a given source. |
+ base::RunLoop run_loop; |
EXPECT_CALL(mock_media_route_provider_, |
StartObservingMediaSinks(mojo::String(kSource))); |
EXPECT_CALL(mock_media_route_provider_, |
- StartObservingMediaSinks(mojo::String(kSource2))); |
+ StartObservingMediaSinks(mojo::String(kSource2))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop]() { |
+ run_loop.Quit(); |
+ })); |
scoped_ptr<MockMediaSinksObserver> sinks_observer( |
new MockMediaSinksObserver(router(), media_source)); |
@@ -486,7 +490,7 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
scoped_ptr<MockMediaSinksObserver> unrelated_sinks_observer( |
new MockMediaSinksObserver(router(), MediaSource(kSource2))); |
EXPECT_TRUE(unrelated_sinks_observer->Init()); |
- ProcessEventLoop(); |
+ run_loop.Run(); |
std::vector<MediaSink> expected_sinks; |
expected_sinks.push_back( |
@@ -506,14 +510,14 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
mojo_sinks[1]->icon_type = |
media_router::interfaces::MediaSink::IconType::ICON_TYPE_CAST; |
- base::RunLoop run_loop; |
+ base::RunLoop run_loop2; |
EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); |
EXPECT_CALL(*extra_sinks_observer, |
OnSinksReceived(SequenceEquals(expected_sinks))) |
- .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
+ .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); |
media_router_proxy_->OnSinksReceived(media_source.id(), |
std::move(mojo_sinks)); |
- run_loop.Run(); |
+ run_loop2.Run(); |
// Since the MediaRouterMojoImpl has already received results for |
// |media_source|, return cached results to observers that are subsequently |
@@ -524,19 +528,23 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
OnSinksReceived(SequenceEquals(expected_sinks))); |
EXPECT_TRUE(cached_sinks_observer->Init()); |
- base::RunLoop run_loop2; |
+ base::RunLoop run_loop3, run_loop4; |
EXPECT_CALL(mock_media_route_provider_, |
- StopObservingMediaSinks(mojo::String(kSource))); |
+ StopObservingMediaSinks(mojo::String(kSource))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop3]() { |
+ run_loop3.Quit(); |
+ })); |
EXPECT_CALL(mock_media_route_provider_, |
StopObservingMediaSinks(mojo::String(kSource2))) |
- .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
- run_loop2.Quit(); |
+ .WillOnce(InvokeWithoutArgs([&run_loop4]() { |
+ run_loop4.Quit(); |
})); |
sinks_observer.reset(); |
extra_sinks_observer.reset(); |
unrelated_sinks_observer.reset(); |
cached_sinks_observer.reset(); |
- run_loop2.Run(); |
+ run_loop3.Run(); |
+ run_loop4.Run(); |
} |
TEST_F(MediaRouterMojoImplTest, |
@@ -552,7 +560,11 @@ TEST_F(MediaRouterMojoImplTest, |
MediaSource media_source2(kSource2); |
scoped_ptr<MockMediaSinksObserver> sinks_observer2( |
new MockMediaSinksObserver(router(), media_source2)); |
- EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())); |
+ base::RunLoop run_loop; |
+ EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())) |
+ .WillOnce(InvokeWithoutArgs([&run_loop]() { |
+ run_loop.Quit(); |
+ })); |
EXPECT_TRUE(sinks_observer2->Init()); |
EXPECT_CALL(mock_media_route_provider_, |
StartObservingMediaSinks(mojo::String(kSource))) |
@@ -560,7 +572,8 @@ TEST_F(MediaRouterMojoImplTest, |
EXPECT_CALL(mock_media_route_provider_, |
StartObservingMediaSinks(mojo::String(kSource2))) |
.Times(0); |
- ProcessEventLoop(); |
+ run_loop.Run(); |
+ base::RunLoop run_loop2; |
EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); |
// When availability transitions AVAILABLE, existing sink queries should be |
@@ -572,8 +585,11 @@ TEST_F(MediaRouterMojoImplTest, |
.Times(1); |
EXPECT_CALL(mock_media_route_provider_, |
StartObservingMediaSinks(mojo::String(kSource2))) |
- .Times(1); |
- ProcessEventLoop(); |
+ .Times(1) |
+ .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
+ run_loop2.Quit(); |
+ })); |
+ run_loop2.Run(); |
EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); |
// No change in availability status; no calls should be made to MRPM. |
@@ -603,10 +619,14 @@ TEST_F(MediaRouterMojoImplTest, |
// observer is unregistered. |
router()->OnSinkAvailabilityUpdated( |
interfaces::MediaRouter::SINK_AVAILABILITY_AVAILABLE); |
+ base::RunLoop run_loop3; |
EXPECT_CALL(mock_media_route_provider_, |
- StopObservingMediaSinks(mojo::String(kSource2))); |
+ StopObservingMediaSinks(mojo::String(kSource2))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop3]() { |
+ run_loop3.Quit(); |
+ })); |
sinks_observer2.reset(); |
- ProcessEventLoop(); |
+ run_loop3.Run(); |
} |
TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { |
@@ -662,20 +682,25 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { |
mojo_routes[1]->description = kDescription; |
mojo_routes[1]->is_local = false; |
+ base::RunLoop run_loop; |
EXPECT_CALL(routes_observer, |
OnRoutesUpdated(SequenceEquals(expected_routes), |
expected_joinable_route_ids)); |
EXPECT_CALL(extra_routes_observer, |
OnRoutesUpdated(SequenceEquals(expected_routes), |
- expected_joinable_route_ids)); |
+ expected_joinable_route_ids)) |
+ .WillOnce(InvokeWithoutArgs([&run_loop]() { |
+ run_loop.Quit(); |
+ })); |
EXPECT_CALL(different_routes_observer, |
OnRoutesUpdated(SequenceEquals(expected_routes), |
expected_joinable_route_ids)).Times(0); |
media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes), |
media_source.id(), |
std::move(mojo_joinable_routes)); |
- ProcessEventLoop(); |
+ run_loop.Run(); |
+ base::RunLoop run_loop2; |
EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); |
EXPECT_CALL(mock_router, |
UnregisterMediaRoutesObserver(&extra_routes_observer)); |
@@ -689,8 +714,11 @@ TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { |
mojo::String(media_source.id()))).Times(1); |
EXPECT_CALL(mock_media_route_provider_, |
StopObservingMediaRoutes( |
- mojo::String(different_media_source.id()))); |
- ProcessEventLoop(); |
+ mojo::String(different_media_source.id()))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
+ run_loop2.Quit(); |
+ })); |
+ run_loop2.Run(); |
} |
TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { |
@@ -1034,13 +1062,22 @@ TEST_F(MediaRouterMojoImplTest, QueuedWhileAsleep) { |
router()->DetachRoute(kRouteId); |
router()->DetachRoute(kRouteId2); |
run_loop.Run(); |
+ |
+ base::RunLoop run_loop2, run_loop3; |
EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) |
.Times(1) |
.WillRepeatedly(Return(false)); |
- EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); |
- EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); |
+ EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
+ run_loop2.Quit(); |
+ })); |
+ EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) |
+ .WillOnce(InvokeWithoutArgs([&run_loop3]() { |
+ run_loop3.Quit(); |
+ })); |
ConnectProviderManagerService(); |
- ProcessEventLoop(); |
+ run_loop2.Run(); |
+ run_loop3.Run(); |
} |
class MediaRouterMojoExtensionTest : public ::testing::Test { |