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

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: Create 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_.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);
164 MediaSource defaultSource1 = MediaSourceForPresentationUrl("http://barUrl");
165 MediaSource defaultSource2 = MediaSourceForPresentationUrl("http://bazurl");
166 MediaSource tabSource = MediaSourceForTab(123);
142 GURL origin(kOrigin); 167 GURL origin(kOrigin);
143 168
144 query_result_manager_.AddObserver(&mock_observer_); 169 query_result_manager_.AddObserver(&mock_observer_);
145 DiscoverSinks(MediaCastMode::DEFAULT, 170 DiscoverSinks(MediaCastMode::DEFAULT, defaultSource1);
146 MediaSourceForPresentationUrl("http://barUrl")); 171 DiscoverSinks(MediaCastMode::TAB_MIRROR, tabSource);
147 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123));
148 172
149 // Scenario (results in this order): 173 // Scenario (results in this order):
150 // Action: DEFAULT -> [1, 2, 3] 174 // Action: DEFAULT -> [1, 2, 3]
151 // Expected result: 175 // Expected result:
152 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}] 176 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}]
153 std::vector<MediaSinkWithCastModes> expected_sinks; 177 std::vector<MediaSinkWithCastModes> expected_sinks;
154 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 178 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
155 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 179 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
156 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 180 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
157 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
158 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 182 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
159 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 183 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
160 184
161 const auto& sinks_observers = query_result_manager_.sinks_observers_; 185 const auto& sinks_observers = query_result_manager_.sinks_observers_;
162 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 186 auto sinks_observer_it = sinks_observers.find(defaultSource1);
163 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 187 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
164 ASSERT_TRUE(sinks_observer_it->second.get()); 188 ASSERT_TRUE(sinks_observer_it->second.get());
165 189
166 std::vector<MediaSink> sinks_query_result; 190 std::vector<MediaSink> sinks_query_result;
167 sinks_query_result.push_back(sink1); 191 sinks_query_result.push_back(sink1);
168 sinks_query_result.push_back(sink2); 192 sinks_query_result.push_back(sink2);
169 sinks_query_result.push_back(sink3); 193 sinks_query_result.push_back(sink3);
170 EXPECT_CALL(mock_observer_, 194 EXPECT_CALL(mock_observer_,
171 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 195 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
172 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, 196 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
(...skipping 13 matching lines...) Expand all
186 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 210 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
187 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
188 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 212 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
189 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
190 214
191 sinks_query_result.clear(); 215 sinks_query_result.clear();
192 sinks_query_result.push_back(sink2); 216 sinks_query_result.push_back(sink2);
193 sinks_query_result.push_back(sink3); 217 sinks_query_result.push_back(sink3);
194 sinks_query_result.push_back(sink4); 218 sinks_query_result.push_back(sink4);
195 219
196 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR); 220 sinks_observer_it = sinks_observers.find(tabSource);
197 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 221 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
198 ASSERT_TRUE(sinks_observer_it->second.get()); 222 ASSERT_TRUE(sinks_observer_it->second.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->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, {defaultSource2}, origin);
222 MediaSourceForPresentationUrl("http://bazurl.com"), origin);
223 248
224 // Action: DEFAULT -> [1], origins don't match 249 // Action: DEFAULT -> [1], origins don't match
225 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 250 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
226 // (No change) 251 // (No change)
227 sinks_query_result.clear(); 252 sinks_query_result.clear();
228 sinks_query_result.push_back(sink1); 253 sinks_query_result.push_back(sink1);
229 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 254 sinks_observer_it = sinks_observers.find(defaultSource2);
230 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 255 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
231 ASSERT_TRUE(sinks_observer_it->second.get()); 256 ASSERT_TRUE(sinks_observer_it->second.get());
232 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks))) 257 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks)))
233 .Times(1); 258 .Times(1);
234 sinks_observer_it->second->OnSinksUpdated( 259 sinks_observer_it->second->OnSinksUpdated(
235 sinks_query_result, 260 sinks_query_result, {GURL("https://differentOrigin.com")});
236 std::vector<GURL>(1, GURL("https://differentOrigin.com")));
237 261
238 // Action: Remove TAB_MIRROR observer 262 // Action: Remove TAB_MIRROR observer
239 // Expected result: 263 // Expected result:
240 // Sinks: [] 264 // Sinks: []
241 expected_sinks.clear(); 265 expected_sinks.clear();
242 EXPECT_CALL(mock_observer_, 266 EXPECT_CALL(mock_observer_,
243 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 267 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
244 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 268 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
245 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR); 269 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR);
246 270
247 // Remaining observers: DEFAULT observer, which will be removed on destruction 271 // Remaining observers: DEFAULT observer, which will be removed on destruction
248 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 272 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
249 } 273 }
250 274
275 TEST_F(QueryResultManagerTest, MultipleUrls) {
276 const MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
277 const MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
278 const MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
279 const MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
280 const MediaSource sourceA(MediaSourceForPresentationUrl("http://urlA"));
281 const MediaSource sourceB(MediaSourceForPresentationUrl("http://urlB"));
282 const MediaSource sourceC(MediaSourceForPresentationUrl("http://urlC"));
283 // The sources are in decreasing order of priority.
284 const std::vector<MediaSource> sources = {sourceA, sourceB, sourceC};
285 const GURL origin(kOrigin);
286 const auto& sinks_observers = query_result_manager_.sinks_observers_;
287
288 // There should be one MediaSinksObserver per source.
289 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
290 .Times(3).WillRepeatedly(Return(true));
291 query_result_manager_.StartSinksQuery(
292 MediaCastMode::DEFAULT, sources, origin);
293
294 // Scenario (results in this order):
295 // Action: URL_B -> [2, 4]
296 // Expected result:
297 // Sinks: [1 -> {},
298 // 2 -> {URL_B},
299 // 3 -> {},
300 // 4 -> {URL_B}]
301 auto sinks_observer_it = sinks_observers.find(sourceB);
302 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
303 ASSERT_TRUE(sinks_observer_it->second.get());
304
305 auto& source_b_observer = sinks_observer_it->second;
306 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>());
307 EXPECT_TRUE(IsDefaultSourceForSink(MediaSource(), sink1));
308 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink2));
309 EXPECT_TRUE(IsDefaultSourceForSink(MediaSource(), sink3));
310 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink4));
311
312 // Action: URL_C -> [1, 2, 3]
313 // Expected result:
314 // Sinks: [1 -> {URL_C},
315 // 2 -> {URL_B, URL_C},
316 // 3 -> {URL_C},
317 // 4 -> {URL_B}]
318 sinks_observer_it = sinks_observers.find(sourceC);
319 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
320 ASSERT_TRUE(sinks_observer_it->second.get());
321
322 auto& source_c_observer = sinks_observer_it->second;
323 source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>());
324 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink1));
325 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink2));
326 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink3));
327 EXPECT_TRUE(IsDefaultSourceForSink(sourceB, sink4));
328
329 // Action: URL_A -> [2, 3, 4]
330 // Expected result:
331 // Sinks: [1 -> {URL_C},
332 // 2 -> {URL_A, URL_B, URL_C},
333 // 3 -> {URL_A, URL_C},
334 // 4 -> {URL_A, URL_B}]
335 sinks_observer_it = sinks_observers.find(sourceA);
336 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
337 ASSERT_TRUE(sinks_observer_it->second.get());
338
339 auto& source_a_observer = sinks_observer_it->second;
340 source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>());
341 EXPECT_TRUE(IsDefaultSourceForSink(sourceC, sink1));
342 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink2));
343 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink3));
344 EXPECT_TRUE(IsDefaultSourceForSink(sourceA, sink4));
345
346 // The observers for the three sources should get unregistered.
347 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(3);
348 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
349 }
350
251 } // namespace media_router 351 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698