Chromium Code Reviews| 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 ::testing::Test { | 66 class MediaRouterUITest : public ::testing::Test { |
| 67 public: | 67 public: |
| 68 MediaRouterUITest() { | |
| 69 ON_CALL(mock_router_, GetCurrentRoutes()) | |
| 70 .WillByDefault(Return(std::vector<MediaRoute>())); | |
| 71 } | |
| 72 | |
| 68 ~MediaRouterUITest() override { | 73 ~MediaRouterUITest() 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 } | 78 } |
| 74 | 79 |
| 75 void CreateMediaRouterUI(Profile* profile) { | 80 void CreateMediaRouterUI(Profile* profile) { |
| 76 initiator_.reset(content::WebContents::Create( | 81 initiator_.reset(content::WebContents::Create( |
| 77 content::WebContents::CreateParams(profile))); | 82 content::WebContents::CreateParams(profile))); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 media_router_ui_->OnResultsUpdated(unsorted_sinks); | 269 media_router_ui_->OnResultsUpdated(unsorted_sinks); |
| 265 const auto& sorted_sinks = media_router_ui_->sinks_; | 270 const auto& sorted_sinks = media_router_ui_->sinks_; |
| 266 EXPECT_EQ(sink6.sink.id(), sorted_sinks[0].sink.id()); | 271 EXPECT_EQ(sink6.sink.id(), sorted_sinks[0].sink.id()); |
| 267 EXPECT_EQ(sink4.sink.id(), sorted_sinks[1].sink.id()); | 272 EXPECT_EQ(sink4.sink.id(), sorted_sinks[1].sink.id()); |
| 268 EXPECT_EQ(sink2.sink.id(), sorted_sinks[2].sink.id()); | 273 EXPECT_EQ(sink2.sink.id(), sorted_sinks[2].sink.id()); |
| 269 EXPECT_EQ(sink5.sink.id(), sorted_sinks[3].sink.id()); | 274 EXPECT_EQ(sink5.sink.id(), sorted_sinks[3].sink.id()); |
| 270 EXPECT_EQ(sink1.sink.id(), sorted_sinks[4].sink.id()); | 275 EXPECT_EQ(sink1.sink.id(), sorted_sinks[4].sink.id()); |
| 271 EXPECT_EQ(sink3.sink.id(), sorted_sinks[5].sink.id()); | 276 EXPECT_EQ(sink3.sink.id(), sorted_sinks[5].sink.id()); |
| 272 } | 277 } |
| 273 | 278 |
| 274 TEST_F(MediaRouterUITest, UIMediaRoutesObserverFiltersNonDisplayRoutes) { | 279 TEST_F(MediaRouterUITest, FilterNonDisplayRoutes) { |
| 275 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1); | 280 CreateMediaRouterUI(profile()); |
|
tapted
2016/12/08 05:09:23
This is causing a compile failure on go/betabuilde
| |
| 281 | |
| 276 MediaSource media_source("mediaSource"); | 282 MediaSource media_source("mediaSource"); |
| 277 MockRoutesUpdatedCallback mock_callback; | |
| 278 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | |
| 279 new MediaRouterUI::UIMediaRoutesObserver( | |
| 280 &mock_router_, media_source.id(), | |
| 281 base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated, | |
| 282 base::Unretained(&mock_callback)))); | |
| 283 | |
| 284 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", | 283 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", |
| 285 true, "", true); | 284 true, "", true); |
| 286 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", | 285 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", |
| 287 true, "", false); | 286 true, "", false); |
| 288 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", | 287 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", |
| 289 true, "", true); | 288 true, "", true); |
| 290 std::vector<MediaRoute> routes; | 289 std::vector<MediaRoute> routes; |
| 291 routes.push_back(display_route_1); | 290 routes.push_back(display_route_1); |
| 292 routes.push_back(non_display_route_1); | 291 routes.push_back(non_display_route_1); |
| 293 routes.push_back(display_route_2); | 292 routes.push_back(display_route_2); |
| 294 | 293 |
| 295 std::vector<MediaRoute> filtered_routes; | 294 media_router_ui_->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 296 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)) | 295 ASSERT_EQ(2u, media_router_ui_->routes_.size()); |
| 297 .WillOnce(SaveArg<0>(&filtered_routes)); | 296 EXPECT_TRUE(display_route_1.Equals(media_router_ui_->routes_[0])); |
| 298 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 297 EXPECT_TRUE(media_router_ui_->routes_[0].for_display()); |
| 299 | 298 EXPECT_TRUE(display_route_2.Equals(media_router_ui_->routes_[1])); |
| 300 ASSERT_EQ(2u, filtered_routes.size()); | 299 EXPECT_TRUE(media_router_ui_->routes_[1].for_display()); |
| 301 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | |
| 302 EXPECT_TRUE(filtered_routes[0].for_display()); | |
| 303 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | |
| 304 EXPECT_TRUE(filtered_routes[1].for_display()); | |
| 305 | |
| 306 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); | |
| 307 observer.reset(); | |
| 308 } | 300 } |
| 309 | 301 |
| 310 TEST_F(MediaRouterUITest, | 302 TEST_F(MediaRouterUITest, FilterNonDisplayJoinableRoutes) { |
| 311 UIMediaRoutesObserverFiltersNonDisplayJoinableRoutes) { | 303 CreateMediaRouterUI(profile()); |
| 312 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)).Times(1); | 304 |
| 313 MediaSource media_source("mediaSource"); | 305 MediaSource media_source("mediaSource"); |
| 314 MockRoutesUpdatedCallback mock_callback; | |
| 315 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | |
| 316 new MediaRouterUI::UIMediaRoutesObserver( | |
| 317 &mock_router_, media_source.id(), | |
| 318 base::Bind(&MockRoutesUpdatedCallback::OnRoutesUpdated, | |
| 319 base::Unretained(&mock_callback)))); | |
| 320 | |
| 321 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", | 306 MediaRoute display_route_1("routeId1", media_source, "sinkId1", "desc 1", |
| 322 true, "", true); | 307 true, "", true); |
| 323 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", | 308 MediaRoute non_display_route_1("routeId2", media_source, "sinkId2", "desc 2", |
| 324 true, "", false); | 309 true, "", false); |
| 325 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", | 310 MediaRoute display_route_2("routeId3", media_source, "sinkId2", "desc 2", |
| 326 true, "", true); | 311 true, "", true); |
| 327 std::vector<MediaRoute> routes; | 312 std::vector<MediaRoute> routes; |
| 328 routes.push_back(display_route_1); | 313 routes.push_back(display_route_1); |
| 329 routes.push_back(non_display_route_1); | 314 routes.push_back(non_display_route_1); |
| 330 routes.push_back(display_route_2); | 315 routes.push_back(display_route_2); |
| 331 | 316 |
| 332 std::vector<MediaRoute::Id> joinable_route_ids; | 317 std::vector<MediaRoute::Id> joinable_route_ids; |
| 333 joinable_route_ids.push_back("routeId1"); | 318 joinable_route_ids.push_back("routeId1"); |
| 334 joinable_route_ids.push_back("routeId2"); | 319 joinable_route_ids.push_back("routeId2"); |
| 335 joinable_route_ids.push_back("routeId3"); | 320 joinable_route_ids.push_back("routeId3"); |
| 336 | 321 |
| 337 std::vector<MediaRoute::Id> filtered_joinable_route_ids; | 322 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids); |
| 338 // Save the filtered joinable routes. | 323 ASSERT_EQ(2u, media_router_ui_->joinable_route_ids_.size()); |
| 339 EXPECT_CALL(mock_callback, OnRoutesUpdated(_, _)) | 324 EXPECT_EQ(display_route_1.media_route_id(), |
| 340 .WillOnce(SaveArg<1>(&filtered_joinable_route_ids)); | 325 media_router_ui_->joinable_route_ids_[0]); |
| 341 observer->OnRoutesUpdated(routes, joinable_route_ids); | 326 EXPECT_EQ(display_route_2.media_route_id(), |
| 342 | 327 media_router_ui_->joinable_route_ids_[1]); |
| 343 ASSERT_EQ(2u, filtered_joinable_route_ids.size()); | |
| 344 EXPECT_EQ(display_route_1.media_route_id(), filtered_joinable_route_ids[0]); | |
| 345 EXPECT_EQ(display_route_2.media_route_id(), filtered_joinable_route_ids[1]); | |
| 346 | |
| 347 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)).Times(1); | |
| 348 observer.reset(); | |
| 349 } | 328 } |
| 350 | 329 |
| 351 TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { | 330 TEST_F(MediaRouterUITest, UIMediaRoutesObserverAssignsCurrentCastModes) { |
| 352 CreateMediaRouterUI(&profile_); | 331 CreateMediaRouterUI(&profile_); |
| 353 SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator_.get()); | 332 SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator_.get()); |
| 354 MediaSource media_source_1(MediaSourceForTab(tab_id)); | 333 MediaSource media_source_1(MediaSourceForTab(tab_id)); |
| 355 MediaSource media_source_2("mediaSource"); | 334 MediaSource media_source_2("mediaSource"); |
| 356 MediaSource media_source_3(MediaSourceForDesktop()); | 335 MediaSource media_source_3(MediaSourceForDesktop()); |
| 357 MockRoutesUpdatedCallback mock_callback; | 336 MockRoutesUpdatedCallback mock_callback; |
| 358 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( | 337 std::unique_ptr<MediaRouterUI::UIMediaRoutesObserver> observer( |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 374 | 353 |
| 375 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 354 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 376 | 355 |
| 377 const auto& filtered_routes = media_router_ui_->routes(); | 356 const auto& filtered_routes = media_router_ui_->routes(); |
| 378 ASSERT_EQ(2u, filtered_routes.size()); | 357 ASSERT_EQ(2u, filtered_routes.size()); |
| 379 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | 358 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); |
| 380 EXPECT_TRUE(filtered_routes[0].for_display()); | 359 EXPECT_TRUE(filtered_routes[0].for_display()); |
| 381 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | 360 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); |
| 382 EXPECT_TRUE(filtered_routes[1].for_display()); | 361 EXPECT_TRUE(filtered_routes[1].for_display()); |
| 383 | 362 |
| 384 const auto& current_cast_modes = media_router_ui_->current_cast_modes(); | 363 const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes(); |
| 385 ASSERT_EQ(2u, current_cast_modes.size()); | 364 ASSERT_EQ(2u, current_cast_modes.size()); |
| 386 auto cast_mode_entry = | 365 auto cast_mode_entry = |
| 387 current_cast_modes.find(display_route_1.media_route_id()); | 366 current_cast_modes.find(display_route_1.media_route_id()); |
| 388 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 367 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| 389 EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second); | 368 EXPECT_EQ(MediaCastMode::TAB_MIRROR, cast_mode_entry->second); |
| 390 cast_mode_entry = | 369 cast_mode_entry = |
| 391 current_cast_modes.find(non_display_route_1.media_route_id()); | 370 current_cast_modes.find(non_display_route_1.media_route_id()); |
| 392 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 371 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 393 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); | 372 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); |
| 394 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 373 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 423 | 402 |
| 424 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); | 403 observer->OnRoutesUpdated(routes, std::vector<MediaRoute::Id>()); |
| 425 | 404 |
| 426 const auto& filtered_routes = media_router_ui_->routes(); | 405 const auto& filtered_routes = media_router_ui_->routes(); |
| 427 ASSERT_EQ(2u, filtered_routes.size()); | 406 ASSERT_EQ(2u, filtered_routes.size()); |
| 428 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); | 407 EXPECT_TRUE(display_route_1.Equals(filtered_routes[0])); |
| 429 EXPECT_TRUE(filtered_routes[0].for_display()); | 408 EXPECT_TRUE(filtered_routes[0].for_display()); |
| 430 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); | 409 EXPECT_TRUE(display_route_2.Equals(filtered_routes[1])); |
| 431 EXPECT_TRUE(filtered_routes[1].for_display()); | 410 EXPECT_TRUE(filtered_routes[1].for_display()); |
| 432 | 411 |
| 433 const auto& current_cast_modes = media_router_ui_->current_cast_modes(); | 412 const auto& current_cast_modes = media_router_ui_->routes_and_cast_modes(); |
| 434 ASSERT_EQ(1u, current_cast_modes.size()); | 413 ASSERT_EQ(1u, current_cast_modes.size()); |
| 435 auto cast_mode_entry = | 414 auto cast_mode_entry = |
| 436 current_cast_modes.find(display_route_1.media_route_id()); | 415 current_cast_modes.find(display_route_1.media_route_id()); |
| 437 // No observer for source "mediaSource1" means no cast mode for this route. | 416 // No observer for source "mediaSource1" means no cast mode for this route. |
| 438 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 417 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 439 cast_mode_entry = | 418 cast_mode_entry = |
| 440 current_cast_modes.find(non_display_route_1.media_route_id()); | 419 current_cast_modes.find(non_display_route_1.media_route_id()); |
| 441 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); | 420 EXPECT_EQ(end(current_cast_modes), cast_mode_entry); |
| 442 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); | 421 cast_mode_entry = current_cast_modes.find(display_route_2.media_route_id()); |
| 443 EXPECT_NE(end(current_cast_modes), cast_mode_entry); | 422 EXPECT_NE(end(current_cast_modes), cast_mode_entry); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 554 for (auto* observer : media_sinks_observers_) { | 533 for (auto* observer : media_sinks_observers_) { |
| 555 if (observer->source().id() == presentation_source_id) { | 534 if (observer->source().id() == presentation_source_id) { |
| 556 observer->OnSinksUpdated(sinks, origins); | 535 observer->OnSinksUpdated(sinks, origins); |
| 557 } | 536 } |
| 558 } | 537 } |
| 559 // Destroying the UI should return the expected error from above to the error | 538 // Destroying the UI should return the expected error from above to the error |
| 560 // callback. | 539 // callback. |
| 561 media_router_ui_.reset(); | 540 media_router_ui_.reset(); |
| 562 } | 541 } |
| 563 } // namespace media_router | 542 } // namespace media_router |
| OLD | NEW |