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

Side by Side 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: move ctor for CastModesWithMediaSources 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/containers/hash_tables.h" 6 #include "base/containers/hash_tables.h"
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/media/router/media_sinks_observer.h" 10 #include "chrome/browser/media/router/media_sinks_observer.h"
(...skipping 28 matching lines...) Expand all
39 class QueryResultManagerTest : public ::testing::Test { 39 class QueryResultManagerTest : public ::testing::Test {
40 public: 40 public:
41 QueryResultManagerTest() 41 QueryResultManagerTest()
42 : mock_router_(), query_result_manager_(&mock_router_) { 42 : mock_router_(), query_result_manager_(&mock_router_) {
43 } 43 }
44 44
45 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) { 45 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) {
46 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 46 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
47 .WillOnce(Return(true)); 47 .WillOnce(Return(true));
48 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1); 48 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1);
49 query_result_manager_.StartSinksQuery(cast_mode, source, GURL(kOrigin)); 49 query_result_manager_.SetSourcesForCastMode(
50 cast_mode, {source}, GURL(kOrigin));
51 }
52
53 bool IsDefaultSourceForSink(const MediaSource* source,
54 const MediaSink& sink) {
55 return IsPreferredSourceForSink(MediaCastMode::DEFAULT, source, sink);
56 }
57
58 bool IsTabSourceForSink(const MediaSource* source,
59 const MediaSink& sink) {
60 return IsPreferredSourceForSink(MediaCastMode::TAB_MIRROR, source, sink);
61 }
62
63 bool IsPreferredSourceForSink(MediaCastMode cast_mode,
64 const MediaSource* source,
65 const MediaSink& sink) {
66 std::unique_ptr<MediaSource> default_source =
67 query_result_manager_.GetSourceForCastModeAndSink(
68 cast_mode, sink.id());
69 return (!(default_source || source)) ||
70 (default_source && source && *default_source.get() == *source);
50 } 71 }
51 72
52 content::TestBrowserThreadBundle thread_bundle_; 73 content::TestBrowserThreadBundle thread_bundle_;
53 MockMediaRouter mock_router_; 74 MockMediaRouter mock_router_;
54 QueryResultManager query_result_manager_; 75 QueryResultManager query_result_manager_;
55 MockObserver mock_observer_; 76 MockObserver mock_observer_;
56 77
57 private: 78 private:
58 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest); 79 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest);
59 }; 80 };
(...skipping 25 matching lines...) Expand all
85 query_result_manager_.NotifyOnResultsUpdated(); 106 query_result_manager_.NotifyOnResultsUpdated();
86 107
87 query_result_manager_.RemoveObserver(&ob1); 108 query_result_manager_.RemoveObserver(&ob1);
88 query_result_manager_.NotifyOnResultsUpdated(); 109 query_result_manager_.NotifyOnResultsUpdated();
89 } 110 }
90 111
91 TEST_F(QueryResultManagerTest, StartStopSinksQuery) { 112 TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
92 GURL origin(kOrigin); 113 GURL origin(kOrigin);
93 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes(); 114 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes();
94 EXPECT_TRUE(cast_modes.empty()); 115 EXPECT_TRUE(cast_modes.empty());
95 MediaSource actual_source = 116 std::vector<MediaSource> actual_sources =
96 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT); 117 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
97 EXPECT_TRUE(actual_source.Empty()); 118 EXPECT_EQ(0u, actual_sources.size());
98 119
99 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl")); 120 MediaSource source(MediaSourceForPresentationUrl("http://foo.com"));
100 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 121 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
101 .WillOnce(Return(true)); 122 .WillOnce(Return(true));
102 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source, origin); 123 query_result_manager_.SetSourcesForCastMode(
124 MediaCastMode::DEFAULT, {source}, origin);
103 125
104 cast_modes = query_result_manager_.GetSupportedCastModes(); 126 cast_modes = query_result_manager_.GetSupportedCastModes();
105 EXPECT_EQ(1u, cast_modes.size()); 127 EXPECT_EQ(1u, cast_modes.size());
106 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 128 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
107 actual_source = query_result_manager_.GetSourceForCastMode( 129 actual_sources = query_result_manager_.GetSourcesForCastMode(
108 MediaCastMode::DEFAULT); 130 MediaCastMode::DEFAULT);
109 EXPECT_TRUE(source.Equals(actual_source)); 131 EXPECT_EQ(1u, actual_sources.size());
132 EXPECT_EQ(source, actual_sources[0]);
110 133
111 // Register a different source for the same cast mode. 134 // Register a different set of sources for the same cast mode.
112 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl")); 135 MediaSource another_source(MediaSourceForPresentationUrl("http://bar.com"));
113 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 136 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
114 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 137 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
115 .WillOnce(Return(true)); 138 .WillOnce(Return(true));
116 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, another_source, 139 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
117 origin); 140 {another_source}, origin);
118 141
119 cast_modes = query_result_manager_.GetSupportedCastModes(); 142 cast_modes = query_result_manager_.GetSupportedCastModes();
120 EXPECT_EQ(1u, cast_modes.size()); 143 EXPECT_EQ(1u, cast_modes.size());
121 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 144 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
122 actual_source = query_result_manager_.GetSourceForCastMode( 145 actual_sources = query_result_manager_.GetSourcesForCastMode(
123 MediaCastMode::DEFAULT); 146 MediaCastMode::DEFAULT);
124 EXPECT_TRUE(another_source.Equals(actual_source)); 147 EXPECT_EQ(1u, actual_sources.size());
148 EXPECT_EQ(another_source, actual_sources[0]);
125 149
126 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 150 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
127 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT); 151 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
128 152
129 cast_modes = query_result_manager_.GetSupportedCastModes(); 153 cast_modes = query_result_manager_.GetSupportedCastModes();
130 EXPECT_TRUE(cast_modes.empty()); 154 EXPECT_TRUE(cast_modes.empty());
131 actual_source = query_result_manager_.GetSourceForCastMode( 155 actual_sources = query_result_manager_.GetSourcesForCastMode(
132 MediaCastMode::DEFAULT); 156 MediaCastMode::DEFAULT);
133 EXPECT_TRUE(actual_source.Empty()); 157 EXPECT_EQ(0u, actual_sources.size());
134 } 158 }
135 159
136 TEST_F(QueryResultManagerTest, MultipleQueries) { 160 TEST_F(QueryResultManagerTest, MultipleQueries) {
137 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST); 161 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
138 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST); 162 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
139 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST); 163 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
140 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST); 164 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
141 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST); 165 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
166 MediaSource default_source1 = MediaSourceForPresentationUrl("http://bar.com");
167 MediaSource default_source2 = MediaSourceForPresentationUrl("http://baz.com");
168 MediaSource tab_source = MediaSourceForTab(123);
142 GURL origin(kOrigin); 169 GURL origin(kOrigin);
143 170
144 query_result_manager_.AddObserver(&mock_observer_); 171 query_result_manager_.AddObserver(&mock_observer_);
145 DiscoverSinks(MediaCastMode::DEFAULT, 172 DiscoverSinks(MediaCastMode::DEFAULT, default_source1);
146 MediaSourceForPresentationUrl("http://barUrl")); 173 DiscoverSinks(MediaCastMode::TAB_MIRROR, tab_source);
147 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123));
148 174
149 // Scenario (results in this order): 175 // Scenario (results in this order):
150 // Action: DEFAULT -> [1, 2, 3] 176 // Action: DEFAULT -> [1, 2, 3]
151 // Expected result: 177 // Expected result:
152 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}] 178 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}]
153 std::vector<MediaSinkWithCastModes> expected_sinks; 179 std::vector<MediaSinkWithCastModes> expected_sinks;
154 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 180 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
155 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
156 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 182 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
157 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 183 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
158 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 184 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
159 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 185 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
160 186
161 const auto& sinks_observers = query_result_manager_.sinks_observers_; 187 const auto& sinks_observers = query_result_manager_.sinks_observers_;
162 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 188 auto sinks_observer_it = sinks_observers.find(default_source1);
163 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 189 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
164 ASSERT_TRUE(sinks_observer_it->second.get()); 190 ASSERT_TRUE(sinks_observer_it->second.get());
165 191
166 std::vector<MediaSink> sinks_query_result; 192 std::vector<MediaSink> sinks_query_result;
167 sinks_query_result.push_back(sink1); 193 sinks_query_result.push_back(sink1);
168 sinks_query_result.push_back(sink2); 194 sinks_query_result.push_back(sink2);
169 sinks_query_result.push_back(sink3); 195 sinks_query_result.push_back(sink3);
170 EXPECT_CALL(mock_observer_, 196 EXPECT_CALL(mock_observer_,
171 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 197 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
172 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, 198 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
(...skipping 13 matching lines...) Expand all
186 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 212 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
187 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
188 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 214 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
189 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 215 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
190 216
191 sinks_query_result.clear(); 217 sinks_query_result.clear();
192 sinks_query_result.push_back(sink2); 218 sinks_query_result.push_back(sink2);
193 sinks_query_result.push_back(sink3); 219 sinks_query_result.push_back(sink3);
194 sinks_query_result.push_back(sink4); 220 sinks_query_result.push_back(sink4);
195 221
196 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR); 222 sinks_observer_it = sinks_observers.find(tab_source);
197 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 223 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
198 ASSERT_TRUE(sinks_observer_it->second.get()); 224 ASSERT_TRUE(sinks_observer_it->second.get());
199 EXPECT_CALL(mock_observer_, 225 EXPECT_CALL(mock_observer_,
200 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 226 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
201 sinks_observer_it->second->OnSinksUpdated( 227 sinks_observer_it->second->OnSinksUpdated(
202 sinks_query_result, std::vector<GURL>(1, GURL(kOrigin))); 228 sinks_query_result, {GURL(kOrigin)});
203 229
204 // Action: Update default presentation URL 230 // Action: Update default presentation URL
205 // Expected result: 231 // Expected result:
206 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 232 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
207 expected_sinks.clear(); 233 expected_sinks.clear();
208 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 234 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
209 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 235 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
210 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 236 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 237 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
212 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 238 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 239 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
214 240
241 // The observer for the old source will be unregistered.
215 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 242 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
243 // The observer for the new source will be registered.
216 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 244 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
217 .WillOnce(Return(true)); 245 .WillOnce(Return(true));
218 EXPECT_CALL(mock_observer_, 246 EXPECT_CALL(mock_observer_,
219 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 247 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
220 query_result_manager_.StartSinksQuery( 248 query_result_manager_.SetSourcesForCastMode(
221 MediaCastMode::DEFAULT, 249 MediaCastMode::DEFAULT, {default_source2}, origin);
222 MediaSourceForPresentationUrl("http://bazurl.com"), origin);
223 250
224 // Action: DEFAULT -> [1], origins don't match 251 // Action: DEFAULT -> [1], origins don't match
225 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 252 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
226 // (No change) 253 // (No change)
227 sinks_query_result.clear(); 254 sinks_query_result.clear();
228 sinks_query_result.push_back(sink1); 255 sinks_query_result.push_back(sink1);
229 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 256 sinks_observer_it = sinks_observers.find(default_source2);
230 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 257 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
231 ASSERT_TRUE(sinks_observer_it->second.get()); 258 ASSERT_TRUE(sinks_observer_it->second.get());
232 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks))) 259 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks)))
233 .Times(1); 260 .Times(1);
234 sinks_observer_it->second->OnSinksUpdated( 261 sinks_observer_it->second->OnSinksUpdated(
235 sinks_query_result, 262 sinks_query_result, {GURL("https://differentOrigin.com")});
236 std::vector<GURL>(1, GURL("https://differentOrigin.com")));
237 263
238 // Action: Remove TAB_MIRROR observer 264 // Action: Remove TAB_MIRROR observer
239 // Expected result: 265 // Expected result:
240 // Sinks: [] 266 // Sinks: []
241 expected_sinks.clear(); 267 expected_sinks.clear();
242 EXPECT_CALL(mock_observer_, 268 EXPECT_CALL(mock_observer_,
243 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 269 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
244 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 270 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
245 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR); 271 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR);
246 272
247 // Remaining observers: DEFAULT observer, which will be removed on destruction 273 // Remaining observers: DEFAULT observer, which will be removed on destruction
248 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 274 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
249 } 275 }
250 276
277 TEST_F(QueryResultManagerTest, MultipleUrls) {
278 const MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
279 const MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
280 const MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
281 const MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
282 const MediaSource source_a(MediaSourceForPresentationUrl("http://urlA.com"));
283 const MediaSource source_b(MediaSourceForPresentationUrl("http://urlB.com"));
284 const MediaSource source_c(MediaSourceForPresentationUrl("http://urlC.com"));
285 const MediaSource source_tab(MediaSourceForTab(1));
286 // The sources are in decreasing order of priority.
287 const std::vector<MediaSource> default_sources =
288 {source_a, source_b, source_c};
289 const std::vector<MediaSource> tab_sources = {source_tab};
290 const GURL origin(kOrigin);
291 const auto& sinks_observers = query_result_manager_.sinks_observers_;
292
293 // There should be one MediaSinksObserver per source.
294 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
295 .Times(4).WillRepeatedly(Return(true));
296 query_result_manager_.SetSourcesForCastMode(
297 MediaCastMode::DEFAULT, default_sources, origin);
298 query_result_manager_.SetSourcesForCastMode(
299 MediaCastMode::TAB_MIRROR, tab_sources, origin);
300
301 // Scenario (results in this order):
302 // Action: URL_B -> [2, 4]
303 // Expected result:
304 // Sinks: [1 -> {},
305 // 2 -> {URL_B},
306 // 3 -> {},
307 // 4 -> {URL_B}]
308 auto sinks_observer_it = sinks_observers.find(source_b);
309 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
310 ASSERT_TRUE(sinks_observer_it->second.get());
311
312 auto& source_b_observer = sinks_observer_it->second;
313 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>());
314 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink1));
315 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
316 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink3));
317 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
318
319 // Action: URL_C -> [1, 2, 3]
320 // Expected result:
321 // Sinks: [1 -> {URL_C},
322 // 2 -> {URL_B, URL_C},
323 // 3 -> {URL_C},
324 // 4 -> {URL_B}]
325 sinks_observer_it = sinks_observers.find(source_c);
326 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
327 ASSERT_TRUE(sinks_observer_it->second.get());
328
329 auto& source_c_observer = sinks_observer_it->second;
330 source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>());
331 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
332 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
333 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink3));
334 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
335
336 // Action: URL_A -> [2, 3, 4]
337 // Expected result:
338 // Sinks: [1 -> {URL_C},
339 // 2 -> {URL_A, URL_B, URL_C},
340 // 3 -> {URL_A, URL_C},
341 // 4 -> {URL_A, URL_B}]
342 sinks_observer_it = sinks_observers.find(source_a);
343 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
344 ASSERT_TRUE(sinks_observer_it->second.get());
345
346 auto& source_a_observer = sinks_observer_it->second;
347 source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>());
348 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
349 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
350 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
351 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
352
353 // Action: TAB -> [1, 2]
354 // Expected result:
355 // Sinks: [1 -> {URL_C, TAB},
356 // 2 -> {URL_A, URL_B, URL_C, TAB},
357 // 3 -> {URL_A, URL_C},
358 // 4 -> {URL_A, URL_B}]
359 sinks_observer_it = sinks_observers.find(source_tab);
360 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
361 ASSERT_TRUE(sinks_observer_it->second.get());
362
363 auto& source_tab_observer = sinks_observer_it->second;
364 source_tab_observer->OnSinksUpdated({sink1, sink2}, std::vector<GURL>());
365 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
366 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
367 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
368 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
369 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink1));
370 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink2));
371 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink3));
372 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink4));
373
374 // The observers for the four sources should get unregistered.
375 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(4);
376 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
377 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR);
378 }
379
380 TEST_F(QueryResultManagerTest, AddInvalidSource) {
381 const MediaSource source(MediaSourceForPresentationUrl("http://url.com"));
382 const GURL origin(kOrigin);
383
384 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
385 .Times(1).WillRepeatedly(Return(true));
386 query_result_manager_.SetSourcesForCastMode(
387 MediaCastMode::DEFAULT, {source}, origin);
388 // |source| has already been registered with the default cast mode, so it
389 // shouldn't get registered with tab mirroring.
390 query_result_manager_.SetSourcesForCastMode(
391 MediaCastMode::TAB_MIRROR, {source}, origin);
392
393 const auto& cast_mode_sources = query_result_manager_.cast_mode_sources_;
394 const auto& default_sources = cast_mode_sources.at(MediaCastMode::DEFAULT);
395 EXPECT_TRUE(base::ContainsKey(cast_mode_sources, MediaCastMode::DEFAULT));
396 EXPECT_EQ(default_sources.size(), 1u);
397 EXPECT_EQ(default_sources.at(0), source);
398 EXPECT_FALSE(base::ContainsKey(cast_mode_sources, MediaCastMode::TAB_MIRROR));
399 }
400
251 } // namespace media_router 401 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698