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

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

Issue 2862513002: Revert of [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: 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"
15 #include "chrome/browser/media/router/test_helper.h" 14 #include "chrome/browser/media/router/test_helper.h"
16 #include "chrome/browser/sessions/session_tab_helper.h" 15 #include "chrome/browser/sessions/session_tab_helper.h"
17 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h" 16 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle r.h"
18 #include "chrome/common/media_router/media_route.h" 17 #include "chrome/common/media_router/media_route.h"
19 #include "chrome/common/media_router/media_source_helper.h" 18 #include "chrome/common/media_router/media_source_helper.h"
20 #include "chrome/common/media_router/route_request_result.h" 19 #include "chrome/common/media_router/route_request_result.h"
21 #include "chrome/grit/generated_resources.h" 20 #include "chrome/grit/generated_resources.h"
22 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 21 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
23 #include "chrome/test/base/testing_profile.h" 22 #include "chrome/test/base/testing_profile.h"
24 #include "content/public/test/test_web_ui.h" 23 #include "content/public/test/test_web_ui.h"
25 #include "extensions/browser/extension_registry.h" 24 #include "extensions/browser/extension_registry.h"
26 #include "extensions/common/extension.h" 25 #include "extensions/common/extension.h"
27 #include "extensions/common/extension_builder.h" 26 #include "extensions/common/extension_builder.h"
28 #include "extensions/common/test_util.h" 27 #include "extensions/common/test_util.h"
29 #include "extensions/common/value_builder.h" 28 #include "extensions/common/value_builder.h"
30 #include "testing/gmock/include/gmock/gmock.h" 29 #include "testing/gmock/include/gmock/gmock.h"
31 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
32 #include "ui/base/l10n/l10n_util.h" 31 #include "ui/base/l10n/l10n_util.h"
33 32
34 using content::WebContents; 33 using content::WebContents;
35 using testing::_; 34 using testing::_;
36 using testing::AnyNumber; 35 using testing::AnyNumber;
37 using testing::Invoke; 36 using testing::Invoke;
38 using testing::Mock;
39 using testing::Return; 37 using testing::Return;
40 using testing::SaveArg; 38 using testing::SaveArg;
41 39
42 namespace media_router { 40 namespace media_router {
43 41
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
54 class PresentationRequestCallbacks { 42 class PresentationRequestCallbacks {
55 public: 43 public:
56 explicit PresentationRequestCallbacks( 44 explicit PresentationRequestCallbacks(
57 const content::PresentationError& expected_error) 45 const content::PresentationError& expected_error)
58 : expected_error_(expected_error) {} 46 : expected_error_(expected_error) {}
59 47
60 void Success(const content::PresentationInfo&, const MediaRoute&) {} 48 void Success(const content::PresentationInfo&, const MediaRoute&) {}
61 49
62 void Error(const content::PresentationError& error) { 50 void Error(const content::PresentationError& error) {
63 EXPECT_EQ(expected_error_.error_type, error.error_type); 51 EXPECT_EQ(expected_error_.error_type, error.error_type);
(...skipping 29 matching lines...) Expand all
93 content::RenderFrameHostTester::CommitPendingLoad( 81 content::RenderFrameHostTester::CommitPendingLoad(
94 &web_contents()->GetController()); 82 &web_contents()->GetController());
95 CreateMediaRouterUI(profile); 83 CreateMediaRouterUI(profile);
96 } 84 }
97 85
98 void CreateMediaRouterUI(Profile* profile) { 86 void CreateMediaRouterUI(Profile* profile) {
99 SessionTabHelper::CreateForWebContents(web_contents()); 87 SessionTabHelper::CreateForWebContents(web_contents());
100 web_ui_contents_.reset( 88 web_ui_contents_.reset(
101 WebContents::Create(WebContents::CreateParams(profile))); 89 WebContents::Create(WebContents::CreateParams(profile)));
102 web_ui_.set_web_contents(web_ui_contents_.get()); 90 web_ui_.set_web_contents(web_ui_contents_.get());
103 media_router_ui_ = base::MakeUnique<MediaRouterUI>(&web_ui_); 91 media_router_ui_.reset(new MediaRouterUI(&web_ui_));
104 message_handler_ = base::MakeUnique<MockMediaRouterWebUIMessageHandler>( 92 message_handler_.reset(
105 media_router_ui_.get()); 93 new MediaRouterWebUIMessageHandler(media_router_ui_.get()));
106 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) 94 EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_))
107 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { 95 .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) {
108 this->media_sinks_observers_.push_back(observer); 96 this->media_sinks_observers_.push_back(observer);
109 return true; 97 return true;
110 })); 98 }));
111 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) 99 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_))
112 .Times(AnyNumber()); 100 .Times(AnyNumber());
113 media_router_ui_->InitForTest(&mock_router_, web_contents(), 101 media_router_ui_->InitForTest(&mock_router_, web_contents(),
114 message_handler_.get(), 102 message_handler_.get(),
115 std::move(create_session_request_)); 103 std::move(create_session_request_));
116 message_handler_->SetWebUIForTest(&web_ui_); 104 message_handler_->SetWebUIForTest(&web_ui_);
117 } 105 }
118 106
119 MediaSink CreateSinkCompatibleWithAllSources() { 107 MediaSink CreateSinkCompatibleWithAllSources() {
120 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC); 108 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC);
121 for (auto* observer : media_sinks_observers_) 109 for (auto* observer : media_sinks_observers_)
122 observer->OnSinksUpdated({sink}, std::vector<url::Origin>()); 110 observer->OnSinksUpdated({sink}, std::vector<url::Origin>());
123 return sink; 111 return sink;
124 } 112 }
125 113
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
147 protected: 114 protected:
148 MockMediaRouter mock_router_; 115 MockMediaRouter mock_router_;
149 content::TestWebUI web_ui_; 116 content::TestWebUI web_ui_;
150 std::unique_ptr<WebContents> web_ui_contents_; 117 std::unique_ptr<WebContents> web_ui_contents_;
151 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; 118 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_;
152 std::unique_ptr<MediaRouterUI> media_router_ui_; 119 std::unique_ptr<MediaRouterUI> media_router_ui_;
153 std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_; 120 std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_;
154 std::vector<MediaSinksObserver*> media_sinks_observers_; 121 std::vector<MediaSinksObserver*> media_sinks_observers_;
155 }; 122 };
156 123
157 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { 124 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
158 CreateMediaRouterUI(profile()); 125 CreateMediaRouterUI(profile());
159 std::vector<MediaRouteResponseCallback> callbacks; 126 std::vector<MediaRouteResponseCallback> callbacks;
160 EXPECT_CALL( 127 EXPECT_CALL(
161 mock_router_, 128 mock_router_,
162 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false)) 129 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false))
163 .WillOnce(SaveArg<4>(&callbacks)); 130 .WillOnce(SaveArg<4>(&callbacks));
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 // Selecting desktop mirroring should not change the recorded preferences. 593 // Selecting desktop mirroring should not change the recorded preferences.
627 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 594 EXPECT_FALSE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
628 595
629 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR); 596 media_router_ui_->RecordCastModeSelection(MediaCastMode::TAB_MIRROR);
630 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 597 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
631 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR); 598 media_router_ui_->RecordCastModeSelection(MediaCastMode::DESKTOP_MIRROR);
632 // Selecting desktop mirroring should not change the recorded preferences. 599 // Selecting desktop mirroring should not change the recorded preferences.
633 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); 600 EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin());
634 } 601 }
635 602
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
664 } // namespace media_router 603 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698