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

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

Issue 2264153002: [Presentation API] Add support for multiple URLs in PresentationRequest on Media Router UI side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Mark's comments Created 4 years, 3 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>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
9 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/media/router/create_presentation_connection_request.h" 12 #include "chrome/browser/media/router/create_presentation_connection_request.h"
11 #include "chrome/browser/media/router/media_route.h" 13 #include "chrome/browser/media/router/media_route.h"
12 #include "chrome/browser/media/router/media_source_helper.h" 14 #include "chrome/browser/media/router/media_source_helper.h"
13 #include "chrome/browser/media/router/mock_media_router.h" 15 #include "chrome/browser/media/router/mock_media_router.h"
14 #include "chrome/browser/media/router/route_request_result.h" 16 #include "chrome/browser/media/router/route_request_result.h"
15 #include "chrome/browser/media/router/test_helper.h" 17 #include "chrome/browser/media/router/test_helper.h"
16 #include "chrome/browser/sessions/session_tab_helper.h" 18 #include "chrome/browser/sessions/session_tab_helper.h"
(...skipping 13 matching lines...) Expand all
30 32
31 using testing::_; 33 using testing::_;
32 using testing::AnyNumber; 34 using testing::AnyNumber;
33 using testing::Invoke; 35 using testing::Invoke;
34 using testing::SaveArg; 36 using testing::SaveArg;
35 using testing::Return; 37 using testing::Return;
36 38
37 namespace media_router { 39 namespace media_router {
38 40
39 class PresentationRequestCallbacks { 41 class PresentationRequestCallbacks {
40 public: 42 public:
41 explicit PresentationRequestCallbacks( 43 explicit PresentationRequestCallbacks(
42 const content::PresentationError& expected_error) 44 const content::PresentationError& expected_error)
43 : expected_error_(expected_error) {} 45 : expected_error_(expected_error) {}
44 46
45 void Success(const content::PresentationSessionInfo&, const MediaRoute::Id&) { 47 void Success(const content::PresentationSessionInfo&, const MediaRoute::Id&) {
46 } 48 }
47 49
48 void Error(const content::PresentationError& error) { 50 void Error(const content::PresentationError& error) {
49 EXPECT_EQ(expected_error_.error_type, error.error_type); 51 EXPECT_EQ(expected_error_.error_type, error.error_type);
50 EXPECT_EQ(expected_error_.message, error.message); 52 EXPECT_EQ(expected_error_.message, error.message);
51 } 53 }
52 54
53 private: 55 private:
54 content::PresentationError expected_error_; 56 content::PresentationError expected_error_;
55 }; 57 };
56 58
57 class MockRoutesUpdatedCallback { 59 class MockRoutesUpdatedCallback {
58 public: 60 public:
59 MOCK_METHOD2(OnRoutesUpdated, 61 MOCK_METHOD2(OnRoutesUpdated,
60 void(const std::vector<MediaRoute>& routes, 62 void(const std::vector<MediaRoute>& routes,
61 const std::vector<MediaRoute::Id>& joinable_route_ids)); 63 const std::vector<MediaRoute::Id>& joinable_route_ids));
62 }; 64 };
63 65
(...skipping 22 matching lines...) Expand all
86 return true; 88 return true;
87 })); 89 }));
88 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_)) 90 EXPECT_CALL(mock_router_, RegisterMediaRoutesObserver(_))
89 .Times(AnyNumber()); 91 .Times(AnyNumber());
90 media_router_ui_->InitForTest(&mock_router_, initiator_.get(), 92 media_router_ui_->InitForTest(&mock_router_, initiator_.get(),
91 message_handler_.get(), 93 message_handler_.get(),
92 std::move(create_session_request_)); 94 std::move(create_session_request_));
93 message_handler_->SetWebUIForTest(&web_ui_); 95 message_handler_->SetWebUIForTest(&web_ui_);
94 } 96 }
95 97
98 MediaSink CreateSinkCompatibleWithAllSources() {
99 MediaSink sink("sinkId", "sinkName", MediaSink::GENERIC);
100 for (auto* observer : media_sinks_observers_) {
mark a. foltz 2016/09/09 22:22:26 nit: Usually Chrome doesn't use {} for two-line fo
takumif 2016/09/13 03:48:21 Got it, removed the braces.
101 observer->OnSinksUpdated({sink}, std::vector<GURL>());
102 }
103 return sink;
104 }
105
96 protected: 106 protected:
97 MockMediaRouter mock_router_; 107 MockMediaRouter mock_router_;
98 content::TestBrowserThreadBundle thread_bundle_; 108 content::TestBrowserThreadBundle thread_bundle_;
99 TestingProfile profile_; 109 TestingProfile profile_;
100 std::unique_ptr<content::WebContents> initiator_; 110 std::unique_ptr<content::WebContents> initiator_;
101 content::TestWebUI web_ui_; 111 content::TestWebUI web_ui_;
102 std::unique_ptr<content::WebContents> web_contents_; 112 std::unique_ptr<content::WebContents> web_contents_;
103 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; 113 std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_;
104 std::unique_ptr<MediaRouterUI> media_router_ui_; 114 std::unique_ptr<MediaRouterUI> media_router_ui_;
105 std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; 115 std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_;
106 std::vector<MediaSinksObserver*> media_sinks_observers_; 116 std::vector<MediaSinksObserver*> media_sinks_observers_;
107 }; 117 };
108 118
109 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) { 119 TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
110 CreateMediaRouterUI(&profile_); 120 CreateMediaRouterUI(&profile_);
111 std::vector<MediaRouteResponseCallback> callbacks; 121 std::vector<MediaRouteResponseCallback> callbacks;
112 EXPECT_CALL( 122 EXPECT_CALL(
113 mock_router_, 123 mock_router_,
114 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false)) 124 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false))
115 .WillOnce(SaveArg<4>(&callbacks)); 125 .WillOnce(SaveArg<4>(&callbacks));
116 media_router_ui_->CreateRoute("sinkId", MediaCastMode::TAB_MIRROR); 126 media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
127 MediaCastMode::TAB_MIRROR);
117 128
118 std::string expected_title = l10n_util::GetStringUTF8( 129 std::string expected_title = l10n_util::GetStringUTF8(
119 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB); 130 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
120 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title))); 131 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
121 std::unique_ptr<RouteRequestResult> result = 132 std::unique_ptr<RouteRequestResult> result =
122 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT); 133 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
123 for (const auto& callback : callbacks) 134 for (const auto& callback : callbacks)
124 callback.Run(*result); 135 callback.Run(*result);
125 } 136 }
126 137
127 TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) { 138 TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) {
128 CreateMediaRouterUI(&profile_); 139 CreateMediaRouterUI(&profile_);
129 std::vector<MediaRouteResponseCallback> callbacks; 140 std::vector<MediaRouteResponseCallback> callbacks;
130 EXPECT_CALL( 141 EXPECT_CALL(
131 mock_router_, 142 mock_router_,
132 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(120), false)) 143 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(120), false))
133 .WillOnce(SaveArg<4>(&callbacks)); 144 .WillOnce(SaveArg<4>(&callbacks));
134 media_router_ui_->CreateRoute("sinkId", MediaCastMode::DESKTOP_MIRROR); 145 media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
146 MediaCastMode::DESKTOP_MIRROR);
135 147
136 std::string expected_title = l10n_util::GetStringUTF8( 148 std::string expected_title = l10n_util::GetStringUTF8(
137 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP); 149 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP);
138 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title))); 150 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
139 std::unique_ptr<RouteRequestResult> result = 151 std::unique_ptr<RouteRequestResult> result =
140 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT); 152 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
141 for (const auto& callback : callbacks) 153 for (const auto& callback : callbacks)
142 callback.Run(*result); 154 callback.Run(*result);
143 } 155 }
144 156
145 TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) { 157 TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) {
146 CreateMediaRouterUI(&profile_); 158 CreateMediaRouterUI(&profile_);
147 PresentationRequest presentation_request(RenderFrameHostId(0, 0), 159 PresentationRequest presentation_request(RenderFrameHostId(0, 0),
148 "https://presentationurl.fakeurl", 160 {"https://presentationurl.fakeurl"},
149 GURL("https://frameurl.fakeurl")); 161 GURL("https://frameurl.fakeurl"));
150 media_router_ui_->OnDefaultPresentationChanged(presentation_request); 162 media_router_ui_->OnDefaultPresentationChanged(presentation_request);
151 std::vector<MediaRouteResponseCallback> callbacks; 163 std::vector<MediaRouteResponseCallback> callbacks;
152 EXPECT_CALL( 164 EXPECT_CALL(
153 mock_router_, 165 mock_router_,
154 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), false)) 166 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), false))
155 .WillOnce(SaveArg<4>(&callbacks)); 167 .WillOnce(SaveArg<4>(&callbacks));
156 media_router_ui_->CreateRoute("sinkId", MediaCastMode::DEFAULT); 168 media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
169 MediaCastMode::DEFAULT);
157 170
158 std::string expected_title = 171 std::string expected_title =
159 l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT, 172 l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT,
160 base::UTF8ToUTF16("frameurl.fakeurl")); 173 base::UTF8ToUTF16("frameurl.fakeurl"));
161 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title))); 174 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
162 std::unique_ptr<RouteRequestResult> result = 175 std::unique_ptr<RouteRequestResult> result =
163 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT); 176 RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
164 for (const auto& callback : callbacks) 177 for (const auto& callback : callbacks)
165 callback.Run(*result); 178 callback.Run(*result);
166 } 179 }
(...skipping 10 matching lines...) Expand all
177 std::string expected_title = l10n_util::GetStringUTF8( 190 std::string expected_title = l10n_util::GetStringUTF8(
178 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB); 191 IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
179 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title))); 192 EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
180 sink_callback.Run("foundSinkId"); 193 sink_callback.Run("foundSinkId");
181 } 194 }
182 195
183 TEST_F(MediaRouterUITest, RouteRequestFromIncognito) { 196 TEST_F(MediaRouterUITest, RouteRequestFromIncognito) {
184 CreateMediaRouterUI(profile_.GetOffTheRecordProfile()); 197 CreateMediaRouterUI(profile_.GetOffTheRecordProfile());
185 198
186 PresentationRequest presentation_request( 199 PresentationRequest presentation_request(
187 RenderFrameHostId(0, 0), "https://fooUrl", GURL("https://frameUrl")); 200 RenderFrameHostId(0, 0), {"https://fooUrl"}, GURL("https://frameUrl"));
188 media_router_ui_->OnDefaultPresentationChanged(presentation_request); 201 media_router_ui_->OnDefaultPresentationChanged(presentation_request);
189 202
190 EXPECT_CALL( 203 EXPECT_CALL(
191 mock_router_, 204 mock_router_,
192 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), true)); 205 CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), true));
193 media_router_ui_->CreateRoute("sinkId", MediaCastMode::DEFAULT); 206 media_router_ui_->CreateRoute(CreateSinkCompatibleWithAllSources().id(),
207 MediaCastMode::DEFAULT);
194 } 208 }
195 209
196 TEST_F(MediaRouterUITest, SortedSinks) { 210 TEST_F(MediaRouterUITest, SortedSinks) {
197 CreateMediaRouterUI(&profile_); 211 CreateMediaRouterUI(&profile_);
198 std::vector<MediaSinkWithCastModes> unsorted_sinks; 212 std::vector<MediaSinkWithCastModes> unsorted_sinks;
199 std::string sink_id1("sink3"); 213 std::string sink_id1("sink3");
200 std::string sink_name1("B sink"); 214 std::string sink_name1("B sink");
201 MediaSinkWithCastModes sink1( 215 MediaSinkWithCastModes sink1(
202 MediaSink(sink_id1, sink_name1, MediaSink::IconType::CAST)); 216 MediaSink(sink_id1, sink_name1, MediaSink::IconType::CAST));
203 unsorted_sinks.push_back(sink1); 217 unsorted_sinks.push_back(sink1);
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 for (auto* observer : media_sinks_observers_) { 517 for (auto* observer : media_sinks_observers_) {
504 if (observer->source().id() == presentation_url) { 518 if (observer->source().id() == presentation_url) {
505 observer->OnSinksUpdated(sinks, origins); 519 observer->OnSinksUpdated(sinks, origins);
506 } 520 }
507 } 521 }
508 // Destroying the UI should return the expected error from above to the error 522 // Destroying the UI should return the expected error from above to the error
509 // callback. 523 // callback.
510 media_router_ui_.reset(); 524 media_router_ui_.reset();
511 } 525 }
512 } // namespace media_router 526 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698