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

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

Powered by Google App Engine
This is Rietveld 408576698