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

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

Issue 2264153002: [Presentation API] Add support for multiple URLs in PresentationRequest on Media Router UI side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Mark's comments Created 4 years, 3 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/query_result_manager_unittest.cc
diff --git a/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc b/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc
index c575d053b4b6ee9867ac763c59cc3e5f9b040aa9..775106eb01b68f506fab131b1db411f870fa1092 100644
--- a/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc
+++ b/chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc
@@ -46,7 +46,17 @@ class QueryResultManagerTest : public ::testing::Test {
EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
.WillOnce(Return(true));
EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1);
- query_result_manager_.StartSinksQuery(cast_mode, source, GURL(kOrigin));
+ query_result_manager_.StartSinksQuery(
+ cast_mode, {source}, GURL(kOrigin));
+ }
+
+ bool IsDefaultSourceForSink(
+ const MediaSource* source, const MediaSink& sink) {
+ std::unique_ptr<MediaSource> default_source =
+ query_result_manager_.GetSourceForCastModeAndSink(
+ MediaCastMode::DEFAULT, sink.id());
+ return (!(default_source || source)) ||
+ (default_source && source && *default_source.get() == *source);
}
content::TestBrowserThreadBundle thread_bundle_;
@@ -92,45 +102,48 @@ TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
GURL origin(kOrigin);
CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes();
EXPECT_TRUE(cast_modes.empty());
- MediaSource actual_source =
- query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT);
- EXPECT_TRUE(actual_source.Empty());
+ std::vector<MediaSource> actual_sources =
+ query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
+ EXPECT_EQ(0u, actual_sources.size());
MediaSource source(MediaSourceForPresentationUrl("http://fooUrl"));
EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
.WillOnce(Return(true));
- query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source, origin);
+ query_result_manager_.StartSinksQuery(
+ MediaCastMode::DEFAULT, {source}, origin);
cast_modes = query_result_manager_.GetSupportedCastModes();
EXPECT_EQ(1u, cast_modes.size());
EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
- actual_source = query_result_manager_.GetSourceForCastMode(
+ actual_sources = query_result_manager_.GetSourcesForCastMode(
MediaCastMode::DEFAULT);
- EXPECT_TRUE(source.Equals(actual_source));
+ EXPECT_EQ(1u, actual_sources.size());
+ EXPECT_EQ(source, actual_sources[0]);
- // Register a different source for the same cast mode.
+ // Register a different set of sources for the same cast mode.
MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl"));
EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
.WillOnce(Return(true));
- query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, another_source,
- origin);
+ query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT,
+ {another_source}, origin);
cast_modes = query_result_manager_.GetSupportedCastModes();
EXPECT_EQ(1u, cast_modes.size());
EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
- actual_source = query_result_manager_.GetSourceForCastMode(
+ actual_sources = query_result_manager_.GetSourcesForCastMode(
MediaCastMode::DEFAULT);
- EXPECT_TRUE(another_source.Equals(actual_source));
+ EXPECT_EQ(1u, actual_sources.size());
+ EXPECT_EQ(another_source, actual_sources[0]);
EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
cast_modes = query_result_manager_.GetSupportedCastModes();
EXPECT_TRUE(cast_modes.empty());
- actual_source = query_result_manager_.GetSourceForCastMode(
+ actual_sources = query_result_manager_.GetSourcesForCastMode(
MediaCastMode::DEFAULT);
- EXPECT_TRUE(actual_source.Empty());
+ EXPECT_EQ(0u, actual_sources.size());
}
TEST_F(QueryResultManagerTest, MultipleQueries) {
@@ -139,12 +152,14 @@ TEST_F(QueryResultManagerTest, MultipleQueries) {
MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
+ MediaSource defaultSource1 = MediaSourceForPresentationUrl("http://barUrl");
mark a. foltz 2016/09/09 22:22:27 Nit: please use obviously valid URLs as test data,
takumif 2016/09/13 03:48:22 Done.
+ MediaSource defaultSource2 = MediaSourceForPresentationUrl("http://bazurl");
+ MediaSource tabSource = MediaSourceForTab(123);
GURL origin(kOrigin);
query_result_manager_.AddObserver(&mock_observer_);
- DiscoverSinks(MediaCastMode::DEFAULT,
- MediaSourceForPresentationUrl("http://barUrl"));
- DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123));
+ DiscoverSinks(MediaCastMode::DEFAULT, defaultSource1);
+ DiscoverSinks(MediaCastMode::TAB_MIRROR, tabSource);
// Scenario (results in this order):
// Action: DEFAULT -> [1, 2, 3]
@@ -159,7 +174,7 @@ TEST_F(QueryResultManagerTest, MultipleQueries) {
expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
const auto& sinks_observers = query_result_manager_.sinks_observers_;
- auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
+ auto sinks_observer_it = sinks_observers.find(defaultSource1);
ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
ASSERT_TRUE(sinks_observer_it->second.get());
@@ -193,13 +208,13 @@ TEST_F(QueryResultManagerTest, MultipleQueries) {
sinks_query_result.push_back(sink3);
sinks_query_result.push_back(sink4);
- sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR);
+ sinks_observer_it = sinks_observers.find(tabSource);
ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
ASSERT_TRUE(sinks_observer_it->second.get());
EXPECT_CALL(mock_observer_,
OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
sinks_observer_it->second->OnSinksUpdated(
- sinks_query_result, std::vector<GURL>(1, GURL(kOrigin)));
+ sinks_query_result, {GURL(kOrigin)});
// Action: Update default presentation URL
// Expected result:
@@ -212,28 +227,28 @@ TEST_F(QueryResultManagerTest, MultipleQueries) {
expected_sinks.push_back(MediaSinkWithCastModes(sink4));
expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
+ // The observer for the old source will be unregistered.
EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
+ // The observer for the new source will be registered.
EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
.WillOnce(Return(true));
EXPECT_CALL(mock_observer_,
OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
query_result_manager_.StartSinksQuery(
- MediaCastMode::DEFAULT,
- MediaSourceForPresentationUrl("http://bazurl.com"), origin);
+ MediaCastMode::DEFAULT, {defaultSource2}, origin);
// Action: DEFAULT -> [1], origins don't match
// Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
// (No change)
sinks_query_result.clear();
sinks_query_result.push_back(sink1);
- sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
+ sinks_observer_it = sinks_observers.find(defaultSource2);
ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
ASSERT_TRUE(sinks_observer_it->second.get());
EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks)))
.Times(1);
sinks_observer_it->second->OnSinksUpdated(
- sinks_query_result,
- std::vector<GURL>(1, GURL("https://differentOrigin.com")));
+ sinks_query_result, {GURL("https://differentOrigin.com")});
// Action: Remove TAB_MIRROR observer
// Expected result:
@@ -248,4 +263,80 @@ TEST_F(QueryResultManagerTest, MultipleQueries) {
EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
}
+TEST_F(QueryResultManagerTest, MultipleUrls) {
mark a. foltz 2016/09/09 22:22:27 Can you update this test case to include at least
takumif 2016/09/13 03:48:22 Done.
+ const MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
+ const MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
+ const MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
+ const MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
+ const MediaSource sourceA(MediaSourceForPresentationUrl("http://urlA"));
+ const MediaSource sourceB(MediaSourceForPresentationUrl("http://urlB"));
+ const MediaSource sourceC(MediaSourceForPresentationUrl("http://urlC"));
+ // The sources are in decreasing order of priority.
+ const std::vector<MediaSource> sources = {sourceA, sourceB, sourceC};
+ const GURL origin(kOrigin);
+ const auto& sinks_observers = query_result_manager_.sinks_observers_;
+
+ // There should be one MediaSinksObserver per source.
+ EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
+ .Times(3).WillRepeatedly(Return(true));
+ query_result_manager_.StartSinksQuery(
+ MediaCastMode::DEFAULT, sources, origin);
+
+ // Scenario (results in this order):
+ // Action: URL_B -> [2, 4]
+ // Expected result:
+ // Sinks: [1 -> {},
+ // 2 -> {URL_B},
+ // 3 -> {},
+ // 4 -> {URL_B}]
+ auto sinks_observer_it = sinks_observers.find(sourceB);
+ ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
+ ASSERT_TRUE(sinks_observer_it->second.get());
+
+ auto& source_b_observer = sinks_observer_it->second;
+ source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>());
+ EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink1));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceB, sink2));
+ EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink3));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceB, sink4));
+
+ // Action: URL_C -> [1, 2, 3]
+ // Expected result:
+ // Sinks: [1 -> {URL_C},
+ // 2 -> {URL_B, URL_C},
+ // 3 -> {URL_C},
+ // 4 -> {URL_B}]
+ sinks_observer_it = sinks_observers.find(sourceC);
+ ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
+ ASSERT_TRUE(sinks_observer_it->second.get());
+
+ auto& source_c_observer = sinks_observer_it->second;
+ source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>());
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceC, sink1));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceB, sink2));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceC, sink3));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceB, sink4));
+
+ // Action: URL_A -> [2, 3, 4]
+ // Expected result:
+ // Sinks: [1 -> {URL_C},
+ // 2 -> {URL_A, URL_B, URL_C},
+ // 3 -> {URL_A, URL_C},
+ // 4 -> {URL_A, URL_B}]
+ sinks_observer_it = sinks_observers.find(sourceA);
+ ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
+ ASSERT_TRUE(sinks_observer_it->second.get());
+
+ auto& source_a_observer = sinks_observer_it->second;
+ source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>());
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceC, sink1));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceA, sink2));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceA, sink3));
+ EXPECT_TRUE(IsDefaultSourceForSink(&sourceA, sink4));
+
+ // The observers for the three sources should get unregistered.
+ EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(3);
+ query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
+}
+
} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698