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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 content::PresentationError expected_error_; | 56 content::PresentationError expected_error_; |
| 57 }; | 57 }; |
| 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 MockMediaRouterWebUIMessageHandler | |
| 67 : public MediaRouterWebUIMessageHandler { | |
| 68 public: | |
| 69 explicit MockMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui) | |
| 70 : MediaRouterWebUIMessageHandler(media_router_ui) {} | |
| 71 ~MockMediaRouterWebUIMessageHandler() override {} | |
| 72 | |
| 73 MOCK_METHOD3(UpdateRoutes, | |
| 74 void(const std::vector<MediaRoute>& routes, | |
| 75 const std::vector<MediaRoute::Id>& joinable_route_ids, | |
| 76 const std::unordered_map<MediaRoute::Id, MediaCastMode>& | |
| 77 current_cast_modes)); | |
| 78 }; | |
| 79 | |
| 66 class MediaRouterUITest : public ::testing::Test { | 80 class MediaRouterUITest : public ::testing::Test { |
| 67 public: | 81 public: |
| 68 ~MediaRouterUITest() override { | 82 ~MediaRouterUITest() override { |
| 69 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)) | 83 EXPECT_CALL(mock_router_, UnregisterMediaSinksObserver(_)) |
| 70 .Times(AnyNumber()); | 84 .Times(AnyNumber()); |
| 71 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)) | 85 EXPECT_CALL(mock_router_, UnregisterMediaRoutesObserver(_)) |
| 72 .Times(AnyNumber()); | 86 .Times(AnyNumber()); |
| 73 } | 87 } |
| 74 | 88 |
| 75 void CreateMediaRouterUI(Profile* profile) { | 89 void CreateMediaRouterUI(Profile* profile) { |
| 76 initiator_.reset(content::WebContents::Create( | 90 initiator_.reset(content::WebContents::Create( |
| 77 content::WebContents::CreateParams(profile))); | 91 content::WebContents::CreateParams(profile))); |
| 78 SessionTabHelper::CreateForWebContents(initiator_.get()); | 92 SessionTabHelper::CreateForWebContents(initiator_.get()); |
| 79 web_contents_.reset(content::WebContents::Create( | 93 web_contents_.reset(content::WebContents::Create( |
| 80 content::WebContents::CreateParams(profile))); | 94 content::WebContents::CreateParams(profile))); |
| 81 web_ui_.set_web_contents(web_contents_.get()); | 95 web_ui_.set_web_contents(web_contents_.get()); |
| 82 media_router_ui_.reset(new MediaRouterUI(&web_ui_)); | 96 media_router_ui_ = base::MakeUnique<MediaRouterUI>(&web_ui_); |
| 83 message_handler_.reset( | 97 message_handler_ = base::MakeUnique<MockMediaRouterWebUIMessageHandler>( |
| 84 new MediaRouterWebUIMessageHandler(media_router_ui_.get())); | 98 media_router_ui_.get()); |
| 85 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) | 99 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) |
| 86 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { | 100 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { |
| 87 this->media_sinks_observers_.push_back(observer); | 101 this->media_sinks_observers_.push_back(observer); |
| 88 return true; | 102 return true; |
| 89 })); | 103 })); |
| 90 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) | 104 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) |
| 91 .Times(AnyNumber()); | 105 .Times(AnyNumber()); |
| 92 media_router_ui_->InitForTest(&mock_router_, initiator_.get(), | 106 media_router_ui_->InitForTest(&mock_router_, initiator_.get(), |
| 93 message_handler_.get(), | 107 message_handler_.get(), |
| 94 std::move(create_session_request_)); | 108 std::move(create_session_request_)); |
| 95 message_handler_->SetWebUIForTest(&web_ui_); | 109 message_handler_->SetWebUIForTest(&web_ui_); |
| 96 } | 110 } |
| 97 | 111 |
| 98 MediaSink CreateSinkCompatibleWithAllSources() { | 112 MediaSink CreateSinkCompatibleWithAllSources() { |
| 99 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC); | 113 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC); |
| 100 for (auto* observer : media_sinks_observers_) | 114 for (auto* observer : media_sinks_observers_) |
| 101 observer->OnSinksUpdated({sink}, std::vector<GURL>()); | 115 observer->OnSinksUpdated({sink}, std::vector<GURL>()); |
| 102 return sink; | 116 return sink; |
| 103 } | 117 } |
| 104 | 118 |
| 105 protected: | 119 protected: |
| 106 MockMediaRouter mock_router_; | 120 MockMediaRouter mock_router_; |
| 107 content::TestBrowserThreadBundle thread_bundle_; | 121 content::TestBrowserThreadBundle thread_bundle_; |
| 108 TestingProfile profile_; | 122 TestingProfile profile_; |
| 109 std::unique_ptr<content::WebContents> initiator_; | 123 std::unique_ptr<content::WebContents> initiator_; |
| 110 content::TestWebUI web_ui_; | 124 content::TestWebUI web_ui_; |
| 111 std::unique_ptr<content::WebContents> web_contents_; | 125 std::unique_ptr<content::WebContents> web_contents_; |
| 112 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; | 126 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; |
| 113 std::unique_ptr<MediaRouterUI> media_router_ui_; | 127 std::unique_ptr<MediaRouterUI> media_router_ui_; |
| 114 std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; | 128 std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_; |
| 115 std::vector<MediaSinksObserver*> media_sinks_observers_; | 129 std::vector<MediaSinksObserver*> media_sinks_observers_; |
| 116 }; | 130 }; |
| 117 | 131 |
| 118 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { | 132 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { |
| 119 CreateMediaRouterUI(&profile_); | 133 CreateMediaRouterUI(&profile_); |
| 120 std::vector<MediaRouteResponseCallback> callbacks; | 134 std::vector<MediaRouteResponseCallback> callbacks; |
| 121 EXPECT_CALL( | 135 EXPECT_CALL( |
| 122 mock_router_, | 136 mock_router_, |
| 123 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false)) | 137 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false)) |
| 124 .WillOnce(SaveArg<4>(&callbacks)); | 138 .WillOnce(SaveArg<4>(&callbacks)); |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 553 MediaSourceForPresentationUrl(presentation_url).id(); | 567 MediaSourceForPresentationUrl(presentation_url).id(); |
| 554 for (auto* observer : media_sinks_observers_) { | 568 for (auto* observer : media_sinks_observers_) { |
| 555 if (observer->source().id() == presentation_source_id) { | 569 if (observer->source().id() == presentation_source_id) { |
| 556 observer->OnSinksUpdated(sinks, origins); | 570 observer->OnSinksUpdated(sinks, origins); |
| 557 } | 571 } |
| 558 } | 572 } |
| 559 // Destroying the UI should return the expected error from above to the error | 573 // Destroying the UI should return the expected error from above to the error |
| 560 // callback. | 574 // callback. |
| 561 media_router_ui_.reset(); | 575 media_router_ui_.reset(); |
| 562 } | 576 } |
| 577 | |
| 578 TEST_F(MediaRouterUITest, UpdateRoutesOnUIInitialized) { | |
| 579 std::vector<MediaRoute> routes; | |
| 580 std::vector<MediaRoute::Id> joinable_route_ids1; | |
| 581 std::vector<MediaRoute::Id> joinable_route_ids2; | |
| 582 routes.push_back(MediaRoute("routeId1", MediaSource("sourceId"), "sinkId1", | |
| 583 "desc 1", true, "", true)); | |
| 584 routes.push_back(MediaRoute("routeId2", MediaSource("sourceId"), "sinkId2", | |
| 585 "desc 2", true, "", false)); | |
| 586 joinable_route_ids1.push_back("routeId1"); | |
| 587 | |
| 588 // If UIInitialized() is called before OnRoutesUpdated() is called for the | |
| 589 // first time, then UpdateRoutes() should be called from OnRoutesUpdated(). | |
| 590 CreateMediaRouterUI(&profile_); | |
| 591 EXPECT_CALL(*message_handler_.get(), UpdateRoutes(_, _, _)).Times(0); | |
| 592 media_router_ui_->UIInitialized(); | |
| 593 EXPECT_CALL(*message_handler_.get(), | |
| 594 UpdateRoutes(SequenceEquals(routes), joinable_route_ids1, _)) | |
| 595 .Times(1); | |
| 596 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids1); | |
| 597 // Subsequent OnRoutesUpdated() calls should call UpdateRoutes(). | |
| 598 EXPECT_CALL(*message_handler_.get(), | |
| 599 UpdateRoutes(SequenceEquals(routes), joinable_route_ids2, _)) | |
| 600 .Times(1); | |
| 601 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids2); | |
| 602 | |
| 603 // If UIInitialized() is called after OnRoutesUpdated() is called for the | |
| 604 // first time, then UpdateRoutes() should be called from UIInitialized(). | |
| 605 CreateMediaRouterUI(&profile_); | |
|
mark a. foltz
2016/11/29 22:24:10
Nit: Calling this twice in the same test re-uses t
| |
| 606 EXPECT_CALL(*message_handler_.get(), UpdateRoutes(_, _, _)).Times(0); | |
| 607 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids1); | |
| 608 EXPECT_CALL(*message_handler_.get(), | |
| 609 UpdateRoutes(SequenceEquals(routes), joinable_route_ids1, _)) | |
| 610 .Times(1); | |
| 611 media_router_ui_->UIInitialized(); | |
| 612 // Subsequent OnRoutesUpdated() calls should call UpdateRoutes(). | |
| 613 EXPECT_CALL(*message_handler_.get(), | |
| 614 UpdateRoutes(SequenceEquals(routes), joinable_route_ids2, _)) | |
| 615 .Times(1); | |
| 616 media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids2); | |
| 617 } | |
| 563 } // namespace media_router | 618 } // namespace media_router |
| OLD | NEW |