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

Side by Side Diff: chrome/browser/media/router/media_router_mojo_impl_unittest.cc

Issue 1224093004: [Media Router] 2nd take on fix route response callback lifetime in UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit test Created 5 years, 5 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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 expected->presentation_id != actual->presentation_id || 56 expected->presentation_id != actual->presentation_id ||
57 expected->type != actual->type) { 57 expected->type != actual->type) {
58 return false; 58 return false;
59 } 59 }
60 return expected->is_binary() ? *(expected->data) == *(actual->data) 60 return expected->is_binary() ? *(expected->data) == *(actual->data)
61 : *(expected->message) == *(actual->message); 61 : *(expected->message) == *(actual->message);
62 } 62 }
63 63
64 } // namespace 64 } // namespace
65 65
66 // Adapts Invoke(), which takes a move-only scoped_ptr parameter (not mockable)
67 // to a variant that accepts raw pointers instead (mock friendly).
68 class RouteResponseCallbackHandler { 66 class RouteResponseCallbackHandler {
69 public: 67 public:
70 void Invoke(scoped_ptr<MediaRoute> route, const std::string& error_text) { 68 MOCK_METHOD2(Invoke,
71 InvokeObserver(route.get(), error_text); 69 void(const MediaRoute* route, const std::string& error_text));
72 }
73
74 MOCK_METHOD2(InvokeObserver,
75 void(MediaRoute* route, const std::string& error_text));
76 }; 70 };
77 71
78 class SendMessageCallbackHandler { 72 class SendMessageCallbackHandler {
79 public: 73 public:
80 MOCK_METHOD1(Invoke, void(bool)); 74 MOCK_METHOD1(Invoke, void(bool));
81 }; 75 };
82 76
83 class ListenForMessagesCallbackHandler { 77 class ListenForMessagesCallbackHandler {
84 public: 78 public:
85 ListenForMessagesCallbackHandler(scoped_ptr< 79 ListenForMessagesCallbackHandler(scoped_ptr<
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 mojo::String(kOrigin), kTabId, _)) 159 mojo::String(kOrigin), kTabId, _))
166 .WillOnce(Invoke([&route]( 160 .WillOnce(Invoke([&route](
167 const mojo::String& source, const mojo::String& sink, 161 const mojo::String& source, const mojo::String& sink,
168 const mojo::String& presentation_id, const mojo::String& origin, 162 const mojo::String& presentation_id, const mojo::String& origin,
169 int tab_id, 163 int tab_id,
170 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 164 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
171 cb.Run(route.Pass(), mojo::String()); 165 cb.Run(route.Pass(), mojo::String());
172 })); 166 }));
173 167
174 RouteResponseCallbackHandler handler; 168 RouteResponseCallbackHandler handler;
175 EXPECT_CALL(handler, InvokeObserver(Pointee(Equals(expected_route)), "")); 169 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), ""));
170 std::vector<MediaRouteResponseCallback> route_response_callbacks;
171 route_response_callbacks.push_back(base::Bind(
172 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
176 router()->CreateRoute(kSource, kSink, GURL(kOrigin), kTabId, 173 router()->CreateRoute(kSource, kSink, GURL(kOrigin), kTabId,
177 base::Bind(&RouteResponseCallbackHandler::Invoke, 174 route_response_callbacks);
178 base::Unretained(&handler)));
179 ProcessEventLoop(); 175 ProcessEventLoop();
180 } 176 }
181 177
182 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) { 178 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) {
183 EXPECT_CALL(mock_media_route_provider_, 179 EXPECT_CALL(mock_media_route_provider_,
184 CreateRoute(mojo::String(kSource), mojo::String(kSink), _, 180 CreateRoute(mojo::String(kSource), mojo::String(kSink), _,
185 mojo::String(kOrigin), kTabId, _)) 181 mojo::String(kOrigin), kTabId, _))
186 .WillOnce(Invoke( 182 .WillOnce(Invoke(
187 [](const mojo::String& source, const mojo::String& sink, 183 [](const mojo::String& source, const mojo::String& sink,
188 const mojo::String& presentation_id, const mojo::String& origin, 184 const mojo::String& presentation_id, const mojo::String& origin,
189 int tab_id, 185 int tab_id,
190 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 186 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
191 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError)); 187 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError));
192 })); 188 }));
193 189
194 RouteResponseCallbackHandler handler; 190 RouteResponseCallbackHandler handler;
195 EXPECT_CALL(handler, InvokeObserver(nullptr, kError)); 191 EXPECT_CALL(handler, Invoke(nullptr, kError));
192 std::vector<MediaRouteResponseCallback> route_response_callbacks;
193 route_response_callbacks.push_back(base::Bind(
194 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
196 router()->CreateRoute(kSource, kSink, GURL(kOrigin), kTabId, 195 router()->CreateRoute(kSource, kSink, GURL(kOrigin), kTabId,
197 base::Bind(&RouteResponseCallbackHandler::Invoke, 196 route_response_callbacks);
198 base::Unretained(&handler)));
199 ProcessEventLoop(); 197 ProcessEventLoop();
200 } 198 }
201 199
202 TEST_F(MediaRouterMojoImplTest, JoinRoute) { 200 TEST_F(MediaRouterMojoImplTest, JoinRoute) {
203 MediaRoute expected_route(kRouteId, MediaSource(std::string(kSource)), 201 MediaRoute expected_route(kRouteId, MediaSource(std::string(kSource)),
204 MediaSink(kSink, kSinkName), "", false); 202 MediaSink(kSink, kSinkName), "", false);
205 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); 203 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New();
206 route->media_source = kSource; 204 route->media_source = kSource;
207 route->media_sink = interfaces::MediaSink::New(); 205 route->media_sink = interfaces::MediaSink::New();
208 route->media_sink->sink_id = kSink; 206 route->media_sink->sink_id = kSink;
209 route->media_sink->name = kSinkName; 207 route->media_sink->name = kSinkName;
210 route->media_route_id = kRouteId; 208 route->media_route_id = kRouteId;
211 route->description = kDescription; 209 route->description = kDescription;
212 210
213 // Use a lambda function as an invocation target here to work around 211 // Use a lambda function as an invocation target here to work around
214 // a limitation with GMock::Invoke that prevents it from using move-only types 212 // a limitation with GMock::Invoke that prevents it from using move-only types
215 // in runnable parameter lists. 213 // in runnable parameter lists.
216 EXPECT_CALL(mock_media_route_provider_, 214 EXPECT_CALL(mock_media_route_provider_,
217 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), 215 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId),
218 mojo::String(kOrigin), kTabId, _)) 216 mojo::String(kOrigin), kTabId, _))
219 .WillOnce(Invoke([&route]( 217 .WillOnce(Invoke([&route](
220 const mojo::String& source, const mojo::String& presentation_id, 218 const mojo::String& source, const mojo::String& presentation_id,
221 const mojo::String& origin, int tab_id, 219 const mojo::String& origin, int tab_id,
222 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 220 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
223 cb.Run(route.Pass(), mojo::String()); 221 cb.Run(route.Pass(), mojo::String());
224 })); 222 }));
225 223
226 RouteResponseCallbackHandler handler; 224 RouteResponseCallbackHandler handler;
227 EXPECT_CALL(handler, InvokeObserver(Pointee(Equals(expected_route)), "")); 225 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), ""));
226 std::vector<MediaRouteResponseCallback> route_response_callbacks;
227 route_response_callbacks.push_back(base::Bind(
228 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
228 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), kTabId, 229 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), kTabId,
229 base::Bind(&RouteResponseCallbackHandler::Invoke, 230 route_response_callbacks);
230 base::Unretained(&handler)));
231 ProcessEventLoop(); 231 ProcessEventLoop();
232 } 232 }
233 233
234 TEST_F(MediaRouterMojoImplTest, JoinRouteFails) { 234 TEST_F(MediaRouterMojoImplTest, JoinRouteFails) {
235 EXPECT_CALL(mock_media_route_provider_, 235 EXPECT_CALL(mock_media_route_provider_,
236 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), 236 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId),
237 mojo::String(kOrigin), kTabId, _)) 237 mojo::String(kOrigin), kTabId, _))
238 .WillOnce(Invoke( 238 .WillOnce(Invoke(
239 [](const mojo::String& source, const mojo::String& presentation_id, 239 [](const mojo::String& source, const mojo::String& presentation_id,
240 const mojo::String& origin, int tab_id, 240 const mojo::String& origin, int tab_id,
241 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 241 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
242 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError)); 242 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError));
243 })); 243 }));
244 244
245 RouteResponseCallbackHandler handler; 245 RouteResponseCallbackHandler handler;
246 EXPECT_CALL(handler, InvokeObserver(nullptr, kError)); 246 EXPECT_CALL(handler, Invoke(nullptr, kError));
247 std::vector<MediaRouteResponseCallback> route_response_callbacks;
248 route_response_callbacks.push_back(base::Bind(
249 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
247 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), kTabId, 250 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), kTabId,
248 base::Bind(&RouteResponseCallbackHandler::Invoke, 251 route_response_callbacks);
249 base::Unretained(&handler)));
250 ProcessEventLoop(); 252 ProcessEventLoop();
251 } 253 }
252 254
253 TEST_F(MediaRouterMojoImplTest, CloseRoute) { 255 TEST_F(MediaRouterMojoImplTest, CloseRoute) {
254 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId))); 256 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId)));
255 router()->CloseRoute(kRouteId); 257 router()->CloseRoute(kRouteId);
256 ProcessEventLoop(); 258 ProcessEventLoop();
257 } 259 }
258 260
259 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { 261 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 binding.reset(new mojo::Binding<interfaces::MediaRouteProvider>( 517 binding.reset(new mojo::Binding<interfaces::MediaRouteProvider>(
516 &mock_media_route_provider, mojo::GetProxy(&media_route_provider_proxy))); 518 &mock_media_route_provider, mojo::GetProxy(&media_route_provider_proxy)));
517 media_router_proxy->RegisterMediaRouteProvider( 519 media_router_proxy->RegisterMediaRouteProvider(
518 media_route_provider_proxy.Pass(), 520 media_route_provider_proxy.Pass(),
519 base::Bind(&RegisterMediaRouteProviderHandler::Invoke, 521 base::Bind(&RegisterMediaRouteProviderHandler::Invoke,
520 base::Unretained(&provide_handler))); 522 base::Unretained(&provide_handler)));
521 message_loop.RunUntilIdle(); 523 message_loop.RunUntilIdle();
522 } 524 }
523 525
524 } // namespace media_router 526 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/media/router/media_router_mojo_impl.cc ('k') | chrome/browser/media/router/mock_media_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698