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

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

Issue 2678123003: Revert of Convert MediaRouter mojom apis to intake url::Origin objects instead of strings (Closed)
Patch Set: Created 3 years, 10 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 188
189 TEST_F(MediaRouterMojoImplTest, CreateRoute) { 189 TEST_F(MediaRouterMojoImplTest, CreateRoute) {
190 MediaSource media_source(kSource); 190 MediaSource media_source(kSource);
191 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 191 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
192 false); 192 false);
193 193
194 // Use a lambda function as an invocation target here to work around 194 // Use a lambda function as an invocation target here to work around
195 // a limitation with GMock::Invoke that prevents it from using move-only types 195 // a limitation with GMock::Invoke that prevents it from using move-only types
196 // in runnable parameter lists. 196 // in runnable parameter lists.
197 EXPECT_CALL(mock_media_route_provider_, 197 EXPECT_CALL(mock_media_route_provider_,
198 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), 198 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, _, _, _))
199 kInvalidTabId, _, _, _))
200 .WillOnce(Invoke( 199 .WillOnce(Invoke(
201 [](const std::string& source, const std::string& sink, 200 [](const std::string& source, const std::string& sink,
202 const std::string& presentation_id, const url::Origin& origin, 201 const std::string& presentation_id, const std::string& origin,
203 int tab_id, base::TimeDelta timeout, bool incognito, 202 int tab_id, base::TimeDelta timeout, bool incognito,
204 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { 203 const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
205 cb.Run(CreateMojoRoute(), std::string(), 204 cb.Run(CreateMojoRoute(), std::string(),
206 mojom::RouteRequestResultCode::OK); 205 mojom::RouteRequestResultCode::OK);
207 })); 206 }));
208 207
209 base::RunLoop run_loop; 208 base::RunLoop run_loop;
210 RouteResponseCallbackHandler handler; 209 RouteResponseCallbackHandler handler;
211 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 210 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
212 RouteRequestResult::OK)) 211 RouteRequestResult::OK))
213 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 212 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
214 std::vector<MediaRouteResponseCallback> route_response_callbacks; 213 std::vector<MediaRouteResponseCallback> route_response_callbacks;
215 route_response_callbacks.push_back(base::Bind( 214 route_response_callbacks.push_back(base::Bind(
216 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 215 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
217 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, 216 router()->CreateRoute(
218 route_response_callbacks, 217 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
219 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 218 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
220 false);
221 run_loop.Run(); 219 run_loop.Run();
222 ExpectResultBucketCount("CreateRoute", RouteRequestResult::ResultCode::OK, 1); 220 ExpectResultBucketCount("CreateRoute", RouteRequestResult::ResultCode::OK, 1);
223 } 221 }
224 222
225 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) { 223 TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) {
226 MediaSource media_source(kSource); 224 MediaSource media_source(kSource);
227 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 225 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
228 false); 226 false);
229 expected_route.set_incognito(true); 227 expected_route.set_incognito(true);
230 228
231 // Use a lambda function as an invocation target here to work around 229 // Use a lambda function as an invocation target here to work around
232 // a limitation with GMock::Invoke that prevents it from using move-only types 230 // a limitation with GMock::Invoke that prevents it from using move-only types
233 // in runnable parameter lists. 231 // in runnable parameter lists.
234 EXPECT_CALL(mock_media_route_provider_, 232 EXPECT_CALL(mock_media_route_provider_,
235 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), 233 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, _, _, _))
236 kInvalidTabId, _, _, _))
237 .WillOnce(Invoke( 234 .WillOnce(Invoke(
238 [](const std::string& source, const std::string& sink, 235 [](const std::string& source, const std::string& sink,
239 const std::string& presentation_id, const url::Origin& origin, 236 const std::string& presentation_id, const std::string& origin,
240 int tab_id, base::TimeDelta timeout, bool incognito, 237 int tab_id, base::TimeDelta timeout, bool incognito,
241 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { 238 const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
242 mojom::MediaRoutePtr route = CreateMojoRoute(); 239 mojom::MediaRoutePtr route = CreateMojoRoute();
243 route->custom_controller_path = 240 route->custom_controller_path =
244 std::string("custom/controller/path"); 241 std::string("custom/controller/path");
245 route->is_incognito = true; 242 route->is_incognito = true;
246 cb.Run(std::move(route), std::string(), 243 cb.Run(std::move(route), std::string(),
247 mojom::RouteRequestResultCode::OK); 244 mojom::RouteRequestResultCode::OK);
248 })); 245 }));
249 246
250 base::RunLoop run_loop; 247 base::RunLoop run_loop;
251 RouteResponseCallbackHandler handler; 248 RouteResponseCallbackHandler handler;
252 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 249 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
253 RouteRequestResult::OK)) 250 RouteRequestResult::OK))
254 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 251 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
255 std::vector<MediaRouteResponseCallback> route_response_callbacks; 252 std::vector<MediaRouteResponseCallback> route_response_callbacks;
256 route_response_callbacks.push_back(base::Bind( 253 route_response_callbacks.push_back(base::Bind(
257 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 254 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
258 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, 255 router()->CreateRoute(
259 route_response_callbacks, 256 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
260 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 257 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
261 true);
262 run_loop.Run(); 258 run_loop.Run();
263 ExpectResultBucketCount("CreateRoute", RouteRequestResult::ResultCode::OK, 1); 259 ExpectResultBucketCount("CreateRoute", RouteRequestResult::ResultCode::OK, 1);
264 } 260 }
265 261
266 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) { 262 TEST_F(MediaRouterMojoImplTest, CreateRouteFails) {
267 EXPECT_CALL( 263 EXPECT_CALL(
268 mock_media_route_provider_, 264 mock_media_route_provider_,
269 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), 265 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
270 kInvalidTabId,
271 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) 266 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
272 .WillOnce(Invoke( 267 .WillOnce(Invoke(
273 [](const std::string& source, const std::string& sink, 268 [](const std::string& source, const std::string& sink,
274 const std::string& presentation_id, const url::Origin& origin, 269 const std::string& presentation_id, const std::string& origin,
275 int tab_id, base::TimeDelta timeout, bool incognito, 270 int tab_id, base::TimeDelta timeout, bool incognito,
276 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { 271 const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
277 cb.Run(mojom::MediaRoutePtr(), std::string(kError), 272 cb.Run(mojom::MediaRoutePtr(), std::string(kError),
278 mojom::RouteRequestResultCode::TIMED_OUT); 273 mojom::RouteRequestResultCode::TIMED_OUT);
279 })); 274 }));
280 275
281 RouteResponseCallbackHandler handler; 276 RouteResponseCallbackHandler handler;
282 base::RunLoop run_loop; 277 base::RunLoop run_loop;
283 EXPECT_CALL(handler, 278 EXPECT_CALL(handler,
284 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 279 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
285 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 280 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
286 std::vector<MediaRouteResponseCallback> route_response_callbacks; 281 std::vector<MediaRouteResponseCallback> route_response_callbacks;
287 route_response_callbacks.push_back(base::Bind( 282 route_response_callbacks.push_back(base::Bind(
288 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 283 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
289 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, 284 router()->CreateRoute(
290 route_response_callbacks, 285 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
291 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 286 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
292 false);
293 run_loop.Run(); 287 run_loop.Run();
294 ExpectResultBucketCount("CreateRoute", 288 ExpectResultBucketCount("CreateRoute",
295 RouteRequestResult::ResultCode::TIMED_OUT, 1); 289 RouteRequestResult::ResultCode::TIMED_OUT, 1);
296 } 290 }
297 291
298 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) { 292 TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) {
299 EXPECT_CALL( 293 EXPECT_CALL(mock_media_route_provider_,
300 mock_media_route_provider_, 294 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
301 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), 295 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
302 kInvalidTabId, 296 true, _))
303 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _))
304 .WillOnce(Invoke( 297 .WillOnce(Invoke(
305 [](const std::string& source, const std::string& sink, 298 [](const std::string& source, const std::string& sink,
306 const std::string& presentation_id, const url::Origin& origin, 299 const std::string& presentation_id, const std::string& origin,
307 int tab_id, base::TimeDelta timeout, bool incognito, 300 int tab_id, base::TimeDelta timeout, bool incognito,
308 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { 301 const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
309 cb.Run(CreateMojoRoute(), std::string(), 302 cb.Run(CreateMojoRoute(), std::string(),
310 mojom::RouteRequestResultCode::OK); 303 mojom::RouteRequestResultCode::OK);
311 })); 304 }));
312 305
313 RouteResponseCallbackHandler handler; 306 RouteResponseCallbackHandler handler;
314 base::RunLoop run_loop; 307 base::RunLoop run_loop;
315 std::string error("Mismatch in incognito status: request = 1, response = 0"); 308 std::string error("Mismatch in incognito status: request = 1, response = 0");
316 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 309 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
317 RouteRequestResult::INCOGNITO_MISMATCH)) 310 RouteRequestResult::INCOGNITO_MISMATCH))
318 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 311 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
319 std::vector<MediaRouteResponseCallback> route_response_callbacks; 312 std::vector<MediaRouteResponseCallback> route_response_callbacks;
320 route_response_callbacks.push_back(base::Bind( 313 route_response_callbacks.push_back(base::Bind(
321 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 314 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
322 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, 315 router()->CreateRoute(
323 route_response_callbacks, 316 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks,
324 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 317 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
325 true);
326 run_loop.Run(); 318 run_loop.Run();
327 ExpectResultBucketCount( 319 ExpectResultBucketCount(
328 "CreateRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1); 320 "CreateRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1);
329 } 321 }
330 322
331 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) { 323 TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) {
332 mojom::MediaRoutePtr route = CreateMojoRoute(); 324 mojom::MediaRoutePtr route = CreateMojoRoute();
333 route->is_incognito = true; 325 route->is_incognito = true;
334 326
335 EXPECT_CALL( 327 EXPECT_CALL(mock_media_route_provider_,
336 mock_media_route_provider_, 328 CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
337 CreateRoute(kSource, kSinkId, _, url::Origin(GURL(kOrigin)), 329 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
338 kInvalidTabId, 330 true, _))
339 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _))
340 .WillOnce(Invoke( 331 .WillOnce(Invoke(
341 [](const std::string& source, const std::string& sink, 332 [](const std::string& source, const std::string& sink,
342 const std::string& presentation_id, const url::Origin& origin, 333 const std::string& presentation_id, const std::string& origin,
343 int tab_id, base::TimeDelta timeout, bool incognito, 334 int tab_id, base::TimeDelta timeout, bool incognito,
344 const mojom::MediaRouteProvider::CreateRouteCallback& cb) { 335 const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
345 mojom::MediaRoutePtr route = CreateMojoRoute(); 336 mojom::MediaRoutePtr route = CreateMojoRoute();
346 route->is_incognito = true; 337 route->is_incognito = true;
347 cb.Run(std::move(route), std::string(), 338 cb.Run(std::move(route), std::string(),
348 mojom::RouteRequestResultCode::OK); 339 mojom::RouteRequestResultCode::OK);
349 })); 340 }));
350 base::RunLoop run_loop; 341 base::RunLoop run_loop;
351 router()->CreateRoute(kSource, kSinkId, url::Origin(GURL(kOrigin)), nullptr, 342 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr,
352 std::vector<MediaRouteResponseCallback>(), 343 std::vector<MediaRouteResponseCallback>(),
353 base::TimeDelta::FromMilliseconds(kTimeoutMillis), 344 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
354 true); 345 true);
355 std::vector<mojom::MediaRoutePtr> mojo_routes(1); 346 std::vector<mojom::MediaRoutePtr> mojo_routes(1);
356 mojo_routes[0] = route->Clone(); 347 mojo_routes[0] = route->Clone();
357 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(), 348 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
358 std::vector<std::string>()); 349 std::vector<std::string>());
359 350
360 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle 351 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle
361 // instead of manually calling Run/Quit on the run loop. 352 // instead of manually calling Run/Quit on the run loop.
(...skipping 23 matching lines...) Expand all
385 mojo_routes[0] = route->Clone(); 376 mojo_routes[0] = route->Clone();
386 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(), 377 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
387 std::vector<std::string>()); 378 std::vector<std::string>());
388 EXPECT_TRUE(router()->HasJoinableRoute()); 379 EXPECT_TRUE(router()->HasJoinableRoute());
389 380
390 // Use a lambda function as an invocation target here to work around 381 // Use a lambda function as an invocation target here to work around
391 // a limitation with GMock::Invoke that prevents it from using move-only types 382 // a limitation with GMock::Invoke that prevents it from using move-only types
392 // in runnable parameter lists. 383 // in runnable parameter lists.
393 EXPECT_CALL( 384 EXPECT_CALL(
394 mock_media_route_provider_, 385 mock_media_route_provider_,
395 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 386 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
396 kInvalidTabId,
397 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) 387 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
398 .WillOnce(Invoke([&route]( 388 .WillOnce(Invoke([&route](
399 const std::string& source, const std::string& presentation_id, 389 const std::string& source, const std::string& presentation_id,
400 const url::Origin& origin, int tab_id, base::TimeDelta timeout, 390 const std::string& origin, int tab_id, base::TimeDelta timeout,
401 bool incognito, 391 bool incognito,
402 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 392 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
403 cb.Run(std::move(route), std::string(), 393 cb.Run(std::move(route), std::string(),
404 mojom::RouteRequestResultCode::OK); 394 mojom::RouteRequestResultCode::OK);
405 })); 395 }));
406 396
407 RouteResponseCallbackHandler handler; 397 RouteResponseCallbackHandler handler;
408 base::RunLoop run_loop; 398 base::RunLoop run_loop;
409 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 399 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
410 RouteRequestResult::OK)) 400 RouteRequestResult::OK))
411 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 401 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
412 std::vector<MediaRouteResponseCallback> route_response_callbacks; 402 std::vector<MediaRouteResponseCallback> route_response_callbacks;
413 route_response_callbacks.push_back(base::Bind( 403 route_response_callbacks.push_back(base::Bind(
414 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 404 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
415 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 405 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
416 nullptr, route_response_callbacks, 406 route_response_callbacks,
417 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 407 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
418 run_loop.Run(); 408 run_loop.Run();
419 ExpectResultBucketCount("JoinRoute", RouteRequestResult::ResultCode::OK, 1); 409 ExpectResultBucketCount("JoinRoute", RouteRequestResult::ResultCode::OK, 1);
420 } 410 }
421 411
422 TEST_F(MediaRouterMojoImplTest, JoinRouteNotFoundFails) { 412 TEST_F(MediaRouterMojoImplTest, JoinRouteNotFoundFails) {
423 RouteResponseCallbackHandler handler; 413 RouteResponseCallbackHandler handler;
424 base::RunLoop run_loop; 414 base::RunLoop run_loop;
425 EXPECT_CALL(handler, DoInvoke(nullptr, "", "Route not found", 415 EXPECT_CALL(handler, DoInvoke(nullptr, "", "Route not found",
426 RouteRequestResult::ROUTE_NOT_FOUND)) 416 RouteRequestResult::ROUTE_NOT_FOUND))
427 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 417 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
428 std::vector<MediaRouteResponseCallback> route_response_callbacks; 418 std::vector<MediaRouteResponseCallback> route_response_callbacks;
429 route_response_callbacks.push_back(base::Bind( 419 route_response_callbacks.push_back(base::Bind(
430 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 420 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
431 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 421 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
432 nullptr, route_response_callbacks, 422 route_response_callbacks,
433 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 423 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
434 run_loop.Run(); 424 run_loop.Run();
435 ExpectResultBucketCount("JoinRoute", 425 ExpectResultBucketCount("JoinRoute",
436 RouteRequestResult::ResultCode::ROUTE_NOT_FOUND, 1); 426 RouteRequestResult::ResultCode::ROUTE_NOT_FOUND, 1);
437 } 427 }
438 428
439 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) { 429 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) {
440 // Make sure the MR has received an update with the route, so it knows there 430 // Make sure the MR has received an update with the route, so it knows there
441 // is a route to join. 431 // is a route to join.
442 std::vector<mojom::MediaRoutePtr> mojo_routes(1); 432 std::vector<mojom::MediaRoutePtr> mojo_routes(1);
443 mojo_routes[0] = CreateMojoRoute(); 433 mojo_routes[0] = CreateMojoRoute();
444 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(), 434 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
445 std::vector<std::string>()); 435 std::vector<std::string>());
446 EXPECT_TRUE(router()->HasJoinableRoute()); 436 EXPECT_TRUE(router()->HasJoinableRoute());
447 437
448 EXPECT_CALL( 438 EXPECT_CALL(
449 mock_media_route_provider_, 439 mock_media_route_provider_,
450 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 440 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
451 kInvalidTabId,
452 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _)) 441 base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
453 .WillOnce(Invoke( 442 .WillOnce(Invoke(
454 [](const std::string& source, const std::string& presentation_id, 443 [](const std::string& source, const std::string& presentation_id,
455 const url::Origin& origin, int tab_id, base::TimeDelta timeout, 444 const std::string& origin, int tab_id, base::TimeDelta timeout,
456 bool incognito, 445 bool incognito,
457 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 446 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
458 cb.Run(mojom::MediaRoutePtr(), std::string(kError), 447 cb.Run(mojom::MediaRoutePtr(), std::string(kError),
459 mojom::RouteRequestResultCode::TIMED_OUT); 448 mojom::RouteRequestResultCode::TIMED_OUT);
460 })); 449 }));
461 450
462 RouteResponseCallbackHandler handler; 451 RouteResponseCallbackHandler handler;
463 base::RunLoop run_loop; 452 base::RunLoop run_loop;
464 EXPECT_CALL(handler, 453 EXPECT_CALL(handler,
465 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 454 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
466 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 455 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
467 std::vector<MediaRouteResponseCallback> route_response_callbacks; 456 std::vector<MediaRouteResponseCallback> route_response_callbacks;
468 route_response_callbacks.push_back(base::Bind( 457 route_response_callbacks.push_back(base::Bind(
469 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 458 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
470 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 459 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
471 nullptr, route_response_callbacks, 460 route_response_callbacks,
472 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 461 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
473 run_loop.Run(); 462 run_loop.Run();
474 ExpectResultBucketCount("JoinRoute", 463 ExpectResultBucketCount("JoinRoute",
475 RouteRequestResult::ResultCode::TIMED_OUT, 1); 464 RouteRequestResult::ResultCode::TIMED_OUT, 1);
476 } 465 }
477 466
478 TEST_F(MediaRouterMojoImplTest, JoinRouteIncognitoMismatchFails) { 467 TEST_F(MediaRouterMojoImplTest, JoinRouteIncognitoMismatchFails) {
479 mojom::MediaRoutePtr route = CreateMojoRoute(); 468 mojom::MediaRoutePtr route = CreateMojoRoute();
480 469
481 // Make sure the MR has received an update with the route, so it knows there 470 // Make sure the MR has received an update with the route, so it knows there
482 // is a route to join. 471 // is a route to join.
483 std::vector<mojom::MediaRoutePtr> mojo_routes(1); 472 std::vector<mojom::MediaRoutePtr> mojo_routes(1);
484 mojo_routes[0] = route->Clone(); 473 mojo_routes[0] = route->Clone();
485 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(), 474 router()->OnRoutesUpdated(std::move(mojo_routes), std::string(),
486 std::vector<std::string>()); 475 std::vector<std::string>());
487 EXPECT_TRUE(router()->HasJoinableRoute()); 476 EXPECT_TRUE(router()->HasJoinableRoute());
488 477
489 // Use a lambda function as an invocation target here to work around 478 // Use a lambda function as an invocation target here to work around
490 // a limitation with GMock::Invoke that prevents it from using move-only types 479 // a limitation with GMock::Invoke that prevents it from using move-only types
491 // in runnable parameter lists. 480 // in runnable parameter lists.
492 EXPECT_CALL( 481 EXPECT_CALL(
493 mock_media_route_provider_, 482 mock_media_route_provider_,
494 JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 483 JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
495 kInvalidTabId,
496 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) 484 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _))
497 .WillOnce(Invoke([&route]( 485 .WillOnce(Invoke([&route](
498 const std::string& source, const std::string& presentation_id, 486 const std::string& source, const std::string& presentation_id,
499 const url::Origin& origin, int tab_id, base::TimeDelta timeout, 487 const std::string& origin, int tab_id, base::TimeDelta timeout,
500 bool incognito, 488 bool incognito,
501 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 489 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
502 cb.Run(std::move(route), std::string(), 490 cb.Run(std::move(route), std::string(),
503 mojom::RouteRequestResultCode::OK); 491 mojom::RouteRequestResultCode::OK);
504 })); 492 }));
505 493
506 RouteResponseCallbackHandler handler; 494 RouteResponseCallbackHandler handler;
507 base::RunLoop run_loop; 495 base::RunLoop run_loop;
508 std::string error("Mismatch in incognito status: request = 1, response = 0"); 496 std::string error("Mismatch in incognito status: request = 1, response = 0");
509 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 497 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
510 RouteRequestResult::INCOGNITO_MISMATCH)) 498 RouteRequestResult::INCOGNITO_MISMATCH))
511 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 499 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
512 std::vector<MediaRouteResponseCallback> route_response_callbacks; 500 std::vector<MediaRouteResponseCallback> route_response_callbacks;
513 route_response_callbacks.push_back(base::Bind( 501 route_response_callbacks.push_back(base::Bind(
514 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 502 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
515 router()->JoinRoute(kSource, kPresentationId, url::Origin(GURL(kOrigin)), 503 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
516 nullptr, route_response_callbacks, 504 route_response_callbacks,
517 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 505 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
518 run_loop.Run(); 506 run_loop.Run();
519 ExpectResultBucketCount( 507 ExpectResultBucketCount(
520 "JoinRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1); 508 "JoinRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1);
521 } 509 }
522 510
523 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteId) { 511 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteId) {
524 MediaSource media_source(kSource); 512 MediaSource media_source(kSource);
525 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", 513 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "",
526 false); 514 false);
527 expected_route.set_incognito(false); 515 expected_route.set_incognito(false);
528 mojom::MediaRoutePtr route = CreateMojoRoute(); 516 mojom::MediaRoutePtr route = CreateMojoRoute();
529 517
530 // Use a lambda function as an invocation target here to work around 518 // Use a lambda function as an invocation target here to work around
531 // a limitation with GMock::Invoke that prevents it from using move-only types 519 // a limitation with GMock::Invoke that prevents it from using move-only types
532 // in runnable parameter lists. 520 // in runnable parameter lists.
533 EXPECT_CALL( 521 EXPECT_CALL(
534 mock_media_route_provider_, 522 mock_media_route_provider_,
535 ConnectRouteByRouteId( 523 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
536 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, 524 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
537 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false, _)) 525 false, _))
538 .WillOnce(Invoke([&route]( 526 .WillOnce(Invoke([&route](
539 const std::string& source, const std::string& route_id, 527 const std::string& source, const std::string& route_id,
540 const std::string& presentation_id, const url::Origin& origin, 528 const std::string& presentation_id, const std::string& origin,
541 int tab_id, base::TimeDelta timeout, bool incognito, 529 int tab_id, base::TimeDelta timeout, bool incognito,
542 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 530 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
543 cb.Run(std::move(route), std::string(), 531 cb.Run(std::move(route), std::string(),
544 mojom::RouteRequestResultCode::OK); 532 mojom::RouteRequestResultCode::OK);
545 })); 533 }));
546 534
547 RouteResponseCallbackHandler handler; 535 RouteResponseCallbackHandler handler;
548 base::RunLoop run_loop; 536 base::RunLoop run_loop;
549 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "", 537 EXPECT_CALL(handler, DoInvoke(Pointee(Equals(expected_route)), Not(""), "",
550 RouteRequestResult::OK)) 538 RouteRequestResult::OK))
551 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 539 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
552 std::vector<MediaRouteResponseCallback> route_response_callbacks; 540 std::vector<MediaRouteResponseCallback> route_response_callbacks;
553 route_response_callbacks.push_back(base::Bind( 541 route_response_callbacks.push_back(base::Bind(
554 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 542 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
555 router()->ConnectRouteByRouteId( 543 router()->ConnectRouteByRouteId(
556 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, 544 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
557 route_response_callbacks,
558 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); 545 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false);
559 run_loop.Run(); 546 run_loop.Run();
560 ExpectResultBucketCount("JoinRoute", RouteRequestResult::ResultCode::OK, 1); 547 ExpectResultBucketCount("JoinRoute", RouteRequestResult::ResultCode::OK, 1);
561 } 548 }
562 549
563 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) { 550 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) {
564 EXPECT_CALL( 551 EXPECT_CALL(
565 mock_media_route_provider_, 552 mock_media_route_provider_,
566 ConnectRouteByRouteId( 553 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
567 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, 554 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
568 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) 555 true, _))
569 .WillOnce(Invoke( 556 .WillOnce(Invoke(
570 [](const std::string& source, const std::string& route_id, 557 [](const std::string& source, const std::string& route_id,
571 const std::string& presentation_id, const url::Origin& origin, 558 const std::string& presentation_id, const std::string& origin,
572 int tab_id, base::TimeDelta timeout, bool incognito, 559 int tab_id, base::TimeDelta timeout, bool incognito,
573 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 560 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
574 cb.Run(mojom::MediaRoutePtr(), std::string(kError), 561 cb.Run(mojom::MediaRoutePtr(), std::string(kError),
575 mojom::RouteRequestResultCode::TIMED_OUT); 562 mojom::RouteRequestResultCode::TIMED_OUT);
576 })); 563 }));
577 564
578 RouteResponseCallbackHandler handler; 565 RouteResponseCallbackHandler handler;
579 base::RunLoop run_loop; 566 base::RunLoop run_loop;
580 EXPECT_CALL(handler, 567 EXPECT_CALL(handler,
581 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT)) 568 DoInvoke(nullptr, "", kError, RouteRequestResult::TIMED_OUT))
582 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 569 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
583 std::vector<MediaRouteResponseCallback> route_response_callbacks; 570 std::vector<MediaRouteResponseCallback> route_response_callbacks;
584 route_response_callbacks.push_back(base::Bind( 571 route_response_callbacks.push_back(base::Bind(
585 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 572 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
586 router()->ConnectRouteByRouteId( 573 router()->ConnectRouteByRouteId(
587 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, 574 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
588 route_response_callbacks,
589 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 575 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
590 run_loop.Run(); 576 run_loop.Run();
591 ExpectResultBucketCount("JoinRoute", 577 ExpectResultBucketCount("JoinRoute",
592 RouteRequestResult::ResultCode::TIMED_OUT, 1); 578 RouteRequestResult::ResultCode::TIMED_OUT, 1);
593 } 579 }
594 580
595 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) { 581 TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) {
596 mojom::MediaRoutePtr route = CreateMojoRoute(); 582 mojom::MediaRoutePtr route = CreateMojoRoute();
597 583
598 // Use a lambda function as an invocation target here to work around 584 // Use a lambda function as an invocation target here to work around
599 // a limitation with GMock::Invoke that prevents it from using move-only types 585 // a limitation with GMock::Invoke that prevents it from using move-only types
600 // in runnable parameter lists. 586 // in runnable parameter lists.
601 EXPECT_CALL( 587 EXPECT_CALL(
602 mock_media_route_provider_, 588 mock_media_route_provider_,
603 ConnectRouteByRouteId( 589 ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
604 kSource, kRouteId, _, url::Origin(GURL(kOrigin)), kInvalidTabId, 590 base::TimeDelta::FromMilliseconds(kTimeoutMillis),
605 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _)) 591 true, _))
606 .WillOnce(Invoke([&route]( 592 .WillOnce(Invoke([&route](
607 const std::string& source, const std::string& route_id, 593 const std::string& source, const std::string& route_id,
608 const std::string& presentation_id, const url::Origin& origin, 594 const std::string& presentation_id, const std::string& origin,
609 int tab_id, base::TimeDelta timeout, bool incognito, 595 int tab_id, base::TimeDelta timeout, bool incognito,
610 const mojom::MediaRouteProvider::JoinRouteCallback& cb) { 596 const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
611 cb.Run(std::move(route), std::string(), 597 cb.Run(std::move(route), std::string(),
612 mojom::RouteRequestResultCode::OK); 598 mojom::RouteRequestResultCode::OK);
613 })); 599 }));
614 600
615 RouteResponseCallbackHandler handler; 601 RouteResponseCallbackHandler handler;
616 base::RunLoop run_loop; 602 base::RunLoop run_loop;
617 std::string error("Mismatch in incognito status: request = 1, response = 0"); 603 std::string error("Mismatch in incognito status: request = 1, response = 0");
618 EXPECT_CALL(handler, DoInvoke(nullptr, "", error, 604 EXPECT_CALL(handler, DoInvoke(nullptr, "", error,
619 RouteRequestResult::INCOGNITO_MISMATCH)) 605 RouteRequestResult::INCOGNITO_MISMATCH))
620 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 606 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
621 std::vector<MediaRouteResponseCallback> route_response_callbacks; 607 std::vector<MediaRouteResponseCallback> route_response_callbacks;
622 route_response_callbacks.push_back(base::Bind( 608 route_response_callbacks.push_back(base::Bind(
623 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 609 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
624 router()->ConnectRouteByRouteId( 610 router()->ConnectRouteByRouteId(
625 kSource, kRouteId, url::Origin(GURL(kOrigin)), nullptr, 611 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks,
626 route_response_callbacks,
627 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); 612 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true);
628 run_loop.Run(); 613 run_loop.Run();
629 ExpectResultBucketCount( 614 ExpectResultBucketCount(
630 "JoinRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1); 615 "JoinRoute", RouteRequestResult::ResultCode::INCOGNITO_MISMATCH, 1);
631 } 616 }
632 617
633 TEST_F(MediaRouterMojoImplTest, DetachRoute) { 618 TEST_F(MediaRouterMojoImplTest, DetachRoute) {
634 base::RunLoop run_loop; 619 base::RunLoop run_loop;
635 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId)) 620 EXPECT_CALL(mock_media_route_provider_, DetachRoute(kRouteId))
636 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 621 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 router()->ClearIssue(issue_from_observer1.id()); 689 router()->ClearIssue(issue_from_observer1.id());
705 690
706 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1)); 691 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1));
707 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); 692 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2));
708 } 693 }
709 694
710 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { 695 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) {
711 router()->OnSinkAvailabilityUpdated( 696 router()->OnSinkAvailabilityUpdated(
712 mojom::MediaRouter::SinkAvailability::AVAILABLE); 697 mojom::MediaRouter::SinkAvailability::AVAILABLE);
713 MediaSource media_source(kSource); 698 MediaSource media_source(kSource);
699 GURL origin("https://google.com");
714 700
715 // These should only be called once even if there is more than one observer 701 // These should only be called once even if there is more than one observer
716 // for a given source. 702 // for a given source.
717 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource)); 703 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource));
718 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2)); 704 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2));
719 705
720 std::unique_ptr<MockMediaSinksObserver> sinks_observer( 706 std::unique_ptr<MockMediaSinksObserver> sinks_observer(
721 new MockMediaSinksObserver(router(), media_source, 707 new MockMediaSinksObserver(router(), media_source, origin));
722 url::Origin(GURL(kOrigin))));
723 EXPECT_TRUE(sinks_observer->Init()); 708 EXPECT_TRUE(sinks_observer->Init());
724 std::unique_ptr<MockMediaSinksObserver> extra_sinks_observer( 709 std::unique_ptr<MockMediaSinksObserver> extra_sinks_observer(
725 new MockMediaSinksObserver(router(), media_source, 710 new MockMediaSinksObserver(router(), media_source, origin));
726 url::Origin(GURL(kOrigin))));
727 EXPECT_TRUE(extra_sinks_observer->Init()); 711 EXPECT_TRUE(extra_sinks_observer->Init());
728 std::unique_ptr<MockMediaSinksObserver> unrelated_sinks_observer( 712 std::unique_ptr<MockMediaSinksObserver> unrelated_sinks_observer(
729 new MockMediaSinksObserver(router(), MediaSource(kSource2), 713 new MockMediaSinksObserver(router(), MediaSource(kSource2), origin));
730 url::Origin(GURL(kOrigin))));
731 EXPECT_TRUE(unrelated_sinks_observer->Init()); 714 EXPECT_TRUE(unrelated_sinks_observer->Init());
732 ProcessEventLoop(); 715 ProcessEventLoop();
733 716
734 std::vector<MediaSink> expected_sinks; 717 std::vector<MediaSink> expected_sinks;
735 expected_sinks.push_back( 718 expected_sinks.push_back(
736 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST)); 719 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST));
737 expected_sinks.push_back( 720 expected_sinks.push_back(
738 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST)); 721 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST));
739 722
740 std::vector<mojom::MediaSinkPtr> mojo_sinks(2); 723 std::vector<mojom::MediaSinkPtr> mojo_sinks(2);
741 mojo_sinks[0] = mojom::MediaSink::New(); 724 mojo_sinks[0] = mojom::MediaSink::New();
742 mojo_sinks[0]->sink_id = kSinkId; 725 mojo_sinks[0]->sink_id = kSinkId;
743 mojo_sinks[0]->name = kSinkName; 726 mojo_sinks[0]->name = kSinkName;
744 mojo_sinks[0]->icon_type = 727 mojo_sinks[0]->icon_type =
745 media_router::mojom::MediaSink::IconType::CAST; 728 media_router::mojom::MediaSink::IconType::CAST;
746 mojo_sinks[1] = mojom::MediaSink::New(); 729 mojo_sinks[1] = mojom::MediaSink::New();
747 mojo_sinks[1]->sink_id = kSinkId2; 730 mojo_sinks[1]->sink_id = kSinkId2;
748 mojo_sinks[1]->name = kSinkName; 731 mojo_sinks[1]->name = kSinkName;
749 mojo_sinks[1]->icon_type = 732 mojo_sinks[1]->icon_type =
750 media_router::mojom::MediaSink::IconType::CAST; 733 media_router::mojom::MediaSink::IconType::CAST;
751 734
752 base::RunLoop run_loop; 735 base::RunLoop run_loop;
753 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); 736 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks)));
754 EXPECT_CALL(*extra_sinks_observer, 737 EXPECT_CALL(*extra_sinks_observer,
755 OnSinksReceived(SequenceEquals(expected_sinks))) 738 OnSinksReceived(SequenceEquals(expected_sinks)))
756 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 739 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
757 media_router_proxy_->OnSinksReceived( 740 media_router_proxy_->OnSinksReceived(
758 media_source.id(), std::move(mojo_sinks), 741 media_source.id(), std::move(mojo_sinks),
759 std::vector<url::Origin>(1, url::Origin(GURL(kOrigin)))); 742 std::vector<std::string>(1, origin.spec()));
760 run_loop.Run(); 743 run_loop.Run();
761 744
762 // Since the MediaRouterMojoImpl has already received results for 745 // Since the MediaRouterMojoImpl has already received results for
763 // |media_source|, return cached results to observers that are subsequently 746 // |media_source|, return cached results to observers that are subsequently
764 // registered. 747 // registered.
765 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer( 748 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer(
766 new MockMediaSinksObserver(router(), media_source, 749 new MockMediaSinksObserver(router(), media_source, origin));
767 url::Origin(GURL(kOrigin))));
768 EXPECT_CALL(*cached_sinks_observer, 750 EXPECT_CALL(*cached_sinks_observer,
769 OnSinksReceived(SequenceEquals(expected_sinks))); 751 OnSinksReceived(SequenceEquals(expected_sinks)));
770 EXPECT_TRUE(cached_sinks_observer->Init()); 752 EXPECT_TRUE(cached_sinks_observer->Init());
771 753
772 // Different origin from cached result. Empty list will be returned. 754 // Different origin from cached result. Empty list will be returned.
773 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer2( 755 std::unique_ptr<MockMediaSinksObserver> cached_sinks_observer2(
774 new MockMediaSinksObserver(router(), media_source, 756 new MockMediaSinksObserver(router(), media_source,
775 url::Origin(GURL("https://youtube.com")))); 757 GURL("https://youtube.com")));
776 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty())); 758 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty()));
777 EXPECT_TRUE(cached_sinks_observer2->Init()); 759 EXPECT_TRUE(cached_sinks_observer2->Init());
778 760
779 base::RunLoop run_loop2; 761 base::RunLoop run_loop2;
780 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource)); 762 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource));
781 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource2)) 763 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaSinks(kSource2))
782 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); 764 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }));
783 sinks_observer.reset(); 765 sinks_observer.reset();
784 extra_sinks_observer.reset(); 766 extra_sinks_observer.reset();
785 unrelated_sinks_observer.reset(); 767 unrelated_sinks_observer.reset();
786 cached_sinks_observer.reset(); 768 cached_sinks_observer.reset();
787 cached_sinks_observer2.reset(); 769 cached_sinks_observer2.reset();
788 run_loop2.Run(); 770 run_loop2.Run();
789 } 771 }
790 772
791 TEST_F(MediaRouterMojoImplTest, 773 TEST_F(MediaRouterMojoImplTest,
792 RegisterMediaSinksObserverWithAvailabilityChange) { 774 RegisterMediaSinksObserverWithAvailabilityChange) {
775 GURL origin("https://google.com");
793 776
794 // When availability is UNAVAILABLE, no calls should be made to MRPM. 777 // When availability is UNAVAILABLE, no calls should be made to MRPM.
795 router()->OnSinkAvailabilityUpdated( 778 router()->OnSinkAvailabilityUpdated(
796 mojom::MediaRouter::SinkAvailability::UNAVAILABLE); 779 mojom::MediaRouter::SinkAvailability::UNAVAILABLE);
797 MediaSource media_source(kSource); 780 MediaSource media_source(kSource);
798 std::unique_ptr<MockMediaSinksObserver> sinks_observer( 781 std::unique_ptr<MockMediaSinksObserver> sinks_observer(
799 new MockMediaSinksObserver(router(), media_source, 782 new MockMediaSinksObserver(router(), media_source, origin));
800 url::Origin(GURL(kOrigin))));
801 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty())); 783 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty()));
802 EXPECT_TRUE(sinks_observer->Init()); 784 EXPECT_TRUE(sinks_observer->Init());
803 MediaSource media_source2(kSource2); 785 MediaSource media_source2(kSource2);
804 std::unique_ptr<MockMediaSinksObserver> sinks_observer2( 786 std::unique_ptr<MockMediaSinksObserver> sinks_observer2(
805 new MockMediaSinksObserver(router(), media_source2, 787 new MockMediaSinksObserver(router(), media_source2, origin));
806 url::Origin(GURL(kOrigin))));
807 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())); 788 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty()));
808 EXPECT_TRUE(sinks_observer2->Init()); 789 EXPECT_TRUE(sinks_observer2->Init());
809 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource)) 790 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource))
810 .Times(0); 791 .Times(0);
811 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2)) 792 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaSinks(kSource2))
812 .Times(0); 793 .Times(0);
813 ProcessEventLoop(); 794 ProcessEventLoop();
814 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); 795 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_));
815 796
816 // When availability transitions AVAILABLE, existing sink queries should be 797 // When availability transitions AVAILABLE, existing sink queries should be
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 EXPECT_CALL(mock_media_route_provider_, 1560 EXPECT_CALL(mock_media_route_provider_,
1580 UpdateMediaSinks(MediaSourceForDesktop().id())) 1561 UpdateMediaSinks(MediaSourceForDesktop().id()))
1581 .WillOnce(InvokeWithoutArgs([&run_loop2]() { 1562 .WillOnce(InvokeWithoutArgs([&run_loop2]() {
1582 run_loop2.Quit(); 1563 run_loop2.Quit();
1583 })); 1564 }));
1584 1565
1585 run_loop2.Run(); 1566 run_loop2.Run();
1586 } 1567 }
1587 1568
1588 } // namespace media_router 1569 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/media/router/mojo/media_router_mojo_impl.cc ('k') | chrome/browser/media/router/mojo/media_router_mojo_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698