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

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

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

Powered by Google App Engine
This is Rietveld 408576698