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

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

Issue 1784533004: [Media Router] Add origins to sink query results. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 4 years, 9 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"
11 #include "chrome/browser/media/router/media_source_helper.h" 11 #include "chrome/browser/media/router/media_source_helper.h"
12 #include "chrome/browser/media/router/mock_media_router.h" 12 #include "chrome/browser/media/router/mock_media_router.h"
13 #include "chrome/browser/ui/webui/media_router/query_result_manager.h" 13 #include "chrome/browser/ui/webui/media_router/query_result_manager.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 16
17 using testing::ContainerEq;
18 using testing::Eq; 17 using testing::Eq;
19 using testing::IsEmpty; 18 using testing::IsEmpty;
20 using testing::Eq; 19 using testing::Eq;
21 using testing::Mock; 20 using testing::Mock;
22 using testing::Return; 21 using testing::Return;
23 using testing::_; 22 using testing::_;
24 23
25 namespace media_router { 24 namespace media_router {
26 25
27 namespace { 26 namespace {
28 27
28 const char kOrigin[] = "https://origin.com";
29
29 class MockObserver : public QueryResultManager::Observer { 30 class MockObserver : public QueryResultManager::Observer {
30 public: 31 public:
31 MOCK_METHOD1(OnResultsUpdated, void( 32 MOCK_METHOD1(OnResultsUpdated, void(
32 const std::vector<MediaSinkWithCastModes>& sinks)); 33 const std::vector<MediaSinkWithCastModes>& sinks));
33 }; 34 };
34 35
35 } // namespace 36 } // namespace
36 37
37 class QueryResultManagerTest : public ::testing::Test { 38 class QueryResultManagerTest : public ::testing::Test {
38 public: 39 public:
39 QueryResultManagerTest() 40 QueryResultManagerTest()
40 : mock_router_(), query_result_manager_(&mock_router_) { 41 : mock_router_(), query_result_manager_(&mock_router_) {
41 } 42 }
42 43
43 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) { 44 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) {
44 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 45 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
45 .WillOnce(Return(true)); 46 .WillOnce(Return(true));
46 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1); 47 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1);
47 query_result_manager_.StartSinksQuery(cast_mode, source); 48 query_result_manager_.StartSinksQuery(cast_mode, source, GURL(kOrigin));
48 } 49 }
49 50
50 MockMediaRouter mock_router_; 51 MockMediaRouter mock_router_;
51 QueryResultManager query_result_manager_; 52 QueryResultManager query_result_manager_;
52 MockObserver mock_observer_; 53 MockObserver mock_observer_;
53 54
54 private: 55 private:
55 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest); 56 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest);
56 }; 57 };
57 58
(...skipping 21 matching lines...) Expand all
79 80
80 query_result_manager_.RemoveObserver(&ob2); 81 query_result_manager_.RemoveObserver(&ob2);
81 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1); 82 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1);
82 query_result_manager_.NotifyOnResultsUpdated(); 83 query_result_manager_.NotifyOnResultsUpdated();
83 84
84 query_result_manager_.RemoveObserver(&ob1); 85 query_result_manager_.RemoveObserver(&ob1);
85 query_result_manager_.NotifyOnResultsUpdated(); 86 query_result_manager_.NotifyOnResultsUpdated();
86 } 87 }
87 88
88 TEST_F(QueryResultManagerTest, StartStopSinksQuery) { 89 TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
90 GURL origin(kOrigin);
89 CastModeSet cast_modes; 91 CastModeSet cast_modes;
90 92
91 query_result_manager_.GetSupportedCastModes(&cast_modes); 93 query_result_manager_.GetSupportedCastModes(&cast_modes);
92 EXPECT_TRUE(cast_modes.empty()); 94 EXPECT_TRUE(cast_modes.empty());
93 MediaSource actual_source = 95 MediaSource actual_source =
94 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT); 96 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT);
95 EXPECT_TRUE(actual_source.Empty()); 97 EXPECT_TRUE(actual_source.Empty());
96 98
97 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl")); 99 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl"));
98 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 100 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
99 .WillOnce(Return(true)); 101 .WillOnce(Return(true));
100 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source); 102 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source, origin);
101 103
102 query_result_manager_.GetSupportedCastModes(&cast_modes); 104 query_result_manager_.GetSupportedCastModes(&cast_modes);
103 EXPECT_EQ(1u, cast_modes.size()); 105 EXPECT_EQ(1u, cast_modes.size());
104 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 106 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT));
105 actual_source = query_result_manager_.GetSourceForCastMode( 107 actual_source = query_result_manager_.GetSourceForCastMode(
106 MediaCastMode::DEFAULT); 108 MediaCastMode::DEFAULT);
107 EXPECT_TRUE(source.Equals(actual_source)); 109 EXPECT_TRUE(source.Equals(actual_source));
108 110
109 // Register a different source for the same cast mode. 111 // Register a different source for the same cast mode.
110 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl")); 112 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl"));
111 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 113 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
112 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 114 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
113 .WillOnce(Return(true)); 115 .WillOnce(Return(true));
114 query_result_manager_.StartSinksQuery( 116 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, another_source,
115 MediaCastMode::DEFAULT, another_source); 117 origin);
116 118
117 query_result_manager_.GetSupportedCastModes(&cast_modes); 119 query_result_manager_.GetSupportedCastModes(&cast_modes);
118 EXPECT_EQ(1u, cast_modes.size()); 120 EXPECT_EQ(1u, cast_modes.size());
119 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 121 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT));
120 actual_source = query_result_manager_.GetSourceForCastMode( 122 actual_source = query_result_manager_.GetSourceForCastMode(
121 MediaCastMode::DEFAULT); 123 MediaCastMode::DEFAULT);
122 EXPECT_TRUE(another_source.Equals(actual_source)); 124 EXPECT_TRUE(another_source.Equals(actual_source));
123 125
124 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 126 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
125 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT); 127 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
126 128
127 query_result_manager_.GetSupportedCastModes(&cast_modes); 129 query_result_manager_.GetSupportedCastModes(&cast_modes);
128 EXPECT_TRUE(cast_modes.empty()); 130 EXPECT_TRUE(cast_modes.empty());
129 actual_source = query_result_manager_.GetSourceForCastMode( 131 actual_source = query_result_manager_.GetSourceForCastMode(
130 MediaCastMode::DEFAULT); 132 MediaCastMode::DEFAULT);
131 EXPECT_TRUE(actual_source.Empty()); 133 EXPECT_TRUE(actual_source.Empty());
132 } 134 }
133 135
134 TEST_F(QueryResultManagerTest, MultipleQueries) { 136 TEST_F(QueryResultManagerTest, MultipleQueries) {
135 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST); 137 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
136 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST); 138 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
137 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST); 139 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
138 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST); 140 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
139 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST); 141 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
142 GURL origin(kOrigin);
140 143
141 query_result_manager_.AddObserver(&mock_observer_); 144 query_result_manager_.AddObserver(&mock_observer_);
142 DiscoverSinks(MediaCastMode::DEFAULT, 145 DiscoverSinks(MediaCastMode::DEFAULT,
143 MediaSourceForPresentationUrl("http://barUrl")); 146 MediaSourceForPresentationUrl("http://barUrl"));
144 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123)); 147 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123));
145 148
146 // Scenario (results in this order): 149 // Scenario (results in this order):
147 // Action: DEFAULT -> [1, 2, 3] 150 // Action: DEFAULT -> [1, 2, 3]
148 // Expected result: 151 // Expected result:
149 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}] 152 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}]
150 std::vector<MediaSinkWithCastModes> expected_sinks; 153 std::vector<MediaSinkWithCastModes> expected_sinks;
151 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 154 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
152 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 155 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
153 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 156 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
154 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 157 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
155 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 158 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
156 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 159 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
157 160
158 const auto& sinks_observers = query_result_manager_.sinks_observers_; 161 const auto& sinks_observers = query_result_manager_.sinks_observers_;
159 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 162 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
160 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 163 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
161 ASSERT_TRUE(sinks_observer_it->second.get()); 164 ASSERT_TRUE(sinks_observer_it->second.get());
162 165
163 std::vector<MediaSink> sinks_query_result; 166 std::vector<MediaSink> sinks_query_result;
164 sinks_query_result.push_back(sink1); 167 sinks_query_result.push_back(sink1);
165 sinks_query_result.push_back(sink2); 168 sinks_query_result.push_back(sink2);
166 sinks_query_result.push_back(sink3); 169 sinks_query_result.push_back(sink3);
167 EXPECT_CALL(mock_observer_, 170 EXPECT_CALL(mock_observer_,
168 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 171 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
169 sinks_observer_it->second->OnSinksReceived(sinks_query_result); 172 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
173 std::vector<GURL>());
170 174
171 // Action: TAB_MIRROR -> [2, 3, 4] 175 // Action: TAB_MIRROR -> [2, 3, 4]
172 // Expected result: 176 // Expected result:
173 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR}, 177 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR},
174 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}] 178 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}]
175 expected_sinks.clear(); 179 expected_sinks.clear();
176 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 180 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
177 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 181 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
178 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 182 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
179 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 183 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
180 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 184 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
181 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 185 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
182 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 186 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
183 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 187 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
184 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 188 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
185 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 189 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
186 190
187 sinks_query_result.clear(); 191 sinks_query_result.clear();
188 sinks_query_result.push_back(sink2); 192 sinks_query_result.push_back(sink2);
189 sinks_query_result.push_back(sink3); 193 sinks_query_result.push_back(sink3);
190 sinks_query_result.push_back(sink4); 194 sinks_query_result.push_back(sink4);
191 195
192 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR); 196 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR);
193 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 197 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
194 ASSERT_TRUE(sinks_observer_it->second.get()); 198 ASSERT_TRUE(sinks_observer_it->second.get());
195 EXPECT_CALL(mock_observer_, 199 EXPECT_CALL(mock_observer_,
196 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 200 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
197 sinks_observer_it->second->OnSinksReceived(sinks_query_result); 201 sinks_observer_it->second->OnSinksUpdated(
202 sinks_query_result, std::vector<GURL>(1, GURL(kOrigin)));
198 203
199 // Action: Update default presentation URL 204 // Action: Update default presentation URL
200 // Expected result: 205 // Expected result:
201 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 206 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
202 expected_sinks.clear(); 207 expected_sinks.clear();
203 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 208 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
204 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 209 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
205 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 210 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
206 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 211 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
207 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 212 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
208 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 213 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
209 214
210 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 215 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
211 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 216 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
212 .WillOnce(Return(true)); 217 .WillOnce(Return(true));
213 EXPECT_CALL(mock_observer_, 218 EXPECT_CALL(mock_observer_,
214 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 219 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
215 query_result_manager_.StartSinksQuery( 220 query_result_manager_.StartSinksQuery(
216 MediaCastMode::DEFAULT, 221 MediaCastMode::DEFAULT,
217 MediaSourceForPresentationUrl("http://bazurl.com")); 222 MediaSourceForPresentationUrl("http://bazurl.com"), origin);
223
224 // Action: DEFAULT -> [1], origins don't match
225 // Expected result: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
226 // (No change)
227 sinks_query_result.clear();
228 sinks_query_result.push_back(sink1);
229 sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
230 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
231 ASSERT_TRUE(sinks_observer_it->second.get());
232 EXPECT_CALL(mock_observer_, OnResultsUpdated(VectorEquals(expected_sinks)))
233 .Times(1);
234 sinks_observer_it->second->OnSinksUpdated(
235 sinks_query_result,
236 std::vector<GURL>(1, GURL("https://differentOrigin.com")));
218 237
219 // Action: Remove TAB_MIRROR observer 238 // Action: Remove TAB_MIRROR observer
220 // Expected result: 239 // Expected result:
221 // Sinks: [] 240 // Sinks: []
222 expected_sinks.clear(); 241 expected_sinks.clear();
223 EXPECT_CALL(mock_observer_, 242 EXPECT_CALL(mock_observer_,
224 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 243 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
225 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 244 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
226 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR); 245 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR);
227 246
228 // Remaining observers: DEFAULT observer, which will be removed on destruction 247 // Remaining observers: DEFAULT observer, which will be removed on destruction
229 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 248 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
230 } 249 }
231 250
232 } // namespace media_router 251 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/media_router/query_result_manager.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698