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 |