| 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 "chrome/browser/ui/webui/media_router/media_router_ui.h" | 5 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 | 58 |
| 59 class MockRoutesUpdatedCallback { | 59 class MockRoutesUpdatedCallback { |
| 60 public: | 60 public: |
| 61 MOCK_METHOD2(OnRoutesUpdated, | 61 MOCK_METHOD2(OnRoutesUpdated, |
| 62 void(const std::vector<MediaRoute>& routes, | 62 void(const std::vector<MediaRoute>& routes, |
| 63 const std::vector<MediaRoute::Id>& joinable_route_ids)); | 63 const std::vector<MediaRoute::Id>& joinable_route_ids)); |
| 64 }; | 64 }; |
| 65 | 65 |
| 66 class MediaRouterUITest : public ChromeRenderViewHostTestHarness { | 66 class MediaRouterUITest : public ChromeRenderViewHostTestHarness { |
| 67 public: | 67 public: |
| 68 MediaRouterUITest() { |
| 69 ON_CALL(mock_router_, GetCurrentRoutes()) |
| 70 .WillByDefault(testing::ReturnRefOfCopy(std::vector<MediaRoute>())); |
| 71 } |
| 72 |
| 68 void TearDown() override { | 73 void TearDown() override { |
| 69 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)) | 74 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)) |
| 70 .Times(AnyNumber()); | 75 .Times(AnyNumber()); |
| 71 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)) | 76 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)) |
| 72 .Times(AnyNumber()); | 77 .Times(AnyNumber()); |
| 73 web_ui_contents_.reset(); | 78 web_ui_contents_.reset(); |
| 74 create_session_request_.reset(); | 79 create_session_request_.reset(); |
| 75 media_router_ui_.reset(); | 80 media_router_ui_.reset(); |
| 76 message_handler_.reset(); | 81 message_handler_.reset(); |
| 77 ChromeRenderViewHostTestHarness::TearDown(); | 82 ChromeRenderViewHostTestHarness::TearDown(); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 media_router_ui_->OnResultsUpdated(unsorted_sinks); | 277 media_router_ui_->OnResultsUpdated(unsorted_sinks); |
| 273 const auto& sorted_sinks = media_router_ui_->sinks_; | 278 const auto& sorted_sinks = media_router_ui_->sinks_; |
| 274 EXPECT_EQ(sink6.sink.id(), sorted_sinks[0].sink.id()); | 279 EXPECT_EQ(sink6.sink.id(), sorted_sinks[0].sink.id()); |
| 275 EXPECT_EQ(sink4.sink.id(), sorted_sinks[1].sink.id()); | 280 EXPECT_EQ(sink4.sink.id(), sorted_sinks[1].sink.id()); |
| 276 EXPECT_EQ(sink2.sink.id(), sorted_sinks[2].sink.id()); | 281 EXPECT_EQ(sink2.sink.id(), sorted_sinks[2].sink.id()); |
| 277 EXPECT_EQ(sink5.sink.id(), sorted_sinks[3].sink.id()); | 282 EXPECT_EQ(sink5.sink.id(), sorted_sinks[3].sink.id()); |
| 278 EXPECT_EQ(sink1.sink.id(), sorted_sinks[4].sink.id()); | 283 EXPECT_EQ(sink1.sink.id(), sorted_sinks[4].sink.id()); |
| 279 EXPECT_EQ(sink3.sink.id(), sorted_sinks[5].sink.id()); | 284 EXPECT_EQ(sink3.sink.id(), sorted_sinks[5].sink.id()); |
| 280 } | 285 } |
| 281 | 286 |
| 282 TEST_F(MediaRouterUITest, UIMediaRoutesObserverFiltersNonDisplayRoutes) { | 287 TEST_F(MediaRouterUITest, FilterNonDisplayRoutes) { |
| 283 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1); | 288 CreateMediaRouterUI(profile()); |
| 289 |
| 284 MediaSource media_source("mediaSource"); | 290 MediaSource media_source("mediaSource"); |
| 285 MockRoutesUpdatedCallback mock_callback; | |
| 286 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | |
| 287 new MediaRouterUI::UIMediaRoutesObserver( | |
| 288 &mock_router_, media_source.id(), | |
| 289 base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated, | |
| 290 base::Unretained(&mock_callback)))); | |
| 291 | |
| 292 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", | 291 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", |
| 293 true, "", true); | 292 true, "", true); |
| 294 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", | 293 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", |
| 295 true, "", false); | 294 true, "", false); |
| 296 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", | 295 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", |
| 297 true, "", true); | 296 true, "", true); |
| 298 std::vector<MediaRoute> routes; | 297 std::vector<MediaRoute> routes; |
| 299 routes.push_back(display_route_1); | 298 routes.push_back(display_route_1); |
| 300 routes.push_back(non_display_route_1); | 299 routes.push_back(non_display_route_1); |
| 301 routes.push_back(display_route_2); | 300 routes.push_back(display_route_2); |
| 302 | 301 |
| 303 std::vector<MediaRoute> filtered_routes; | 302 media_router_ui_->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 304 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)) | 303 ASSERT_EQ(2u, media_router_ui_->routes_.size()); |
| 305 .WillOnce(SaveArg<0>(&filtered_routes)); | 304 EXPECT_TRUE(display_route_1.Equals(media_router_ui_->routes_[0])); |
| 306 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 305 EXPECT_TRUE(media_router_ui_->routes_[0].for_display()); |
| 307 | 306 EXPECT_TRUE(display_route_2.Equals(media_router_ui_->routes_[1])); |
| 308 ASSERT_EQ(2u, filtered_routes.size()); | 307 EXPECT_TRUE(media_router_ui_->routes_[1].for_display()); |
| 309 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | |
| 310 EXPECT_TRUE(filtered_routes[0].for_display()); | |
| 311 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | |
| 312 EXPECT_TRUE(filtered_routes[1].for_display()); | |
| 313 | |
| 314 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); | |
| 315 observer.reset(); | |
| 316 } | 308 } |
| 317 | 309 |
| 318 TEST_F(MediaRouterUITest, | 310 TEST_F(MediaRouterUITest, FilterNonDisplayJoinableRoutes) { |
| 319 UIMediaRoutesObserverFiltersNonDisplayJoinableRoutes) { | 311 CreateMediaRouterUI(profile()); |
| 320 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1); | 312 |
| 321 MediaSource media_source("mediaSource"); | 313 MediaSource media_source("mediaSource"); |
| 322 MockRoutesUpdatedCallback mock_callback; | |
| 323 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | |
| 324 new MediaRouterUI::UIMediaRoutesObserver( | |
| 325 &mock_router_, media_source.id(), | |
| 326 base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated, | |
| 327 base::Unretained(&mock_callback)))); | |
| 328 | |
| 329 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", | 314 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", |
| 330 true, "", true); | 315 true, "", true); |
| 331 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", | 316 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", |
| 332 true, "", false); | 317 true, "", false); |
| 333 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", | 318 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", |
| 334 true, "", true); | 319 true, "", true); |
| 335 std::vector<MediaRoute> routes; | 320 std::vector<MediaRoute> routes; |
| 336 routes.push_back(display_route_1); | 321 routes.push_back(display_route_1); |
| 337 routes.push_back(non_display_route_1); | 322 routes.push_back(non_display_route_1); |
| 338 routes.push_back(display_route_2); | 323 routes.push_back(display_route_2); |
| 339 | 324 |
| 340 std::vector<MediaRoute::Id> joinable_route_ids; | 325 std::vector<MediaRoute::Id> joinable_route_ids; |
| 341 joinable_route_ids.push_back("routeId1"); | 326 joinable_route_ids.push_back("routeId1"); |
| 342 joinable_route_ids.push_back("routeId2"); | 327 joinable_route_ids.push_back("routeId2"); |
| 343 joinable_route_ids.push_back("routeId3"); | 328 joinable_route_ids.push_back("routeId3"); |
| 344 | 329 |
| 345 std::vector<MediaRoute::Id> filtered_joinable_route_ids; | 330 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids); |
| 346 // Save the filtered joinable routes. | 331 ASSERT_EQ(2u, media_router_ui_->joinable_route_ids_.size()); |
| 347 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)) | 332 EXPECT_EQ(display_route_1.media_route_id(), |
| 348 .WillOnce(SaveArg<1>(&filtered_joinable_route_ids)); | 333 media_router_ui_->joinable_route_ids_[0]); |
| 349 observer->OnRoutesUpdated(routes, joinable_route_ids); | 334 EXPECT_EQ(display_route_2.media_route_id(), |
| 350 | 335 media_router_ui_->joinable_route_ids_[1]); |
| 351 ASSERT_EQ(2u, filtered_joinable_route_ids.size()); | |
| 352 EXPECT_EQ(display_route_1.media_route_id(), filtered_joinable_route_ids[0]); | |
| 353 EXPECT_EQ(display_route_2.media_route_id(), filtered_joinable_route_ids[1]); | |
| 354 | |
| 355 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); | |
| 356 observer.reset(); | |
| 357 } | 336 } |
| 358 | 337 |
| 359 TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { | 338 TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { |
| 360 CreateMediaRouterUI(profile()); | 339 CreateMediaRouterUI(profile()); |
| 361 SessionID::id_type tab_id = SessionTabHelper::IdForTab(web_contents()); | 340 SessionID::id_type tab_id = SessionTabHelper::IdForTab(web_contents()); |
| 362 MediaSource media_source_1(MediaSourceForTab(tab_id)); | 341 MediaSource media_source_1(MediaSourceForTab(tab_id)); |
| 363 MediaSource media_source_2("mediaSource"); | 342 MediaSource media_source_2("mediaSource"); |
| 364 MediaSource media_source_3(MediaSourceForDesktop()); | 343 MediaSource media_source_3(MediaSourceForDesktop()); |
| 365 MockRoutesUpdatedCallback mock_callback; | 344 MockRoutesUpdatedCallback mock_callback; |
| 366 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | 345 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 382 | 361 |
| 383 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 362 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 384 | 363 |
| 385 const auto& filtered_routes = media_router_ui_->routes(); | 364 const auto& filtered_routes = media_router_ui_->routes(); |
| 386 ASSERT_EQ(2u, filtered_routes.size()); | 365 ASSERT_EQ(2u, filtered_routes.size()); |
| 387 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | 366 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); |
| 388 EXPECT_TRUE(filtered_routes[0].for_display()); | 367 EXPECT_TRUE(filtered_routes[0].for_display()); |
| 389 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | 368 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); |
| 390 EXPECT_TRUE(filtered_routes[1].for_display()); | 369 EXPECT_TRUE(filtered_routes[1].for_display()); |
| 391 | 370 |
| 392 const auto& current_cast_modes = media_router_ui_->current_cast_modes(); | 371 const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes(); |
| 393 ASSERT_EQ(2u, current_cast_modes.size()); | 372 ASSERT_EQ(2u, current_cast_modes.size()); |
| 394 auto cast_mode_entry = | 373 auto cast_mode_entry = |
| 395 current_cast_modes.find(display_route_1.media_route_id()); | 374 current_cast_modes.find(display_route_1.media_route_id()); |
| 396 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 375 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| 397 EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second); | 376 EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second); |
| 398 cast_mode_entry = | 377 cast_mode_entry = |
| 399 current_cast_modes.find(non_display_route_1.media_route_id()); | 378 current_cast_modes.find(non_display_route_1.media_route_id()); |
| 400 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 379 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 401 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); | 380 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); |
| 402 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 381 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 431 | 410 |
| 432 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 411 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 433 | 412 |
| 434 const auto& filtered_routes = media_router_ui_->routes(); | 413 const auto& filtered_routes = media_router_ui_->routes(); |
| 435 ASSERT_EQ(2u, filtered_routes.size()); | 414 ASSERT_EQ(2u, filtered_routes.size()); |
| 436 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | 415 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); |
| 437 EXPECT_TRUE(filtered_routes[0].for_display()); | 416 EXPECT_TRUE(filtered_routes[0].for_display()); |
| 438 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | 417 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); |
| 439 EXPECT_TRUE(filtered_routes[1].for_display()); | 418 EXPECT_TRUE(filtered_routes[1].for_display()); |
| 440 | 419 |
| 441 const auto& current_cast_modes = media_router_ui_->current_cast_modes(); | 420 const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes(); |
| 442 ASSERT_EQ(1u, current_cast_modes.size()); | 421 ASSERT_EQ(1u, current_cast_modes.size()); |
| 443 auto cast_mode_entry = | 422 auto cast_mode_entry = |
| 444 current_cast_modes.find(display_route_1.media_route_id()); | 423 current_cast_modes.find(display_route_1.media_route_id()); |
| 445 // No observer for source "mediaSource1" means no cast mode for this route. | 424 // No observer for source "mediaSource1" means no cast mode for this route. |
| 446 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 425 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 447 cast_mode_entry = | 426 cast_mode_entry = |
| 448 current_cast_modes.find(non_display_route_1.media_route_id()); | 427 current_cast_modes.find(non_display_route_1.media_route_id()); |
| 449 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 428 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 450 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); | 429 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); |
| 451 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 430 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 // Selecting desktop mirroring should not change the recorded preferences. | 585 // Selecting desktop mirroring should not change the recorded preferences. |
| 607 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); | 586 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
| 608 | 587 |
| 609 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); | 588 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); |
| 610 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); | 589 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
| 611 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); | 590 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); |
| 612 // Selecting desktop mirroring should not change the recorded preferences. | 591 // Selecting desktop mirroring should not change the recorded preferences. |
| 613 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); | 592 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
| 614 } | 593 } |
| 615 } // namespace media_router | 594 } // namespace media_router |
| OLD | NEW |