| 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 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 namespace { | 51 namespace { |
| 52 | 52 |
| 53 const char kDescription[] = "description"; | 53 const char kDescription[] = "description"; |
| 54 const char kError[] = "error"; | 54 const char kError[] = "error"; |
| 55 const char kExtensionId[] = "extension1234"; | 55 const char kExtensionId[] = "extension1234"; |
| 56 const char kMessage[] = "message"; | 56 const char kMessage[] = "message"; |
| 57 const char kSource[] = "source1"; | 57 const char kSource[] = "source1"; |
| 58 const char kSource2[] = "source2"; | 58 const char kSource2[] = "source2"; |
| 59 const char kRouteId[] = "routeId"; | 59 const char kRouteId[] = "routeId"; |
| 60 const char kRouteId2[] = "routeId2"; | 60 const char kRouteId2[] = "routeId2"; |
| 61 const char kJoinableRouteId[] = "joinableRouteId"; |
| 62 const char kJoinableRouteId2[] = "joinableRouteId2"; |
| 61 const char kSinkId[] = "sink"; | 63 const char kSinkId[] = "sink"; |
| 62 const char kSinkId2[] = "sink2"; | 64 const char kSinkId2[] = "sink2"; |
| 63 const char kSinkName[] = "sinkName"; | 65 const char kSinkName[] = "sinkName"; |
| 64 const char kPresentationId[] = "presentationId"; | 66 const char kPresentationId[] = "presentationId"; |
| 65 const char kOrigin[] = "http://origin/"; | 67 const char kOrigin[] = "http://origin/"; |
| 66 const int kInvalidTabId = -1; | 68 const int kInvalidTabId = -1; |
| 67 const uint8_t kBinaryMessage[] = {0x01, 0x02, 0x03, 0x04}; | 69 const uint8_t kBinaryMessage[] = {0x01, 0x02, 0x03, 0x04}; |
| 68 | 70 |
| 69 bool ArePresentationSessionMessagesEqual( | 71 bool ArePresentationSessionMessagesEqual( |
| 70 const content::PresentationSessionMessage* expected, | 72 const content::PresentationSessionMessage* expected, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 DISALLOW_COPY_AND_ASSIGN(TestProcessManager); | 170 DISALLOW_COPY_AND_ASSIGN(TestProcessManager); |
| 169 }; | 171 }; |
| 170 | 172 |
| 171 // Mockable class for awaiting RegisterMediaRouteProvider callbacks. | 173 // Mockable class for awaiting RegisterMediaRouteProvider callbacks. |
| 172 class RegisterMediaRouteProviderHandler { | 174 class RegisterMediaRouteProviderHandler { |
| 173 public: | 175 public: |
| 174 MOCK_METHOD1(Invoke, void(const std::string& instance_id)); | 176 MOCK_METHOD1(Invoke, void(const std::string& instance_id)); |
| 175 }; | 177 }; |
| 176 | 178 |
| 177 TEST_F(MediaRouterMojoImplTest, CreateRoute) { | 179 TEST_F(MediaRouterMojoImplTest, CreateRoute) { |
| 178 MediaRoute expected_route(kRouteId, MediaSource(std::string(kSource)), | 180 MediaSource media_source(kSource); |
| 181 MediaRoute expected_route(kRouteId, media_source, |
| 179 kSinkId, "", false, "", false); | 182 kSinkId, "", false, "", false); |
| 180 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); | 183 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 181 route->media_source = kSource; | 184 route->media_source = kSource; |
| 182 route->media_sink_id = kSinkId; | 185 route->media_sink_id = kSinkId; |
| 183 route->media_route_id = kRouteId; | 186 route->media_route_id = kRouteId; |
| 184 route->description = kDescription; | 187 route->description = kDescription; |
| 185 route->is_local = true; | 188 route->is_local = true; |
| 186 route->for_display = true; | 189 route->for_display = true; |
| 187 | 190 |
| 188 // Use a lambda function as an invocation target here to work around | 191 // Use a lambda function as an invocation target here to work around |
| 189 // a limitation with GMock::Invoke that prevents it from using move-only types | 192 // a limitation with GMock::Invoke that prevents it from using move-only types |
| 190 // in runnable parameter lists. | 193 // in runnable parameter lists. |
| 191 EXPECT_CALL(mock_media_route_provider_, | 194 EXPECT_CALL(mock_media_route_provider_, |
| 192 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, | 195 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, |
| 193 mojo::String(kOrigin), kInvalidTabId, _)) | 196 mojo::String(kOrigin), kInvalidTabId, _)) |
| 194 .WillOnce(Invoke([&route]( | 197 .WillOnce(Invoke([&route]( |
| 195 const mojo::String& source, const mojo::String& sink, | 198 const mojo::String& source, const mojo::String& sink, |
| 196 const mojo::String& presentation_id, const mojo::String& origin, | 199 const mojo::String& presentation_id, const mojo::String& origin, |
| 197 int tab_id, | 200 int tab_id, |
| 198 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { | 201 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { |
| 199 cb.Run(std::move(route), mojo::String()); | 202 cb.Run(std::move(route), mojo::String()); |
| 200 })); | 203 })); |
| 201 | |
| 202 // MediaRouterMojoImpl will start observing local displayable routes as a | 204 // MediaRouterMojoImpl will start observing local displayable routes as a |
| 203 // result of having one created. | 205 // result of having one created. |
| 204 base::RunLoop run_loop; | 206 base::RunLoop run_loop; |
| 205 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaRoutes()) | 207 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaRoutes(_)) |
| 206 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 208 .WillOnce(Invoke([&run_loop](const mojo::String& source) { |
| 207 run_loop.Quit(); | 209 run_loop.Quit(); |
| 208 })); | 210 })); |
| 209 | 211 |
| 210 RouteResponseCallbackHandler handler; | 212 RouteResponseCallbackHandler handler; |
| 211 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), Not(""), "")); | 213 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), Not(""), "")); |
| 212 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 214 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 213 route_response_callbacks.push_back(base::Bind( | 215 route_response_callbacks.push_back(base::Bind( |
| 214 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 216 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 215 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, | 217 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, |
| 216 route_response_callbacks); | 218 route_response_callbacks); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 237 })); | 239 })); |
| 238 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 240 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 239 route_response_callbacks.push_back(base::Bind( | 241 route_response_callbacks.push_back(base::Bind( |
| 240 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 242 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 241 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, | 243 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, |
| 242 route_response_callbacks); | 244 route_response_callbacks); |
| 243 run_loop.Run(); | 245 run_loop.Run(); |
| 244 } | 246 } |
| 245 | 247 |
| 246 TEST_F(MediaRouterMojoImplTest, JoinRoute) { | 248 TEST_F(MediaRouterMojoImplTest, JoinRoute) { |
| 247 MediaRoute expected_route(kRouteId, MediaSource(std::string(kSource)), | 249 MediaSource media_source(kSource); |
| 250 MediaRoute expected_route(kRouteId, media_source, |
| 248 kSinkId, "", false, "", false); | 251 kSinkId, "", false, "", false); |
| 249 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); | 252 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 250 route->media_source = kSource; | 253 route->media_source = kSource; |
| 251 route->media_sink_id = kSinkId; | 254 route->media_sink_id = kSinkId; |
| 252 route->media_route_id = kRouteId; | 255 route->media_route_id = kRouteId; |
| 253 route->description = kDescription; | 256 route->description = kDescription; |
| 254 route->is_local = true; | 257 route->is_local = true; |
| 255 route->for_display = true; | 258 route->for_display = true; |
| 256 | 259 |
| 257 // Use a lambda function as an invocation target here to work around | 260 // Use a lambda function as an invocation target here to work around |
| 258 // a limitation with GMock::Invoke that prevents it from using move-only types | 261 // a limitation with GMock::Invoke that prevents it from using move-only types |
| 259 // in runnable parameter lists. | 262 // in runnable parameter lists. |
| 260 EXPECT_CALL(mock_media_route_provider_, | 263 EXPECT_CALL(mock_media_route_provider_, |
| 261 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), | 264 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), |
| 262 mojo::String(kOrigin), kInvalidTabId, _)) | 265 mojo::String(kOrigin), kInvalidTabId, _)) |
| 263 .WillOnce(Invoke([&route]( | 266 .WillOnce(Invoke([&route]( |
| 264 const mojo::String& source, const mojo::String& presentation_id, | 267 const mojo::String& source, const mojo::String& presentation_id, |
| 265 const mojo::String& origin, int tab_id, | 268 const mojo::String& origin, int tab_id, |
| 266 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { | 269 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { |
| 267 cb.Run(std::move(route), mojo::String()); | 270 cb.Run(std::move(route), mojo::String()); |
| 268 })); | 271 })); |
| 269 | 272 |
| 270 // MediaRouterMojoImpl will start observing local displayable routes as a | 273 // MediaRouterMojoImpl will start observing local displayable routes as a |
| 271 // result of having one created. | 274 // result of having one created. |
| 272 base::RunLoop run_loop; | 275 base::RunLoop run_loop; |
| 273 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaRoutes()) | 276 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaRoutes(_)) |
| 274 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 277 .WillOnce(Invoke([&run_loop](const mojo::String& source) { |
| 275 run_loop.Quit(); | 278 run_loop.Quit(); |
| 276 })); | 279 })); |
| 277 | 280 |
| 278 RouteResponseCallbackHandler handler; | 281 RouteResponseCallbackHandler handler; |
| 279 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), Not(""), "")); | 282 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), Not(""), "")); |
| 280 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 283 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 281 route_response_callbacks.push_back(base::Bind( | 284 route_response_callbacks.push_back(base::Bind( |
| 282 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 285 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 283 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, | 286 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, |
| 284 route_response_callbacks); | 287 route_response_callbacks); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 303 run_loop.Quit(); | 306 run_loop.Quit(); |
| 304 })); | 307 })); |
| 305 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 308 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 306 route_response_callbacks.push_back(base::Bind( | 309 route_response_callbacks.push_back(base::Bind( |
| 307 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 310 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 308 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, | 311 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, |
| 309 route_response_callbacks); | 312 route_response_callbacks); |
| 310 run_loop.Run(); | 313 run_loop.Run(); |
| 311 } | 314 } |
| 312 | 315 |
| 316 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteId) { |
| 317 MediaSource media_source(kSource); |
| 318 MediaRoute expected_route(kRouteId, media_source, |
| 319 kSinkId, "", false, "", false); |
| 320 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 321 route->media_source = kSource; |
| 322 route->media_sink_id = kSinkId; |
| 323 route->media_route_id = kRouteId; |
| 324 route->description = kDescription; |
| 325 route->is_local = true; |
| 326 route->for_display = true; |
| 327 |
| 328 // Use a lambda function as an invocation target here to work around |
| 329 // a limitation with GMock::Invoke that prevents it from using move-only types |
| 330 // in runnable parameter lists. |
| 331 EXPECT_CALL(mock_media_route_provider_, |
| 332 ConnectRouteByRouteId(mojo::String(kSource), |
| 333 mojo::String(kRouteId), _, |
| 334 mojo::String(kOrigin), kInvalidTabId, _)) |
| 335 .WillOnce(Invoke([&route]( |
| 336 const mojo::String& source, const mojo::String& route_id, |
| 337 const mojo::String& presentation_id, |
| 338 const mojo::String& origin, int tab_id, |
| 339 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { |
| 340 cb.Run(std::move(route), mojo::String()); |
| 341 })); |
| 342 EXPECT_CALL(mock_media_route_provider_, |
| 343 StartObservingMediaRoutes(mojo::String(""))); |
| 344 |
| 345 RouteResponseCallbackHandler handler; |
| 346 EXPECT_CALL(handler, Invoke(Pointee(Equals(expected_route)), Not(""), "")); |
| 347 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 348 route_response_callbacks.push_back(base::Bind( |
| 349 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 350 router()->ConnectRouteByRouteId(kSource, kRouteId, GURL(kOrigin), nullptr, |
| 351 route_response_callbacks); |
| 352 ProcessEventLoop(); |
| 353 } |
| 354 |
| 355 TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) { |
| 356 EXPECT_CALL(mock_media_route_provider_, |
| 357 ConnectRouteByRouteId(mojo::String(kSource), |
| 358 mojo::String(kRouteId), _, |
| 359 mojo::String(kOrigin), kInvalidTabId, _)) |
| 360 .WillOnce(Invoke( |
| 361 [](const mojo::String& source, |
| 362 const mojo::String& route_id, |
| 363 const mojo::String& presentation_id, |
| 364 const mojo::String& origin, int tab_id, |
| 365 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { |
| 366 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError)); |
| 367 })); |
| 368 |
| 369 RouteResponseCallbackHandler handler; |
| 370 EXPECT_CALL(handler, Invoke(nullptr, "", kError)); |
| 371 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 372 route_response_callbacks.push_back(base::Bind( |
| 373 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 374 router()->ConnectRouteByRouteId(kSource, kRouteId, GURL(kOrigin), nullptr, |
| 375 route_response_callbacks); |
| 376 ProcessEventLoop(); |
| 377 } |
| 378 |
| 313 TEST_F(MediaRouterMojoImplTest, DetachRoute) { | 379 TEST_F(MediaRouterMojoImplTest, DetachRoute) { |
| 314 base::RunLoop run_loop; | 380 base::RunLoop run_loop; |
| 315 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) | 381 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) |
| 316 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 382 .WillOnce(InvokeWithoutArgs([&run_loop]() { |
| 317 run_loop.Quit(); | 383 run_loop.Quit(); |
| 318 })); | 384 })); |
| 319 router()->DetachRoute(kRouteId); | 385 router()->DetachRoute(kRouteId); |
| 320 run_loop.Run(); | 386 run_loop.Run(); |
| 321 } | 387 } |
| 322 | 388 |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 EXPECT_CALL(mock_media_route_provider_, | 611 EXPECT_CALL(mock_media_route_provider_, |
| 546 StopObservingMediaSinks(mojo::String(kSource2))) | 612 StopObservingMediaSinks(mojo::String(kSource2))) |
| 547 .Times(1); | 613 .Times(1); |
| 548 sinks_observer.reset(); // Unregisters kSource from router(). | 614 sinks_observer.reset(); // Unregisters kSource from router(). |
| 549 sinks_observer2.reset(); // Unregisters kSource2 from router(). | 615 sinks_observer2.reset(); // Unregisters kSource2 from router(). |
| 550 ProcessEventLoop(); | 616 ProcessEventLoop(); |
| 551 } | 617 } |
| 552 | 618 |
| 553 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { | 619 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { |
| 554 MockMediaRouter mock_router; | 620 MockMediaRouter mock_router; |
| 555 EXPECT_CALL(mock_media_route_provider_, StartObservingMediaRoutes()).Times(2); | 621 MediaSource media_source(kSource); |
| 622 MediaSource different_media_source(kSource2); |
| 623 EXPECT_CALL(mock_media_route_provider_, |
| 624 StartObservingMediaRoutes(mojo::String(media_source.id()))).Times(2); |
| 625 EXPECT_CALL(mock_media_route_provider_, |
| 626 StartObservingMediaRoutes( |
| 627 mojo::String(different_media_source.id()))).Times(1); |
| 556 | 628 |
| 557 MediaRoutesObserver* observer_captured; | 629 MediaRoutesObserver* observer_captured; |
| 558 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_)) | 630 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_)) |
| 559 .Times(2) | 631 .Times(3) |
| 560 .WillRepeatedly(SaveArg<0>(&observer_captured)); | 632 .WillRepeatedly(SaveArg<0>(&observer_captured)); |
| 561 MockMediaRoutesObserver routes_observer(&mock_router); | 633 MockMediaRoutesObserver routes_observer(&mock_router, media_source.id()); |
| 562 EXPECT_EQ(observer_captured, &routes_observer); | 634 EXPECT_EQ(observer_captured, &routes_observer); |
| 563 MockMediaRoutesObserver extra_routes_observer(&mock_router); | 635 MockMediaRoutesObserver extra_routes_observer(&mock_router, |
| 636 media_source.id()); |
| 564 EXPECT_EQ(observer_captured, &extra_routes_observer); | 637 EXPECT_EQ(observer_captured, &extra_routes_observer); |
| 638 MockMediaRoutesObserver different_routes_observer(&mock_router, |
| 639 different_media_source.id()); |
| 640 EXPECT_EQ(observer_captured, &different_routes_observer); |
| 565 router()->RegisterMediaRoutesObserver(&routes_observer); | 641 router()->RegisterMediaRoutesObserver(&routes_observer); |
| 566 router()->RegisterMediaRoutesObserver(&extra_routes_observer); | 642 router()->RegisterMediaRoutesObserver(&extra_routes_observer); |
| 643 router()->RegisterMediaRoutesObserver(&different_routes_observer); |
| 567 | 644 |
| 568 std::vector<MediaRoute> expected_routes; | 645 std::vector<MediaRoute> expected_routes; |
| 569 expected_routes.push_back(MediaRoute(kRouteId, MediaSource(kSource), kSinkId, | 646 expected_routes.push_back(MediaRoute(kRouteId, media_source, kSinkId, |
| 570 kDescription, false, "", false)); | 647 kDescription, false, "", false)); |
| 571 expected_routes.push_back(MediaRoute(kRouteId2, MediaSource(kSource), kSinkId, | 648 expected_routes.push_back(MediaRoute(kRouteId2, media_source, kSinkId, |
| 572 kDescription, false, "", false)); | 649 kDescription, false, "", false)); |
| 650 std::vector<MediaRoute::Id> expected_joinable_route_ids; |
| 651 expected_joinable_route_ids.push_back(kJoinableRouteId); |
| 652 expected_joinable_route_ids.push_back(kJoinableRouteId2); |
| 653 |
| 654 mojo::Array<mojo::String> mojo_joinable_routes(2); |
| 655 mojo_joinable_routes[0] = kJoinableRouteId; |
| 656 mojo_joinable_routes[1] = kJoinableRouteId2; |
| 573 | 657 |
| 574 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(2); | 658 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(2); |
| 575 mojo_routes[0] = interfaces::MediaRoute::New(); | 659 mojo_routes[0] = interfaces::MediaRoute::New(); |
| 576 mojo_routes[0]->media_route_id = kRouteId; | 660 mojo_routes[0]->media_route_id = kRouteId; |
| 577 mojo_routes[0]->media_source = kSource; | 661 mojo_routes[0]->media_source = kSource; |
| 578 mojo_routes[0]->media_sink_id = kSinkId; | 662 mojo_routes[0]->media_sink_id = kSinkId; |
| 579 mojo_routes[0]->description = kDescription; | 663 mojo_routes[0]->description = kDescription; |
| 580 mojo_routes[0]->is_local = false; | 664 mojo_routes[0]->is_local = false; |
| 581 mojo_routes[1] = interfaces::MediaRoute::New(); | 665 mojo_routes[1] = interfaces::MediaRoute::New(); |
| 582 mojo_routes[1]->media_route_id = kRouteId2; | 666 mojo_routes[1]->media_route_id = kRouteId2; |
| 583 mojo_routes[1]->media_source = kSource; | 667 mojo_routes[1]->media_source = kSource; |
| 584 mojo_routes[1]->media_sink_id = kSinkId; | 668 mojo_routes[1]->media_sink_id = kSinkId; |
| 585 mojo_routes[1]->description = kDescription; | 669 mojo_routes[1]->description = kDescription; |
| 586 mojo_routes[1]->is_local = false; | 670 mojo_routes[1]->is_local = false; |
| 587 | 671 |
| 588 EXPECT_CALL(routes_observer, | 672 EXPECT_CALL(routes_observer, |
| 589 OnRoutesUpdated(SequenceEquals(expected_routes))); | 673 OnRoutesUpdated(SequenceEquals(expected_routes), |
| 674 expected_joinable_route_ids)); |
| 590 EXPECT_CALL(extra_routes_observer, | 675 EXPECT_CALL(extra_routes_observer, |
| 591 OnRoutesUpdated(SequenceEquals(expected_routes))); | 676 OnRoutesUpdated(SequenceEquals(expected_routes), |
| 592 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes)); | 677 expected_joinable_route_ids)); |
| 678 EXPECT_CALL(different_routes_observer, |
| 679 OnRoutesUpdated(SequenceEquals(expected_routes), |
| 680 expected_joinable_route_ids)).Times(0); |
| 681 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes), |
| 682 media_source.id(), |
| 683 std::move(mojo_joinable_routes)); |
| 593 ProcessEventLoop(); | 684 ProcessEventLoop(); |
| 594 | 685 |
| 595 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); | 686 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); |
| 596 EXPECT_CALL(mock_router, | 687 EXPECT_CALL(mock_router, |
| 597 UnregisterMediaRoutesObserver(&extra_routes_observer)); | 688 UnregisterMediaRoutesObserver(&extra_routes_observer)); |
| 689 EXPECT_CALL(mock_router, |
| 690 UnregisterMediaRoutesObserver(&different_routes_observer)); |
| 598 router()->UnregisterMediaRoutesObserver(&routes_observer); | 691 router()->UnregisterMediaRoutesObserver(&routes_observer); |
| 599 router()->UnregisterMediaRoutesObserver(&extra_routes_observer); | 692 router()->UnregisterMediaRoutesObserver(&extra_routes_observer); |
| 600 EXPECT_CALL(mock_media_route_provider_, StopObservingMediaRoutes()); | 693 router()->UnregisterMediaRoutesObserver(&different_routes_observer); |
| 694 EXPECT_CALL(mock_media_route_provider_, |
| 695 StopObservingMediaRoutes( |
| 696 mojo::String(media_source.id()))).Times(1); |
| 697 EXPECT_CALL(mock_media_route_provider_, |
| 698 StopObservingMediaRoutes( |
| 699 mojo::String(different_media_source.id()))); |
| 601 ProcessEventLoop(); | 700 ProcessEventLoop(); |
| 602 } | 701 } |
| 603 | 702 |
| 604 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { | 703 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { |
| 605 EXPECT_CALL( | 704 EXPECT_CALL( |
| 606 mock_media_route_provider_, | 705 mock_media_route_provider_, |
| 607 SendRouteMessage(mojo::String(kRouteId), mojo::String(kMessage), _)) | 706 SendRouteMessage(mojo::String(kRouteId), mojo::String(kMessage), _)) |
| 608 .WillOnce(Invoke([]( | 707 .WillOnce(Invoke([]( |
| 609 const MediaRoute::Id& route_id, const std::string& message, | 708 const MediaRoute::Id& route_id, const std::string& message, |
| 610 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { | 709 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1189 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { | 1288 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { |
| 1190 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) | 1289 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) |
| 1191 run_loop2.Quit(); | 1290 run_loop2.Quit(); |
| 1192 })); | 1291 })); |
| 1193 RegisterMediaRouteProvider(); | 1292 RegisterMediaRouteProvider(); |
| 1194 run_loop.Run(); | 1293 run_loop.Run(); |
| 1195 run_loop2.Run(); | 1294 run_loop2.Run(); |
| 1196 } | 1295 } |
| 1197 | 1296 |
| 1198 } // namespace media_router | 1297 } // namespace media_router |
| OLD | NEW |