Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1635)

Unified Diff: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc

Issue 2040873002: [Media Router] Assign each route a current cast mode if possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>(&current_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>(&current_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>(&current_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>(&current_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();
}

Powered by Google App Engine
This is Rietveld 408576698