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

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: Modify MediaRouterDialogControllerAndroid, format 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
« no previous file with comments | « chrome/browser/ui/webui/media_router/query_result_manager.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(cast_mode, {source},
50 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, const MediaSink& sink) {
59 return IsPreferredSourceForSink(MediaCastMode::TAB_MIRROR, source, sink);
60 }
61
62 bool IsPreferredSourceForSink(MediaCastMode cast_mode,
63 const MediaSource* source,
64 const MediaSink& sink) {
65 std::unique_ptr<MediaSource> default_source =
66 query_result_manager_.GetSourceForCastModeAndSink(cast_mode, sink.id());
67 return (!(default_source || source)) ||
68 (default_source && source && *default_source.get() == *source);
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://foo.com"));
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_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source},
122 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 =
108 MediaCastMode::DEFAULT); 128 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
109 EXPECT_TRUE(source.Equals(actual_source)); 129 EXPECT_EQ(1u, actual_sources.size());
130 EXPECT_EQ(source, 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://bar.com"));
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_.SetSourcesForCastMode(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 =
123 MediaCastMode::DEFAULT); 144 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
124 EXPECT_TRUE(another_source.Equals(actual_source)); 145 EXPECT_EQ(1u, actual_sources.size());
146 EXPECT_EQ(another_source, 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_.RemoveSourcesForCastMode(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 =
132 MediaCastMode::DEFAULT); 154 query_result_manager_.GetSourcesForCastMode(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 default_source1 = MediaSourceForPresentationUrl("http://bar.com");
165 MediaSource default_source2 = MediaSourceForPresentationUrl("http://baz.com");
166 MediaSource tab_source = 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, default_source1);
146 MediaSourceForPresentationUrl("http://barUrl")); 171 DiscoverSinks(MediaCastMode::TAB_MIRROR, tab_source);
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(default_source1);
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(tab_source);
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(sinks_query_result,
202 sinks_query_result, std::vector<GURL>(1, GURL(kOrigin))); 226 {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_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
221 MediaCastMode::DEFAULT, 247 {default_source2}, 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(default_source2);
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_.RemoveSourcesForCastMode(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 source_a(MediaSourceForPresentationUrl("http://urlA.com"));
281 const MediaSource source_b(MediaSourceForPresentationUrl("http://urlB.com"));
282 const MediaSource source_c(MediaSourceForPresentationUrl("http://urlC.com"));
283 const MediaSource source_tab(MediaSourceForTab(1));
284 // The sources are in decreasing order of priority.
285 const std::vector<MediaSource> default_sources = {source_a, source_b,
286 source_c};
287 const std::vector<MediaSource> tab_sources = {source_tab};
288 const GURL origin(kOrigin);
289 const auto& sinks_observers = query_result_manager_.sinks_observers_;
290
291 // There should be one MediaSinksObserver per source.
292 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
293 .Times(4)
294 .WillRepeatedly(Return(true));
295 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
296 default_sources, origin);
297 query_result_manager_.SetSourcesForCastMode(MediaCastMode::TAB_MIRROR,
298 tab_sources, origin);
299
300 // Scenario (results in this order):
301 // Action: URL_B -> [2, 4]
302 // Expected result:
303 // Sinks: [1 -> {},
304 // 2 -> {URL_B},
305 // 3 -> {},
306 // 4 -> {URL_B}]
307 auto sinks_observer_it = sinks_observers.find(source_b);
308 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
309 ASSERT_TRUE(sinks_observer_it->second.get());
310
311 auto& source_b_observer = sinks_observer_it->second;
312 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>());
313 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink1));
314 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
315 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink3));
316 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
317
318 // Action: URL_C -> [1, 2, 3]
319 // Expected result:
320 // Sinks: [1 -> {URL_C},
321 // 2 -> {URL_B, URL_C},
322 // 3 -> {URL_C},
323 // 4 -> {URL_B}]
324 sinks_observer_it = sinks_observers.find(source_c);
325 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
326 ASSERT_TRUE(sinks_observer_it->second.get());
327
328 auto& source_c_observer = sinks_observer_it->second;
329 source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>());
330 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
331 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
332 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink3));
333 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
334
335 // Action: URL_A -> [2, 3, 4]
336 // Expected result:
337 // Sinks: [1 -> {URL_C},
338 // 2 -> {URL_A, URL_B, URL_C},
339 // 3 -> {URL_A, URL_C},
340 // 4 -> {URL_A, URL_B}]
341 sinks_observer_it = sinks_observers.find(source_a);
342 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
343 ASSERT_TRUE(sinks_observer_it->second.get());
344
345 auto& source_a_observer = sinks_observer_it->second;
346 source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>());
347 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
348 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
349 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
350 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
351
352 // Action: TAB -> [1, 2]
353 // Expected result:
354 // Sinks: [1 -> {URL_C, TAB},
355 // 2 -> {URL_A, URL_B, URL_C, TAB},
356 // 3 -> {URL_A, URL_C},
357 // 4 -> {URL_A, URL_B}]
358 sinks_observer_it = sinks_observers.find(source_tab);
359 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
360 ASSERT_TRUE(sinks_observer_it->second.get());
361
362 auto& source_tab_observer = sinks_observer_it->second;
363 source_tab_observer->OnSinksUpdated({sink1, sink2}, std::vector<GURL>());
364 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
365 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
366 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
367 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
368 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink1));
369 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink2));
370 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink3));
371 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink4));
372
373 // The observers for the four sources should get unregistered.
374 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(4);
375 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
376 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR);
377 }
378
379 TEST_F(QueryResultManagerTest, AddInvalidSource) {
380 const MediaSource source(MediaSourceForPresentationUrl("http://url.com"));
381 const GURL origin(kOrigin);
382
383 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
384 .Times(1)
385 .WillRepeatedly(Return(true));
386 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source},
387 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(MediaCastMode::TAB_MIRROR,
391 {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
« no previous file with comments | « chrome/browser/ui/webui/media_router/query_result_manager.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698