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