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

Side by Side Diff: chrome/browser/ui/webui/media_router/query_result_manager_unittest.cc

Issue 2627463003: Convert MediaRouter mojom apis to intake url::Origin objects instead of strings (Closed)
Patch Set: Fix chromeos browser tests Created 3 years, 11 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 "chrome/browser/media/router/media_sinks_observer.h" 9 #include "chrome/browser/media/router/media_sinks_observer.h"
10 #include "chrome/browser/media/router/media_source_helper.h" 10 #include "chrome/browser/media/router/media_source_helper.h"
11 #include "chrome/browser/media/router/mock_media_router.h" 11 #include "chrome/browser/media/router/mock_media_router.h"
12 #include "chrome/browser/ui/webui/media_router/query_result_manager.h" 12 #include "chrome/browser/ui/webui/media_router/query_result_manager.h"
13 #include "content/public/test/test_browser_thread_bundle.h" 13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h" 16 #include "url/gurl.h"
17 17
18 using testing::Eq; 18 using testing::Eq;
19 using testing::IsEmpty; 19 using testing::IsEmpty;
20 using testing::Eq; 20 using testing::Eq;
21 using testing::Mock; 21 using testing::Mock;
22 using testing::Return; 22 using testing::Return;
23 using testing::_; 23 using testing::_;
24 24
25 namespace media_router { 25 namespace media_router {
26 26
27 namespace { 27 namespace {
28 28
29 const char kOrigin[] = "https://origin.com"; 29 const url::Origin kOrigin = url::Origin(GURL("https://origin.com"));
mark a. foltz 2017/01/17 21:30:45 Don't use complex ctors in statics
steimel 2017/01/18 01:52:35 Done.
30 30
31 class MockObserver : public QueryResultManager::Observer { 31 class MockObserver : public QueryResultManager::Observer {
32 public: 32 public:
33 MOCK_METHOD1(OnResultsUpdated, void( 33 MOCK_METHOD1(OnResultsUpdated, void(
34 const std::vector<MediaSinkWithCastModes>& sinks)); 34 const std::vector<MediaSinkWithCastModes>& sinks));
35 }; 35 };
36 36
37 } // namespace 37 } // namespace
38 38
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_.SetSourcesForCastMode(cast_mode, {source}, 49 query_result_manager_.SetSourcesForCastMode(cast_mode, {source}, kOrigin);
50 GURL(kOrigin));
51 } 50 }
52 51
53 bool IsDefaultSourceForSink(const MediaSource* source, 52 bool IsDefaultSourceForSink(const MediaSource* source,
54 const MediaSink& sink) { 53 const MediaSink& sink) {
55 return IsPreferredSourceForSink(MediaCastMode::DEFAULT, source, sink); 54 return IsPreferredSourceForSink(MediaCastMode::DEFAULT, source, sink);
56 } 55 }
57 56
58 bool IsTabSourceForSink(const MediaSource* source, const MediaSink& sink) { 57 bool IsTabSourceForSink(const MediaSource* source, const MediaSink& sink) {
59 return IsPreferredSourceForSink(MediaCastMode::TAB_MIRROR, source, sink); 58 return IsPreferredSourceForSink(MediaCastMode::TAB_MIRROR, source, sink);
60 } 59 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 100
102 query_result_manager_.RemoveObserver(&ob2); 101 query_result_manager_.RemoveObserver(&ob2);
103 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1); 102 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1);
104 query_result_manager_.NotifyOnResultsUpdated(); 103 query_result_manager_.NotifyOnResultsUpdated();
105 104
106 query_result_manager_.RemoveObserver(&ob1); 105 query_result_manager_.RemoveObserver(&ob1);
107 query_result_manager_.NotifyOnResultsUpdated(); 106 query_result_manager_.NotifyOnResultsUpdated();
108 } 107 }
109 108
110 TEST_F(QueryResultManagerTest, StartStopSinksQuery) { 109 TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
111 GURL origin(kOrigin);
112 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes(); 110 CastModeSet cast_modes = query_result_manager_.GetSupportedCastModes();
113 EXPECT_TRUE(cast_modes.empty()); 111 EXPECT_TRUE(cast_modes.empty());
114 std::vector<MediaSource> actual_sources = 112 std::vector<MediaSource> actual_sources =
115 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT); 113 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
116 EXPECT_EQ(0u, actual_sources.size()); 114 EXPECT_EQ(0u, actual_sources.size());
117 115
118 MediaSource source(MediaSourceForPresentationUrl(GURL("http://foo.com"))); 116 MediaSource source(MediaSourceForPresentationUrl(GURL("http://foo.com")));
119 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 117 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
120 .WillOnce(Return(true)); 118 .WillOnce(Return(true));
121 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source}, 119 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source},
122 origin); 120 kOrigin);
123 121
124 cast_modes = query_result_manager_.GetSupportedCastModes(); 122 cast_modes = query_result_manager_.GetSupportedCastModes();
125 EXPECT_EQ(1u, cast_modes.size()); 123 EXPECT_EQ(1u, cast_modes.size());
126 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 124 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
127 actual_sources = 125 actual_sources =
128 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT); 126 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
129 EXPECT_EQ(1u, actual_sources.size()); 127 EXPECT_EQ(1u, actual_sources.size());
130 EXPECT_EQ(source, actual_sources[0]); 128 EXPECT_EQ(source, actual_sources[0]);
131 129
132 // Register a different set of sources for the same cast mode. 130 // Register a different set of sources for the same cast mode.
133 MediaSource another_source( 131 MediaSource another_source(
134 MediaSourceForPresentationUrl(GURL("http://bar.com"))); 132 MediaSourceForPresentationUrl(GURL("http://bar.com")));
135 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 133 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
136 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 134 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
137 .WillOnce(Return(true)); 135 .WillOnce(Return(true));
138 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, 136 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
139 {another_source}, origin); 137 {another_source}, kOrigin);
140 138
141 cast_modes = query_result_manager_.GetSupportedCastModes(); 139 cast_modes = query_result_manager_.GetSupportedCastModes();
142 EXPECT_EQ(1u, cast_modes.size()); 140 EXPECT_EQ(1u, cast_modes.size());
143 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 141 EXPECT_TRUE(base::ContainsKey(cast_modes, MediaCastMode::DEFAULT));
144 actual_sources = 142 actual_sources =
145 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT); 143 query_result_manager_.GetSourcesForCastMode(MediaCastMode::DEFAULT);
146 EXPECT_EQ(1u, actual_sources.size()); 144 EXPECT_EQ(1u, actual_sources.size());
147 EXPECT_EQ(another_source, actual_sources[0]); 145 EXPECT_EQ(another_source, actual_sources[0]);
148 146
149 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 147 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
(...skipping 10 matching lines...) Expand all
160 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST); 158 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
161 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST); 159 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
162 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST); 160 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
163 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST); 161 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
164 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST); 162 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
165 MediaSource default_source1 = 163 MediaSource default_source1 =
166 MediaSourceForPresentationUrl(GURL("http://bar.com")); 164 MediaSourceForPresentationUrl(GURL("http://bar.com"));
167 MediaSource default_source2 = 165 MediaSource default_source2 =
168 MediaSourceForPresentationUrl(GURL("http://baz.com")); 166 MediaSourceForPresentationUrl(GURL("http://baz.com"));
169 MediaSource tab_source = MediaSourceForTab(123); 167 MediaSource tab_source = MediaSourceForTab(123);
170 GURL origin(kOrigin);
171 168
172 query_result_manager_.AddObserver(&mock_observer_); 169 query_result_manager_.AddObserver(&mock_observer_);
173 DiscoverSinks(MediaCastMode::DEFAULT, default_source1); 170 DiscoverSinks(MediaCastMode::DEFAULT, default_source1);
174 DiscoverSinks(MediaCastMode::TAB_MIRROR, tab_source); 171 DiscoverSinks(MediaCastMode::TAB_MIRROR, tab_source);
175 172
176 // Scenario (results in this order): 173 // Scenario (results in this order):
177 // Action: DEFAULT -> [1, 2, 3] 174 // Action: DEFAULT -> [1, 2, 3]
178 // Expected result: 175 // Expected result:
179 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}] 176 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}]
180 std::vector<MediaSinkWithCastModes> expected_sinks; 177 std::vector<MediaSinkWithCastModes> expected_sinks;
181 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 178 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
182 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 179 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
183 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 180 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
184 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
185 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 182 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
186 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 183 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
187 184
188 const auto& sinks_observers = query_result_manager_.sinks_observers_; 185 const auto& sinks_observers = query_result_manager_.sinks_observers_;
189 auto sinks_observer_it = sinks_observers.find(default_source1); 186 auto sinks_observer_it = sinks_observers.find(default_source1);
190 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 187 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
191 ASSERT_TRUE(sinks_observer_it->second.get()); 188 ASSERT_TRUE(sinks_observer_it->second.get());
192 189
193 std::vector<MediaSink> sinks_query_result; 190 std::vector<MediaSink> sinks_query_result;
194 sinks_query_result.push_back(sink1); 191 sinks_query_result.push_back(sink1);
195 sinks_query_result.push_back(sink2); 192 sinks_query_result.push_back(sink2);
196 sinks_query_result.push_back(sink3); 193 sinks_query_result.push_back(sink3);
197 EXPECT_CALL(mock_observer_, 194 EXPECT_CALL(mock_observer_,
198 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 195 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
199 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, 196 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
200 std::vector<GURL>()); 197 std::vector<url::Origin>());
201 198
202 // Action: TAB_MIRROR -> [2, 3, 4] 199 // Action: TAB_MIRROR -> [2, 3, 4]
203 // Expected result: 200 // Expected result:
204 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR}, 201 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR},
205 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}] 202 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}]
206 expected_sinks.clear(); 203 expected_sinks.clear();
207 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 204 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
208 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 205 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
209 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 206 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
210 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 207 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 208 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
212 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 209 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
213 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 210 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
214 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
215 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 212 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
216 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
217 214
218 sinks_query_result.clear(); 215 sinks_query_result.clear();
219 sinks_query_result.push_back(sink2); 216 sinks_query_result.push_back(sink2);
220 sinks_query_result.push_back(sink3); 217 sinks_query_result.push_back(sink3);
221 sinks_query_result.push_back(sink4); 218 sinks_query_result.push_back(sink4);
222 219
223 sinks_observer_it = sinks_observers.find(tab_source); 220 sinks_observer_it = sinks_observers.find(tab_source);
224 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 221 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
225 ASSERT_TRUE(sinks_observer_it->second.get()); 222 ASSERT_TRUE(sinks_observer_it->second.get());
226 EXPECT_CALL(mock_observer_, 223 EXPECT_CALL(mock_observer_,
227 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 224 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
228 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, 225 sinks_observer_it->second->OnSinksUpdated(sinks_query_result, {kOrigin});
229 {GURL(kOrigin)});
230 226
231 // Action: Update default presentation URL 227 // Action: Update default presentation URL
232 // Expected result: 228 // Expected result:
233 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 229 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
234 expected_sinks.clear(); 230 expected_sinks.clear();
235 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 231 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
236 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 232 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
237 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 233 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
238 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 234 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
239 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 235 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
240 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 236 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
241 237
242 // The observer for the old source will be unregistered. 238 // The observer for the old source will be unregistered.
243 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 239 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
244 // The observer for the new source will be registered. 240 // The observer for the new source will be registered.
245 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 241 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
246 .WillOnce(Return(true)); 242 .WillOnce(Return(true));
247 EXPECT_CALL(mock_observer_, 243 EXPECT_CALL(mock_observer_,
248 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 244 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
249 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, 245 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
250 {default_source2}, origin); 246 {default_source2}, kOrigin);
251 247
252 // Action: DEFAULT -> [1], origins don't match 248 // Action: DEFAULT -> [1], origins don't match
253 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 249 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
254 // (No change) 250 // (No change)
255 sinks_query_result.clear(); 251 sinks_query_result.clear();
256 sinks_query_result.push_back(sink1); 252 sinks_query_result.push_back(sink1);
257 sinks_observer_it = sinks_observers.find(default_source2); 253 sinks_observer_it = sinks_observers.find(default_source2);
258 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 254 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
259 ASSERT_TRUE(sinks_observer_it->second.get()); 255 ASSERT_TRUE(sinks_observer_it->second.get());
260 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks))) 256 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks)))
261 .Times(1); 257 .Times(1);
262 sinks_observer_it->second->OnSinksUpdated( 258 sinks_observer_it->second->OnSinksUpdated(
263 sinks_query_result, {GURL("https://differentOrigin.com")}); 259 sinks_query_result, {url::Origin(GURL("https://differentOrigin.com"))});
264 260
265 // Action: Remove TAB_MIRROR observer 261 // Action: Remove TAB_MIRROR observer
266 // Expected result: 262 // Expected result:
267 // Sinks: [] 263 // Sinks: []
268 expected_sinks.clear(); 264 expected_sinks.clear();
269 EXPECT_CALL(mock_observer_, 265 EXPECT_CALL(mock_observer_,
270 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 266 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
271 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 267 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
272 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR); 268 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR);
273 269
(...skipping 10 matching lines...) Expand all
284 MediaSourceForPresentationUrl(GURL("http://urlA.com"))); 280 MediaSourceForPresentationUrl(GURL("http://urlA.com")));
285 const MediaSource source_b( 281 const MediaSource source_b(
286 MediaSourceForPresentationUrl(GURL("http://urlB.com"))); 282 MediaSourceForPresentationUrl(GURL("http://urlB.com")));
287 const MediaSource source_c( 283 const MediaSource source_c(
288 MediaSourceForPresentationUrl(GURL("http://urlC.com"))); 284 MediaSourceForPresentationUrl(GURL("http://urlC.com")));
289 const MediaSource source_tab(MediaSourceForTab(1)); 285 const MediaSource source_tab(MediaSourceForTab(1));
290 // The sources are in decreasing order of priority. 286 // The sources are in decreasing order of priority.
291 const std::vector<MediaSource> default_sources = {source_a, source_b, 287 const std::vector<MediaSource> default_sources = {source_a, source_b,
292 source_c}; 288 source_c};
293 const std::vector<MediaSource> tab_sources = {source_tab}; 289 const std::vector<MediaSource> tab_sources = {source_tab};
294 const GURL origin(kOrigin);
295 const auto& sinks_observers = query_result_manager_.sinks_observers_; 290 const auto& sinks_observers = query_result_manager_.sinks_observers_;
296 291
297 // There should be one MediaSinksObserver per source. 292 // There should be one MediaSinksObserver per source.
298 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 293 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
299 .Times(4) 294 .Times(4)
300 .WillRepeatedly(Return(true)); 295 .WillRepeatedly(Return(true));
301 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, 296 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT,
302 default_sources, origin); 297 default_sources, kOrigin);
303 query_result_manager_.SetSourcesForCastMode(MediaCastMode::TAB_MIRROR, 298 query_result_manager_.SetSourcesForCastMode(MediaCastMode::TAB_MIRROR,
304 tab_sources, origin); 299 tab_sources, kOrigin);
305 300
306 // Scenario (results in this order): 301 // Scenario (results in this order):
307 // Action: URL_B -> [2, 4] 302 // Action: URL_B -> [2, 4]
308 // Expected result: 303 // Expected result:
309 // Sinks: [1 -> {}, 304 // Sinks: [1 -> {},
310 // 2 -> {URL_B}, 305 // 2 -> {URL_B},
311 // 3 -> {}, 306 // 3 -> {},
312 // 4 -> {URL_B}] 307 // 4 -> {URL_B}]
313 auto sinks_observer_it = sinks_observers.find(source_b); 308 auto sinks_observer_it = sinks_observers.find(source_b);
314 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 309 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
315 ASSERT_TRUE(sinks_observer_it->second.get()); 310 ASSERT_TRUE(sinks_observer_it->second.get());
316 311
317 auto& source_b_observer = sinks_observer_it->second; 312 auto& source_b_observer = sinks_observer_it->second;
318 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<GURL>()); 313 source_b_observer->OnSinksUpdated({sink2, sink4}, std::vector<url::Origin>());
319 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink1)); 314 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink1));
320 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2)); 315 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
321 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink3)); 316 EXPECT_TRUE(IsDefaultSourceForSink(nullptr, sink3));
322 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4)); 317 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
323 318
324 // Action: URL_C -> [1, 2, 3] 319 // Action: URL_C -> [1, 2, 3]
325 // Expected result: 320 // Expected result:
326 // Sinks: [1 -> {URL_C}, 321 // Sinks: [1 -> {URL_C},
327 // 2 -> {URL_B, URL_C}, 322 // 2 -> {URL_B, URL_C},
328 // 3 -> {URL_C}, 323 // 3 -> {URL_C},
329 // 4 -> {URL_B}] 324 // 4 -> {URL_B}]
330 sinks_observer_it = sinks_observers.find(source_c); 325 sinks_observer_it = sinks_observers.find(source_c);
331 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 326 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
332 ASSERT_TRUE(sinks_observer_it->second.get()); 327 ASSERT_TRUE(sinks_observer_it->second.get());
333 328
334 auto& source_c_observer = sinks_observer_it->second; 329 auto& source_c_observer = sinks_observer_it->second;
335 source_c_observer->OnSinksUpdated({sink1, sink2, sink3}, std::vector<GURL>()); 330 source_c_observer->OnSinksUpdated({sink1, sink2, sink3},
331 std::vector<url::Origin>());
336 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1)); 332 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
337 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2)); 333 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink2));
338 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink3)); 334 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink3));
339 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4)); 335 EXPECT_TRUE(IsDefaultSourceForSink(&source_b, sink4));
340 336
341 // Action: URL_A -> [2, 3, 4] 337 // Action: URL_A -> [2, 3, 4]
342 // Expected result: 338 // Expected result:
343 // Sinks: [1 -> {URL_C}, 339 // Sinks: [1 -> {URL_C},
344 // 2 -> {URL_A, URL_B, URL_C}, 340 // 2 -> {URL_A, URL_B, URL_C},
345 // 3 -> {URL_A, URL_C}, 341 // 3 -> {URL_A, URL_C},
346 // 4 -> {URL_A, URL_B}] 342 // 4 -> {URL_A, URL_B}]
347 sinks_observer_it = sinks_observers.find(source_a); 343 sinks_observer_it = sinks_observers.find(source_a);
348 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 344 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
349 ASSERT_TRUE(sinks_observer_it->second.get()); 345 ASSERT_TRUE(sinks_observer_it->second.get());
350 346
351 auto& source_a_observer = sinks_observer_it->second; 347 auto& source_a_observer = sinks_observer_it->second;
352 source_a_observer->OnSinksUpdated({sink2, sink3, sink4}, std::vector<GURL>()); 348 source_a_observer->OnSinksUpdated({sink2, sink3, sink4},
349 std::vector<url::Origin>());
353 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1)); 350 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
354 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2)); 351 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
355 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3)); 352 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
356 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4)); 353 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
357 354
358 // Action: TAB -> [1, 2] 355 // Action: TAB -> [1, 2]
359 // Expected result: 356 // Expected result:
360 // Sinks: [1 -> {URL_C, TAB}, 357 // Sinks: [1 -> {URL_C, TAB},
361 // 2 -> {URL_A, URL_B, URL_C, TAB}, 358 // 2 -> {URL_A, URL_B, URL_C, TAB},
362 // 3 -> {URL_A, URL_C}, 359 // 3 -> {URL_A, URL_C},
363 // 4 -> {URL_A, URL_B}] 360 // 4 -> {URL_A, URL_B}]
364 sinks_observer_it = sinks_observers.find(source_tab); 361 sinks_observer_it = sinks_observers.find(source_tab);
365 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 362 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
366 ASSERT_TRUE(sinks_observer_it->second.get()); 363 ASSERT_TRUE(sinks_observer_it->second.get());
367 364
368 auto& source_tab_observer = sinks_observer_it->second; 365 auto& source_tab_observer = sinks_observer_it->second;
369 source_tab_observer->OnSinksUpdated({sink1, sink2}, std::vector<GURL>()); 366 source_tab_observer->OnSinksUpdated({sink1, sink2},
367 std::vector<url::Origin>());
370 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1)); 368 EXPECT_TRUE(IsDefaultSourceForSink(&source_c, sink1));
371 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2)); 369 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink2));
372 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3)); 370 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink3));
373 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4)); 371 EXPECT_TRUE(IsDefaultSourceForSink(&source_a, sink4));
374 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink1)); 372 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink1));
375 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink2)); 373 EXPECT_TRUE(IsTabSourceForSink(&source_tab, sink2));
376 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink3)); 374 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink3));
377 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink4)); 375 EXPECT_TRUE(IsTabSourceForSink(nullptr, sink4));
378 376
379 // The observers for the four sources should get unregistered. 377 // The observers for the four sources should get unregistered.
380 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(4); 378 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(4);
381 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::DEFAULT); 379 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
382 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR); 380 query_result_manager_.RemoveSourcesForCastMode(MediaCastMode::TAB_MIRROR);
383 } 381 }
384 382
385 TEST_F(QueryResultManagerTest, AddInvalidSource) { 383 TEST_F(QueryResultManagerTest, AddInvalidSource) {
386 const MediaSource source( 384 const MediaSource source(
387 MediaSourceForPresentationUrl(GURL("http://url.com"))); 385 MediaSourceForPresentationUrl(GURL("http://url.com")));
388 const GURL origin(kOrigin);
389 386
390 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 387 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
391 .Times(1) 388 .Times(1)
392 .WillRepeatedly(Return(true)); 389 .WillRepeatedly(Return(true));
393 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source}, 390 query_result_manager_.SetSourcesForCastMode(MediaCastMode::DEFAULT, {source},
394 origin); 391 kOrigin);
395 // |source| has already been registered with the default cast mode, so it 392 // |source| has already been registered with the default cast mode, so it
396 // shouldn't get registered with tab mirroring. 393 // shouldn't get registered with tab mirroring.
397 query_result_manager_.SetSourcesForCastMode(MediaCastMode::TAB_MIRROR, 394 query_result_manager_.SetSourcesForCastMode(MediaCastMode::TAB_MIRROR,
398 {source}, origin); 395 {source}, kOrigin);
399 396
400 const auto& cast_mode_sources = query_result_manager_.cast_mode_sources_; 397 const auto& cast_mode_sources = query_result_manager_.cast_mode_sources_;
401 const auto& default_sources = cast_mode_sources.at(MediaCastMode::DEFAULT); 398 const auto& default_sources = cast_mode_sources.at(MediaCastMode::DEFAULT);
402 EXPECT_TRUE(base::ContainsKey(cast_mode_sources, MediaCastMode::DEFAULT)); 399 EXPECT_TRUE(base::ContainsKey(cast_mode_sources, MediaCastMode::DEFAULT));
403 EXPECT_EQ(default_sources.size(), 1u); 400 EXPECT_EQ(default_sources.size(), 1u);
404 EXPECT_EQ(default_sources.at(0), source); 401 EXPECT_EQ(default_sources.at(0), source);
405 EXPECT_FALSE(base::ContainsKey(cast_mode_sources, MediaCastMode::TAB_MIRROR)); 402 EXPECT_FALSE(base::ContainsKey(cast_mode_sources, MediaCastMode::TAB_MIRROR));
406 } 403 }
407 404
408 } // namespace media_router 405 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698