Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc

Issue 2859953002: Reland [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: Fix test failures Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/media/router/create_presentation_connection_request.h" 12 #include "chrome/browser/media/router/create_presentation_connection_request.h"
13 #include "chrome/browser/media/router/mock_media_router.h" 13 #include "chrome/browser/media/router/mock_media_router.h"
14 #include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
14 #include "chrome/browser/media/router/test_helper.h" 15 #include "chrome/browser/media/router/test_helper.h"
15 #include "chrome/browser/sessions/session_tab_helper.h" 16 #include "chrome/browser/sessions/session_tab_helper.h"
16 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h" 17 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
17 #include "chrome/common/media_router/media_route.h" 18 #include "chrome/common/media_router/media_route.h"
18 #include "chrome/common/media_router/media_source_helper.h" 19 #include "chrome/common/media_router/media_source_helper.h"
19 #include "chrome/common/media_router/route_request_result.h" 20 #include "chrome/common/media_router/route_request_result.h"
20 #include "chrome/grit/generated_resources.h" 21 #include "chrome/grit/generated_resources.h"
21 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 22 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
22 #include "chrome/test/base/testing_profile.h" 23 #include "chrome/test/base/testing_profile.h"
23 #include "content/public/test/test_web_ui.h" 24 #include "content/public/test/test_web_ui.h"
24 #include "extensions/browser/extension_registry.h" 25 #include "extensions/browser/extension_registry.h"
25 #include "extensions/common/extension.h" 26 #include "extensions/common/extension.h"
26 #include "extensions/common/extension_builder.h" 27 #include "extensions/common/extension_builder.h"
27 #include "extensions/common/test_util.h" 28 #include "extensions/common/test_util.h"
28 #include "extensions/common/value_builder.h" 29 #include "extensions/common/value_builder.h"
29 #include "testing/gmock/include/gmock/gmock.h" 30 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
31 #include "ui/base/l10n/l10n_util.h" 32 #include "ui/base/l10n/l10n_util.h"
32 33
33 using content::WebContents; 34 using content::WebContents;
34 using testing::_; 35 using testing::_;
35 using testing::AnyNumber; 36 using testing::AnyNumber;
36 using testing::Invoke; 37 using testing::Invoke;
38 using testing::Mock;
37 using testing::Return; 39 using testing::Return;
38 using testing::SaveArg; 40 using testing::SaveArg;
39 41
40 namespace media_router { 42 namespace media_router {
41 43
44 class MockMediaRouterWebUIMessageHandler
45 : public MediaRouterWebUIMessageHandler {
46 public:
47 explicit MockMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui)
48 : MediaRouterWebUIMessageHandler(media_router_ui) {}
49 ~MockMediaRouterWebUIMessageHandler() override {}
50
51 MOCK_METHOD1(UpdateMediaRouteStatus, void(const MediaStatus& status));
52 };
53
42 class PresentationRequestCallbacks { 54 class PresentationRequestCallbacks {
43 public: 55 public:
44 explicit PresentationRequestCallbacks( 56 explicit PresentationRequestCallbacks(
45 const content::PresentationError& expected_error) 57 const content::PresentationError& expected_error)
46 : expected_error_(expected_error) {} 58 : expected_error_(expected_error) {}
47 59
48 void Success(const content::PresentationInfo&, const MediaRoute&) {} 60 void Success(const content::PresentationInfo&, const MediaRoute&) {}
49 61
50 void Error(const content::PresentationError& error) { 62 void Error(const content::PresentationError& error) {
51 EXPECT_EQ(expected_error_.error_type, error.error_type); 63 EXPECT_EQ(expected_error_.error_type, error.error_type);
(...skipping 29 matching lines...) Expand all
81 content::RenderFrameHostTester::CommitPendingLoad( 93 content::RenderFrameHostTester::CommitPendingLoad(
82 &web_contents()->GetController()); 94 &web_contents()->GetController());
83 CreateMediaRouterUI(profile); 95 CreateMediaRouterUI(profile);
84 } 96 }
85 97
86 void CreateMediaRouterUI(Profile* profile) { 98 void CreateMediaRouterUI(Profile* profile) {
87 SessionTabHelper::CreateForWebContents(web_contents()); 99 SessionTabHelper::CreateForWebContents(web_contents());
88 web_ui_contents_.reset( 100 web_ui_contents_.reset(
89 WebContents::Create(WebContents::CreateParams(profile))); 101 WebContents::Create(WebContents::CreateParams(profile)));
90 web_ui_.set_web_contents(web_ui_contents_.get()); 102 web_ui_.set_web_contents(web_ui_contents_.get());
91 media_router_ui_.reset(new MediaRouterUI(&web_ui_)); 103 media_router_ui_ = base::MakeUnique<MediaRouterUI>(&web_ui_);
92 message_handler_.reset( 104 message_handler_ = base::MakeUnique<MockMediaRouterWebUIMessageHandler>(
93 new MediaRouterWebUIMessageHandler(media_router_ui_.get())); 105 media_router_ui_.get());
94 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 106 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
95 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { 107 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) {
96 this->media_sinks_observers_.push_back(observer); 108 this->media_sinks_observers_.push_back(observer);
97 return true; 109 return true;
98 })); 110 }));
99 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) 111 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_))
100 .Times(AnyNumber()); 112 .Times(AnyNumber());
101 media_router_ui_->InitForTest(&mock_router_, web_contents(), 113 media_router_ui_->InitForTest(&mock_router_, web_contents(),
102 message_handler_.get(), 114 message_handler_.get(),
103 std::move(create_session_request_)); 115 std::move(create_session_request_));
104 message_handler_->SetWebUIForTest(&web_ui_); 116 message_handler_->SetWebUIForTest(&web_ui_);
105 } 117 }
106 118
107 MediaSink CreateSinkCompatibleWithAllSources() { 119 MediaSink CreateSinkCompatibleWithAllSources() {
108 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC); 120 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC);
109 for (auto* observer : media_sinks_observers_) 121 for (auto* observer : media_sinks_observers_)
110 observer->OnSinksUpdated({sink}, std::vector<url::Origin>()); 122 observer->OnSinksUpdated({sink}, std::vector<url::Origin>());
111 return sink; 123 return sink;
112 } 124 }
113 125
126 // Notifies MediaRouterUI that a route details view has been opened. Expects
127 // MediaRouterUI to request a MediaRouteController, and gives it a mock
128 // controller. Returns a reference to the mock controller.
129 scoped_refptr<MockMediaRouteController> OpenUIDetailsView(
130 const MediaRoute::Id& route_id) {
131 MediaSource media_source("mediaSource");
132 MediaRoute route(route_id, media_source, "sinkId", "", true, "", true);
133 mojom::MediaControllerPtr mojo_media_controller;
134 mojo::MakeRequest(&mojo_media_controller);
135 scoped_refptr<MockMediaRouteController> controller =
136 new MockMediaRouteController(route_id, std::move(mojo_media_controller),
137 &mock_router_);
138
139 media_router_ui_->OnRoutesUpdated({route}, std::vector<MediaRoute::Id>());
140 EXPECT_CALL(mock_router_, GetRouteController(route_id))
141 .WillOnce(Return(controller));
142 media_router_ui_->OnMediaControllerUIAvailable(route_id);
143
144 return controller;
145 }
146
114 protected: 147 protected:
115 MockMediaRouter mock_router_; 148 MockMediaRouter mock_router_;
116 content::TestWebUI web_ui_; 149 content::TestWebUI web_ui_;
117 std::unique_ptr<WebContents> web_ui_contents_; 150 std::unique_ptr<WebContents> web_ui_contents_;
118 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; 151 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_;
119 std::unique_ptr<MediaRouterUI> media_router_ui_; 152 std::unique_ptr<MediaRouterUI> media_router_ui_;
120 std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; 153 std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_;
121 std::vector<MediaSinksObserver*> media_sinks_observers_; 154 std::vector<MediaSinksObserver*> media_sinks_observers_;
122 }; 155 };
123 156
124 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { 157 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
125 CreateMediaRouterUI(profile()); 158 CreateMediaRouterUI(profile());
126 std::vector<MediaRouteResponseCallback> callbacks; 159 std::vector<MediaRouteResponseCallback> callbacks;
127 EXPECT_CALL( 160 EXPECT_CALL(
128 mock_router_, 161 mock_router_,
129 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false)) 162 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false))
130 .WillOnce(SaveArg<4>(&callbacks)); 163 .WillOnce(SaveArg<4>(&callbacks));
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 // Selecting desktop mirroring should not change the recorded preferences. 626 // Selecting desktop mirroring should not change the recorded preferences.
594 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 627 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
595 628
596 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); 629 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
597 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 630 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
598 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); 631 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR);
599 // Selecting desktop mirroring should not change the recorded preferences. 632 // Selecting desktop mirroring should not change the recorded preferences.
600 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 633 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
601 } 634 }
602 635
636 TEST_F(MediaRouterUITest, OpenAndCloseUIDetailsView) {
637 const std::string route_id = "routeId";
638 CreateMediaRouterUI(profile());
639 OpenUIDetailsView(route_id);
640
641 // When the route details view is closed, the route controller observer should
642 // be destroyed, also triggering the destruction of the controller.
643 EXPECT_CALL(mock_router_, DetachRouteController(route_id, _));
644 media_router_ui_->OnMediaControllerUIClosed();
645
646 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_router_));
647 }
648
649 TEST_F(MediaRouterUITest, SendMediaStatusUpdate) {
650 MediaStatus status;
651 status.title = "test title";
652 CreateMediaRouterUI(profile());
653 scoped_refptr<MockMediaRouteController> controller =
654 OpenUIDetailsView("routeId");
655
656 // The route controller observer held by MediaRouterUI should send the status
657 // update to the message handler.
658 EXPECT_CALL(*message_handler_, UpdateMediaRouteStatus(status));
659 controller->OnMediaStatusUpdated(status);
660
661 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_router_));
662 }
663
603 } // namespace media_router 664 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698