| Index: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
|
| diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
|
| index c70649dc5e8804224a968d4ff44599ca9cf329ab..9c2d3276c2aaa9a87ec218fce386ed5abafd005c 100644
|
| --- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
|
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
|
| @@ -28,6 +28,7 @@
|
|
|
| using testing::_;
|
| using testing::AnyNumber;
|
| +using testing::DoAll;
|
| using testing::SaveArg;
|
| using testing::Return;
|
|
|
| @@ -35,9 +36,13 @@ namespace media_router {
|
|
|
| class MockRoutesUpdatedCallback {
|
| public:
|
| - MOCK_METHOD2(OnRoutesUpdated,
|
| + MOCK_METHOD0(GetAvailableSourceMap,
|
| + std::unordered_map<MediaSource::Id, MediaCastMode>());
|
| + MOCK_METHOD3(OnRoutesUpdated,
|
| void(const std::vector<MediaRoute>& routes,
|
| - const std::vector<MediaRoute::Id>& joinable_route_ids));
|
| + const std::vector<MediaRoute::Id>& joinable_route_ids,
|
| + const std::unordered_map<MediaRoute::Id, MediaCastMode>&
|
| + current_cast_mode));
|
| };
|
|
|
| class MediaRouterUITest : public ::testing::Test {
|
| @@ -202,6 +207,8 @@ TEST_F(MediaRouterUITest, UIMediaRoutesObserverFiltersNonDisplayRoutes) {
|
| std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
|
| new MediaRouterUI::UIMediaRoutesObserver(
|
| &mock_router_, media_source.id(),
|
| + base::Bind(&MockRoutesUpdatedCallback::GetAvailableSourceMap,
|
| + base::Unretained(&mock_callback)),
|
| base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated,
|
| base::Unretained(&mock_callback))));
|
|
|
| @@ -217,8 +224,14 @@ TEST_F(MediaRouterUITest, UIMediaRoutesObserverFiltersNonDisplayRoutes) {
|
| routes.push_back(display_route_2);
|
|
|
| std::vector<MediaRoute> filtered_routes;
|
| - EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)).WillOnce(
|
| - SaveArg<0>(&filtered_routes));
|
| + std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
|
| + available_source_map.insert(
|
| + std::make_pair(media_source.id(), MediaCastMode::DEFAULT));
|
| + std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
|
| + ON_CALL(mock_callback, GetAvailableSourceMap())
|
| + .WillByDefault(Return(available_source_map));
|
| + EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _, _)).WillOnce(
|
| + DoAll(SaveArg<0>(&filtered_routes), SaveArg<2>(¤t_cast_modes)));
|
| observer->OnRoutesUpdated(routes,
|
| std::vector<MediaRoute::Id>());
|
|
|
| @@ -228,6 +241,18 @@ TEST_F(MediaRouterUITest, UIMediaRoutesObserverFiltersNonDisplayRoutes) {
|
| EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
|
| EXPECT_TRUE(filtered_routes[1].for_display());
|
|
|
| + ASSERT_EQ(2u, current_cast_modes.size());
|
| + auto cast_mode_entry =
|
| + current_cast_modes.find(display_route_1.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DEFAULT, cast_mode_entry->second);
|
| + cast_mode_entry =
|
| + current_cast_modes.find(non_display_route_1.media_route_id());
|
| + EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
|
| + cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DEFAULT, cast_mode_entry->second);
|
| +
|
| EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
|
| observer.reset();
|
| }
|
| @@ -240,6 +265,8 @@ TEST_F(MediaRouterUITest,
|
| std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
|
| new MediaRouterUI::UIMediaRoutesObserver(
|
| &mock_router_, media_source.id(),
|
| + base::Bind(&MockRoutesUpdatedCallback::GetAvailableSourceMap,
|
| + base::Unretained(&mock_callback)),
|
| base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated,
|
| base::Unretained(&mock_callback))));
|
|
|
| @@ -260,9 +287,16 @@ TEST_F(MediaRouterUITest,
|
| joinable_route_ids.push_back("routeId3");
|
|
|
| std::vector<MediaRoute::Id> filtered_joinable_route_ids;
|
| + std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
|
| + available_source_map.insert(
|
| + std::make_pair(media_source.id(), MediaCastMode::DEFAULT));
|
| + std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
|
| + ON_CALL(mock_callback, GetAvailableSourceMap())
|
| + .WillByDefault(Return(available_source_map));
|
| // Save the filtered joinable routes.
|
| - EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)).WillOnce(
|
| - SaveArg<1>(&filtered_joinable_route_ids));
|
| + EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _, _)).WillOnce(
|
| + DoAll(SaveArg<1>(&filtered_joinable_route_ids),
|
| + SaveArg<2>(¤t_cast_modes)));
|
| observer->OnRoutesUpdated(routes,
|
| joinable_route_ids);
|
|
|
| @@ -270,6 +304,141 @@ TEST_F(MediaRouterUITest,
|
| EXPECT_EQ(display_route_1.media_route_id(), filtered_joinable_route_ids[0]);
|
| EXPECT_EQ(display_route_2.media_route_id(), filtered_joinable_route_ids[1]);
|
|
|
| + ASSERT_EQ(2u, current_cast_modes.size());
|
| + auto cast_mode_entry =
|
| + current_cast_modes.find(display_route_1.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DEFAULT, cast_mode_entry->second);
|
| + cast_mode_entry =
|
| + current_cast_modes.find(non_display_route_1.media_route_id());
|
| + EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
|
| + cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DEFAULT, cast_mode_entry->second);
|
| +
|
| + EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
|
| + observer.reset();
|
| +}
|
| +
|
| +TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) {
|
| + EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1);
|
| + MediaSource media_source_1("mediaSource1");
|
| + MediaSource media_source_2("mediaSource2");
|
| + MediaSource media_source_3("mediaSource3");
|
| + MockRoutesUpdatedCallback mock_callback;
|
| + std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
|
| + new MediaRouterUI::UIMediaRoutesObserver(
|
| + &mock_router_, MediaSource::Id(),
|
| + base::Bind(&MockRoutesUpdatedCallback::GetAvailableSourceMap,
|
| + base::Unretained(&mock_callback)),
|
| + base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated,
|
| + base::Unretained(&mock_callback))));
|
| +
|
| + MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
|
| + true, "", true);
|
| + MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
|
| + "desc 2", true, "", false);
|
| + MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
|
| + true, "", true);
|
| + std::vector<MediaRoute> routes;
|
| + routes.push_back(display_route_1);
|
| + routes.push_back(non_display_route_1);
|
| + routes.push_back(display_route_2);
|
| +
|
| + std::vector<MediaRoute> filtered_routes;
|
| + std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
|
| + available_source_map.insert(std::make_pair(
|
| + display_route_1.media_source().id(), MediaCastMode::DEFAULT));
|
| + available_source_map.insert(std::make_pair(
|
| + non_display_route_1.media_source().id(), MediaCastMode::TAB_MIRROR));
|
| + available_source_map.insert(std::make_pair(
|
| + display_route_2.media_source().id(), MediaCastMode::DESKTOP_MIRROR));
|
| + std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
|
| + ON_CALL(mock_callback, GetAvailableSourceMap())
|
| + .WillByDefault(Return(available_source_map));
|
| + EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _, _)).WillOnce(
|
| + DoAll(SaveArg<0>(&filtered_routes), SaveArg<2>(¤t_cast_modes)));
|
| + observer->OnRoutesUpdated(routes,
|
| + std::vector<MediaRoute::Id>());
|
| +
|
| + ASSERT_EQ(2u, filtered_routes.size());
|
| + EXPECT_TRUE(display_route_1.Equals(filtered_routes[0]));
|
| + EXPECT_TRUE(filtered_routes[0].for_display());
|
| + EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
|
| + EXPECT_TRUE(filtered_routes[1].for_display());
|
| +
|
| + ASSERT_EQ(2u, current_cast_modes.size());
|
| + auto cast_mode_entry =
|
| + current_cast_modes.find(display_route_1.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DEFAULT, cast_mode_entry->second);
|
| + cast_mode_entry =
|
| + current_cast_modes.find(non_display_route_1.media_route_id());
|
| + EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
|
| + cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
|
| +
|
| + EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
|
| + observer.reset();
|
| +}
|
| +
|
| +TEST_F(MediaRouterUITest, UIMediaRoutesObserverSkipsUnavailableCastModes) {
|
| + EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1);
|
| + MediaSource media_source_1("mediaSource1");
|
| + MediaSource media_source_2("mediaSource2");
|
| + MediaSource media_source_3("mediaSource3");
|
| + MockRoutesUpdatedCallback mock_callback;
|
| + std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer(
|
| + new MediaRouterUI::UIMediaRoutesObserver(
|
| + &mock_router_, MediaSource::Id(),
|
| + base::Bind(&MockRoutesUpdatedCallback::GetAvailableSourceMap,
|
| + base::Unretained(&mock_callback)),
|
| + base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated,
|
| + base::Unretained(&mock_callback))));
|
| +
|
| + MediaRoute display_route_1("routeId1", media_source_1, "sinkId1", "desc 1",
|
| + true, "", true);
|
| + MediaRoute non_display_route_1("routeId2", media_source_2, "sinkId2",
|
| + "desc 2", true, "", false);
|
| + MediaRoute display_route_2("routeId3", media_source_3, "sinkId2", "desc 2",
|
| + true, "", true);
|
| + std::vector<MediaRoute> routes;
|
| + routes.push_back(display_route_1);
|
| + routes.push_back(non_display_route_1);
|
| + routes.push_back(display_route_2);
|
| +
|
| + std::vector<MediaRoute> filtered_routes;
|
| + std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
|
| + available_source_map.insert(std::make_pair(
|
| + non_display_route_1.media_source().id(), MediaCastMode::TAB_MIRROR));
|
| + available_source_map.insert(std::make_pair(
|
| + display_route_2.media_source().id(), MediaCastMode::DESKTOP_MIRROR));
|
| + std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
|
| + ON_CALL(mock_callback, GetAvailableSourceMap())
|
| + .WillByDefault(Return(available_source_map));
|
| + EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _, _)).WillOnce(
|
| + DoAll(SaveArg<0>(&filtered_routes), SaveArg<2>(¤t_cast_modes)));
|
| + observer->OnRoutesUpdated(routes,
|
| + std::vector<MediaRoute::Id>());
|
| +
|
| + ASSERT_EQ(2u, filtered_routes.size());
|
| + EXPECT_TRUE(display_route_1.Equals(filtered_routes[0]));
|
| + EXPECT_TRUE(filtered_routes[0].for_display());
|
| + EXPECT_TRUE(display_route_2.Equals(filtered_routes[1]));
|
| + EXPECT_TRUE(filtered_routes[1].for_display());
|
| +
|
| + ASSERT_EQ(1u, current_cast_modes.size());
|
| + auto cast_mode_entry =
|
| + current_cast_modes.find(display_route_1.media_route_id());
|
| + EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
|
| + cast_mode_entry =
|
| + current_cast_modes.find(non_display_route_1.media_route_id());
|
| + EXPECT_EQ(end(current_cast_modes), cast_mode_entry);
|
| + cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id());
|
| + EXPECT_NE(end(current_cast_modes), cast_mode_entry);
|
| + EXPECT_EQ(MediaCastMode::DESKTOP_MIRROR, cast_mode_entry->second);
|
| +
|
| EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1);
|
| observer.reset();
|
| }
|
|
|