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

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: Created 4 years, 4 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_.StartSinksQuery(
50 cast_mode, {source}, GURL(kOrigin));
51 }
52
53 bool IsDefaultSourceForSink(
54 const MediaSource& source, const MediaSink& sink) {
55 return query_result_manager_.GetSourceForCastModeAndSink(
56 MediaCastMode::DEFAULT, sink.id()).Equals(source);
57 }
58
59 bool SinkObserversMatchSources(
60 const std::vector<std::unique_ptr<MediaSinksObserver>>& observers,
61 const std::vector<MediaSource>& sources) const {
62 if (observers.size() != sources.size())
63 return false;
64 for (size_t i = 0; i < observers.size(); i++) {
65 if (!observers[i]->source().Equals(sources[i]))
66 return false;
67 }
68 return true;
50 } 69 }
51 70
52 content::TestBrowserThreadBundle thread_bundle_; 71 content::TestBrowserThreadBundle thread_bundle_;
53 MockMediaRouter mock_router_; 72 MockMediaRouter mock_router_;
54 QueryResultManager query_result_manager_; 73 QueryResultManager query_result_manager_;
55 MockObserver mock_observer_; 74 MockObserver mock_observer_;
56 75
57 private: 76 private:
58 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest); 77 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest);
59 }; 78 };
(...skipping 25 matching lines...) Expand all
85 query_result_manager_.NotifyOnResultsUpdated(); 104 query_result_manager_.NotifyOnResultsUpdated();
86 105
87 query_result_manager_.RemoveObserver(&ob1); 106 query_result_manager_.RemoveObserver(&ob1);
88 query_result_manager_.NotifyOnResultsUpdated(); 107 query_result_manager_.NotifyOnResultsUpdated();
89 } 108 }
90 109
91 TEST_F(QueryResultManagerTest, StartStopSinksQuery) { 110 TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
92 GURL origin(kOrigin); 111 GURL origin(kOrigin);
93 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes(); 112 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes();
94 EXPECT_TRUE(cast_modes.empty()); 113 EXPECT_TRUE(cast_modes.empty());
95 MediaSource actual_source = 114 std::vector<MediaSource> actual_sources =
96 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT); 115 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
97 EXPECT_TRUE(actual_source.Empty()); 116 EXPECT_EQ(0u, actual_sources.size());
98 117
99 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl")); 118 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl"));
100 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 119 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
101 .WillOnce(Return(true)); 120 .WillOnce(Return(true));
102 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source, origin); 121 query_result_manager_.StartSinksQuery(
122 MediaCastMode::DEFAULT, {source}, origin);
103 123
104 cast_modes = query_result_manager_.GetSupportedCastModes(); 124 cast_modes = query_result_manager_.GetSupportedCastModes();
105 EXPECT_EQ(1u, cast_modes.size()); 125 EXPECT_EQ(1u, cast_modes.size());
106 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 126 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
107 actual_source = query_result_manager_.GetSourceForCastMode( 127 actual_sources = query_result_manager_.GetSourcesForCastMode(
108 MediaCastMode::DEFAULT); 128 MediaCastMode::DEFAULT);
109 EXPECT_TRUE(source.Equals(actual_source)); 129 EXPECT_EQ(1u, actual_sources.size());
130 EXPECT_TRUE(source.Equals(actual_sources[0]));
110 131
111 // Register a different source for the same cast mode. 132 // Register a different set of sources for the same cast mode.
112 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl")); 133 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl"));
113 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 134 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
114 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 135 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
115 .WillOnce(Return(true)); 136 .WillOnce(Return(true));
116 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, another_source, 137 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT,
117 origin); 138 {another_source}, origin);
118 139
119 cast_modes = query_result_manager_.GetSupportedCastModes(); 140 cast_modes = query_result_manager_.GetSupportedCastModes();
120 EXPECT_EQ(1u, cast_modes.size()); 141 EXPECT_EQ(1u, cast_modes.size());
121 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 142 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
122 actual_source = query_result_manager_.GetSourceForCastMode( 143 actual_sources = query_result_manager_.GetSourcesForCastMode(
123 MediaCastMode::DEFAULT); 144 MediaCastMode::DEFAULT);
124 EXPECT_TRUE(another_source.Equals(actual_source)); 145 EXPECT_EQ(1u, actual_sources.size());
146 EXPECT_TRUE(another_source.Equals(actual_sources[0]));
125 147
126 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 148 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
127 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT); 149 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
128 150
129 cast_modes = query_result_manager_.GetSupportedCastModes(); 151 cast_modes = query_result_manager_.GetSupportedCastModes();
130 EXPECT_TRUE(cast_modes.empty()); 152 EXPECT_TRUE(cast_modes.empty());
131 actual_source = query_result_manager_.GetSourceForCastMode( 153 actual_sources = query_result_manager_.GetSourcesForCastMode(
132 MediaCastMode::DEFAULT); 154 MediaCastMode::DEFAULT);
133 EXPECT_TRUE(actual_source.Empty()); 155 EXPECT_EQ(0u, actual_sources.size());
134 } 156 }
135 157
136 TEST_F(QueryResultManagerTest, MultipleQueries) { 158 TEST_F(QueryResultManagerTest, MultipleQueries) {
137 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST); 159 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
138 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST); 160 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
139 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST); 161 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
140 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST); 162 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
141 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST); 163 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
142 GURL origin(kOrigin); 164 GURL origin(kOrigin);
143 165
(...skipping 10 matching lines...) Expand all
154 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 176 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
155 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 177 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
156 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 178 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
157 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 179 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
158 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 180 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
159 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
160 182
161 const auto& sinks_observers = query_result_manager_.sinks_observers_; 183 const auto& sinks_observers = query_result_manager_.sinks_observers_;
162 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 184 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
163 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 185 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
164 ASSERT_TRUE(sinks_observer_it->second.get()); 186 ASSERT_EQ(1u, sinks_observer_it->second.size());
187 ASSERT_TRUE(sinks_observer_it->second[0].get());
165 188
166 std::vector<MediaSink> sinks_query_result; 189 std::vector<MediaSink> sinks_query_result;
167 sinks_query_result.push_back(sink1); 190 sinks_query_result.push_back(sink1);
168 sinks_query_result.push_back(sink2); 191 sinks_query_result.push_back(sink2);
169 sinks_query_result.push_back(sink3); 192 sinks_query_result.push_back(sink3);
170 EXPECT_CALL(mock_observer_, 193 EXPECT_CALL(mock_observer_,
171 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 194 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
172 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, 195 sinks_observer_it->second[0]->OnSinksUpdated(sinks_query_result,
173 std::vector<GURL>()); 196 std::vector<GURL>());
174 197
175 // Action: TAB_MIRROR -> [2, 3, 4] 198 // Action: TAB_MIRROR -> [2, 3, 4]
176 // Expected result: 199 // Expected result:
177 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR}, 200 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR},
178 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}] 201 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}]
179 expected_sinks.clear(); 202 expected_sinks.clear();
180 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 203 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 204 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
182 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 205 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
183 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 206 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
184 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 207 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
185 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 208 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
186 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 209 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
187 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 210 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
188 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 211 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
189 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 212 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
190 213
191 sinks_query_result.clear(); 214 sinks_query_result.clear();
192 sinks_query_result.push_back(sink2); 215 sinks_query_result.push_back(sink2);
193 sinks_query_result.push_back(sink3); 216 sinks_query_result.push_back(sink3);
194 sinks_query_result.push_back(sink4); 217 sinks_query_result.push_back(sink4);
195 218
196 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR); 219 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR);
197 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 220 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
198 ASSERT_TRUE(sinks_observer_it->second.get()); 221 ASSERT_EQ(1u, sinks_observer_it->second.size());
222 ASSERT_TRUE(sinks_observer_it->second[0].get());
199 EXPECT_CALL(mock_observer_, 223 EXPECT_CALL(mock_observer_,
200 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 224 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
201 sinks_observer_it->second->OnSinksUpdated( 225 sinks_observer_it->second[0]->OnSinksUpdated(
202 sinks_query_result, std::vector<GURL>(1, GURL(kOrigin))); 226 sinks_query_result, {GURL(kOrigin)});
203 227
204 // Action: Update default presentation URL 228 // Action: Update default presentation URL
205 // Expected result: 229 // Expected result:
206 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 230 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
207 expected_sinks.clear(); 231 expected_sinks.clear();
208 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 232 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
209 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 233 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
210 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 234 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 235 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
212 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 236 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 237 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
214 238
239 // The observer for the old source will be unregistered.
215 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 240 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
241 // The observer for the new source will be registered.
216 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 242 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
217 .WillOnce(Return(true)); 243 .WillOnce(Return(true));
218 EXPECT_CALL(mock_observer_, 244 EXPECT_CALL(mock_observer_,
219 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 245 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
220 query_result_manager_.StartSinksQuery( 246 query_result_manager_.StartSinksQuery(
221 MediaCastMode::DEFAULT, 247 MediaCastMode::DEFAULT,
222 MediaSourceForPresentationUrl("http://bazurl.com"), origin); 248 {MediaSourceForPresentationUrl("http://bazurl.com")}, origin);
223 249
224 // Action: DEFAULT -> [1], origins don't match 250 // Action: DEFAULT -> [1], origins don't match
225 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 251 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
226 // (No change) 252 // (No change)
227 sinks_query_result.clear(); 253 sinks_query_result.clear();
228 sinks_query_result.push_back(sink1); 254 sinks_query_result.push_back(sink1);
229 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 255 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
230 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 256 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
231 ASSERT_TRUE(sinks_observer_it->second.get()); 257 ASSERT_EQ(1u, sinks_observer_it->second.size());
258 ASSERT_TRUE(sinks_observer_it->second[0].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[0]->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_.StopSinksQuery(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 sourceA(MediaSourceForPresentationUrl("http://urlA"));
283 const MediaSource sourceB(MediaSourceForPresentationUrl("http://urlB"));
284 const MediaSource sourceC(MediaSourceForPresentationUrl("http://urlC"));
285 // The sources are in decreasing order of priority.
286 const std::vector<MediaSource> sources = {sourceA, sourceB, sourceC};
287 const GURL origin(kOrigin);
288 const auto& sinks_observers = query_result_manager_.sinks_observers_;
289
290 // There should be one MediaSinksObserver per source.
291 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
292 .Times(3).WillRepeatedly(Return(true));
293 query_result_manager_.StartSinksQuery(
294 MediaCastMode::DEFAULT, sources, origin);
295
296 // Scenario (results in this order):
297 // Action: URL_B -> [2, 4]
298 // Expected result:
299 // Sinks: [1 -> {},
300 // 2 -> {URL_B},
301 // 3 -> {},
302 // 4 -> {URL_B}]
303 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
304 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
305 EXPECT_TRUE(SinkObserversMatchSources(sinks_observer_it->second, sources));
306
307 auto& source_b_observer = sinks_observer_it->second[1];
308 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>());
309 EXPECT_TRUE(IsDefaultSourceForSink(MediaSource(), sink1));
310 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink2));
311 EXPECT_TRUE(IsDefaultSourceForSink(MediaSource(), sink3));
312 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink4));
313
314 // Action: URL_C -> [1, 2, 3]
315 // Expected result:
316 // Sinks: [1 -> {URL_C},
317 // 2 -> {URL_B, URL_C},
318 // 3 -> {URL_C},
319 // 4 -> {URL_B}]
320 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
321 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
322 EXPECT_TRUE(SinkObserversMatchSources(sinks_observer_it->second, sources));
323
324 auto& source_c_observer = sinks_observer_it->second[2];
325 source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>());
326 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink1));
327 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink2));
328 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink3));
329 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink4));
330
331 // Action: URL_A -> [2, 3, 4]
332 // Expected result:
333 // Sinks: [1 -> {URL_C},
334 // 2 -> {URL_A, URL_B, URL_C},
335 // 3 -> {URL_A, URL_C},
336 // 4 -> {URL_A, URL_B}]
337 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
338 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
339 EXPECT_TRUE(SinkObserversMatchSources(sinks_observer_it->second, sources));
340
341 auto& source_a_observer = sinks_observer_it->second[0];
342 source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>());
343 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink1));
344 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink2));
345 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink3));
346 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink4));
347
348 // The observers for the three sources should get unregistered.
349 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(3);
350 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
351 }
352
251 } // namespace media_router 353 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698