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

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 tests 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
29 class MockObserver : public QueryResultManager::Observer { 28 class MockObserver : public QueryResultManager::Observer {
30 public: 29 public:
31 MOCK_METHOD1(OnResultsUpdated, void( 30 MOCK_METHOD1(OnResultsUpdated, void(
32 const std::vector<MediaSinkWithCastModes>& sinks)); 31 const std::vector<MediaSinkWithCastModes>& sinks));
33 }; 32 };
34 33
35 } // namespace 34 } // namespace
36 35
37 class QueryResultManagerTest : public ::testing::Test { 36 class QueryResultManagerTest : public ::testing::Test {
38 public: 37 public:
39 QueryResultManagerTest() 38 QueryResultManagerTest()
40 : mock_router_(), query_result_manager_(&mock_router_) { 39 : mock_router_(), query_result_manager_(&mock_router_) {
41 } 40 }
42 41
43 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) { 42 void DiscoverSinks(MediaCastMode cast_mode, const MediaSource& source) {
44 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 43 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
45 .WillOnce(Return(true)); 44 .WillOnce(Return(true));
46 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1); 45 EXPECT_CALL(mock_observer_, OnResultsUpdated(_)).Times(1);
47 query_result_manager_.StartSinksQuery(cast_mode, source); 46 query_result_manager_.StartSinksQuery(cast_mode, source,
47 GURL("https://origin.com"));
48 } 48 }
49 49
50 MockMediaRouter mock_router_; 50 MockMediaRouter mock_router_;
51 QueryResultManager query_result_manager_; 51 QueryResultManager query_result_manager_;
52 MockObserver mock_observer_; 52 MockObserver mock_observer_;
53 53
54 private: 54 private:
55 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest); 55 DISALLOW_COPY_AND_ASSIGN(QueryResultManagerTest);
56 }; 56 };
57 57
(...skipping 21 matching lines...) Expand all
79 79
80 query_result_manager_.RemoveObserver(&ob2); 80 query_result_manager_.RemoveObserver(&ob2);
81 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1); 81 EXPECT_CALL(ob1, OnResultsUpdated(_)).Times(1);
82 query_result_manager_.NotifyOnResultsUpdated(); 82 query_result_manager_.NotifyOnResultsUpdated();
83 83
84 query_result_manager_.RemoveObserver(&ob1); 84 query_result_manager_.RemoveObserver(&ob1);
85 query_result_manager_.NotifyOnResultsUpdated(); 85 query_result_manager_.NotifyOnResultsUpdated();
86 } 86 }
87 87
88 TEST_F(QueryResultManagerTest, StartStopSinksQuery) { 88 TEST_F(QueryResultManagerTest, StartStopSinksQuery) {
89 GURL origin("https://origin.com");
89 CastModeSet cast_modes; 90 CastModeSet cast_modes;
90 91
91 query_result_manager_.GetSupportedCastModes(&cast_modes); 92 query_result_manager_.GetSupportedCastModes(&cast_modes);
92 EXPECT_TRUE(cast_modes.empty()); 93 EXPECT_TRUE(cast_modes.empty());
93 MediaSource actual_source = 94 MediaSource actual_source =
94 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT); 95 query_result_manager_.GetSourceForCastMode(MediaCastMode::DEFAULT);
95 EXPECT_TRUE(actual_source.Empty()); 96 EXPECT_TRUE(actual_source.Empty());
96 97
97 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl")); 98 MediaSource source(MediaSourceForPresentationUrl("http://fooUrl"));
98 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 99 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
99 .WillOnce(Return(true)); 100 .WillOnce(Return(true));
100 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source); 101 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, source, origin);
101 102
102 query_result_manager_.GetSupportedCastModes(&cast_modes); 103 query_result_manager_.GetSupportedCastModes(&cast_modes);
103 EXPECT_EQ(1u, cast_modes.size()); 104 EXPECT_EQ(1u, cast_modes.size());
104 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 105 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT));
105 actual_source = query_result_manager_.GetSourceForCastMode( 106 actual_source = query_result_manager_.GetSourceForCastMode(
106 MediaCastMode::DEFAULT); 107 MediaCastMode::DEFAULT);
107 EXPECT_TRUE(source.Equals(actual_source)); 108 EXPECT_TRUE(source.Equals(actual_source));
108 109
109 // Register a different source for the same cast mode. 110 // Register a different source for the same cast mode.
110 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl")); 111 MediaSource another_source(MediaSourceForPresentationUrl("http://barUrl"));
111 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 112 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
112 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 113 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
113 .WillOnce(Return(true)); 114 .WillOnce(Return(true));
114 query_result_manager_.StartSinksQuery( 115 query_result_manager_.StartSinksQuery(MediaCastMode::DEFAULT, another_source,
115 MediaCastMode::DEFAULT, another_source); 116 origin);
116 117
117 query_result_manager_.GetSupportedCastModes(&cast_modes); 118 query_result_manager_.GetSupportedCastModes(&cast_modes);
118 EXPECT_EQ(1u, cast_modes.size()); 119 EXPECT_EQ(1u, cast_modes.size());
119 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT)); 120 EXPECT_TRUE(ContainsKey(cast_modes, MediaCastMode::DEFAULT));
120 actual_source = query_result_manager_.GetSourceForCastMode( 121 actual_source = query_result_manager_.GetSourceForCastMode(
121 MediaCastMode::DEFAULT); 122 MediaCastMode::DEFAULT);
122 EXPECT_TRUE(another_source.Equals(actual_source)); 123 EXPECT_TRUE(another_source.Equals(actual_source));
123 124
124 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 125 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
125 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT); 126 query_result_manager_.StopSinksQuery(MediaCastMode::DEFAULT);
126 127
127 query_result_manager_.GetSupportedCastModes(&cast_modes); 128 query_result_manager_.GetSupportedCastModes(&cast_modes);
128 EXPECT_TRUE(cast_modes.empty()); 129 EXPECT_TRUE(cast_modes.empty());
129 actual_source = query_result_manager_.GetSourceForCastMode( 130 actual_source = query_result_manager_.GetSourceForCastMode(
130 MediaCastMode::DEFAULT); 131 MediaCastMode::DEFAULT);
131 EXPECT_TRUE(actual_source.Empty()); 132 EXPECT_TRUE(actual_source.Empty());
132 } 133 }
133 134
134 TEST_F(QueryResultManagerTest, MultipleQueries) { 135 TEST_F(QueryResultManagerTest, MultipleQueries) {
135 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST); 136 MediaSink sink1("sinkId1", "Sink 1", MediaSink::IconType::CAST);
136 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST); 137 MediaSink sink2("sinkId2", "Sink 2", MediaSink::IconType::CAST);
137 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST); 138 MediaSink sink3("sinkId3", "Sink 3", MediaSink::IconType::CAST);
138 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST); 139 MediaSink sink4("sinkId4", "Sink 4", MediaSink::IconType::CAST);
139 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST); 140 MediaSink sink5("sinkId5", "Sink 5", MediaSink::IconType::CAST);
141 GURL origin("https://origin.com");
140 142
141 query_result_manager_.AddObserver(&mock_observer_); 143 query_result_manager_.AddObserver(&mock_observer_);
142 DiscoverSinks(MediaCastMode::DEFAULT, 144 DiscoverSinks(MediaCastMode::DEFAULT,
143 MediaSourceForPresentationUrl("http://barUrl")); 145 MediaSourceForPresentationUrl("http://barUrl"));
144 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123)); 146 DiscoverSinks(MediaCastMode::TAB_MIRROR, MediaSourceForTab(123));
145 147
146 // Scenario (results in this order): 148 // Scenario (results in this order):
147 // Action: DEFAULT -> [1, 2, 3] 149 // Action: DEFAULT -> [1, 2, 3]
148 // Expected result: 150 // Expected result:
149 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}] 151 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT}, 3 -> {DEFAULT}]
150 std::vector<MediaSinkWithCastModes> expected_sinks; 152 std::vector<MediaSinkWithCastModes> expected_sinks;
151 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 153 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
152 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 154 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
153 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 155 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
154 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 156 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
155 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 157 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
156 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 158 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
157 159
158 const auto& sinks_observers = query_result_manager_.sinks_observers_; 160 const auto& sinks_observers = query_result_manager_.sinks_observers_;
159 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT); 161 auto sinks_observer_it = sinks_observers.find(MediaCastMode::DEFAULT);
160 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 162 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
161 ASSERT_TRUE(sinks_observer_it->second.get()); 163 ASSERT_TRUE(sinks_observer_it->second.get());
162 164
163 std::vector<MediaSink> sinks_query_result; 165 std::vector<MediaSink> sinks_query_result;
164 sinks_query_result.push_back(sink1); 166 sinks_query_result.push_back(sink1);
165 sinks_query_result.push_back(sink2); 167 sinks_query_result.push_back(sink2);
166 sinks_query_result.push_back(sink3); 168 sinks_query_result.push_back(sink3);
167 EXPECT_CALL(mock_observer_, 169 EXPECT_CALL(mock_observer_,
168 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 170 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
169 sinks_observer_it->second->OnSinksReceived(sinks_query_result); 171 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
172 std::vector<GURL>());
mark a. foltz 2016/03/15 00:36:43 Please use a non-empty origin list for one of thes
imcheng 2016/03/15 01:52:42 Done.
170 173
171 // Action: TAB_MIRROR -> [2, 3, 4] 174 // Action: TAB_MIRROR -> [2, 3, 4]
172 // Expected result: 175 // Expected result:
173 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR}, 176 // Sinks: [1 -> {DEFAULT}, 2 -> {DEFAULT, TAB_MIRROR},
174 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}] 177 // 3 -> {DEFAULT, TAB_MIRROR}, 4 -> {TAB_MIRROR}]
175 expected_sinks.clear(); 178 expected_sinks.clear();
176 expected_sinks.push_back(MediaSinkWithCastModes(sink1)); 179 expected_sinks.push_back(MediaSinkWithCastModes(sink1));
177 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 180 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
178 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 181 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
179 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 182 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
180 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 183 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
181 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 184 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
182 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT); 185 expected_sinks.back().cast_modes.insert(MediaCastMode::DEFAULT);
183 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 186 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
184 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 187 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
185 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 188 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
186 189
187 sinks_query_result.clear(); 190 sinks_query_result.clear();
188 sinks_query_result.push_back(sink2); 191 sinks_query_result.push_back(sink2);
189 sinks_query_result.push_back(sink3); 192 sinks_query_result.push_back(sink3);
190 sinks_query_result.push_back(sink4); 193 sinks_query_result.push_back(sink4);
191 194
192 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR); 195 sinks_observer_it = sinks_observers.find(MediaCastMode::TAB_MIRROR);
193 ASSERT_TRUE(sinks_observer_it != sinks_observers.end()); 196 ASSERT_TRUE(sinks_observer_it != sinks_observers.end());
194 ASSERT_TRUE(sinks_observer_it->second.get()); 197 ASSERT_TRUE(sinks_observer_it->second.get());
195 EXPECT_CALL(mock_observer_, 198 EXPECT_CALL(mock_observer_,
196 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 199 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
197 sinks_observer_it->second->OnSinksReceived(sinks_query_result); 200 sinks_observer_it->second->OnSinksUpdated(sinks_query_result,
201 std::vector<GURL>());
198 202
199 // Action: Update default presentation URL 203 // Action: Update default presentation URL
200 // Expected result: 204 // Expected result:
201 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}] 205 // Sinks: [2 -> {TAB_MIRROR}, 3 -> {TAB_MIRROR}, 4 -> {TAB_MIRROR}]
202 expected_sinks.clear(); 206 expected_sinks.clear();
203 expected_sinks.push_back(MediaSinkWithCastModes(sink2)); 207 expected_sinks.push_back(MediaSinkWithCastModes(sink2));
204 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 208 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
205 expected_sinks.push_back(MediaSinkWithCastModes(sink3)); 209 expected_sinks.push_back(MediaSinkWithCastModes(sink3));
206 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 210 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
207 expected_sinks.push_back(MediaSinkWithCastModes(sink4)); 211 expected_sinks.push_back(MediaSinkWithCastModes(sink4));
208 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR); 212 expected_sinks.back().cast_modes.insert(MediaCastMode::TAB_MIRROR);
209 213
210 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 214 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
211 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 215 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
212 .WillOnce(Return(true)); 216 .WillOnce(Return(true));
213 EXPECT_CALL(mock_observer_, 217 EXPECT_CALL(mock_observer_,
214 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 218 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
215 query_result_manager_.StartSinksQuery( 219 query_result_manager_.StartSinksQuery(
216 MediaCastMode::DEFAULT, 220 MediaCastMode::DEFAULT,
217 MediaSourceForPresentationUrl("http://bazurl.com")); 221 MediaSourceForPresentationUrl("http://bazurl.com"), origin);
218 222
219 // Action: Remove TAB_MIRROR observer 223 // Action: Remove TAB_MIRROR observer
220 // Expected result: 224 // Expected result:
221 // Sinks: [] 225 // Sinks: []
222 expected_sinks.clear(); 226 expected_sinks.clear();
223 EXPECT_CALL(mock_observer_, 227 EXPECT_CALL(mock_observer_,
224 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1); 228 OnResultsUpdated(VectorEquals(expected_sinks))).Times(1);
225 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 229 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
226 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR); 230 query_result_manager_.StopSinksQuery(MediaCastMode::TAB_MIRROR);
227 231
228 // Remaining observers: DEFAULT observer, which will be removed on destruction 232 // Remaining observers: DEFAULT observer, which will be removed on destruction
229 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1); 233 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)).Times(1);
230 } 234 }
231 235
232 } // namespace media_router 236 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698