| 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/media/router/presentation_service_delegate_impl.h" | 5 #include "chrome/browser/media/router/presentation_service_delegate_impl.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "chrome/browser/media/router/media_source.h" | 9 #include "chrome/browser/media/router/media_source.h" |
| 10 #include "chrome/browser/media/router/media_source_helper.h" | 10 #include "chrome/browser/media/router/media_source_helper.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "testing/gmock/include/gmock/gmock.h" | 23 #include "testing/gmock/include/gmock/gmock.h" |
| 24 | 24 |
| 25 using ::testing::_; | 25 using ::testing::_; |
| 26 using ::testing::Mock; | 26 using ::testing::Mock; |
| 27 using ::testing::Return; | 27 using ::testing::Return; |
| 28 using ::testing::SaveArg; | 28 using ::testing::SaveArg; |
| 29 using ::testing::StrictMock; | 29 using ::testing::StrictMock; |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 const char kPresentationUrl1[] = "http://foo.fakeUrl.com/"; | 33 const char kPresentationUrl1[] = "http://foo.fakeurl.com/"; |
| 34 const char kPresentationUrl2[] = "http://bar.fakeUrl.com/"; | 34 const char kPresentationUrl2[] = "http://bar.fakeurl.com/"; |
| 35 const char kFrameUrl[] = "http://anotherFrameUrl.fakeUrl.com/"; | 35 const char kFrameUrl[] = "http://anotherframeurl.fakeurl.com/"; |
| 36 | 36 |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 namespace media_router { | 39 namespace media_router { |
| 40 | 40 |
| 41 class MockDelegateObserver | 41 class MockDelegateObserver |
| 42 : public content::PresentationServiceDelegate::Observer { | 42 : public content::PresentationServiceDelegate::Observer { |
| 43 public: | 43 public: |
| 44 MOCK_METHOD0(OnDelegateDestroyed, void()); | 44 MOCK_METHOD0(OnDelegateDestroyed, void()); |
| 45 MOCK_METHOD1(OnDefaultPresentationStarted, | 45 MOCK_METHOD1(OnDefaultPresentationStarted, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 58 public: | 58 public: |
| 59 MOCK_METHOD1(OnCreateConnectionSuccess, | 59 MOCK_METHOD1(OnCreateConnectionSuccess, |
| 60 void(const content::PresentationSessionInfo& connection)); | 60 void(const content::PresentationSessionInfo& connection)); |
| 61 MOCK_METHOD1(OnCreateConnectionError, | 61 MOCK_METHOD1(OnCreateConnectionError, |
| 62 void(const content::PresentationError& error)); | 62 void(const content::PresentationError& error)); |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 class PresentationServiceDelegateImplTest | 65 class PresentationServiceDelegateImplTest |
| 66 : public ChromeRenderViewHostTestHarness { | 66 : public ChromeRenderViewHostTestHarness { |
| 67 public: | 67 public: |
| 68 PresentationServiceDelegateImplTest() : delegate_impl_(nullptr) {} | 68 PresentationServiceDelegateImplTest() |
| 69 : delegate_impl_(nullptr), |
| 70 presentation_url1_(kPresentationUrl1), |
| 71 presentation_url2_(kPresentationUrl2) {} |
| 69 | 72 |
| 70 void SetUp() override { | 73 void SetUp() override { |
| 71 ChromeRenderViewHostTestHarness::SetUp(); | 74 ChromeRenderViewHostTestHarness::SetUp(); |
| 72 content::WebContents* wc = GetWebContents(); | 75 content::WebContents* wc = GetWebContents(); |
| 73 ASSERT_TRUE(wc); | 76 ASSERT_TRUE(wc); |
| 74 PresentationServiceDelegateImpl::CreateForWebContents(wc); | 77 PresentationServiceDelegateImpl::CreateForWebContents(wc); |
| 75 delegate_impl_ = PresentationServiceDelegateImpl::FromWebContents(wc); | 78 delegate_impl_ = PresentationServiceDelegateImpl::FromWebContents(wc); |
| 76 delegate_impl_->SetMediaRouterForTest(&router_); | 79 delegate_impl_->SetMediaRouterForTest(&router_); |
| 80 presentation_urls_.push_back(presentation_url1_); |
| 77 } | 81 } |
| 78 | 82 |
| 79 MOCK_METHOD1(OnDefaultPresentationStarted, | 83 MOCK_METHOD1(OnDefaultPresentationStarted, |
| 80 void(const content::PresentationSessionInfo& session_info)); | 84 void(const content::PresentationSessionInfo& session_info)); |
| 81 | 85 |
| 82 protected: | 86 protected: |
| 83 virtual content::WebContents* GetWebContents() { return web_contents(); } | 87 virtual content::WebContents* GetWebContents() { return web_contents(); } |
| 84 | 88 |
| 85 void RunDefaultPresentationUrlCallbackTest(bool incognito) { | 89 void RunDefaultPresentationUrlCallbackTest(bool incognito) { |
| 86 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 90 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 87 ASSERT_TRUE(main_frame); | 91 ASSERT_TRUE(main_frame); |
| 88 int render_process_id = main_frame->GetProcess()->GetID(); | 92 int render_process_id = main_frame->GetProcess()->GetID(); |
| 89 int routing_id = main_frame->GetRoutingID(); | 93 int routing_id = main_frame->GetRoutingID(); |
| 90 | 94 |
| 91 auto callback = base::Bind( | 95 auto callback = base::Bind( |
| 92 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, | 96 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, |
| 93 base::Unretained(this)); | 97 base::Unretained(this)); |
| 94 std::vector<std::string> urls({kPresentationUrl1}); | 98 std::vector<std::string> urls({kPresentationUrl1}); |
| 95 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, | 99 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 96 urls, callback); | 100 presentation_urls_, callback); |
| 97 | 101 |
| 98 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); | 102 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); |
| 99 PresentationRequest request = | 103 PresentationRequest request = |
| 100 delegate_impl_->GetDefaultPresentationRequest(); | 104 delegate_impl_->GetDefaultPresentationRequest(); |
| 101 | 105 |
| 102 // Should not trigger callback since route response is error. | 106 // Should not trigger callback since route response is error. |
| 103 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromError( | 107 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromError( |
| 104 "Error", RouteRequestResult::UNKNOWN_ERROR); | 108 "Error", RouteRequestResult::UNKNOWN_ERROR); |
| 105 delegate_impl_->OnRouteResponse(request, *result); | 109 delegate_impl_->OnRouteResponse(request, *result); |
| 106 EXPECT_TRUE(Mock::VerifyAndClearExpectations(this)); | 110 EXPECT_TRUE(Mock::VerifyAndClearExpectations(this)); |
| 107 | 111 |
| 108 // Should not trigger callback since request doesn't match. | 112 // Should not trigger callback since request doesn't match. |
| 109 PresentationRequest different_request(RenderFrameHostId(100, 200), | 113 PresentationRequest different_request( |
| 110 {kPresentationUrl2}, GURL(kFrameUrl)); | 114 RenderFrameHostId(100, 200), {presentation_url2_}, GURL(kFrameUrl)); |
| 111 MediaRoute* media_route = new MediaRoute( | 115 MediaRoute* media_route = new MediaRoute( |
| 112 "differentRouteId", MediaSourceForPresentationUrl(kPresentationUrl2), | 116 "differentRouteId", MediaSourceForPresentationUrl(presentation_url2_), |
| 113 "mediaSinkId", "", true, "", true); | 117 "mediaSinkId", "", true, "", true); |
| 114 media_route->set_incognito(incognito); | 118 media_route->set_incognito(incognito); |
| 115 result = RouteRequestResult::FromSuccess(base::WrapUnique(media_route), | 119 result = RouteRequestResult::FromSuccess(base::WrapUnique(media_route), |
| 116 "differentPresentationId"); | 120 "differentPresentationId"); |
| 117 delegate_impl_->OnRouteResponse(different_request, *result); | 121 delegate_impl_->OnRouteResponse(different_request, *result); |
| 118 EXPECT_TRUE(Mock::VerifyAndClearExpectations(this)); | 122 EXPECT_TRUE(Mock::VerifyAndClearExpectations(this)); |
| 119 | 123 |
| 120 // Should trigger callback since request matches. | 124 // Should trigger callback since request matches. |
| 121 EXPECT_CALL(*this, OnDefaultPresentationStarted(_)).Times(1); | 125 EXPECT_CALL(*this, OnDefaultPresentationStarted(_)).Times(1); |
| 122 MediaRoute* media_route2 = new MediaRoute( | 126 MediaRoute* media_route2 = new MediaRoute( |
| 123 "routeId", MediaSourceForPresentationUrl(kPresentationUrl1), | 127 "routeId", MediaSourceForPresentationUrl(presentation_url1_), |
| 124 "mediaSinkId", "", true, "", true); | 128 "mediaSinkId", "", true, "", true); |
| 125 media_route2->set_incognito(incognito); | 129 media_route2->set_incognito(incognito); |
| 126 result = RouteRequestResult::FromSuccess(base::WrapUnique(media_route2), | 130 result = RouteRequestResult::FromSuccess(base::WrapUnique(media_route2), |
| 127 "presentationId"); | 131 "presentationId"); |
| 128 delegate_impl_->OnRouteResponse(request, *result); | 132 delegate_impl_->OnRouteResponse(request, *result); |
| 129 } | 133 } |
| 130 | 134 |
| 131 PresentationServiceDelegateImpl* delegate_impl_; | 135 PresentationServiceDelegateImpl* delegate_impl_; |
| 132 MockMediaRouter router_; | 136 MockMediaRouter router_; |
| 137 const GURL presentation_url1_; |
| 138 const GURL presentation_url2_; |
| 139 std::vector<GURL> presentation_urls_; |
| 133 }; | 140 }; |
| 134 | 141 |
| 135 class PresentationServiceDelegateImplIncognitoTest | 142 class PresentationServiceDelegateImplIncognitoTest |
| 136 : public PresentationServiceDelegateImplTest { | 143 : public PresentationServiceDelegateImplTest { |
| 137 public: | 144 public: |
| 138 PresentationServiceDelegateImplIncognitoTest() : | 145 PresentationServiceDelegateImplIncognitoTest() : |
| 139 incognito_web_contents_(nullptr) {} | 146 incognito_web_contents_(nullptr) {} |
| 140 | 147 |
| 141 protected: | 148 protected: |
| 142 content::WebContents* GetWebContents() override { | 149 content::WebContents* GetWebContents() override { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 154 // require RenderViewHost, etc., that in turn are deleted by | 161 // require RenderViewHost, etc., that in turn are deleted by |
| 155 // RenderViewHostTestHarness::TearDown(). | 162 // RenderViewHostTestHarness::TearDown(). |
| 156 delete incognito_web_contents_; | 163 delete incognito_web_contents_; |
| 157 PresentationServiceDelegateImplTest::TearDown(); | 164 PresentationServiceDelegateImplTest::TearDown(); |
| 158 } | 165 } |
| 159 | 166 |
| 160 content::WebContents* incognito_web_contents_; | 167 content::WebContents* incognito_web_contents_; |
| 161 }; | 168 }; |
| 162 | 169 |
| 163 TEST_F(PresentationServiceDelegateImplTest, AddScreenAvailabilityListener) { | 170 TEST_F(PresentationServiceDelegateImplTest, AddScreenAvailabilityListener) { |
| 164 MediaSource source1 = MediaSourceForPresentationUrl(kPresentationUrl1); | 171 MediaSource source1 = MediaSourceForPresentationUrl(presentation_url1_); |
| 165 MediaSource source2 = MediaSourceForPresentationUrl(kPresentationUrl2); | 172 MediaSource source2 = MediaSourceForPresentationUrl(presentation_url2_); |
| 166 MockScreenAvailabilityListener listener1(kPresentationUrl1); | 173 MockScreenAvailabilityListener listener1(presentation_url1_); |
| 167 MockScreenAvailabilityListener listener2(kPresentationUrl2); | 174 MockScreenAvailabilityListener listener2(presentation_url2_); |
| 168 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 175 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 169 ASSERT_TRUE(main_frame); | 176 ASSERT_TRUE(main_frame); |
| 170 int render_process_id = main_frame->GetProcess()->GetID(); | 177 int render_process_id = main_frame->GetProcess()->GetID(); |
| 171 int render_frame_id1 = main_frame->GetRoutingID(); | 178 int render_frame_id1 = main_frame->GetRoutingID(); |
| 172 | 179 |
| 173 // Note that |render_frame_id2| does not correspond to a real frame. As a | 180 // Note that |render_frame_id2| does not correspond to a real frame. As a |
| 174 // result, the observer added with have an empty GURL as origin. | 181 // result, the observer added with have an empty GURL as origin. |
| 175 int render_frame_id2 = 2; | 182 int render_frame_id2 = 2; |
| 176 | 183 |
| 177 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)) | 184 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 195 render_process_id, render_frame_id2, &listener2); | 202 render_process_id, render_frame_id2, &listener2); |
| 196 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 203 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 197 render_process_id, render_frame_id1, source1.id())); | 204 render_process_id, render_frame_id1, source1.id())); |
| 198 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 205 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 199 render_process_id, render_frame_id2, source2.id())); | 206 render_process_id, render_frame_id2, source2.id())); |
| 200 } | 207 } |
| 201 | 208 |
| 202 TEST_F(PresentationServiceDelegateImplTest, AddMultipleListenersToFrame) { | 209 TEST_F(PresentationServiceDelegateImplTest, AddMultipleListenersToFrame) { |
| 203 ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(true)); | 210 ON_CALL(router_, RegisterMediaSinksObserver(_)).WillByDefault(Return(true)); |
| 204 | 211 |
| 205 MediaSource source1 = MediaSourceForPresentationUrl(kPresentationUrl1); | 212 MediaSource source1 = MediaSourceForPresentationUrl(presentation_url1_); |
| 206 MediaSource source2 = MediaSourceForPresentationUrl(kPresentationUrl2); | 213 MediaSource source2 = MediaSourceForPresentationUrl(presentation_url2_); |
| 207 MockScreenAvailabilityListener listener1(kPresentationUrl1); | 214 MockScreenAvailabilityListener listener1(presentation_url1_); |
| 208 MockScreenAvailabilityListener listener2(kPresentationUrl2); | 215 MockScreenAvailabilityListener listener2(presentation_url2_); |
| 209 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 216 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 210 ASSERT_TRUE(main_frame); | 217 ASSERT_TRUE(main_frame); |
| 211 int render_process_id = main_frame->GetProcess()->GetID(); | 218 int render_process_id = main_frame->GetProcess()->GetID(); |
| 212 int render_frame_id = main_frame->GetRoutingID(); | 219 int render_frame_id = main_frame->GetRoutingID(); |
| 213 | 220 |
| 214 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).Times(2); | 221 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).Times(2); |
| 215 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( | 222 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( |
| 216 render_process_id, render_frame_id, &listener1)); | 223 render_process_id, render_frame_id, &listener1)); |
| 217 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( | 224 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( |
| 218 render_process_id, render_frame_id, &listener2)); | 225 render_process_id, render_frame_id, &listener2)); |
| 219 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 226 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 220 render_process_id, render_frame_id, source1.id())) | 227 render_process_id, render_frame_id, source1.id())) |
| 221 << "Mapping not found for " << source1.ToString(); | 228 << "Mapping not found for " << source1.ToString(); |
| 222 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 229 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 223 render_process_id, render_frame_id, source2.id())) | 230 render_process_id, render_frame_id, source2.id())) |
| 224 << "Mapping not found for " << source2.ToString(); | 231 << "Mapping not found for " << source2.ToString(); |
| 225 | 232 |
| 226 EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(2); | 233 EXPECT_CALL(router_, UnregisterMediaSinksObserver(_)).Times(2); |
| 227 delegate_impl_->RemoveScreenAvailabilityListener( | 234 delegate_impl_->RemoveScreenAvailabilityListener( |
| 228 render_process_id, render_frame_id, &listener1); | 235 render_process_id, render_frame_id, &listener1); |
| 229 delegate_impl_->RemoveScreenAvailabilityListener( | 236 delegate_impl_->RemoveScreenAvailabilityListener( |
| 230 render_process_id, render_frame_id, &listener2); | 237 render_process_id, render_frame_id, &listener2); |
| 231 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 238 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 232 render_process_id, render_frame_id, source1.id())); | 239 render_process_id, render_frame_id, source1.id())); |
| 233 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 240 EXPECT_FALSE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 234 render_process_id, render_frame_id, source2.id())); | 241 render_process_id, render_frame_id, source2.id())); |
| 235 } | 242 } |
| 236 | 243 |
| 237 TEST_F(PresentationServiceDelegateImplTest, AddSameListenerTwice) { | 244 TEST_F(PresentationServiceDelegateImplTest, AddSameListenerTwice) { |
| 238 MediaSource source1(MediaSourceForPresentationUrl(kPresentationUrl1)); | 245 MediaSource source1(MediaSourceForPresentationUrl(presentation_url1_)); |
| 239 MockScreenAvailabilityListener listener1(kPresentationUrl1); | 246 MockScreenAvailabilityListener listener1(presentation_url1_); |
| 240 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 247 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 241 ASSERT_TRUE(main_frame); | 248 ASSERT_TRUE(main_frame); |
| 242 int render_process_id = main_frame->GetProcess()->GetID(); | 249 int render_process_id = main_frame->GetProcess()->GetID(); |
| 243 int render_frame_id = main_frame->GetRoutingID(); | 250 int render_frame_id = main_frame->GetRoutingID(); |
| 244 | 251 |
| 245 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).WillOnce(Return(true)); | 252 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).WillOnce(Return(true)); |
| 246 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( | 253 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( |
| 247 render_process_id, render_frame_id, &listener1)); | 254 render_process_id, render_frame_id, &listener1)); |
| 248 EXPECT_FALSE(delegate_impl_->AddScreenAvailabilityListener( | 255 EXPECT_FALSE(delegate_impl_->AddScreenAvailabilityListener( |
| 249 render_process_id, render_frame_id, &listener1)); | 256 render_process_id, render_frame_id, &listener1)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 266 content::WebContentsTester::For(GetWebContents()) | 273 content::WebContentsTester::For(GetWebContents()) |
| 267 ->NavigateAndCommit(frame_url); | 274 ->NavigateAndCommit(frame_url); |
| 268 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 275 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 269 ASSERT_TRUE(main_frame); | 276 ASSERT_TRUE(main_frame); |
| 270 int render_process_id = main_frame->GetProcess()->GetID(); | 277 int render_process_id = main_frame->GetProcess()->GetID(); |
| 271 int routing_id = main_frame->GetRoutingID(); | 278 int routing_id = main_frame->GetRoutingID(); |
| 272 | 279 |
| 273 auto callback = base::Bind( | 280 auto callback = base::Bind( |
| 274 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, | 281 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, |
| 275 base::Unretained(this)); | 282 base::Unretained(this)); |
| 276 std::vector<std::string> urls({kPresentationUrl1}); | |
| 277 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, | 283 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 278 urls, callback); | 284 presentation_urls_, callback); |
| 279 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); | 285 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); |
| 280 PresentationRequest request1 = | 286 PresentationRequest request1 = |
| 281 delegate_impl_->GetDefaultPresentationRequest(); | 287 delegate_impl_->GetDefaultPresentationRequest(); |
| 282 EXPECT_EQ(kPresentationUrl1, request1.presentation_url()); | 288 EXPECT_EQ(presentation_url1_, request1.presentation_url()); |
| 283 EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id), | 289 EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id), |
| 284 request1.render_frame_host_id()); | 290 request1.render_frame_host_id()); |
| 285 EXPECT_EQ(frame_url, request1.frame_url()); | 291 EXPECT_EQ(frame_url, request1.frame_url()); |
| 286 | 292 |
| 287 // Set to a new default presentation URL | 293 // Set to a new default presentation URL |
| 288 std::vector<std::string> new_urls({kPresentationUrl2}); | 294 std::vector<GURL> new_urls({presentation_url2_}); |
| 289 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, | 295 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 290 new_urls, callback); | 296 new_urls, callback); |
| 291 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); | 297 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); |
| 292 PresentationRequest request2 = | 298 PresentationRequest request2 = |
| 293 delegate_impl_->GetDefaultPresentationRequest(); | 299 delegate_impl_->GetDefaultPresentationRequest(); |
| 294 EXPECT_EQ(kPresentationUrl2, request2.presentation_url()); | 300 EXPECT_EQ(presentation_url2_, request2.presentation_url()); |
| 295 EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id), | 301 EXPECT_EQ(RenderFrameHostId(render_process_id, routing_id), |
| 296 request2.render_frame_host_id()); | 302 request2.render_frame_host_id()); |
| 297 EXPECT_EQ(frame_url, request2.frame_url()); | 303 EXPECT_EQ(frame_url, request2.frame_url()); |
| 298 | 304 |
| 299 // Remove default presentation URL. | 305 // Remove default presentation URL. |
| 300 delegate_impl_->SetDefaultPresentationUrls( | 306 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 301 render_process_id, routing_id, std::vector<std::string>(), callback); | 307 std::vector<GURL>(), callback); |
| 302 EXPECT_FALSE(delegate_impl_->HasDefaultPresentationRequest()); | 308 EXPECT_FALSE(delegate_impl_->HasDefaultPresentationRequest()); |
| 303 } | 309 } |
| 304 | 310 |
| 305 TEST_F(PresentationServiceDelegateImplTest, DefaultPresentationUrlCallback) { | 311 TEST_F(PresentationServiceDelegateImplTest, DefaultPresentationUrlCallback) { |
| 306 RunDefaultPresentationUrlCallbackTest(false); | 312 RunDefaultPresentationUrlCallbackTest(false); |
| 307 } | 313 } |
| 308 | 314 |
| 309 TEST_F(PresentationServiceDelegateImplIncognitoTest, | 315 TEST_F(PresentationServiceDelegateImplIncognitoTest, |
| 310 DefaultPresentationUrlCallback) { | 316 DefaultPresentationUrlCallback) { |
| 311 RunDefaultPresentationUrlCallbackTest(true); | 317 RunDefaultPresentationUrlCallbackTest(true); |
| 312 } | 318 } |
| 313 | 319 |
| 314 TEST_F(PresentationServiceDelegateImplTest, | 320 TEST_F(PresentationServiceDelegateImplTest, |
| 315 DefaultPresentationRequestObserver) { | 321 DefaultPresentationRequestObserver) { |
| 316 auto callback = base::Bind( | 322 auto callback = base::Bind( |
| 317 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, | 323 &PresentationServiceDelegateImplTest::OnDefaultPresentationStarted, |
| 318 base::Unretained(this)); | 324 base::Unretained(this)); |
| 319 | 325 |
| 320 StrictMock<MockDefaultPresentationRequestObserver> observer; | 326 StrictMock<MockDefaultPresentationRequestObserver> observer; |
| 321 delegate_impl_->AddDefaultPresentationRequestObserver(&observer); | 327 delegate_impl_->AddDefaultPresentationRequestObserver(&observer); |
| 322 | 328 |
| 323 GURL frame_url(kFrameUrl); | 329 GURL frame_url(kFrameUrl); |
| 324 content::WebContentsTester::For(GetWebContents()) | 330 content::WebContentsTester::For(GetWebContents()) |
| 325 ->NavigateAndCommit(frame_url); | 331 ->NavigateAndCommit(frame_url); |
| 326 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 332 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 327 ASSERT_TRUE(main_frame); | 333 ASSERT_TRUE(main_frame); |
| 328 int render_process_id = main_frame->GetProcess()->GetID(); | 334 int render_process_id = main_frame->GetProcess()->GetID(); |
| 329 int routing_id = main_frame->GetRoutingID(); | 335 int routing_id = main_frame->GetRoutingID(); |
| 330 | 336 |
| 337 std::vector<GURL> request1_urls({presentation_url1_}); |
| 331 PresentationRequest observed_request1( | 338 PresentationRequest observed_request1( |
| 332 RenderFrameHostId(render_process_id, routing_id), {kPresentationUrl1}, | 339 RenderFrameHostId(render_process_id, routing_id), request1_urls, |
| 333 frame_url); | 340 frame_url); |
| 334 EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request1))) | 341 EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request1))) |
| 335 .Times(1); | 342 .Times(1); |
| 336 std::vector<std::string> request1_urls({kPresentationUrl1}); | |
| 337 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, | 343 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 338 request1_urls, callback); | 344 request1_urls, callback); |
| 339 | 345 |
| 340 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); | 346 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); |
| 341 PresentationRequest request1 = | 347 PresentationRequest request1 = |
| 342 delegate_impl_->GetDefaultPresentationRequest(); | 348 delegate_impl_->GetDefaultPresentationRequest(); |
| 343 EXPECT_TRUE(request1.Equals(observed_request1)); | 349 EXPECT_TRUE(request1.Equals(observed_request1)); |
| 344 | 350 |
| 345 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer)); | 351 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer)); |
| 346 | 352 |
| 353 std::vector<GURL> request2_urls({presentation_url2_}); |
| 347 PresentationRequest observed_request2( | 354 PresentationRequest observed_request2( |
| 348 RenderFrameHostId(render_process_id, routing_id), {kPresentationUrl2}, | 355 RenderFrameHostId(render_process_id, routing_id), request2_urls, |
| 349 frame_url); | 356 frame_url); |
| 350 EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request2))) | 357 EXPECT_CALL(observer, OnDefaultPresentationChanged(Equals(observed_request2))) |
| 351 .Times(1); | 358 .Times(1); |
| 352 std::vector<std::string> request2_urls({kPresentationUrl2}); | |
| 353 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, | 359 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 354 request2_urls, callback); | 360 request2_urls, callback); |
| 355 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); | 361 ASSERT_TRUE(delegate_impl_->HasDefaultPresentationRequest()); |
| 356 PresentationRequest request2 = | 362 PresentationRequest request2 = |
| 357 delegate_impl_->GetDefaultPresentationRequest(); | 363 delegate_impl_->GetDefaultPresentationRequest(); |
| 358 EXPECT_TRUE(request2.Equals(observed_request2)); | 364 EXPECT_TRUE(request2.Equals(observed_request2)); |
| 359 | 365 |
| 360 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer)); | 366 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&observer)); |
| 361 | 367 |
| 362 // Remove default presentation URL. | 368 // Remove default presentation URL. |
| 363 EXPECT_CALL(observer, OnDefaultPresentationRemoved()).Times(1); | 369 EXPECT_CALL(observer, OnDefaultPresentationRemoved()).Times(1); |
| 364 delegate_impl_->SetDefaultPresentationUrls( | 370 delegate_impl_->SetDefaultPresentationUrls(render_process_id, routing_id, |
| 365 render_process_id, routing_id, std::vector<std::string>(), callback); | 371 std::vector<GURL>(), callback); |
| 366 } | 372 } |
| 367 | 373 |
| 368 TEST_F(PresentationServiceDelegateImplTest, ListenForConnnectionStateChange) { | 374 TEST_F(PresentationServiceDelegateImplTest, ListenForConnnectionStateChange) { |
| 369 GURL frame_url(kFrameUrl); | 375 GURL frame_url(kFrameUrl); |
| 370 content::WebContentsTester::For(GetWebContents()) | 376 content::WebContentsTester::For(GetWebContents()) |
| 371 ->NavigateAndCommit(frame_url); | 377 ->NavigateAndCommit(frame_url); |
| 372 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 378 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 373 ASSERT_TRUE(main_frame); | 379 ASSERT_TRUE(main_frame); |
| 374 int render_process_id = main_frame->GetProcess()->GetID(); | 380 int render_process_id = main_frame->GetProcess()->GetID(); |
| 375 int routing_id = main_frame->GetRoutingID(); | 381 int routing_id = main_frame->GetRoutingID(); |
| 376 | 382 |
| 377 // Set up a PresentationConnection so we can listen to it. | 383 // Set up a PresentationConnection so we can listen to it. |
| 378 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 384 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 379 EXPECT_CALL(router_, JoinRoute(_, _, _, _, _, _, false)) | 385 EXPECT_CALL(router_, JoinRoute(_, _, _, _, _, _, false)) |
| 380 .WillOnce(SaveArg<4>(&route_response_callbacks)); | 386 .WillOnce(SaveArg<4>(&route_response_callbacks)); |
| 381 | 387 |
| 382 const std::string kPresentationId("pid"); | 388 const std::string kPresentationId("pid"); |
| 383 std::vector<std::string> join_urls({kPresentationUrl1}); | |
| 384 MockCreatePresentationConnnectionCallbacks mock_create_connection_callbacks; | 389 MockCreatePresentationConnnectionCallbacks mock_create_connection_callbacks; |
| 385 delegate_impl_->JoinSession( | 390 delegate_impl_->JoinSession( |
| 386 render_process_id, routing_id, join_urls, kPresentationId, | 391 render_process_id, routing_id, presentation_urls_, kPresentationId, |
| 387 base::Bind(&MockCreatePresentationConnnectionCallbacks:: | 392 base::Bind(&MockCreatePresentationConnnectionCallbacks:: |
| 388 OnCreateConnectionSuccess, | 393 OnCreateConnectionSuccess, |
| 389 base::Unretained(&mock_create_connection_callbacks)), | 394 base::Unretained(&mock_create_connection_callbacks)), |
| 390 base::Bind( | 395 base::Bind( |
| 391 &MockCreatePresentationConnnectionCallbacks::OnCreateConnectionError, | 396 &MockCreatePresentationConnnectionCallbacks::OnCreateConnectionError, |
| 392 base::Unretained(&mock_create_connection_callbacks))); | 397 base::Unretained(&mock_create_connection_callbacks))); |
| 393 | 398 |
| 394 EXPECT_CALL(mock_create_connection_callbacks, OnCreateConnectionSuccess(_)) | 399 EXPECT_CALL(mock_create_connection_callbacks, OnCreateConnectionSuccess(_)) |
| 395 .Times(1); | 400 .Times(1); |
| 396 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromSuccess( | 401 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromSuccess( |
| 397 base::MakeUnique<MediaRoute>( | 402 base::MakeUnique<MediaRoute>( |
| 398 "routeId", MediaSourceForPresentationUrl(kPresentationUrl1), | 403 "routeId", MediaSourceForPresentationUrl(presentation_url1_), |
| 399 "mediaSinkId", "description", true, "", true), | 404 "mediaSinkId", "description", true, "", true), |
| 400 kPresentationId); | 405 kPresentationId); |
| 401 for (const auto& route_response_callback : route_response_callbacks) | 406 for (const auto& route_response_callback : route_response_callbacks) |
| 402 route_response_callback.Run(*result); | 407 route_response_callback.Run(*result); |
| 403 | 408 |
| 404 MockPresentationConnectionStateChangedCallback mock_callback; | 409 MockPresentationConnectionStateChangedCallback mock_callback; |
| 405 content::PresentationConnectionStateChangedCallback callback = | 410 content::PresentationConnectionStateChangedCallback callback = |
| 406 base::Bind(&MockPresentationConnectionStateChangedCallback::Run, | 411 base::Bind(&MockPresentationConnectionStateChangedCallback::Run, |
| 407 base::Unretained(&mock_callback)); | 412 base::Unretained(&mock_callback)); |
| 408 content::PresentationSessionInfo connection(kPresentationUrl1, | 413 content::PresentationSessionInfo connection(presentation_url1_, |
| 409 kPresentationId); | 414 kPresentationId); |
| 410 EXPECT_CALL(router_, OnAddPresentationConnectionStateChangedCallbackInvoked( | 415 EXPECT_CALL(router_, OnAddPresentationConnectionStateChangedCallbackInvoked( |
| 411 Equals(callback))); | 416 Equals(callback))); |
| 412 delegate_impl_->ListenForConnectionStateChange(render_process_id, routing_id, | 417 delegate_impl_->ListenForConnectionStateChange(render_process_id, routing_id, |
| 413 connection, callback); | 418 connection, callback); |
| 414 } | 419 } |
| 415 | 420 |
| 416 TEST_F(PresentationServiceDelegateImplTest, Reset) { | 421 TEST_F(PresentationServiceDelegateImplTest, Reset) { |
| 417 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)) | 422 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)) |
| 418 .WillRepeatedly(Return(true)); | 423 .WillRepeatedly(Return(true)); |
| 419 | 424 |
| 420 MediaSource source = MediaSourceForPresentationUrl(kPresentationUrl1); | 425 MediaSource source = MediaSourceForPresentationUrl(presentation_url1_); |
| 421 MockScreenAvailabilityListener listener1(kPresentationUrl1); | 426 MockScreenAvailabilityListener listener1(presentation_url1_); |
| 422 | 427 |
| 423 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 428 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 424 ASSERT_TRUE(main_frame); | 429 ASSERT_TRUE(main_frame); |
| 425 int render_process_id = main_frame->GetProcess()->GetID(); | 430 int render_process_id = main_frame->GetProcess()->GetID(); |
| 426 int render_frame_id = main_frame->GetRoutingID(); | 431 int render_frame_id = main_frame->GetRoutingID(); |
| 427 | 432 |
| 428 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( | 433 EXPECT_TRUE(delegate_impl_->AddScreenAvailabilityListener( |
| 429 render_process_id, render_frame_id, &listener1)); | 434 render_process_id, render_frame_id, &listener1)); |
| 430 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( | 435 EXPECT_TRUE(delegate_impl_->HasScreenAvailabilityListenerForTest( |
| 431 render_process_id, render_frame_id, source.id())); | 436 render_process_id, render_frame_id, source.id())); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 447 manager->AddObserver(345, 456, &delegate_observer2); | 452 manager->AddObserver(345, 456, &delegate_observer2); |
| 448 | 453 |
| 449 // Removes |delegate_observer2|. | 454 // Removes |delegate_observer2|. |
| 450 manager->RemoveObserver(345, 456); | 455 manager->RemoveObserver(345, 456); |
| 451 | 456 |
| 452 EXPECT_CALL(delegate_observer1, OnDelegateDestroyed()).Times(1); | 457 EXPECT_CALL(delegate_observer1, OnDelegateDestroyed()).Times(1); |
| 453 manager.reset(); | 458 manager.reset(); |
| 454 } | 459 } |
| 455 | 460 |
| 456 TEST_F(PresentationServiceDelegateImplTest, SinksObserverCantRegister) { | 461 TEST_F(PresentationServiceDelegateImplTest, SinksObserverCantRegister) { |
| 457 MockScreenAvailabilityListener listener(kPresentationUrl1); | 462 MockScreenAvailabilityListener listener(presentation_url1_); |
| 458 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); | 463 content::RenderFrameHost* main_frame = GetWebContents()->GetMainFrame(); |
| 459 ASSERT_TRUE(main_frame); | 464 ASSERT_TRUE(main_frame); |
| 460 int render_process_id = main_frame->GetProcess()->GetID(); | 465 int render_process_id = main_frame->GetProcess()->GetID(); |
| 461 int render_frame_id = main_frame->GetRoutingID(); | 466 int render_frame_id = main_frame->GetRoutingID(); |
| 462 | 467 |
| 463 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).WillOnce(Return(false)); | 468 EXPECT_CALL(router_, RegisterMediaSinksObserver(_)).WillOnce(Return(false)); |
| 464 EXPECT_CALL(listener, OnScreenAvailabilityNotSupported()); | 469 EXPECT_CALL(listener, OnScreenAvailabilityNotSupported()); |
| 465 EXPECT_FALSE(delegate_impl_->AddScreenAvailabilityListener( | 470 EXPECT_FALSE(delegate_impl_->AddScreenAvailabilityListener( |
| 466 render_process_id, render_frame_id, &listener)); | 471 render_process_id, render_frame_id, &listener)); |
| 467 } | 472 } |
| 468 | 473 |
| 469 } // namespace media_router | 474 } // namespace media_router |
| OLD | NEW |