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

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

Issue 2173953003: Media Router Mojo: Use new wrapper types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 if (expected->type != actual->type) 89 if (expected->type != actual->type)
90 return false; 90 return false;
91 91
92 return expected->is_binary() ? *expected->data == *actual->data 92 return expected->is_binary() ? *expected->data == *actual->data
93 : expected->message == actual->message; 93 : expected->message == actual->message;
94 } 94 }
95 95
96 interfaces::IssuePtr CreateMojoIssue(const std::string& title) { 96 interfaces::IssuePtr CreateMojoIssue(const std::string& title) {
97 interfaces::IssuePtr mojoIssue = interfaces::Issue::New(); 97 interfaces::IssuePtr mojoIssue = interfaces::Issue::New();
98 mojoIssue->title = title; 98 mojoIssue->title = title;
99 mojoIssue->message = "msg"; 99 mojoIssue->message = std::string("msg");
100 mojoIssue->route_id = ""; 100 mojoIssue->route_id = std::string();
101 mojoIssue->default_action = interfaces::Issue::ActionType::DISMISS; 101 mojoIssue->default_action = interfaces::Issue::ActionType::DISMISS;
102 mojoIssue->secondary_actions = 102 mojoIssue->secondary_actions = std::vector<interfaces::Issue::ActionType>();
103 mojo::Array<interfaces::Issue::ActionType>::New(0);
104 mojoIssue->severity = interfaces::Issue::Severity::WARNING; 103 mojoIssue->severity = interfaces::Issue::Severity::WARNING;
105 mojoIssue->is_blocking = false; 104 mojoIssue->is_blocking = false;
106 mojoIssue->help_page_id = -1; 105 mojoIssue->help_page_id = -1;
107 return mojoIssue; 106 return mojoIssue;
108 } 107 }
109 108
110 interfaces::MediaRoutePtr CreateMojoRoute() { 109 interfaces::MediaRoutePtr CreateMojoRoute() {
111 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); 110 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New();
112 route->media_source = kSource; 111 route->media_source = std::string(kSource);
113 route->media_sink_id = kSinkId; 112 route->media_sink_id = kSinkId;
114 route->media_route_id = kRouteId; 113 route->media_route_id = kRouteId;
115 route->description = kDescription; 114 route->description = kDescription;
116 route->is_local = true; 115 route->is_local = true;
117 route->for_display = true; 116 route->for_display = true;
118 route->incognito = false; 117 route->incognito = false;
119 return route; 118 return route;
120 } 119 }
121 120
122 } // namespace 121 } // namespace
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 bool(const std::string& extension_id, 214 bool(const std::string& extension_id,
216 const base::Callback<void(bool)>& callback)); 215 const base::Callback<void(bool)>& callback));
217 216
218 private: 217 private:
219 DISALLOW_COPY_AND_ASSIGN(TestProcessManager); 218 DISALLOW_COPY_AND_ASSIGN(TestProcessManager);
220 }; 219 };
221 220
222 // Mockable class for awaiting RegisterMediaRouteProvider callbacks. 221 // Mockable class for awaiting RegisterMediaRouteProvider callbacks.
223 class RegisterMediaRouteProviderHandler { 222 class RegisterMediaRouteProviderHandler {
224 public: 223 public:
225 MOCK_METHOD1(Invoke, void(mojo::String instance_id)); 224 MOCK_METHOD1(Invoke, void(const std::string& instance_id));
226 }; 225 };
227 226
228 TEST_F(MediaRouterMojoImplTest, CreateRoute) { 227 TEST_F(MediaRouterMojoImplTest, CreateRoute) {
229 MediaSource media_source(kSource); 228 MediaSource media_source(kSource);
230 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 229 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
231 false); 230 false);
232 231
233 // Use a lambda function as an invocation target here to work around 232 // Use a lambda function as an invocation target here to work around
234 // a limitation with GMock::Invoke that prevents it from using move-only types 233 // a limitation with GMock::Invoke that prevents it from using move-only types
235 // in runnable parameter lists. 234 // in runnable parameter lists.
236 EXPECT_CALL(mock_media_route_provider_, 235 EXPECT_CALL(mock_media_route_provider_,
237 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, 236 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, _, _, _))
238 mojo::String(kOrigin), kInvalidTabId, _, _, _))
239 .WillOnce(Invoke( 237 .WillOnce(Invoke(
240 [](const mojo::String& source, const mojo::String& sink, 238 [](const std::string& source, const std::string& sink,
241 const mojo::String& presentation_id, const mojo::String& origin, 239 const std::string& presentation_id, const std::string& origin,
242 int tab_id, int64_t timeout_millis, bool incognito, 240 int tab_id, int64_t timeout_millis, bool incognito,
243 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 241 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
244 cb.Run(CreateMojoRoute(), mojo::String(), 242 cb.Run(CreateMojoRoute(), std::string(),
245 interfaces::RouteRequestResultCode::OK); 243 interfaces::RouteRequestResultCode::OK);
246 })); 244 }));
247 245
248 base::RunLoop run_loop; 246 base::RunLoop run_loop;
249 RouteResponseCallbackHandler handler; 247 RouteResponseCallbackHandler handler;
250 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 248 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
251 RouteRequestResult::OK)) 249 RouteRequestResult::OK))
252 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 250 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
253 std::vector<MediaRouteResponseCallback> route_response_callbacks; 251 std::vector<MediaRouteResponseCallback> route_response_callbacks;
254 route_response_callbacks.push_back(base::Bind( 252 route_response_callbacks.push_back(base::Bind(
255 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 253 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
256 router()->CreateRoute( 254 router()->CreateRoute(
257 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, 255 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
258 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 256 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
259 run_loop.Run(); 257 run_loop.Run();
260 } 258 }
261 259
262 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) { 260 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) {
263 MediaSource media_source(kSource); 261 MediaSource media_source(kSource);
264 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 262 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
265 false); 263 false);
266 expected_route.set_incognito(true); 264 expected_route.set_incognito(true);
267 265
268 // Use a lambda function as an invocation target here to work around 266 // Use a lambda function as an invocation target here to work around
269 // a limitation with GMock::Invoke that prevents it from using move-only types 267 // a limitation with GMock::Invoke that prevents it from using move-only types
270 // in runnable parameter lists. 268 // in runnable parameter lists.
271 EXPECT_CALL(mock_media_route_provider_, 269 EXPECT_CALL(mock_media_route_provider_,
272 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, 270 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, _, _, _))
273 mojo::String(kOrigin), kInvalidTabId, _, _, _))
274 .WillOnce(Invoke( 271 .WillOnce(Invoke(
275 [](const mojo::String& source, const mojo::String& sink, 272 [](const std::string& source, const std::string& sink,
276 const mojo::String& presentation_id, const mojo::String& origin, 273 const std::string& presentation_id, const std::string& origin,
277 int tab_id, int64_t timeout_millis, bool incognito, 274 int tab_id, int64_t timeout_millis, bool incognito,
278 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 275 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
279 interfaces::MediaRoutePtr route = CreateMojoRoute(); 276 interfaces::MediaRoutePtr route = CreateMojoRoute();
280 route->custom_controller_path = "custom/controller/path"; 277 route->custom_controller_path =
278 std::string("custom/controller/path");
281 route->incognito = true; 279 route->incognito = true;
282 cb.Run(std::move(route), mojo::String(), 280 cb.Run(std::move(route), std::string(),
283 interfaces::RouteRequestResultCode::OK); 281 interfaces::RouteRequestResultCode::OK);
284 })); 282 }));
285 283
286 base::RunLoop run_loop; 284 base::RunLoop run_loop;
287 RouteResponseCallbackHandler handler; 285 RouteResponseCallbackHandler handler;
288 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 286 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
289 RouteRequestResult::OK)) 287 RouteRequestResult::OK))
290 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 288 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
291 std::vector<MediaRouteResponseCallback> route_response_callbacks; 289 std::vector<MediaRouteResponseCallback> route_response_callbacks;
292 route_response_callbacks.push_back(base::Bind( 290 route_response_callbacks.push_back(base::Bind(
293 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 291 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
294 router()->CreateRoute( 292 router()->CreateRoute(
295 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, 293 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
296 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 294 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
297 run_loop.Run(); 295 run_loop.Run();
298 } 296 }
299 297
300 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) { 298 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) {
301 EXPECT_CALL( 299 EXPECT_CALL(
302 mock_media_route_provider_, 300 mock_media_route_provider_,
303 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, 301 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, kTimeoutMillis,
304 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) 302 _, _))
305 .WillOnce(Invoke( 303 .WillOnce(Invoke(
306 [](const mojo::String& source, const mojo::String& sink, 304 [](const std::string& source, const std::string& sink,
307 const mojo::String& presentation_id, const mojo::String& origin, 305 const std::string& presentation_id, const std::string& origin,
308 int tab_id, int64_t timeout_millis, bool incognito, 306 int tab_id, int64_t timeout_millis, bool incognito,
309 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 307 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
310 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError), 308 cb.Run(interfaces::MediaRoutePtr(), std::string(kError),
311 interfaces::RouteRequestResultCode::TIMED_OUT); 309 interfaces::RouteRequestResultCode::TIMED_OUT);
312 })); 310 }));
313 311
314 RouteResponseCallbackHandler handler; 312 RouteResponseCallbackHandler handler;
315 base::RunLoop run_loop; 313 base::RunLoop run_loop;
316 EXPECT_CALL(handler, 314 EXPECT_CALL(handler,
317 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 315 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
318 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 316 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
319 std::vector<MediaRouteResponseCallback> route_response_callbacks; 317 std::vector<MediaRouteResponseCallback> route_response_callbacks;
320 route_response_callbacks.push_back(base::Bind( 318 route_response_callbacks.push_back(base::Bind(
321 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 319 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
322 router()->CreateRoute( 320 router()->CreateRoute(
323 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, 321 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
324 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 322 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
325 run_loop.Run(); 323 run_loop.Run();
326 } 324 }
327 325
328 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) { 326 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) {
329 EXPECT_CALL(mock_media_route_provider_, 327 EXPECT_CALL(mock_media_route_provider_,
330 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, 328 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
331 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, 329 kTimeoutMillis, true, _))
332 true, _))
333 .WillOnce(Invoke( 330 .WillOnce(Invoke(
334 [](const mojo::String& source, const mojo::String& sink, 331 [](const std::string& source, const std::string& sink,
335 const mojo::String& presentation_id, const mojo::String& origin, 332 const std::string& presentation_id, const std::string& origin,
336 int tab_id, int64_t timeout_millis, bool incognito, 333 int tab_id, int64_t timeout_millis, bool incognito,
337 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 334 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
338 cb.Run(CreateMojoRoute(), mojo::String(), 335 cb.Run(CreateMojoRoute(), std::string(),
339 interfaces::RouteRequestResultCode::OK); 336 interfaces::RouteRequestResultCode::OK);
340 })); 337 }));
341 338
342 RouteResponseCallbackHandler handler; 339 RouteResponseCallbackHandler handler;
343 base::RunLoop run_loop; 340 base::RunLoop run_loop;
344 std::string error("Mismatch in incognito status: request = 1, response = 0"); 341 std::string error("Mismatch in incognito status: request = 1, response = 0");
345 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 342 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
346 RouteRequestResult::INCOGNITO_MISMATCH)) 343 RouteRequestResult::INCOGNITO_MISMATCH))
347 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 344 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
348 std::vector<MediaRouteResponseCallback> route_response_callbacks; 345 std::vector<MediaRouteResponseCallback> route_response_callbacks;
349 route_response_callbacks.push_back(base::Bind( 346 route_response_callbacks.push_back(base::Bind(
350 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 347 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
351 router()->CreateRoute( 348 router()->CreateRoute(
352 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, 349 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
353 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 350 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
354 run_loop.Run(); 351 run_loop.Run();
355 } 352 }
356 353
357 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) { 354 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) {
358 interfaces::MediaRoutePtr route = CreateMojoRoute(); 355 interfaces::MediaRoutePtr route = CreateMojoRoute();
359 route->incognito = true; 356 route->incognito = true;
360 357
361 EXPECT_CALL(mock_media_route_provider_, 358 EXPECT_CALL(mock_media_route_provider_,
362 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, 359 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
363 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, 360 kTimeoutMillis, true, _))
364 true, _))
365 .WillOnce(Invoke( 361 .WillOnce(Invoke(
366 [](const mojo::String& source, const mojo::String& sink, 362 [](const std::string& source, const std::string& sink,
367 const mojo::String& presentation_id, const mojo::String& origin, 363 const std::string& presentation_id, const std::string& origin,
368 int tab_id, int64_t timeout_millis, bool incognito, 364 int tab_id, int64_t timeout_millis, bool incognito,
369 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { 365 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) {
370 interfaces::MediaRoutePtr route = CreateMojoRoute(); 366 interfaces::MediaRoutePtr route = CreateMojoRoute();
371 route->incognito = true; 367 route->incognito = true;
372 cb.Run(std::move(route), mojo::String(), 368 cb.Run(std::move(route), std::string(),
373 interfaces::RouteRequestResultCode::OK); 369 interfaces::RouteRequestResultCode::OK);
374 })); 370 }));
375 base::RunLoop run_loop; 371 base::RunLoop run_loop;
376 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, 372 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr,
377 std::vector<MediaRouteResponseCallback>(), 373 std::vector<MediaRouteResponseCallback>(),
378 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 374 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
379 true); 375 true);
380 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); 376 std::vector<interfaces::MediaRoutePtr> mojo_routes(1);
381 mojo_routes[0] = route->Clone(); 377 mojo_routes[0] = route->Clone();
382 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), 378 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
383 mojo::Array<mojo::String>()); 379 std::vector<std::string>());
384 380
385 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle 381 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle
386 // instead of manually calling Run/Quit on the run loop. 382 // instead of manually calling Run/Quit on the run loop.
387 run_loop.RunUntilIdle(); 383 run_loop.RunUntilIdle();
388 384
389 EXPECT_CALL(mock_media_route_provider_, 385 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _))
390 TerminateRoute(mojo::String(kRouteId), _))
391 .WillOnce(Invoke([]( 386 .WillOnce(Invoke([](
392 const mojo::String& route_id, 387 const std::string& route_id,
393 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) { 388 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) {
394 cb.Run(mojo::String(), interfaces::RouteRequestResultCode::OK); 389 cb.Run(base::nullopt, interfaces::RouteRequestResultCode::OK);
395 })); 390 }));
396 391
397 base::RunLoop run_loop2; 392 base::RunLoop run_loop2;
398 router()->OnIncognitoProfileShutdown(); 393 router()->OnIncognitoProfileShutdown();
399 run_loop2.RunUntilIdle(); 394 run_loop2.RunUntilIdle();
400 } 395 }
401 396
402 TEST_F(MediaRouterMojoImplTest, JoinRoute) { 397 TEST_F(MediaRouterMojoImplTest, JoinRoute) {
403 MediaSource media_source(kSource); 398 MediaSource media_source(kSource);
404 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 399 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
405 false); 400 false);
406 401
407 interfaces::MediaRoutePtr route = CreateMojoRoute(); 402 interfaces::MediaRoutePtr route = CreateMojoRoute();
408 // Make sure the MR has received an update with the route, so it knows there 403 // Make sure the MR has received an update with the route, so it knows there
409 // is a route to join. 404 // is a route to join.
410 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); 405 std::vector<interfaces::MediaRoutePtr> mojo_routes(1);
411 mojo_routes[0] = route->Clone(); 406 mojo_routes[0] = route->Clone();
412 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), 407 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
413 mojo::Array<mojo::String>()); 408 std::vector<std::string>());
414 EXPECT_TRUE(router()->HasJoinableRoute()); 409 EXPECT_TRUE(router()->HasJoinableRoute());
415 410
416 // Use a lambda function as an invocation target here to work around 411 // Use a lambda function as an invocation target here to work around
417 // a limitation with GMock::Invoke that prevents it from using move-only types 412 // a limitation with GMock::Invoke that prevents it from using move-only types
418 // in runnable parameter lists. 413 // in runnable parameter lists.
419 EXPECT_CALL( 414 EXPECT_CALL(
420 mock_media_route_provider_, 415 mock_media_route_provider_,
421 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), 416 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
422 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) 417 kTimeoutMillis, _, _))
423 .WillOnce(Invoke([&route]( 418 .WillOnce(Invoke([&route](
424 const mojo::String& source, const mojo::String& presentation_id, 419 const std::string& source, const std::string& presentation_id,
425 const mojo::String& origin, int tab_id, int64_t timeout_millis, 420 const std::string& origin, int tab_id, int64_t timeout_millis,
426 bool incognito, 421 bool incognito,
427 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 422 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
428 cb.Run(std::move(route), mojo::String(), 423 cb.Run(std::move(route), std::string(),
429 interfaces::RouteRequestResultCode::OK); 424 interfaces::RouteRequestResultCode::OK);
430 })); 425 }));
431 426
432 RouteResponseCallbackHandler handler; 427 RouteResponseCallbackHandler handler;
433 base::RunLoop run_loop; 428 base::RunLoop run_loop;
434 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 429 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
435 RouteRequestResult::OK)) 430 RouteRequestResult::OK))
436 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 431 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
437 std::vector<MediaRouteResponseCallback> route_response_callbacks; 432 std::vector<MediaRouteResponseCallback> route_response_callbacks;
438 route_response_callbacks.push_back(base::Bind( 433 route_response_callbacks.push_back(base::Bind(
(...skipping 15 matching lines...) Expand all
454 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 449 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
455 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, 450 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
456 route_response_callbacks, 451 route_response_callbacks,
457 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 452 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
458 run_loop.Run(); 453 run_loop.Run();
459 } 454 }
460 455
461 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) { 456 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) {
462 // Make sure the MR has received an update with the route, so it knows there 457 // Make sure the MR has received an update with the route, so it knows there
463 // is a route to join. 458 // is a route to join.
464 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); 459 std::vector<interfaces::MediaRoutePtr> mojo_routes(1);
465 mojo_routes[0] = CreateMojoRoute(); 460 mojo_routes[0] = CreateMojoRoute();
466 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), 461 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
467 mojo::Array<mojo::String>()); 462 std::vector<std::string>());
468 EXPECT_TRUE(router()->HasJoinableRoute()); 463 EXPECT_TRUE(router()->HasJoinableRoute());
469 464
470 EXPECT_CALL( 465 EXPECT_CALL(
471 mock_media_route_provider_, 466 mock_media_route_provider_,
472 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), 467 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
473 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) 468 kTimeoutMillis, _, _))
474 .WillOnce(Invoke( 469 .WillOnce(Invoke(
475 [](const mojo::String& source, const mojo::String& presentation_id, 470 [](const std::string& source, const std::string& presentation_id,
476 const mojo::String& origin, int tab_id, int64_t timeout_millis, 471 const std::string& origin, int tab_id, int64_t timeout_millis,
477 bool incognito, 472 bool incognito,
478 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 473 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
479 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError), 474 cb.Run(interfaces::MediaRoutePtr(), std::string(kError),
480 interfaces::RouteRequestResultCode::TIMED_OUT); 475 interfaces::RouteRequestResultCode::TIMED_OUT);
481 })); 476 }));
482 477
483 RouteResponseCallbackHandler handler; 478 RouteResponseCallbackHandler handler;
484 base::RunLoop run_loop; 479 base::RunLoop run_loop;
485 EXPECT_CALL(handler, 480 EXPECT_CALL(handler,
486 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 481 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
487 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 482 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
488 std::vector<MediaRouteResponseCallback> route_response_callbacks; 483 std::vector<MediaRouteResponseCallback> route_response_callbacks;
489 route_response_callbacks.push_back(base::Bind( 484 route_response_callbacks.push_back(base::Bind(
490 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 485 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
491 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, 486 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
492 route_response_callbacks, 487 route_response_callbacks,
493 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 488 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
494 run_loop.Run(); 489 run_loop.Run();
495 } 490 }
496 491
497 TEST_F(MediaRouterMojoImplTest, JoinRouteIncognitoMismatchFails) { 492 TEST_F(MediaRouterMojoImplTest, JoinRouteIncognitoMismatchFails) {
498 interfaces::MediaRoutePtr route = CreateMojoRoute(); 493 interfaces::MediaRoutePtr route = CreateMojoRoute();
499 494
500 // Make sure the MR has received an update with the route, so it knows there 495 // Make sure the MR has received an update with the route, so it knows there
501 // is a route to join. 496 // is a route to join.
502 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); 497 std::vector<interfaces::MediaRoutePtr> mojo_routes(1);
503 mojo_routes[0] = route->Clone(); 498 mojo_routes[0] = route->Clone();
504 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), 499 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
505 mojo::Array<mojo::String>()); 500 std::vector<std::string>());
506 EXPECT_TRUE(router()->HasJoinableRoute()); 501 EXPECT_TRUE(router()->HasJoinableRoute());
507 502
508 // Use a lambda function as an invocation target here to work around 503 // Use a lambda function as an invocation target here to work around
509 // a limitation with GMock::Invoke that prevents it from using move-only types 504 // a limitation with GMock::Invoke that prevents it from using move-only types
510 // in runnable parameter lists. 505 // in runnable parameter lists.
511 EXPECT_CALL( 506 EXPECT_CALL(
512 mock_media_route_provider_, 507 mock_media_route_provider_,
513 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), 508 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
514 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, true, _)) 509 kTimeoutMillis, true, _))
515 .WillOnce(Invoke([&route]( 510 .WillOnce(Invoke([&route](
516 const mojo::String& source, const mojo::String& presentation_id, 511 const std::string& source, const std::string& presentation_id,
517 const mojo::String& origin, int tab_id, int64_t timeout_millis, 512 const std::string& origin, int tab_id, int64_t timeout_millis,
518 bool incognito, 513 bool incognito,
519 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 514 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
520 cb.Run(std::move(route), mojo::String(), 515 cb.Run(std::move(route), std::string(),
521 interfaces::RouteRequestResultCode::OK); 516 interfaces::RouteRequestResultCode::OK);
522 })); 517 }));
523 518
524 RouteResponseCallbackHandler handler; 519 RouteResponseCallbackHandler handler;
525 base::RunLoop run_loop; 520 base::RunLoop run_loop;
526 std::string error("Mismatch in incognito status: request = 1, response = 0"); 521 std::string error("Mismatch in incognito status: request = 1, response = 0");
527 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 522 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
528 RouteRequestResult::INCOGNITO_MISMATCH)) 523 RouteRequestResult::INCOGNITO_MISMATCH))
529 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 524 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
530 std::vector<MediaRouteResponseCallback> route_response_callbacks; 525 std::vector<MediaRouteResponseCallback> route_response_callbacks;
(...skipping 10 matching lines...) Expand all
541 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 536 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
542 false); 537 false);
543 expected_route.set_incognito(false); 538 expected_route.set_incognito(false);
544 interfaces::MediaRoutePtr route = CreateMojoRoute(); 539 interfaces::MediaRoutePtr route = CreateMojoRoute();
545 540
546 // Use a lambda function as an invocation target here to work around 541 // Use a lambda function as an invocation target here to work around
547 // a limitation with GMock::Invoke that prevents it from using move-only types 542 // a limitation with GMock::Invoke that prevents it from using move-only types
548 // in runnable parameter lists. 543 // in runnable parameter lists.
549 EXPECT_CALL( 544 EXPECT_CALL(
550 mock_media_route_provider_, 545 mock_media_route_provider_,
551 ConnectRouteByRouteId(mojo::String(kSource), mojo::String(kRouteId), _, 546 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
552 mojo::String(kOrigin), kInvalidTabId,
553 kTimeoutMillis, false, _)) 547 kTimeoutMillis, false, _))
554 .WillOnce(Invoke([&route]( 548 .WillOnce(Invoke([&route](
555 const mojo::String& source, const mojo::String& route_id, 549 const std::string& source, const std::string& route_id,
556 const mojo::String& presentation_id, const mojo::String& origin, 550 const std::string& presentation_id, const std::string& origin,
557 int tab_id, int64_t timeout_millis, bool incognito, 551 int tab_id, int64_t timeout_millis, bool incognito,
558 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 552 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
559 cb.Run(std::move(route), mojo::String(), 553 cb.Run(std::move(route), std::string(),
560 interfaces::RouteRequestResultCode::OK); 554 interfaces::RouteRequestResultCode::OK);
561 })); 555 }));
562 556
563 RouteResponseCallbackHandler handler; 557 RouteResponseCallbackHandler handler;
564 base::RunLoop run_loop; 558 base::RunLoop run_loop;
565 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 559 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
566 RouteRequestResult::OK)) 560 RouteRequestResult::OK))
567 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 561 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
568 std::vector<MediaRouteResponseCallback> route_response_callbacks; 562 std::vector<MediaRouteResponseCallback> route_response_callbacks;
569 route_response_callbacks.push_back(base::Bind( 563 route_response_callbacks.push_back(base::Bind(
570 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 564 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
571 router()->ConnectRouteByRouteId( 565 router()->ConnectRouteByRouteId(
572 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks, 566 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
573 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 567 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
574 run_loop.Run(); 568 run_loop.Run();
575 } 569 }
576 570
577 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) { 571 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) {
578 EXPECT_CALL( 572 EXPECT_CALL(
579 mock_media_route_provider_, 573 mock_media_route_provider_,
580 ConnectRouteByRouteId(mojo::String(kSource), mojo::String(kRouteId), _, 574 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
581 mojo::String(kOrigin), kInvalidTabId,
582 kTimeoutMillis, true, _)) 575 kTimeoutMillis, true, _))
583 .WillOnce(Invoke( 576 .WillOnce(Invoke(
584 [](const mojo::String& source, const mojo::String& route_id, 577 [](const std::string& source, const std::string& route_id,
585 const mojo::String& presentation_id, const mojo::String& origin, 578 const std::string& presentation_id, const std::string& origin,
586 int tab_id, int64_t timeout_millis, bool incognito, 579 int tab_id, int64_t timeout_millis, bool incognito,
587 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 580 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
588 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError), 581 cb.Run(interfaces::MediaRoutePtr(), std::string(kError),
589 interfaces::RouteRequestResultCode::TIMED_OUT); 582 interfaces::RouteRequestResultCode::TIMED_OUT);
590 })); 583 }));
591 584
592 RouteResponseCallbackHandler handler; 585 RouteResponseCallbackHandler handler;
593 base::RunLoop run_loop; 586 base::RunLoop run_loop;
594 EXPECT_CALL(handler, 587 EXPECT_CALL(handler,
595 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 588 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
596 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 589 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
597 std::vector<MediaRouteResponseCallback> route_response_callbacks; 590 std::vector<MediaRouteResponseCallback> route_response_callbacks;
598 route_response_callbacks.push_back(base::Bind( 591 route_response_callbacks.push_back(base::Bind(
599 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 592 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
600 router()->ConnectRouteByRouteId( 593 router()->ConnectRouteByRouteId(
601 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks, 594 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
602 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 595 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
603 run_loop.Run(); 596 run_loop.Run();
604 } 597 }
605 598
606 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) { 599 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) {
607 interfaces::MediaRoutePtr route = CreateMojoRoute(); 600 interfaces::MediaRoutePtr route = CreateMojoRoute();
608 601
609 // Use a lambda function as an invocation target here to work around 602 // Use a lambda function as an invocation target here to work around
610 // a limitation with GMock::Invoke that prevents it from using move-only types 603 // a limitation with GMock::Invoke that prevents it from using move-only types
611 // in runnable parameter lists. 604 // in runnable parameter lists.
612 EXPECT_CALL( 605 EXPECT_CALL(
613 mock_media_route_provider_, 606 mock_media_route_provider_,
614 ConnectRouteByRouteId(mojo::String(kSource), mojo::String(kRouteId), _, 607 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
615 mojo::String(kOrigin), kInvalidTabId,
616 kTimeoutMillis, true, _)) 608 kTimeoutMillis, true, _))
617 .WillOnce(Invoke([&route]( 609 .WillOnce(Invoke([&route](
618 const mojo::String& source, const mojo::String& route_id, 610 const std::string& source, const std::string& route_id,
619 const mojo::String& presentation_id, const mojo::String& origin, 611 const std::string& presentation_id, const std::string& origin,
620 int tab_id, int64_t timeout_millis, bool incognito, 612 int tab_id, int64_t timeout_millis, bool incognito,
621 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { 613 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) {
622 cb.Run(std::move(route), mojo::String(), 614 cb.Run(std::move(route), std::string(),
623 interfaces::RouteRequestResultCode::OK); 615 interfaces::RouteRequestResultCode::OK);
624 })); 616 }));
625 617
626 RouteResponseCallbackHandler handler; 618 RouteResponseCallbackHandler handler;
627 base::RunLoop run_loop; 619 base::RunLoop run_loop;
628 std::string error("Mismatch in incognito status: request = 1, response = 0"); 620 std::string error("Mismatch in incognito status: request = 1, response = 0");
629 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 621 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
630 RouteRequestResult::INCOGNITO_MISMATCH)) 622 RouteRequestResult::INCOGNITO_MISMATCH))
631 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 623 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
632 std::vector<MediaRouteResponseCallback> route_response_callbacks; 624 std::vector<MediaRouteResponseCallback> route_response_callbacks;
633 route_response_callbacks.push_back(base::Bind( 625 route_response_callbacks.push_back(base::Bind(
634 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 626 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
635 router()->ConnectRouteByRouteId( 627 router()->ConnectRouteByRouteId(
636 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks, 628 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
637 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 629 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
638 run_loop.Run(); 630 run_loop.Run();
639 } 631 }
640 632
641 TEST_F(MediaRouterMojoImplTest, DetachRoute) { 633 TEST_F(MediaRouterMojoImplTest, DetachRoute) {
642 base::RunLoop run_loop; 634 base::RunLoop run_loop;
643 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) 635 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId))
644 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 636 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
645 router()->DetachRoute(kRouteId); 637 router()->DetachRoute(kRouteId);
646 run_loop.Run(); 638 run_loop.Run();
647 } 639 }
648 640
649 TEST_F(MediaRouterMojoImplTest, TerminateRoute) { 641 TEST_F(MediaRouterMojoImplTest, TerminateRoute) {
650 base::RunLoop run_loop; 642 base::RunLoop run_loop;
651 EXPECT_CALL(mock_media_route_provider_, 643 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _))
652 TerminateRoute(mojo::String(kRouteId), _))
653 .WillOnce(Invoke([&run_loop]( 644 .WillOnce(Invoke([&run_loop](
654 const mojo::String& route_id, 645 const std::string& route_id,
655 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) { 646 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) {
656 cb.Run(mojo::String(), interfaces::RouteRequestResultCode::OK); 647 cb.Run(base::nullopt, interfaces::RouteRequestResultCode::OK);
657 })); 648 }));
658 router()->TerminateRoute(kRouteId); 649 router()->TerminateRoute(kRouteId);
659 run_loop.RunUntilIdle(); 650 run_loop.RunUntilIdle();
660 ExpectResultBucketCount("TerminateRoute", 651 ExpectResultBucketCount("TerminateRoute",
661 RouteRequestResult::ResultCode::OK, 652 RouteRequestResult::ResultCode::OK,
662 1); 653 1);
663 } 654 }
664 655
665 TEST_F(MediaRouterMojoImplTest, TerminateRouteFails) { 656 TEST_F(MediaRouterMojoImplTest, TerminateRouteFails) {
666 base::RunLoop run_loop; 657 base::RunLoop run_loop;
667 EXPECT_CALL(mock_media_route_provider_, 658 EXPECT_CALL(mock_media_route_provider_, TerminateRoute(kRouteId, _))
668 TerminateRoute(mojo::String(kRouteId), _))
669 .WillOnce(Invoke([&run_loop]( 659 .WillOnce(Invoke([&run_loop](
670 const mojo::String& route_id, 660 const mojo::String& route_id,
671 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) { 661 const interfaces::MediaRouteProvider::TerminateRouteCallback& cb) {
672 cb.Run(mojo::String(), interfaces::RouteRequestResultCode::TIMED_OUT); 662 cb.Run(std::string("timed out"),
663 interfaces::RouteRequestResultCode::TIMED_OUT);
673 })); 664 }));
674 router()->TerminateRoute(kRouteId); 665 router()->TerminateRoute(kRouteId);
675 run_loop.RunUntilIdle(); 666 run_loop.RunUntilIdle();
676 ExpectResultBucketCount("TerminateRoute", 667 ExpectResultBucketCount("TerminateRoute",
677 RouteRequestResult::ResultCode::OK, 668 RouteRequestResult::ResultCode::OK,
678 0); 669 0);
679 ExpectResultBucketCount("TerminateRoute", 670 ExpectResultBucketCount("TerminateRoute",
680 RouteRequestResult::ResultCode::TIMED_OUT, 671 RouteRequestResult::ResultCode::TIMED_OUT,
681 1); 672 1);
682 } 673 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 } 727 }
737 728
738 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { 729 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) {
739 router()->OnSinkAvailabilityUpdated( 730 router()->OnSinkAvailabilityUpdated(
740 interfaces::MediaRouter::SinkAvailability::AVAILABLE); 731 interfaces::MediaRouter::SinkAvailability::AVAILABLE);
741 MediaSource media_source(kSource); 732 MediaSource media_source(kSource);
742 GURL origin("https://google.com"); 733 GURL origin("https://google.com");
743 734
744 // These should only be called once even if there is more than one observer 735 // These should only be called once even if there is more than one observer
745 // for a given source. 736 // for a given source.
746 EXPECT_CALL(mock_media_route_provider_, 737 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource));
747 StartObservingMediaSinks(mojo::String(kSource))); 738 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2));
748 EXPECT_CALL(mock_media_route_provider_,
749 StartObservingMediaSinks(mojo::String(kSource2)));
750 739
751 std::unique_ptr<MockMediaSinksObserver> sinks_observer( 740 std::unique_ptr<MockMediaSinksObserver> sinks_observer(
752 new MockMediaSinksObserver(router(), media_source, origin)); 741 new MockMediaSinksObserver(router(), media_source, origin));
753 EXPECT_TRUE(sinks_observer->Init()); 742 EXPECT_TRUE(sinks_observer->Init());
754 std::unique_ptr<MockMediaSinksObserver> extra_sinks_observer( 743 std::unique_ptr<MockMediaSinksObserver> extra_sinks_observer(
755 new MockMediaSinksObserver(router(), media_source, origin)); 744 new MockMediaSinksObserver(router(), media_source, origin));
756 EXPECT_TRUE(extra_sinks_observer->Init()); 745 EXPECT_TRUE(extra_sinks_observer->Init());
757 std::unique_ptr<MockMediaSinksObserver> unrelated_sinks_observer( 746 std::unique_ptr<MockMediaSinksObserver> unrelated_sinks_observer(
758 new MockMediaSinksObserver(router(), MediaSource(kSource2), origin)); 747 new MockMediaSinksObserver(router(), MediaSource(kSource2), origin));
759 EXPECT_TRUE(unrelated_sinks_observer->Init()); 748 EXPECT_TRUE(unrelated_sinks_observer->Init());
760 ProcessEventLoop(); 749 ProcessEventLoop();
761 750
762 std::vector<MediaSink> expected_sinks; 751 std::vector<MediaSink> expected_sinks;
763 expected_sinks.push_back( 752 expected_sinks.push_back(
764 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST)); 753 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST));
765 expected_sinks.push_back( 754 expected_sinks.push_back(
766 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST)); 755 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST));
767 756
768 mojo::Array<interfaces::MediaSinkPtr> mojo_sinks(2); 757 std::vector<interfaces::MediaSinkPtr> mojo_sinks(2);
769 mojo_sinks[0] = interfaces::MediaSink::New(); 758 mojo_sinks[0] = interfaces::MediaSink::New();
770 mojo_sinks[0]->sink_id = kSinkId; 759 mojo_sinks[0]->sink_id = kSinkId;
771 mojo_sinks[0]->name = kSinkName; 760 mojo_sinks[0]->name = kSinkName;
772 mojo_sinks[0]->icon_type = 761 mojo_sinks[0]->icon_type =
773 media_router::interfaces::MediaSink::IconType::CAST; 762 media_router::interfaces::MediaSink::IconType::CAST;
774 mojo_sinks[1] = interfaces::MediaSink::New(); 763 mojo_sinks[1] = interfaces::MediaSink::New();
775 mojo_sinks[1]->sink_id = kSinkId2; 764 mojo_sinks[1]->sink_id = kSinkId2;
776 mojo_sinks[1]->name = kSinkName; 765 mojo_sinks[1]->name = kSinkName;
777 mojo_sinks[1]->icon_type = 766 mojo_sinks[1]->icon_type =
778 media_router::interfaces::MediaSink::IconType::CAST; 767 media_router::interfaces::MediaSink::IconType::CAST;
779 768
780 mojo::Array<mojo::String> mojo_origins(1);
781 mojo_origins[0] = origin.spec();
782
783 base::RunLoop run_loop; 769 base::RunLoop run_loop;
784 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); 770 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks)));
785 EXPECT_CALL(*extra_sinks_observer, 771 EXPECT_CALL(*extra_sinks_observer,
786 OnSinksReceived(SequenceEquals(expected_sinks))) 772 OnSinksReceived(SequenceEquals(expected_sinks)))
787 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 773 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
788 media_router_proxy_->OnSinksReceived(media_source.id(), std::move(mojo_sinks), 774 media_router_proxy_->OnSinksReceived(
789 std::move(mojo_origins)); 775 media_source.id(), std::move(mojo_sinks),
776 std::vector<std::string>(1, origin.spec()));
790 run_loop.Run(); 777 run_loop.Run();
791 778
792 // Since the MediaRouterMojoImpl has already received results for 779 // Since the MediaRouterMojoImpl has already received results for
793 // |media_source|, return cached results to observers that are subsequently 780 // |media_source|, return cached results to observers that are subsequently
794 // registered. 781 // registered.
795 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer( 782 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer(
796 new MockMediaSinksObserver(router(), media_source, origin)); 783 new MockMediaSinksObserver(router(), media_source, origin));
797 EXPECT_CALL(*cached_sinks_observer, 784 EXPECT_CALL(*cached_sinks_observer,
798 OnSinksReceived(SequenceEquals(expected_sinks))); 785 OnSinksReceived(SequenceEquals(expected_sinks)));
799 EXPECT_TRUE(cached_sinks_observer->Init()); 786 EXPECT_TRUE(cached_sinks_observer->Init());
800 787
801 // Different origin from cached result. Empty list will be returned. 788 // Different origin from cached result. Empty list will be returned.
802 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer2( 789 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer2(
803 new MockMediaSinksObserver(router(), media_source, 790 new MockMediaSinksObserver(router(), media_source,
804 GURL("https://youtube.com"))); 791 GURL("https://youtube.com")));
805 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty())); 792 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty()));
806 EXPECT_TRUE(cached_sinks_observer2->Init()); 793 EXPECT_TRUE(cached_sinks_observer2->Init());
807 794
808 base::RunLoop run_loop2; 795 base::RunLoop run_loop2;
809 EXPECT_CALL(mock_media_route_provider_, 796 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource));
810 StopObservingMediaSinks(mojo::String(kSource))); 797 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource2))
811 EXPECT_CALL(mock_media_route_provider_,
812 StopObservingMediaSinks(mojo::String(kSource2)))
813 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); 798 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }));
814 sinks_observer.reset(); 799 sinks_observer.reset();
815 extra_sinks_observer.reset(); 800 extra_sinks_observer.reset();
816 unrelated_sinks_observer.reset(); 801 unrelated_sinks_observer.reset();
817 cached_sinks_observer.reset(); 802 cached_sinks_observer.reset();
818 cached_sinks_observer2.reset(); 803 cached_sinks_observer2.reset();
819 run_loop2.Run(); 804 run_loop2.Run();
820 } 805 }
821 806
822 TEST_F(MediaRouterMojoImplTest, 807 TEST_F(MediaRouterMojoImplTest,
823 RegisterMediaSinksObserverWithAvailabilityChange) { 808 RegisterMediaSinksObserverWithAvailabilityChange) {
824 GURL origin("https://google.com"); 809 GURL origin("https://google.com");
825 810
826 // When availability is UNAVAILABLE, no calls should be made to MRPM. 811 // When availability is UNAVAILABLE, no calls should be made to MRPM.
827 router()->OnSinkAvailabilityUpdated( 812 router()->OnSinkAvailabilityUpdated(
828 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE); 813 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE);
829 MediaSource media_source(kSource); 814 MediaSource media_source(kSource);
830 std::unique_ptr<MockMediaSinksObserver> sinks_observer( 815 std::unique_ptr<MockMediaSinksObserver> sinks_observer(
831 new MockMediaSinksObserver(router(), media_source, origin)); 816 new MockMediaSinksObserver(router(), media_source, origin));
832 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty())); 817 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty()));
833 EXPECT_TRUE(sinks_observer->Init()); 818 EXPECT_TRUE(sinks_observer->Init());
834 MediaSource media_source2(kSource2); 819 MediaSource media_source2(kSource2);
835 std::unique_ptr<MockMediaSinksObserver> sinks_observer2( 820 std::unique_ptr<MockMediaSinksObserver> sinks_observer2(
836 new MockMediaSinksObserver(router(), media_source2, origin)); 821 new MockMediaSinksObserver(router(), media_source2, origin));
837 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())); 822 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty()));
838 EXPECT_TRUE(sinks_observer2->Init()); 823 EXPECT_TRUE(sinks_observer2->Init());
839 EXPECT_CALL(mock_media_route_provider_, 824 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource))
840 StartObservingMediaSinks(mojo::String(kSource)))
841 .Times(0); 825 .Times(0);
842 EXPECT_CALL(mock_media_route_provider_, 826 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2))
843 StartObservingMediaSinks(mojo::String(kSource2)))
844 .Times(0); 827 .Times(0);
845 ProcessEventLoop(); 828 ProcessEventLoop();
846 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); 829 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_));
847 830
848 // When availability transitions AVAILABLE, existing sink queries should be 831 // When availability transitions AVAILABLE, existing sink queries should be
849 // sent to MRPM. 832 // sent to MRPM.
850 router()->OnSinkAvailabilityUpdated( 833 router()->OnSinkAvailabilityUpdated(
851 interfaces::MediaRouter::SinkAvailability::AVAILABLE); 834 interfaces::MediaRouter::SinkAvailability::AVAILABLE);
852 EXPECT_CALL(mock_media_route_provider_, 835 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource))
853 StartObservingMediaSinks(mojo::String(kSource)))
854 .Times(1); 836 .Times(1);
855 EXPECT_CALL(mock_media_route_provider_, 837 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2))
856 StartObservingMediaSinks(mojo::String(kSource2)))
857 .Times(1); 838 .Times(1);
858 ProcessEventLoop(); 839 ProcessEventLoop();
859 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); 840 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_));
860 841
861 // No change in availability status; no calls should be made to MRPM. 842 // No change in availability status; no calls should be made to MRPM.
862 router()->OnSinkAvailabilityUpdated( 843 router()->OnSinkAvailabilityUpdated(
863 interfaces::MediaRouter::SinkAvailability::AVAILABLE); 844 interfaces::MediaRouter::SinkAvailability::AVAILABLE);
864 EXPECT_CALL(mock_media_route_provider_, 845 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource))
865 StartObservingMediaSinks(mojo::String(kSource)))
866 .Times(0); 846 .Times(0);
867 EXPECT_CALL(mock_media_route_provider_, 847 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2))
868 StartObservingMediaSinks(mojo::String(kSource2)))
869 .Times(0); 848 .Times(0);
870 ProcessEventLoop(); 849 ProcessEventLoop();
871 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); 850 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_));
872 851
873 // When availability is UNAVAILABLE, queries are already removed from MRPM. 852 // When availability is UNAVAILABLE, queries are already removed from MRPM.
874 // Unregistering observer won't result in call to MRPM to remove query. 853 // Unregistering observer won't result in call to MRPM to remove query.
875 router()->OnSinkAvailabilityUpdated( 854 router()->OnSinkAvailabilityUpdated(
876 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE); 855 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE);
877 EXPECT_CALL(mock_media_route_provider_, 856 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource))
878 StopObservingMediaSinks(mojo::String(kSource)))
879 .Times(0); 857 .Times(0);
880 sinks_observer.reset(); 858 sinks_observer.reset();
881 ProcessEventLoop(); 859 ProcessEventLoop();
882 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); 860 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_));
883 861
884 // When availability is AVAILABLE, call is made to MRPM to remove query when 862 // When availability is AVAILABLE, call is made to MRPM to remove query when
885 // observer is unregistered. 863 // observer is unregistered.
886 router()->OnSinkAvailabilityUpdated( 864 router()->OnSinkAvailabilityUpdated(
887 interfaces::MediaRouter::SinkAvailability::AVAILABLE); 865 interfaces::MediaRouter::SinkAvailability::AVAILABLE);
888 EXPECT_CALL(mock_media_route_provider_, 866 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource2));
889 StopObservingMediaSinks(mojo::String(kSource2)));
890 sinks_observer2.reset(); 867 sinks_observer2.reset();
891 ProcessEventLoop(); 868 ProcessEventLoop();
892 } 869 }
893 870
894 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { 871 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) {
895 MockMediaRouter mock_router; 872 MockMediaRouter mock_router;
896 MediaSource media_source(kSource); 873 MediaSource media_source(kSource);
897 MediaSource different_media_source(kSource2); 874 MediaSource different_media_source(kSource2);
898 EXPECT_CALL(mock_media_route_provider_, 875 EXPECT_CALL(mock_media_route_provider_,
899 StartObservingMediaRoutes(mojo::String(media_source.id()))) 876 StartObservingMediaRoutes(media_source.id()))
900 .Times(2); 877 .Times(2);
901 EXPECT_CALL( 878 EXPECT_CALL(
902 mock_media_route_provider_, 879 mock_media_route_provider_,
903 StartObservingMediaRoutes(mojo::String(different_media_source.id()))) 880 StartObservingMediaRoutes(different_media_source.id()))
904 .Times(1); 881 .Times(1);
905 882
906 MediaRoutesObserver* observer_captured; 883 MediaRoutesObserver* observer_captured;
907 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_)) 884 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_))
908 .Times(3) 885 .Times(3)
909 .WillRepeatedly(SaveArg<0>(&observer_captured)); 886 .WillRepeatedly(SaveArg<0>(&observer_captured));
910 MockMediaRoutesObserver routes_observer(&mock_router, media_source.id()); 887 MockMediaRoutesObserver routes_observer(&mock_router, media_source.id());
911 EXPECT_EQ(observer_captured, &routes_observer); 888 EXPECT_EQ(observer_captured, &routes_observer);
912 MockMediaRoutesObserver extra_routes_observer(&mock_router, 889 MockMediaRoutesObserver extra_routes_observer(&mock_router,
913 media_source.id()); 890 media_source.id());
914 EXPECT_EQ(observer_captured, &extra_routes_observer); 891 EXPECT_EQ(observer_captured, &extra_routes_observer);
915 MockMediaRoutesObserver different_routes_observer( 892 MockMediaRoutesObserver different_routes_observer(
916 &mock_router, different_media_source.id()); 893 &mock_router, different_media_source.id());
917 EXPECT_EQ(observer_captured, &different_routes_observer); 894 EXPECT_EQ(observer_captured, &different_routes_observer);
918 router()->RegisterMediaRoutesObserver(&routes_observer); 895 router()->RegisterMediaRoutesObserver(&routes_observer);
919 router()->RegisterMediaRoutesObserver(&extra_routes_observer); 896 router()->RegisterMediaRoutesObserver(&extra_routes_observer);
920 router()->RegisterMediaRoutesObserver(&different_routes_observer); 897 router()->RegisterMediaRoutesObserver(&different_routes_observer);
921 898
922 std::vector<MediaRoute> expected_routes; 899 std::vector<MediaRoute> expected_routes;
923 expected_routes.push_back(MediaRoute(kRouteId, media_source, kSinkId, 900 expected_routes.push_back(MediaRoute(kRouteId, media_source, kSinkId,
924 kDescription, false, "", false)); 901 kDescription, false, "", false));
925 MediaRoute incognito_expected_route(kRouteId2, media_source, kSinkId, 902 MediaRoute incognito_expected_route(kRouteId2, media_source, kSinkId,
926 kDescription, false, "", false); 903 kDescription, false, "", false);
927 incognito_expected_route.set_incognito(true); 904 incognito_expected_route.set_incognito(true);
928 expected_routes.push_back(incognito_expected_route); 905 expected_routes.push_back(incognito_expected_route);
929 std::vector<MediaRoute::Id> expected_joinable_route_ids; 906 std::vector<MediaRoute::Id> expected_joinable_route_ids;
930 expected_joinable_route_ids.push_back(kJoinableRouteId); 907 expected_joinable_route_ids.push_back(kJoinableRouteId);
931 expected_joinable_route_ids.push_back(kJoinableRouteId2); 908 expected_joinable_route_ids.push_back(kJoinableRouteId2);
932 909
933 mojo::Array<mojo::String> mojo_joinable_routes(2); 910 std::vector<std::string> mojo_joinable_routes(2);
934 mojo_joinable_routes[0] = kJoinableRouteId; 911 mojo_joinable_routes[0] = kJoinableRouteId;
935 mojo_joinable_routes[1] = kJoinableRouteId2; 912 mojo_joinable_routes[1] = kJoinableRouteId2;
936 913
937 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(2); 914 std::vector<interfaces::MediaRoutePtr> mojo_routes(2);
938 mojo_routes[0] = CreateMojoRoute(); 915 mojo_routes[0] = CreateMojoRoute();
939 mojo_routes[1] = CreateMojoRoute(); 916 mojo_routes[1] = CreateMojoRoute();
940 mojo_routes[1]->media_route_id = kRouteId2; 917 mojo_routes[1]->media_route_id = kRouteId2;
941 mojo_routes[1]->incognito = true; 918 mojo_routes[1]->incognito = true;
942 919
943 EXPECT_CALL(routes_observer, OnRoutesUpdated(SequenceEquals(expected_routes), 920 EXPECT_CALL(routes_observer, OnRoutesUpdated(SequenceEquals(expected_routes),
944 expected_joinable_route_ids)); 921 expected_joinable_route_ids));
945 EXPECT_CALL(extra_routes_observer, 922 EXPECT_CALL(extra_routes_observer,
946 OnRoutesUpdated(SequenceEquals(expected_routes), 923 OnRoutesUpdated(SequenceEquals(expected_routes),
947 expected_joinable_route_ids)); 924 expected_joinable_route_ids));
948 EXPECT_CALL(different_routes_observer, 925 EXPECT_CALL(different_routes_observer,
949 OnRoutesUpdated(SequenceEquals(expected_routes), 926 OnRoutesUpdated(SequenceEquals(expected_routes),
950 expected_joinable_route_ids)) 927 expected_joinable_route_ids))
951 .Times(0); 928 .Times(0);
952 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes), 929 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes),
953 media_source.id(), 930 media_source.id(),
954 std::move(mojo_joinable_routes)); 931 std::move(mojo_joinable_routes));
955 ProcessEventLoop(); 932 ProcessEventLoop();
956 933
957 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); 934 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer));
958 EXPECT_CALL(mock_router, 935 EXPECT_CALL(mock_router,
959 UnregisterMediaRoutesObserver(&extra_routes_observer)); 936 UnregisterMediaRoutesObserver(&extra_routes_observer));
960 EXPECT_CALL(mock_router, 937 EXPECT_CALL(mock_router,
961 UnregisterMediaRoutesObserver(&different_routes_observer)); 938 UnregisterMediaRoutesObserver(&different_routes_observer));
962 router()->UnregisterMediaRoutesObserver(&routes_observer); 939 router()->UnregisterMediaRoutesObserver(&routes_observer);
963 router()->UnregisterMediaRoutesObserver(&extra_routes_observer); 940 router()->UnregisterMediaRoutesObserver(&extra_routes_observer);
964 router()->UnregisterMediaRoutesObserver(&different_routes_observer); 941 router()->UnregisterMediaRoutesObserver(&different_routes_observer);
965 EXPECT_CALL(mock_media_route_provider_, 942 EXPECT_CALL(mock_media_route_provider_,
966 StopObservingMediaRoutes(mojo::String(media_source.id()))) 943 StopObservingMediaRoutes(media_source.id()))
967 .Times(1); 944 .Times(1);
968 EXPECT_CALL( 945 EXPECT_CALL(
969 mock_media_route_provider_, 946 mock_media_route_provider_,
970 StopObservingMediaRoutes(mojo::String(different_media_source.id()))); 947 StopObservingMediaRoutes(different_media_source.id()));
971 ProcessEventLoop(); 948 ProcessEventLoop();
972 } 949 }
973 950
974 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { 951 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) {
975 EXPECT_CALL( 952 EXPECT_CALL(
976 mock_media_route_provider_, 953 mock_media_route_provider_, SendRouteMessage(kRouteId, kMessage, _))
977 SendRouteMessage(mojo::String(kRouteId), mojo::String(kMessage), _))
978 .WillOnce(Invoke([]( 954 .WillOnce(Invoke([](
979 const MediaRoute::Id& route_id, const std::string& message, 955 const MediaRoute::Id& route_id, const std::string& message,
980 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { 956 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) {
981 cb.Run(true); 957 cb.Run(true);
982 })); 958 }));
983 959
984 base::RunLoop run_loop; 960 base::RunLoop run_loop;
985 SendMessageCallbackHandler handler; 961 SendMessageCallbackHandler handler;
986 EXPECT_CALL(handler, Invoke(true)) 962 EXPECT_CALL(handler, Invoke(true))
987 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 963 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
988 router()->SendRouteMessage(kRouteId, kMessage, 964 router()->SendRouteMessage(kRouteId, kMessage,
989 base::Bind(&SendMessageCallbackHandler::Invoke, 965 base::Bind(&SendMessageCallbackHandler::Invoke,
990 base::Unretained(&handler))); 966 base::Unretained(&handler)));
991 run_loop.Run(); 967 run_loop.Run();
992 } 968 }
993 969
994 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) { 970 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) {
995 std::unique_ptr<std::vector<uint8_t>> expected_binary_data( 971 std::unique_ptr<std::vector<uint8_t>> expected_binary_data(
996 new std::vector<uint8_t>(kBinaryMessage, 972 new std::vector<uint8_t>(kBinaryMessage,
997 kBinaryMessage + arraysize(kBinaryMessage))); 973 kBinaryMessage + arraysize(kBinaryMessage)));
998 974
999 EXPECT_CALL(mock_media_route_provider_, 975 EXPECT_CALL(mock_media_route_provider_,
1000 SendRouteBinaryMessageInternal(mojo::String(kRouteId), _, _)) 976 SendRouteBinaryMessageInternal(kRouteId, _, _))
1001 .WillOnce(Invoke([]( 977 .WillOnce(Invoke([](
1002 const MediaRoute::Id& route_id, const std::vector<uint8_t>& data, 978 const MediaRoute::Id& route_id, const std::vector<uint8_t>& data,
1003 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { 979 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) {
1004 EXPECT_EQ( 980 EXPECT_EQ(
1005 0, memcmp(kBinaryMessage, &(data[0]), arraysize(kBinaryMessage))); 981 0, memcmp(kBinaryMessage, &(data[0]), arraysize(kBinaryMessage)));
1006 cb.Run(true); 982 cb.Run(true);
1007 })); 983 }));
1008 984
1009 base::RunLoop run_loop; 985 base::RunLoop run_loop;
1010 SendMessageCallbackHandler handler; 986 SendMessageCallbackHandler handler;
1011 EXPECT_CALL(handler, Invoke(true)) 987 EXPECT_CALL(handler, Invoke(true))
1012 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 988 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1013 router()->SendRouteBinaryMessage( 989 router()->SendRouteBinaryMessage(
1014 kRouteId, std::move(expected_binary_data), 990 kRouteId, std::move(expected_binary_data),
1015 base::Bind(&SendMessageCallbackHandler::Invoke, 991 base::Bind(&SendMessageCallbackHandler::Invoke,
1016 base::Unretained(&handler))); 992 base::Unretained(&handler)));
1017 run_loop.Run(); 993 run_loop.Run();
1018 } 994 }
1019 995
1020 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesSingleObserver) { 996 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesSingleObserver) {
1021 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); 997 std::vector<interfaces::RouteMessagePtr> mojo_messages(2);
1022 mojo_messages[0] = interfaces::RouteMessage::New(); 998 mojo_messages[0] = interfaces::RouteMessage::New();
1023 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT; 999 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT;
1024 mojo_messages[0]->message = "text"; 1000 mojo_messages[0]->message = std::string("text");
1025 mojo_messages[1] = interfaces::RouteMessage::New(); 1001 mojo_messages[1] = interfaces::RouteMessage::New();
1026 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY; 1002 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY;
1027 mojo_messages[1]->data.push_back(1); 1003 mojo_messages[1]->data = std::vector<uint8_t>(1, UINT8_C(1));
1028 1004
1029 ScopedVector<content::PresentationSessionMessage> expected_messages; 1005 ScopedVector<content::PresentationSessionMessage> expected_messages;
1030 std::unique_ptr<content::PresentationSessionMessage> message; 1006 std::unique_ptr<content::PresentationSessionMessage> message;
1031 message.reset(new content::PresentationSessionMessage( 1007 message.reset(new content::PresentationSessionMessage(
1032 content::PresentationMessageType::TEXT)); 1008 content::PresentationMessageType::TEXT));
1033 message->message = "text"; 1009 message->message = "text";
1034 expected_messages.push_back(std::move(message)); 1010 expected_messages.push_back(std::move(message));
1035 1011
1036 message.reset(new content::PresentationSessionMessage( 1012 message.reset(new content::PresentationSessionMessage(
1037 content::PresentationMessageType::ARRAY_BUFFER)); 1013 content::PresentationMessageType::ARRAY_BUFFER));
1038 message->data.reset(new std::vector<uint8_t>(1, 1)); 1014 message->data.reset(new std::vector<uint8_t>(1, UINT8_C(1)));
1039 expected_messages.push_back(std::move(message)); 1015 expected_messages.push_back(std::move(message));
1040 1016
1041 base::RunLoop run_loop; 1017 base::RunLoop run_loop;
1042 MediaRoute::Id expected_route_id("foo"); 1018 MediaRoute::Id expected_route_id("foo");
1043 EXPECT_CALL(mock_media_route_provider_, 1019 EXPECT_CALL(mock_media_route_provider_,
1044 StartListeningForRouteMessages(Eq(expected_route_id))) 1020 StartListeningForRouteMessages(Eq(expected_route_id)))
1045 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1021 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1046 1022
1047 // |pass_ownership| param is |true| here because there is only one observer. 1023 // |pass_ownership| param is |true| here because there is only one observer.
1048 ListenForMessagesCallbackHandler handler(std::move(expected_messages), true); 1024 ListenForMessagesCallbackHandler handler(std::move(expected_messages), true);
1049 1025
1050 // Creating PresentationSessionMessagesObserver will register itself to the 1026 // Creating PresentationSessionMessagesObserver will register itself to the
1051 // MediaRouter, which in turn will start listening for route messages. 1027 // MediaRouter, which in turn will start listening for route messages.
1052 std::unique_ptr<PresentationSessionMessagesObserver> observer( 1028 std::unique_ptr<PresentationSessionMessagesObserver> observer(
1053 new PresentationSessionMessagesObserver( 1029 new PresentationSessionMessagesObserver(
1054 base::Bind(&ListenForMessagesCallbackHandler::Invoke, 1030 base::Bind(&ListenForMessagesCallbackHandler::Invoke,
1055 base::Unretained(&handler)), 1031 base::Unretained(&handler)),
1056 expected_route_id, router())); 1032 expected_route_id, router()));
1057 run_loop.Run(); 1033 run_loop.Run();
1058 1034
1059 EXPECT_CALL(handler, InvokeObserver()); 1035 EXPECT_CALL(handler, InvokeObserver());
1060 router()->OnRouteMessagesReceived(expected_route_id, 1036 router()->OnRouteMessagesReceived(expected_route_id,
1061 std::move(mojo_messages)); 1037 std::move(mojo_messages));
1062 } 1038 }
1063 1039
1064 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesMultipleObservers) { 1040 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesMultipleObservers) {
1065 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); 1041 std::vector<interfaces::RouteMessagePtr> mojo_messages(2);
1066 mojo_messages[0] = interfaces::RouteMessage::New(); 1042 mojo_messages[0] = interfaces::RouteMessage::New();
1067 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT; 1043 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT;
1068 mojo_messages[0]->message = "text"; 1044 mojo_messages[0]->message = std::string("text");
1069 mojo_messages[1] = interfaces::RouteMessage::New(); 1045 mojo_messages[1] = interfaces::RouteMessage::New();
1070 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY; 1046 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY;
1071 mojo_messages[1]->data.push_back(1); 1047 mojo_messages[1]->data = std::vector<uint8_t>(1, UINT8_C(1));
1072 1048
1073 ScopedVector<content::PresentationSessionMessage> expected_messages; 1049 ScopedVector<content::PresentationSessionMessage> expected_messages;
1074 std::unique_ptr<content::PresentationSessionMessage> message; 1050 std::unique_ptr<content::PresentationSessionMessage> message;
1075 message.reset(new content::PresentationSessionMessage( 1051 message.reset(new content::PresentationSessionMessage(
1076 content::PresentationMessageType::TEXT)); 1052 content::PresentationMessageType::TEXT));
1077 message->message = "text"; 1053 message->message = "text";
1078 expected_messages.push_back(std::move(message)); 1054 expected_messages.push_back(std::move(message));
1079 1055
1080 message.reset(new content::PresentationSessionMessage( 1056 message.reset(new content::PresentationSessionMessage(
1081 content::PresentationMessageType::ARRAY_BUFFER)); 1057 content::PresentationMessageType::ARRAY_BUFFER));
1082 message->data.reset(new std::vector<uint8_t>(1, 1)); 1058 message->data.reset(new std::vector<uint8_t>(1, UINT8_C(1)));
1083 expected_messages.push_back(std::move(message)); 1059 expected_messages.push_back(std::move(message));
1084 1060
1085 base::RunLoop run_loop; 1061 base::RunLoop run_loop;
1086 MediaRoute::Id expected_route_id("foo"); 1062 MediaRoute::Id expected_route_id("foo");
1087 EXPECT_CALL(mock_media_route_provider_, 1063 EXPECT_CALL(mock_media_route_provider_,
1088 StartListeningForRouteMessages(Eq(expected_route_id))) 1064 StartListeningForRouteMessages(Eq(expected_route_id)))
1089 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1065 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1090 1066
1091 // |pass_ownership| param is |false| here because there are more than one 1067 // |pass_ownership| param is |false| here because there are more than one
1092 // observers. 1068 // observers.
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 .Times(2) 1159 .Times(2)
1184 .WillOnce(Return(true)) 1160 .WillOnce(Return(true))
1185 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }), 1161 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }),
1186 Return(true))); 1162 Return(true)));
1187 router()->DetachRoute(kRouteId); 1163 router()->DetachRoute(kRouteId);
1188 router()->DetachRoute(kRouteId2); 1164 router()->DetachRoute(kRouteId2);
1189 run_loop.Run(); 1165 run_loop.Run();
1190 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) 1166 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id()))
1191 .Times(2) 1167 .Times(2)
1192 .WillRepeatedly(Return(false)); 1168 .WillRepeatedly(Return(false));
1193 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); 1169 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId));
1194 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); 1170 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId2));
1195 ConnectProviderManagerService(); 1171 ConnectProviderManagerService();
1196 ProcessEventLoop(); 1172 ProcessEventLoop();
1197 } 1173 }
1198 1174
1199 TEST_F(MediaRouterMojoImplTest, SearchSinks) { 1175 TEST_F(MediaRouterMojoImplTest, SearchSinks) {
1200 std::string search_input("input"); 1176 std::string search_input("input");
1201 std::string domain("google.com"); 1177 std::string domain("google.com");
1202 MediaSource media_source(kSource); 1178 MediaSource media_source(kSource);
1203 1179
1204 EXPECT_CALL( 1180 EXPECT_CALL(
1205 mock_media_route_provider_, 1181 mock_media_route_provider_, SearchSinks_(kSinkId, kSource, _, _))
1206 SearchSinks_(mojo::String(kSinkId), mojo::String(kSource), _, _))
1207 .WillOnce(Invoke([&search_input, &domain]( 1182 .WillOnce(Invoke([&search_input, &domain](
1208 const mojo::String& sink_id, const mojo::String& source, 1183 const std::string& sink_id, const std::string& source,
1209 const interfaces::SinkSearchCriteriaPtr& search_criteria, 1184 const interfaces::SinkSearchCriteriaPtr& search_criteria,
1210 const interfaces::MediaRouteProvider::SearchSinksCallback& cb) { 1185 const interfaces::MediaRouteProvider::SearchSinksCallback& cb) {
1211 EXPECT_EQ(search_input, search_criteria->input); 1186 EXPECT_EQ(search_input, search_criteria->input);
1212 EXPECT_EQ(domain, search_criteria->domain); 1187 EXPECT_EQ(domain, search_criteria->domain);
1213 cb.Run(kSinkId2); 1188 cb.Run(kSinkId2);
1214 })); 1189 }));
1215 1190
1216 SinkResponseCallbackHandler sink_handler; 1191 SinkResponseCallbackHandler sink_handler;
1217 EXPECT_CALL(sink_handler, Invoke(kSinkId2)).Times(1); 1192 EXPECT_CALL(sink_handler, Invoke(kSinkId2)).Times(1);
1218 MediaSinkSearchResponseCallback sink_callback = base::Bind( 1193 MediaSinkSearchResponseCallback sink_callback = base::Bind(
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 // |mojo_media_router| signals its readiness to the MR by registering 1308 // |mojo_media_router| signals its readiness to the MR by registering
1334 // itself via RegisterMediaRouteProvider(). 1309 // itself via RegisterMediaRouteProvider().
1335 // Now that the |media_router| and |mojo_media_router| are fully initialized, 1310 // Now that the |media_router| and |mojo_media_router| are fully initialized,
1336 // the queued DetachRoute() call should be executed. 1311 // the queued DetachRoute() call should be executed.
1337 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) 1312 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")))
1338 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1313 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1339 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) 1314 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()))
1340 .WillOnce(Return(false)); 1315 .WillOnce(Return(false));
1341 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()) 1316 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery())
1342 .Times(AtMost(1)); 1317 .Times(AtMost(1));
1343 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) 1318 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId))
1344 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); 1319 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }));
1345 RegisterMediaRouteProvider(); 1320 RegisterMediaRouteProvider();
1346 run_loop.Run(); 1321 run_loop.Run();
1347 run_loop2.Run(); 1322 run_loop2.Run();
1348 1323
1349 base::RunLoop run_loop3; 1324 base::RunLoop run_loop3;
1350 // Extension is suspended and re-awoken. 1325 // Extension is suspended and re-awoken.
1351 ResetMediaRouteProvider(); 1326 ResetMediaRouteProvider();
1352 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) 1327 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()))
1353 .WillOnce(Return(true)); 1328 .WillOnce(Return(true));
1354 EXPECT_CALL(*process_manager_, WakeEventPage(extension_->id(), _)) 1329 EXPECT_CALL(*process_manager_, WakeEventPage(extension_->id(), _))
1355 .WillOnce(testing::DoAll( 1330 .WillOnce(testing::DoAll(
1356 media::RunCallback<1>(true), 1331 media::RunCallback<1>(true),
1357 InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }), 1332 InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }),
1358 Return(true))); 1333 Return(true)));
1359 media_router_->DetachRoute(kRouteId2); 1334 media_router_->DetachRoute(kRouteId2);
1360 run_loop3.Run(); 1335 run_loop3.Run();
1361 1336
1362 base::RunLoop run_loop4, run_loop5; 1337 base::RunLoop run_loop4, run_loop5;
1363 // RegisterMediaRouteProvider() is called. 1338 // RegisterMediaRouteProvider() is called.
1364 // The queued DetachRoute(kRouteId2) call should be executed. 1339 // The queued DetachRoute(kRouteId2) call should be executed.
1365 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) 1340 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")))
1366 .WillOnce(InvokeWithoutArgs([&run_loop4]() { run_loop4.Quit(); })); 1341 .WillOnce(InvokeWithoutArgs([&run_loop4]() { run_loop4.Quit(); }));
1367 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) 1342 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()))
1368 .WillOnce(Return(false)); 1343 .WillOnce(Return(false));
1369 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()) 1344 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery())
1370 .Times(AtMost(1)); 1345 .Times(AtMost(1));
1371 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) 1346 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId2))
1372 .WillOnce(InvokeWithoutArgs([&run_loop5]() { run_loop5.Quit(); })); 1347 .WillOnce(InvokeWithoutArgs([&run_loop5]() { run_loop5.Quit(); }));
1373 BindMediaRouteProvider(); 1348 BindMediaRouteProvider();
1374 RegisterMediaRouteProvider(); 1349 RegisterMediaRouteProvider();
1375 run_loop4.Run(); 1350 run_loop4.Run();
1376 run_loop5.Run(); 1351 run_loop5.Run();
1377 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1); 1352 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1);
1378 ExpectWakeupBucketCount(MediaRouteProviderWakeup::SUCCESS, 1); 1353 ExpectWakeupBucketCount(MediaRouteProviderWakeup::SUCCESS, 1);
1379 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, 1354 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME,
1380 1); 1355 1);
1381 } 1356 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 base::RunLoop run_loop, run_loop2; 1445 base::RunLoop run_loop, run_loop2;
1471 size_t count = 0; 1446 size_t count = 0;
1472 // The oldest request should have been dropped, so we don't expect to see 1447 // The oldest request should have been dropped, so we don't expect to see
1473 // DetachRoute(kRouteId) here. 1448 // DetachRoute(kRouteId) here.
1474 BindMediaRouteProvider(); 1449 BindMediaRouteProvider();
1475 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) 1450 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")))
1476 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 1451 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
1477 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())); 1452 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()));
1478 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()) 1453 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery())
1479 .Times(AtMost(1)); 1454 .Times(AtMost(1));
1480 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) 1455 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId2))
1481 .Times(kMaxPendingRequests) 1456 .Times(kMaxPendingRequests)
1482 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { 1457 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() {
1483 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) 1458 if (++count == MediaRouterMojoImpl::kMaxPendingRequests)
1484 run_loop2.Quit(); 1459 run_loop2.Quit();
1485 })); 1460 }));
1486 RegisterMediaRouteProvider(); 1461 RegisterMediaRouteProvider();
1487 run_loop.Run(); 1462 run_loop.Run();
1488 run_loop2.Run(); 1463 run_loop2.Run();
1489 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, 1464 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME,
1490 1); 1465 1);
1491 } 1466 }
1492 1467
1493 #if defined(OS_WIN) 1468 #if defined(OS_WIN)
1494 TEST_F(MediaRouterMojoExtensionTest, EnableMdnsAfterEachRegister) { 1469 TEST_F(MediaRouterMojoExtensionTest, EnableMdnsAfterEachRegister) {
1495 // This should be queued since no MRPM is registered yet. 1470 // This should be queued since no MRPM is registered yet.
1496 media_router_->OnUserGesture(); 1471 media_router_->OnUserGesture();
1497 1472
1498 BindMediaRouteProvider(); 1473 BindMediaRouteProvider();
1499 1474
1500 base::RunLoop run_loop; 1475 base::RunLoop run_loop;
1501 base::RunLoop run_loop2; 1476 base::RunLoop run_loop2;
1502 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) 1477 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")))
1503 .WillOnce(InvokeWithoutArgs([&run_loop]() { 1478 .WillOnce(InvokeWithoutArgs([&run_loop]() {
1504 run_loop.Quit(); 1479 run_loop.Quit();
1505 })); 1480 }));
1506 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) 1481 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()))
1507 .WillOnce(Return(false)).WillOnce(Return(false)); 1482 .WillOnce(Return(false)).WillOnce(Return(false));
1508 EXPECT_CALL(mock_media_route_provider_, 1483 EXPECT_CALL(mock_media_route_provider_,
1509 UpdateMediaSinks(mojo::String(MediaSourceForDesktop().id()))) 1484 UpdateMediaSinks(MediaSourceForDesktop().id()))
1510 .Times(2); 1485 .Times(2);
1511 // EnableMdnsDisocvery() is never called except on Windows. 1486 // EnableMdnsDisocvery() is never called except on Windows.
1512 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()) 1487 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery())
1513 .WillOnce(InvokeWithoutArgs([&run_loop2]() { 1488 .WillOnce(InvokeWithoutArgs([&run_loop2]() {
1514 run_loop2.Quit(); 1489 run_loop2.Quit();
1515 })); 1490 }));
1516 RegisterMediaRouteProvider(); 1491 RegisterMediaRouteProvider();
1517 run_loop.Run(); 1492 run_loop.Run();
1518 run_loop2.Run(); 1493 run_loop2.Run();
1519 // Should not call EnableMdnsDiscovery, but will call UpdateMediaSinks 1494 // Should not call EnableMdnsDiscovery, but will call UpdateMediaSinks
(...skipping 19 matching lines...) Expand all
1539 base::RunLoop run_loop6; 1514 base::RunLoop run_loop6;
1540 // RegisterMediaRouteProvider() is called. 1515 // RegisterMediaRouteProvider() is called.
1541 // The queued DetachRoute(kRouteId) call should be executed. 1516 // The queued DetachRoute(kRouteId) call should be executed.
1542 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) 1517 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")))
1543 .WillOnce(InvokeWithoutArgs([&run_loop5]() { 1518 .WillOnce(InvokeWithoutArgs([&run_loop5]() {
1544 run_loop5.Quit(); 1519 run_loop5.Quit();
1545 })); 1520 }));
1546 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) 1521 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id()))
1547 .WillOnce(Return(false)).WillOnce(Return(false)); 1522 .WillOnce(Return(false)).WillOnce(Return(false));
1548 // Expected because it was used to wake up the page. 1523 // Expected because it was used to wake up the page.
1549 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); 1524 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId));
1550 EXPECT_CALL(mock_media_route_provider_, 1525 EXPECT_CALL(mock_media_route_provider_,
1551 UpdateMediaSinks(mojo::String(MediaSourceForDesktop().id()))); 1526 UpdateMediaSinks(MediaSourceForDesktop().id()));
1552 // EnableMdnsDisocvery() is never called except on Windows. 1527 // EnableMdnsDisocvery() is never called except on Windows.
1553 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()) 1528 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery())
1554 .WillOnce(InvokeWithoutArgs([&run_loop6]() { 1529 .WillOnce(InvokeWithoutArgs([&run_loop6]() {
1555 run_loop6.Quit(); 1530 run_loop6.Quit();
1556 })); 1531 }));
1557 BindMediaRouteProvider(); 1532 BindMediaRouteProvider();
1558 RegisterMediaRouteProvider(); 1533 RegisterMediaRouteProvider();
1559 run_loop5.Run(); 1534 run_loop5.Run();
1560 run_loop6.Run(); 1535 run_loop6.Run();
1561 // Should not call EnableMdnsDiscovery, but will call UpdateMediaSinks 1536 // Should not call EnableMdnsDiscovery, but will call UpdateMediaSinks
(...skipping 26 matching lines...) Expand all
1588 run_loop.Run(); 1563 run_loop.Run();
1589 1564
1590 media_router_->OnUserGesture(); 1565 media_router_->OnUserGesture();
1591 1566
1592 base::RunLoop run_loop2; 1567 base::RunLoop run_loop2;
1593 1568
1594 #if defined(OS_WIN) 1569 #if defined(OS_WIN)
1595 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery()); 1570 EXPECT_CALL(mock_media_route_provider_, EnableMdnsDiscovery());
1596 #endif 1571 #endif
1597 EXPECT_CALL(mock_media_route_provider_, 1572 EXPECT_CALL(mock_media_route_provider_,
1598 UpdateMediaSinks(mojo::String(MediaSourceForDesktop().id()))) 1573 UpdateMediaSinks(MediaSourceForDesktop().id()))
1599 .WillOnce(InvokeWithoutArgs([&run_loop2]() { 1574 .WillOnce(InvokeWithoutArgs([&run_loop2]() {
1600 run_loop2.Quit(); 1575 run_loop2.Quit();
1601 })); 1576 }));
1602 1577
1603 run_loop2.Run(); 1578 run_loop2.Run();
1604 } 1579 }
1605 1580
1606 } // namespace media_router 1581 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698