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> | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |