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

Side by Side Diff: content/browser/presentation/presentation_service_impl_unittest.cc

Issue 2174693004: [Presentation API] Add support to content/ for multiple URLs per PresentationRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update service, dispatcher to use Mojo URLs. Created 4 years, 4 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 "content/browser/presentation/presentation_service_impl.h" 5 #include "content/browser/presentation/presentation_service_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 10 matching lines...) Expand all
21 #include "content/public/browser/presentation_session.h" 21 #include "content/public/browser/presentation_session.h"
22 #include "content/public/common/presentation_constants.h" 22 #include "content/public/common/presentation_constants.h"
23 #include "content/test/test_render_frame_host.h" 23 #include "content/test/test_render_frame_host.h"
24 #include "content/test/test_render_view_host.h" 24 #include "content/test/test_render_view_host.h"
25 #include "content/test/test_web_contents.h" 25 #include "content/test/test_web_contents.h"
26 #include "mojo/public/cpp/bindings/interface_ptr.h" 26 #include "mojo/public/cpp/bindings/interface_ptr.h"
27 #include "mojo/public/cpp/bindings/string.h" 27 #include "mojo/public/cpp/bindings/string.h"
28 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
29 29
30 using ::testing::_; 30 using ::testing::_;
31 using ::testing::ByRef;
31 using ::testing::Eq; 32 using ::testing::Eq;
32 using ::testing::InvokeWithoutArgs; 33 using ::testing::InvokeWithoutArgs;
33 using ::testing::Mock; 34 using ::testing::Mock;
34 using ::testing::Return; 35 using ::testing::Return;
35 using ::testing::SaveArg; 36 using ::testing::SaveArg;
36 37
37 namespace content { 38 namespace content {
38 39
39 namespace { 40 namespace {
40 41
41 // Matches mojo structs. 42 // Matches Mojo structs.
42 MATCHER_P(Equals, expected, "") { 43 MATCHER_P(Equals, expected, "") {
43 return expected.Equals(arg); 44 return expected.Equals(arg);
44 } 45 }
45 46
47 // Matches PresentationSessionInfo passed by reference.
48 MATCHER_P(SessionInfoEquals, expected, "") {
49 blink::mojom::PresentationSessionInfo& expected_value = expected;
50 return expected_value.Equals(arg);
51 }
52
46 const char *const kPresentationId = "presentationId"; 53 const char *const kPresentationId = "presentationId";
47 const char *const kPresentationUrl = "http://foo.com/index.html"; 54 const char* const kPresentationUrl1 = "http://foo.com/index.html";
55 const char* const kPresentationUrl2 = "http://example.com/index.html";
48 56
49 void DoNothing(blink::mojom::PresentationSessionInfoPtr info, 57 void DoNothing(blink::mojom::PresentationSessionInfoPtr info,
50 blink::mojom::PresentationErrorPtr error) {} 58 blink::mojom::PresentationErrorPtr error) {}
51 59
52 } // namespace 60 } // namespace
53 61
54 class MockPresentationServiceDelegate : public PresentationServiceDelegate { 62 class MockPresentationServiceDelegate : public PresentationServiceDelegate {
55 public: 63 public:
56 MOCK_METHOD3(AddObserver, 64 MOCK_METHOD3(AddObserver,
57 void(int render_process_id, 65 void(int render_process_id,
(...skipping 15 matching lines...) Expand all
73 81
74 MOCK_METHOD3(RemoveScreenAvailabilityListener, 82 MOCK_METHOD3(RemoveScreenAvailabilityListener,
75 void( 83 void(
76 int render_process_id, 84 int render_process_id,
77 int routing_id, 85 int routing_id,
78 PresentationScreenAvailabilityListener* listener)); 86 PresentationScreenAvailabilityListener* listener));
79 MOCK_METHOD2(Reset, 87 MOCK_METHOD2(Reset,
80 void( 88 void(
81 int render_process_id, 89 int render_process_id,
82 int routing_id)); 90 int routing_id));
83 MOCK_METHOD4(SetDefaultPresentationUrl, 91 MOCK_METHOD4(SetDefaultPresentationUrls,
84 void(int render_process_id, 92 void(int render_process_id,
85 int routing_id, 93 int routing_id,
86 const std::string& default_presentation_url, 94 const std::vector<std::string>& default_presentation_urls,
87 const PresentationSessionStartedCallback& callback)); 95 const PresentationSessionStartedCallback& callback));
88 MOCK_METHOD5(StartSession, 96 MOCK_METHOD5(StartSession,
89 void(int render_process_id, 97 void(int render_process_id,
90 int render_frame_id, 98 int render_frame_id,
91 const std::string& presentation_url, 99 const std::vector<std::string>& presentation_urls,
92 const PresentationSessionStartedCallback& success_cb, 100 const PresentationSessionStartedCallback& success_cb,
93 const PresentationSessionErrorCallback& error_cb)); 101 const PresentationSessionErrorCallback& error_cb));
94 MOCK_METHOD6(JoinSession, 102 MOCK_METHOD6(JoinSession,
95 void(int render_process_id, 103 void(int render_process_id,
96 int render_frame_id, 104 int render_frame_id,
97 const std::string& presentation_url, 105 const std::vector<std::string>& presentation_urls,
98 const std::string& presentation_id, 106 const std::string& presentation_id,
99 const PresentationSessionStartedCallback& success_cb, 107 const PresentationSessionStartedCallback& success_cb,
100 const PresentationSessionErrorCallback& error_cb)); 108 const PresentationSessionErrorCallback& error_cb));
101 MOCK_METHOD3(CloseConnection, 109 MOCK_METHOD3(CloseConnection,
102 void(int render_process_id, 110 void(int render_process_id,
103 int render_frame_id, 111 int render_frame_id,
104 const std::string& presentation_id)); 112 const std::string& presentation_id));
105 MOCK_METHOD3(Terminate, 113 MOCK_METHOD3(Terminate,
106 void(int render_process_id, 114 void(int render_process_id,
107 int render_frame_id, 115 int render_frame_id,
(...skipping 28 matching lines...) Expand all
136 screen_availability_listening_supported_ = value; 144 screen_availability_listening_supported_ = value;
137 } 145 }
138 146
139 private: 147 private:
140 bool screen_availability_listening_supported_ = true; 148 bool screen_availability_listening_supported_ = true;
141 }; 149 };
142 150
143 class MockPresentationServiceClient 151 class MockPresentationServiceClient
144 : public blink::mojom::PresentationServiceClient { 152 : public blink::mojom::PresentationServiceClient {
145 public: 153 public:
154 void OnScreenAvailabilityUpdated(url::mojom::UrlPtr url, bool available) {
155 OnScreenAvailabilityUpdated(*url, available);
156 }
146 MOCK_METHOD2(OnScreenAvailabilityUpdated, 157 MOCK_METHOD2(OnScreenAvailabilityUpdated,
147 void(const std::string& url, bool available)); 158 void(const url::mojom::Url& url, bool available));
148 void OnConnectionStateChanged( 159 void OnConnectionStateChanged(
149 blink::mojom::PresentationSessionInfoPtr connection, 160 blink::mojom::PresentationSessionInfoPtr connection,
150 blink::mojom::PresentationConnectionState new_state) override { 161 blink::mojom::PresentationConnectionState new_state) override {
151 OnConnectionStateChanged(*connection, new_state); 162 OnConnectionStateChanged(*connection, new_state);
152 } 163 }
153 MOCK_METHOD2(OnConnectionStateChanged, 164 MOCK_METHOD2(OnConnectionStateChanged,
154 void(const blink::mojom::PresentationSessionInfo& connection, 165 void(const blink::mojom::PresentationSessionInfo& connection,
155 blink::mojom::PresentationConnectionState new_state)); 166 blink::mojom::PresentationConnectionState new_state));
156 167
157 void OnConnectionClosed( 168 void OnConnectionClosed(
158 blink::mojom::PresentationSessionInfoPtr connection, 169 blink::mojom::PresentationSessionInfoPtr connection,
159 blink::mojom::PresentationConnectionCloseReason reason, 170 blink::mojom::PresentationConnectionCloseReason reason,
160 const std::string& message) override { 171 const std::string& message) override {
161 OnConnectionClosed(*connection, reason, message); 172 OnConnectionClosed(*connection, reason, message);
162 } 173 }
163 MOCK_METHOD3(OnConnectionClosed, 174 MOCK_METHOD3(OnConnectionClosed,
164 void(const blink::mojom::PresentationSessionInfo& connection, 175 void(const blink::mojom::PresentationSessionInfo& connection,
165 blink::mojom::PresentationConnectionCloseReason reason, 176 blink::mojom::PresentationConnectionCloseReason reason,
166 const std::string& message)); 177 const std::string& message));
167 178
168 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const std::string& url)); 179 void OnScreenAvailabilityNotSupported(url::mojom::UrlPtr url) {
180 OnScreenAvailabilityNotSupported(*url);
181 }
182 MOCK_METHOD1(OnScreenAvailabilityNotSupported,
183 void(const url::mojom::Url& url));
169 184
170 void OnSessionMessagesReceived( 185 void OnSessionMessagesReceived(
171 blink::mojom::PresentationSessionInfoPtr session_info, 186 blink::mojom::PresentationSessionInfoPtr session_info,
172 std::vector<blink::mojom::SessionMessagePtr> messages) override { 187 std::vector<blink::mojom::SessionMessagePtr> messages) override {
173 messages_received_ = std::move(messages); 188 messages_received_ = std::move(messages);
174 MessagesReceived(); 189 MessagesReceived();
175 } 190 }
176 MOCK_METHOD0(MessagesReceived, void()); 191 MOCK_METHOD0(MessagesReceived, void());
177 192
178 void OnDefaultSessionStarted( 193 void OnDefaultSessionStarted(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 bool delegate_success) { 235 bool delegate_success) {
221 base::RunLoop run_loop; 236 base::RunLoop run_loop;
222 // This will call to |service_impl_| via mojo. Process the message 237 // This will call to |service_impl_| via mojo. Process the message
223 // using RunLoop. 238 // using RunLoop.
224 // The callback shouldn't be invoked since there is no availability 239 // The callback shouldn't be invoked since there is no availability
225 // result yet. 240 // result yet.
226 EXPECT_CALL(mock_delegate_, AddScreenAvailabilityListener()) 241 EXPECT_CALL(mock_delegate_, AddScreenAvailabilityListener())
227 .WillOnce(DoAll( 242 .WillOnce(DoAll(
228 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), 243 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
229 Return(delegate_success))); 244 Return(delegate_success)));
230 service_ptr_->ListenForScreenAvailability(url); 245 url::mojom::UrlPtr mojo_url = url::mojom::Url::New();
246 mojo_url->url = url;
247 service_ptr_->ListenForScreenAvailability(std::move(mojo_url));
231 run_loop.Run(); 248 run_loop.Run();
232 249
233 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 250 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
234 } 251 }
235 252
236 void RunLoopFor(base::TimeDelta duration) { 253 void RunLoopFor(base::TimeDelta duration) {
237 base::RunLoop run_loop; 254 base::RunLoop run_loop;
238 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 255 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
239 FROM_HERE, run_loop.QuitClosure(), duration); 256 FROM_HERE, run_loop.QuitClosure(), duration);
240 run_loop.Run(); 257 run_loop.Run();
241 } 258 }
242 259
243 void SaveQuitClosureAndRunLoop() { 260 void SaveQuitClosureAndRunLoop() {
244 base::RunLoop run_loop; 261 base::RunLoop run_loop;
245 run_loop_quit_closure_ = run_loop.QuitClosure(); 262 run_loop_quit_closure_ = run_loop.QuitClosure();
246 run_loop.Run(); 263 run_loop.Run();
247 run_loop_quit_closure_.Reset(); 264 run_loop_quit_closure_.Reset();
248 } 265 }
249 266
250 void SimulateScreenAvailabilityChangeAndWait( 267 void SimulateScreenAvailabilityChangeAndWait(
251 const std::string& url, bool available) { 268 const std::string& url, bool available) {
252 auto listener_it = service_impl_->screen_availability_listeners_.find(url); 269 auto listener_it = service_impl_->screen_availability_listeners_.find(url);
253 ASSERT_TRUE(listener_it->second); 270 ASSERT_TRUE(listener_it->second);
254 271
255 base::RunLoop run_loop; 272 base::RunLoop run_loop;
256 EXPECT_CALL(mock_client_, OnScreenAvailabilityUpdated(url, available)) 273 url::mojom::Url mojo_url;
274 mojo_url.url = url;
275 EXPECT_CALL(mock_client_,
276 OnScreenAvailabilityUpdated(Equals(mojo_url), available))
257 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 277 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
258 listener_it->second->OnScreenAvailabilityChanged(available); 278 listener_it->second->OnScreenAvailabilityChanged(available);
259 run_loop.Run(); 279 run_loop.Run();
260 } 280 }
261 281
262 void ExpectReset() { 282 void ExpectReset() {
263 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1); 283 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1);
264 } 284 }
265 285
266 void ExpectCleanState() { 286 void ExpectCleanState() {
267 EXPECT_TRUE(service_impl_->default_presentation_url_.empty()); 287 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty());
268 EXPECT_EQ( 288 EXPECT_EQ(
269 service_impl_->screen_availability_listeners_.find(kPresentationUrl), 289 service_impl_->screen_availability_listeners_.find(kPresentationUrl1),
270 service_impl_->screen_availability_listeners_.end()); 290 service_impl_->screen_availability_listeners_.end());
271 EXPECT_FALSE(service_impl_->on_session_messages_callback_.get()); 291 EXPECT_FALSE(service_impl_->on_session_messages_callback_.get());
272 } 292 }
273 293
274 void ExpectNewSessionCallbackSuccess( 294 void ExpectNewSessionCallbackSuccess(
275 blink::mojom::PresentationSessionInfoPtr info, 295 blink::mojom::PresentationSessionInfoPtr info,
276 blink::mojom::PresentationErrorPtr error) { 296 blink::mojom::PresentationErrorPtr error) {
277 EXPECT_FALSE(info.is_null()); 297 EXPECT_FALSE(info.is_null());
278 EXPECT_TRUE(error.is_null()); 298 EXPECT_TRUE(error.is_null());
279 if (!run_loop_quit_closure_.is_null()) 299 if (!run_loop_quit_closure_.is_null())
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 expected_msgs[0] = blink::mojom::SessionMessage::New(); 331 expected_msgs[0] = blink::mojom::SessionMessage::New();
312 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; 332 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT;
313 expected_msgs[0]->message = text_msg; 333 expected_msgs[0]->message = text_msg;
314 expected_msgs[1] = blink::mojom::SessionMessage::New(); 334 expected_msgs[1] = blink::mojom::SessionMessage::New();
315 expected_msgs[1]->type = 335 expected_msgs[1]->type =
316 blink::mojom::PresentationMessageType::ARRAY_BUFFER; 336 blink::mojom::PresentationMessageType::ARRAY_BUFFER;
317 expected_msgs[1]->data = binary_data; 337 expected_msgs[1]->data = binary_data;
318 338
319 blink::mojom::PresentationSessionInfoPtr session( 339 blink::mojom::PresentationSessionInfoPtr session(
320 blink::mojom::PresentationSessionInfo::New()); 340 blink::mojom::PresentationSessionInfo::New());
321 session->url = kPresentationUrl; 341 session->url = url::mojom::Url::New();
342 session->url->url = kPresentationUrl1;
322 session->id = kPresentationId; 343 session->id = kPresentationId;
323 344
324 PresentationSessionMessageCallback message_cb; 345 PresentationSessionMessageCallback message_cb;
325 { 346 {
326 base::RunLoop run_loop; 347 base::RunLoop run_loop;
327 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _)) 348 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _))
328 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), 349 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
329 SaveArg<3>(&message_cb))); 350 SaveArg<3>(&message_cb)));
330 service_ptr_->ListenForSessionMessages(session.Clone()); 351 service_ptr_->ListenForSessionMessages(std::move(session));
331 run_loop.Run(); 352 run_loop.Run();
332 } 353 }
333 354
334 ScopedVector<PresentationSessionMessage> messages; 355 ScopedVector<PresentationSessionMessage> messages;
335 std::unique_ptr<content::PresentationSessionMessage> message; 356 std::unique_ptr<content::PresentationSessionMessage> message;
336 message.reset( 357 message.reset(
337 new content::PresentationSessionMessage(PresentationMessageType::TEXT)); 358 new content::PresentationSessionMessage(PresentationMessageType::TEXT));
338 message->message = text_msg; 359 message->message = text_msg;
339 messages.push_back(std::move(message)); 360 messages.push_back(std::move(message));
340 message.reset(new content::PresentationSessionMessage( 361 message.reset(new content::PresentationSessionMessage(
341 PresentationMessageType::ARRAY_BUFFER)); 362 PresentationMessageType::ARRAY_BUFFER));
342 message->data.reset(new std::vector<uint8_t>(binary_data)); 363 message->data.reset(new std::vector<uint8_t>(binary_data));
343 messages.push_back(std::move(message)); 364 messages.push_back(std::move(message));
344 365
345 std::vector<blink::mojom::SessionMessagePtr> actual_msgs; 366 std::vector<blink::mojom::SessionMessagePtr> actual_msgs;
346 { 367 {
347 base::RunLoop run_loop; 368 base::RunLoop run_loop;
348 EXPECT_CALL(mock_client_, MessagesReceived()) 369 EXPECT_CALL(mock_client_, MessagesReceived())
349 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 370 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
350 message_cb.Run(std::move(messages), pass_ownership); 371 message_cb.Run(std::move(messages), pass_ownership);
351 run_loop.Run(); 372 run_loop.Run();
352 } 373 }
353 ExpectSessionMessages(expected_msgs, mock_client_.messages_received_); 374 ExpectSessionMessages(expected_msgs, mock_client_.messages_received_);
354 } 375 }
355 376
377 std::vector<url::mojom::UrlPtr> ToMojoUrls(
378 const std::vector<std::string>& urls) {
379 std::vector<url::mojom::UrlPtr> mojo_urls(urls.size());
380 std::transform(urls.begin(), urls.end(), mojo_urls.begin(),
381 [](const std::string& url) {
382 url::mojom::UrlPtr mojo_url = url::mojom::Url::New();
383 mojo_url->url = url;
384 return mojo_url;
385 });
386 return mojo_urls;
387 }
388
356 MockPresentationServiceDelegate mock_delegate_; 389 MockPresentationServiceDelegate mock_delegate_;
357 390
358 std::unique_ptr<PresentationServiceImpl> service_impl_; 391 std::unique_ptr<PresentationServiceImpl> service_impl_;
359 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_; 392 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_;
360 393
361 MockPresentationServiceClient mock_client_; 394 MockPresentationServiceClient mock_client_;
362 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>> 395 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>>
363 client_binding_; 396 client_binding_;
364 397
365 base::Closure run_loop_quit_closure_; 398 base::Closure run_loop_quit_closure_;
366 }; 399 };
367 400
368 TEST_F(PresentationServiceImplTest, ListenForScreenAvailability) { 401 TEST_F(PresentationServiceImplTest, ListenForScreenAvailability) {
369 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 402 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
370 403
371 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl, true); 404 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl1, true);
372 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl, false); 405 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl1, false);
373 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl, true); 406 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl1, true);
374 } 407 }
375 408
376 TEST_F(PresentationServiceImplTest, Reset) { 409 TEST_F(PresentationServiceImplTest, Reset) {
377 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 410 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
378 411
379 ExpectReset(); 412 ExpectReset();
380 service_impl_->Reset(); 413 service_impl_->Reset();
381 ExpectCleanState(); 414 ExpectCleanState();
382 } 415 }
383 416
384 TEST_F(PresentationServiceImplTest, DidNavigateThisFrame) { 417 TEST_F(PresentationServiceImplTest, DidNavigateThisFrame) {
385 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 418 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
386 419
387 ExpectReset(); 420 ExpectReset();
388 service_impl_->DidNavigateAnyFrame( 421 service_impl_->DidNavigateAnyFrame(
389 contents()->GetMainFrame(), 422 contents()->GetMainFrame(),
390 content::LoadCommittedDetails(), 423 content::LoadCommittedDetails(),
391 content::FrameNavigateParams()); 424 content::FrameNavigateParams());
392 ExpectCleanState(); 425 ExpectCleanState();
393 } 426 }
394 427
395 TEST_F(PresentationServiceImplTest, DidNavigateOtherFrame) { 428 TEST_F(PresentationServiceImplTest, DidNavigateOtherFrame) {
396 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 429 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
397 430
398 // TODO(imcheng): How to get a different RenderFrameHost? 431 // TODO(imcheng): How to get a different RenderFrameHost?
399 service_impl_->DidNavigateAnyFrame( 432 service_impl_->DidNavigateAnyFrame(
400 nullptr, 433 nullptr,
401 content::LoadCommittedDetails(), 434 content::LoadCommittedDetails(),
402 content::FrameNavigateParams()); 435 content::FrameNavigateParams());
403 436
404 // Availability is reported and callback is invoked since it was not 437 // Availability is reported and callback is invoked since it was not
405 // removed. 438 // removed.
406 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl, true); 439 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl1, true);
407 } 440 }
408 441
409 TEST_F(PresentationServiceImplTest, ThisRenderFrameDeleted) { 442 TEST_F(PresentationServiceImplTest, ThisRenderFrameDeleted) {
410 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 443 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
411 444
412 ExpectReset(); 445 ExpectReset();
413 446
414 // Since the frame matched the service, |service_impl_| will be deleted. 447 // Since the frame matched the service, |service_impl_| will be deleted.
415 PresentationServiceImpl* service = service_impl_.release(); 448 PresentationServiceImpl* service = service_impl_.release();
416 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1); 449 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1);
417 service->RenderFrameDeleted(contents()->GetMainFrame()); 450 service->RenderFrameDeleted(contents()->GetMainFrame());
418 } 451 }
419 452
420 TEST_F(PresentationServiceImplTest, OtherRenderFrameDeleted) { 453 TEST_F(PresentationServiceImplTest, OtherRenderFrameDeleted) {
421 ListenForScreenAvailabilityAndWait(kPresentationUrl, true); 454 ListenForScreenAvailabilityAndWait(kPresentationUrl1, true);
422 455
423 // TODO(imcheng): How to get a different RenderFrameHost? 456 // TODO(imcheng): How to get a different RenderFrameHost?
424 service_impl_->RenderFrameDeleted(nullptr); 457 service_impl_->RenderFrameDeleted(nullptr);
425 458
426 // Availability is reported and callback should be invoked since listener 459 // Availability is reported and callback should be invoked since listener
427 // has not been deleted. 460 // has not been deleted.
428 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl, true); 461 SimulateScreenAvailabilityChangeAndWait(kPresentationUrl1, true);
429 } 462 }
430 463
431 TEST_F(PresentationServiceImplTest, DelegateFails) { 464 TEST_F(PresentationServiceImplTest, DelegateFails) {
432 ListenForScreenAvailabilityAndWait(kPresentationUrl, false); 465 ListenForScreenAvailabilityAndWait(kPresentationUrl1, false);
433 ASSERT_EQ( 466 ASSERT_EQ(
434 service_impl_->screen_availability_listeners_.find(kPresentationUrl), 467 service_impl_->screen_availability_listeners_.find(kPresentationUrl1),
435 service_impl_->screen_availability_listeners_.end()); 468 service_impl_->screen_availability_listeners_.end());
436 } 469 }
437 470
438 TEST_F(PresentationServiceImplTest, SetDefaultPresentationUrl) { 471 TEST_F(PresentationServiceImplTest, SetDefaultPresentationUrls) {
439 std::string url1("http://fooUrl"); 472 std::vector<std::string> urls(2);
440 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrl(_, _, Eq(url1), _)) 473 urls[0] = kPresentationUrl1;
474 urls[1] = kPresentationUrl2;
475 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, urls, _))
441 .Times(1); 476 .Times(1);
442 service_impl_->SetDefaultPresentationURL(url1);
443 EXPECT_EQ(url1, service_impl_->default_presentation_url_);
444 477
445 std::string url2("http://barUrl"); 478 service_impl_->SetDefaultPresentationUrls(ToMojoUrls(urls));
446 // Sets different DPU. 479
480 std::string url3("http://barUrl");
481 // Sets different DPUs.
482 std::vector<std::string> more_urls(3);
483 more_urls[0] = kPresentationUrl1;
484 more_urls[1] = kPresentationUrl2;
485 more_urls[2] = url3;
486
447 content::PresentationSessionStartedCallback callback; 487 content::PresentationSessionStartedCallback callback;
448 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrl(_, _, Eq(url2), _)) 488 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _))
449 .WillOnce(SaveArg<3>(&callback)); 489 .WillOnce(SaveArg<3>(&callback));
450 service_impl_->SetDefaultPresentationURL(url2); 490 service_impl_->SetDefaultPresentationUrls(ToMojoUrls(more_urls));
451 EXPECT_EQ(url2, service_impl_->default_presentation_url_);
452 491
453 blink::mojom::PresentationSessionInfo session_info; 492 blink::mojom::PresentationSessionInfo session_info;
454 session_info.url = url2; 493 session_info.url = url::mojom::Url::New();
494 session_info.url->url = kPresentationUrl2;
455 session_info.id = kPresentationId; 495 session_info.id = kPresentationId;
456 base::RunLoop run_loop; 496 base::RunLoop run_loop;
457 EXPECT_CALL(mock_client_, OnDefaultSessionStarted(Equals(session_info))) 497 EXPECT_CALL(mock_client_,
498 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info))))
458 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 499 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
459 callback.Run(content::PresentationSessionInfo(url2, kPresentationId)); 500 callback.Run(
501 content::PresentationSessionInfo(kPresentationUrl2, kPresentationId));
460 run_loop.Run(); 502 run_loop.Run();
461 } 503 }
462 504
463 TEST_F(PresentationServiceImplTest, ListenForConnectionStateChange) { 505 TEST_F(PresentationServiceImplTest, ListenForConnectionStateChange) {
464 content::PresentationSessionInfo connection(kPresentationUrl, 506 content::PresentationSessionInfo connection(kPresentationUrl1,
465 kPresentationId); 507 kPresentationId);
466 content::PresentationConnectionStateChangedCallback state_changed_cb; 508 content::PresentationConnectionStateChangedCallback state_changed_cb;
467 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) 509 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _))
468 .WillOnce(SaveArg<3>(&state_changed_cb)); 510 .WillOnce(SaveArg<3>(&state_changed_cb));
469 service_impl_->ListenForConnectionStateChange(connection); 511 service_impl_->ListenForConnectionStateChange(connection);
470 512
471 // Trigger state change. It should be propagated back up to |mock_client_|. 513 // Trigger state change. It should be propagated back up to |mock_client_|.
472 blink::mojom::PresentationSessionInfo presentation_connection; 514 blink::mojom::PresentationSessionInfo presentation_connection;
473 presentation_connection.url = kPresentationUrl; 515 presentation_connection.url = url::mojom::Url::New();
516 presentation_connection.url->url = kPresentationUrl1;
474 presentation_connection.id = kPresentationId; 517 presentation_connection.id = kPresentationId;
475 { 518 {
476 base::RunLoop run_loop; 519 base::RunLoop run_loop;
477 EXPECT_CALL(mock_client_, 520 EXPECT_CALL(mock_client_,
478 OnConnectionStateChanged( 521 OnConnectionStateChanged(
479 Equals(presentation_connection), 522 SessionInfoEquals(ByRef(presentation_connection)),
480 blink::mojom::PresentationConnectionState::TERMINATED)) 523 blink::mojom::PresentationConnectionState::TERMINATED))
481 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 524 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
482 state_changed_cb.Run(PresentationConnectionStateChangeInfo( 525 state_changed_cb.Run(PresentationConnectionStateChangeInfo(
483 PRESENTATION_CONNECTION_STATE_TERMINATED)); 526 PRESENTATION_CONNECTION_STATE_TERMINATED));
484 run_loop.Run(); 527 run_loop.Run();
485 } 528 }
486 } 529 }
487 530
488 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { 531 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) {
489 content::PresentationSessionInfo connection(kPresentationUrl, 532 content::PresentationSessionInfo connection(kPresentationUrl1,
490 kPresentationId); 533 kPresentationId);
491 content::PresentationConnectionStateChangedCallback state_changed_cb; 534 content::PresentationConnectionStateChangedCallback state_changed_cb;
492 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) 535 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _))
493 .WillOnce(SaveArg<3>(&state_changed_cb)); 536 .WillOnce(SaveArg<3>(&state_changed_cb));
494 service_impl_->ListenForConnectionStateChange(connection); 537 service_impl_->ListenForConnectionStateChange(connection);
495 538
496 // Trigger connection close. It should be propagated back up to 539 // Trigger connection close. It should be propagated back up to
497 // |mock_client_|. 540 // |mock_client_|.
498 blink::mojom::PresentationSessionInfo presentation_connection; 541 blink::mojom::PresentationSessionInfo presentation_connection;
499 presentation_connection.url = kPresentationUrl; 542 presentation_connection.url = url::mojom::Url::New();
543 presentation_connection.url->url = kPresentationUrl1;
500 presentation_connection.id = kPresentationId; 544 presentation_connection.id = kPresentationId;
501 { 545 {
502 base::RunLoop run_loop; 546 base::RunLoop run_loop;
503 PresentationConnectionStateChangeInfo closed_info( 547 PresentationConnectionStateChangeInfo closed_info(
504 PRESENTATION_CONNECTION_STATE_CLOSED); 548 PRESENTATION_CONNECTION_STATE_CLOSED);
505 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; 549 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY;
506 closed_info.message = "Foo"; 550 closed_info.message = "Foo";
507 551
508 EXPECT_CALL( 552 EXPECT_CALL(
509 mock_client_, 553 mock_client_,
510 OnConnectionClosed( 554 OnConnectionClosed(
511 Equals(presentation_connection), 555 SessionInfoEquals(ByRef(presentation_connection)),
512 blink::mojom::PresentationConnectionCloseReason::WENT_AWAY, "Foo")) 556 blink::mojom::PresentationConnectionCloseReason::WENT_AWAY, "Foo"))
513 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 557 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
514 state_changed_cb.Run(closed_info); 558 state_changed_cb.Run(closed_info);
515 run_loop.Run(); 559 run_loop.Run();
516 } 560 }
517 } 561 }
518 562
519 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrl) { 563 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) {
520 EXPECT_CALL(mock_delegate_, 564 std::vector<std::string> urls(2);
521 SetDefaultPresentationUrl(_, _, Eq(kPresentationUrl), _)) 565 urls[0] = kPresentationUrl1;
566 urls[1] = kPresentationUrl2;
567
568 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, urls, _))
522 .Times(1); 569 .Times(1);
523 service_impl_->SetDefaultPresentationURL(kPresentationUrl); 570 service_impl_->SetDefaultPresentationUrls(ToMojoUrls(urls));
524 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 571 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
525 EXPECT_EQ(kPresentationUrl, service_impl_->default_presentation_url_);
526 572
527 // Same URL as before; no-ops. 573 // Same URLs as before; no-ops.
528 service_impl_->SetDefaultPresentationURL(kPresentationUrl); 574 service_impl_->SetDefaultPresentationUrls(ToMojoUrls(urls));
529 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 575 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
530 EXPECT_EQ(kPresentationUrl, service_impl_->default_presentation_url_);
531 } 576 }
532 577
533 TEST_F(PresentationServiceImplTest, StartSessionSuccess) { 578 TEST_F(PresentationServiceImplTest, StartSessionSuccess) {
579 std::vector<std::string> urls(2);
580 urls[0] = kPresentationUrl1;
581 urls[1] = kPresentationUrl2;
582
534 service_ptr_->StartSession( 583 service_ptr_->StartSession(
535 kPresentationUrl, 584 ToMojoUrls(urls),
536 base::Bind( 585 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackSuccess,
537 &PresentationServiceImplTest::ExpectNewSessionCallbackSuccess, 586 base::Unretained(this)));
538 base::Unretained(this)));
539 base::RunLoop run_loop; 587 base::RunLoop run_loop;
540 base::Callback<void(const PresentationSessionInfo&)> success_cb; 588 base::Callback<void(const PresentationSessionInfo&)> success_cb;
541 EXPECT_CALL(mock_delegate_, StartSession(_, _, Eq(kPresentationUrl), _, _)) 589 EXPECT_CALL(mock_delegate_, StartSession(_, _, urls, _, _))
542 .WillOnce(DoAll( 590 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
543 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), 591 SaveArg<3>(&success_cb)));
544 SaveArg<3>(&success_cb)));
545 run_loop.Run(); 592 run_loop.Run();
546 593
547 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) 594 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _))
548 .Times(1); 595 .Times(1);
549 success_cb.Run(PresentationSessionInfo(kPresentationUrl, kPresentationId)); 596 success_cb.Run(PresentationSessionInfo(kPresentationUrl1, kPresentationId));
550 SaveQuitClosureAndRunLoop(); 597 SaveQuitClosureAndRunLoop();
551 } 598 }
552 599
553 TEST_F(PresentationServiceImplTest, StartSessionError) { 600 TEST_F(PresentationServiceImplTest, StartSessionError) {
601 std::vector<std::string> urls(2);
602 urls[0] = kPresentationUrl1;
603 urls[1] = kPresentationUrl2;
604
554 service_ptr_->StartSession( 605 service_ptr_->StartSession(
555 kPresentationUrl, 606 ToMojoUrls(urls),
556 base::Bind( 607 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError,
557 &PresentationServiceImplTest::ExpectNewSessionCallbackError, 608 base::Unretained(this)));
558 base::Unretained(this)));
559 base::RunLoop run_loop; 609 base::RunLoop run_loop;
560 base::Callback<void(const PresentationError&)> error_cb; 610 base::Callback<void(const PresentationError&)> error_cb;
561 EXPECT_CALL(mock_delegate_, StartSession(_, _, Eq(kPresentationUrl), _, _)) 611 EXPECT_CALL(mock_delegate_, StartSession(_, _, urls, _, _))
562 .WillOnce(DoAll( 612 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
563 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), 613 SaveArg<4>(&error_cb)));
564 SaveArg<4>(&error_cb)));
565 run_loop.Run(); 614 run_loop.Run();
566 error_cb.Run(PresentationError(PRESENTATION_ERROR_UNKNOWN, "Error message")); 615 error_cb.Run(PresentationError(PRESENTATION_ERROR_UNKNOWN, "Error message"));
567 SaveQuitClosureAndRunLoop(); 616 SaveQuitClosureAndRunLoop();
568 } 617 }
569 618
570 TEST_F(PresentationServiceImplTest, JoinSessionSuccess) { 619 TEST_F(PresentationServiceImplTest, JoinSessionSuccess) {
620 std::vector<std::string> urls(2);
621 urls[0] = kPresentationUrl1;
622 urls[1] = kPresentationUrl2;
623
571 service_ptr_->JoinSession( 624 service_ptr_->JoinSession(
572 kPresentationUrl, base::Optional<std::string>(kPresentationId), 625 ToMojoUrls(urls), base::Optional<std::string>(kPresentationId),
573 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackSuccess, 626 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackSuccess,
574 base::Unretained(this))); 627 base::Unretained(this)));
575 base::RunLoop run_loop; 628 base::RunLoop run_loop;
576 base::Callback<void(const PresentationSessionInfo&)> success_cb; 629 base::Callback<void(const PresentationSessionInfo&)> success_cb;
577 EXPECT_CALL(mock_delegate_, JoinSession( 630 EXPECT_CALL(mock_delegate_, JoinSession(_, _, urls, kPresentationId, _, _))
578 _, _, Eq(kPresentationUrl), Eq(kPresentationId), _, _)) 631 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
579 .WillOnce(DoAll( 632 SaveArg<4>(&success_cb)));
580 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
581 SaveArg<4>(&success_cb)));
582 run_loop.Run(); 633 run_loop.Run();
583 634
584 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) 635 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _))
585 .Times(1); 636 .Times(1);
586 success_cb.Run(PresentationSessionInfo(kPresentationUrl, kPresentationId)); 637 success_cb.Run(PresentationSessionInfo(kPresentationUrl1, kPresentationId));
587 SaveQuitClosureAndRunLoop(); 638 SaveQuitClosureAndRunLoop();
588 } 639 }
589 640
590 TEST_F(PresentationServiceImplTest, JoinSessionError) { 641 TEST_F(PresentationServiceImplTest, JoinSessionError) {
642 std::vector<std::string> urls(2);
643 urls[0] = kPresentationUrl1;
644 urls[1] = kPresentationUrl2;
645
591 service_ptr_->JoinSession( 646 service_ptr_->JoinSession(
592 kPresentationUrl, base::Optional<std::string>(kPresentationId), 647 ToMojoUrls(urls), base::Optional<std::string>(kPresentationId),
593 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, 648 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError,
594 base::Unretained(this))); 649 base::Unretained(this)));
595 base::RunLoop run_loop; 650 base::RunLoop run_loop;
596 base::Callback<void(const PresentationError&)> error_cb; 651 base::Callback<void(const PresentationError&)> error_cb;
597 EXPECT_CALL(mock_delegate_, JoinSession( 652 EXPECT_CALL(mock_delegate_, JoinSession(_, _, urls, kPresentationId, _, _))
598 _, _, Eq(kPresentationUrl), Eq(kPresentationId), _, _)) 653 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
599 .WillOnce(DoAll( 654 SaveArg<5>(&error_cb)));
600 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
601 SaveArg<5>(&error_cb)));
602 run_loop.Run(); 655 run_loop.Run();
603 error_cb.Run(PresentationError(PRESENTATION_ERROR_UNKNOWN, "Error message")); 656 error_cb.Run(PresentationError(PRESENTATION_ERROR_UNKNOWN, "Error message"));
604 SaveQuitClosureAndRunLoop(); 657 SaveQuitClosureAndRunLoop();
605 } 658 }
606 659
607 TEST_F(PresentationServiceImplTest, CloseConnection) { 660 TEST_F(PresentationServiceImplTest, CloseConnection) {
608 service_ptr_->CloseConnection(kPresentationUrl, kPresentationId); 661 url::mojom::UrlPtr url = url::mojom::Url::New();
662 url->url = kPresentationUrl1;
663 service_ptr_->CloseConnection(std::move(url), kPresentationId);
664
609 base::RunLoop run_loop; 665 base::RunLoop run_loop;
610 EXPECT_CALL(mock_delegate_, CloseConnection(_, _, Eq(kPresentationId))) 666 EXPECT_CALL(mock_delegate_, CloseConnection(_, _, Eq(kPresentationId)))
611 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 667 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
612 run_loop.Run(); 668 run_loop.Run();
613 } 669 }
614 670
615 TEST_F(PresentationServiceImplTest, Terminate) { 671 TEST_F(PresentationServiceImplTest, Terminate) {
616 service_ptr_->Terminate(kPresentationUrl, kPresentationId); 672 url::mojom::UrlPtr url = url::mojom::Url::New();
673 url->url = kPresentationUrl1;
674 service_ptr_->Terminate(std::move(url), kPresentationId);
617 base::RunLoop run_loop; 675 base::RunLoop run_loop;
618 EXPECT_CALL(mock_delegate_, Terminate(_, _, Eq(kPresentationId))) 676 EXPECT_CALL(mock_delegate_, Terminate(_, _, Eq(kPresentationId)))
619 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 677 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
620 run_loop.Run(); 678 run_loop.Run();
621 } 679 }
622 680
623 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesPassed) { 681 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesPassed) {
624 std::string text_msg("123"); 682 std::string text_msg("123");
625 std::vector<uint8_t> binary_data(3, '\1'); 683 std::vector<uint8_t> binary_data(3, '\1');
626 RunListenForSessionMessages(text_msg, binary_data, true); 684 RunListenForSessionMessages(text_msg, binary_data, true);
627 } 685 }
628 686
629 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesCopied) { 687 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesCopied) {
630 std::string text_msg("123"); 688 std::string text_msg("123");
631 std::vector<uint8_t> binary_data(3, '\1'); 689 std::vector<uint8_t> binary_data(3, '\1');
632 RunListenForSessionMessages(text_msg, binary_data, false); 690 RunListenForSessionMessages(text_msg, binary_data, false);
633 } 691 }
634 692
635 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesWithEmptyMsg) { 693 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesWithEmptyMsg) {
636 std::string text_msg(""); 694 std::string text_msg("");
637 std::vector<uint8_t> binary_data; 695 std::vector<uint8_t> binary_data;
638 RunListenForSessionMessages(text_msg, binary_data, false); 696 RunListenForSessionMessages(text_msg, binary_data, false);
639 } 697 }
640 698
641 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { 699 TEST_F(PresentationServiceImplTest, StartSessionInProgress) {
700 std::vector<std::string> urls(2);
642 std::string presentation_url1("http://fooUrl"); 701 std::string presentation_url1("http://fooUrl");
643 std::string presentation_url2("http://barUrl"); 702 std::string presentation_url2("http://barUrl");
644 EXPECT_CALL(mock_delegate_, StartSession(_, _, Eq(presentation_url1), _, _)) 703 urls[0] = presentation_url1;
645 .Times(1); 704 urls[1] = presentation_url2;
646 service_ptr_->StartSession(presentation_url1, 705
647 base::Bind(&DoNothing)); 706 EXPECT_CALL(mock_delegate_, StartSession(_, _, urls, _, _)).Times(1);
707 service_ptr_->StartSession(ToMojoUrls(urls), base::Bind(&DoNothing));
648 708
649 // This request should fail immediately, since there is already a StartSession 709 // This request should fail immediately, since there is already a StartSession
650 // in progress. 710 // in progress.
651 service_ptr_->StartSession( 711 service_ptr_->StartSession(
652 presentation_url2, 712 ToMojoUrls(urls),
653 base::Bind( 713 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError,
654 &PresentationServiceImplTest::ExpectNewSessionCallbackError, 714 base::Unretained(this)));
655 base::Unretained(this)));
656 SaveQuitClosureAndRunLoop(); 715 SaveQuitClosureAndRunLoop();
657 } 716 }
658 717
659 TEST_F(PresentationServiceImplTest, SendStringMessage) { 718 TEST_F(PresentationServiceImplTest, SendStringMessage) {
660 std::string message("Test presentation session message"); 719 std::string message("Test presentation session message");
661 720
662 blink::mojom::PresentationSessionInfoPtr session( 721 blink::mojom::PresentationSessionInfoPtr session(
663 blink::mojom::PresentationSessionInfo::New()); 722 blink::mojom::PresentationSessionInfo::New());
664 session->url = kPresentationUrl; 723 session->url = url::mojom::Url::New();
724 session->url->url = kPresentationUrl1;
665 session->id = kPresentationId; 725 session->id = kPresentationId;
666 blink::mojom::SessionMessagePtr message_request( 726 blink::mojom::SessionMessagePtr message_request(
667 blink::mojom::SessionMessage::New()); 727 blink::mojom::SessionMessage::New());
668 message_request->type = blink::mojom::PresentationMessageType::TEXT; 728 message_request->type = blink::mojom::PresentationMessageType::TEXT;
669 message_request->message = message; 729 message_request->message = message;
670 service_ptr_->SendSessionMessage( 730 service_ptr_->SendSessionMessage(
671 std::move(session), std::move(message_request), 731 std::move(session), std::move(message_request),
672 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, 732 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback,
673 base::Unretained(this))); 733 base::Unretained(this)));
674 734
(...skipping 17 matching lines...) Expand all
692 } 752 }
693 753
694 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { 754 TEST_F(PresentationServiceImplTest, SendArrayBuffer) {
695 // Test Array buffer data. 755 // Test Array buffer data.
696 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; 756 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
697 std::vector<uint8_t> data; 757 std::vector<uint8_t> data;
698 data.assign(buffer, buffer + sizeof(buffer)); 758 data.assign(buffer, buffer + sizeof(buffer));
699 759
700 blink::mojom::PresentationSessionInfoPtr session( 760 blink::mojom::PresentationSessionInfoPtr session(
701 blink::mojom::PresentationSessionInfo::New()); 761 blink::mojom::PresentationSessionInfo::New());
702 session->url = kPresentationUrl; 762 session->url = url::mojom::Url::New();
763 session->url->url = kPresentationUrl1;
703 session->id = kPresentationId; 764 session->id = kPresentationId;
704 blink::mojom::SessionMessagePtr message_request( 765 blink::mojom::SessionMessagePtr message_request(
705 blink::mojom::SessionMessage::New()); 766 blink::mojom::SessionMessage::New());
706 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; 767 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER;
707 message_request->data = data; 768 message_request->data = data;
708 service_ptr_->SendSessionMessage( 769 service_ptr_->SendSessionMessage(
709 std::move(session), std::move(message_request), 770 std::move(session), std::move(message_request),
710 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, 771 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback,
711 base::Unretained(this))); 772 base::Unretained(this)));
712 773
(...skipping 23 matching lines...) Expand all
736 // Create buffer with size exceeding the limit. 797 // Create buffer with size exceeding the limit.
737 // Use same size as in content::kMaxPresentationSessionMessageSize. 798 // Use same size as in content::kMaxPresentationSessionMessageSize.
738 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. 799 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB.
739 uint8_t buffer[kMaxBufferSizeInBytes + 1]; 800 uint8_t buffer[kMaxBufferSizeInBytes + 1];
740 memset(buffer, 0, kMaxBufferSizeInBytes+1); 801 memset(buffer, 0, kMaxBufferSizeInBytes+1);
741 std::vector<uint8_t> data; 802 std::vector<uint8_t> data;
742 data.assign(buffer, buffer + sizeof(buffer)); 803 data.assign(buffer, buffer + sizeof(buffer));
743 804
744 blink::mojom::PresentationSessionInfoPtr session( 805 blink::mojom::PresentationSessionInfoPtr session(
745 blink::mojom::PresentationSessionInfo::New()); 806 blink::mojom::PresentationSessionInfo::New());
746 session->url = kPresentationUrl; 807 session->url = url::mojom::Url::New();
808 session->url->url = kPresentationUrl1;
747 session->id = kPresentationId; 809 session->id = kPresentationId;
748 blink::mojom::SessionMessagePtr message_request( 810 blink::mojom::SessionMessagePtr message_request(
749 blink::mojom::SessionMessage::New()); 811 blink::mojom::SessionMessage::New());
750 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; 812 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER;
751 message_request->data = data; 813 message_request->data = data;
752 service_ptr_->SendSessionMessage( 814 service_ptr_->SendSessionMessage(
753 std::move(session), std::move(message_request), 815 std::move(session), std::move(message_request),
754 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, 816 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback,
755 base::Unretained(this))); 817 base::Unretained(this)));
756 818
(...skipping 10 matching lines...) Expand all
767 SaveQuitClosureAndRunLoop(); 829 SaveQuitClosureAndRunLoop();
768 } 830 }
769 831
770 TEST_F(PresentationServiceImplTest, SendBlobData) { 832 TEST_F(PresentationServiceImplTest, SendBlobData) {
771 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; 833 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
772 std::vector<uint8_t> data; 834 std::vector<uint8_t> data;
773 data.assign(buffer, buffer + sizeof(buffer)); 835 data.assign(buffer, buffer + sizeof(buffer));
774 836
775 blink::mojom::PresentationSessionInfoPtr session( 837 blink::mojom::PresentationSessionInfoPtr session(
776 blink::mojom::PresentationSessionInfo::New()); 838 blink::mojom::PresentationSessionInfo::New());
777 session->url = kPresentationUrl; 839 session->url = url::mojom::Url::New();
840 session->url->url = kPresentationUrl1;
778 session->id = kPresentationId; 841 session->id = kPresentationId;
779 blink::mojom::SessionMessagePtr message_request( 842 blink::mojom::SessionMessagePtr message_request(
780 blink::mojom::SessionMessage::New()); 843 blink::mojom::SessionMessage::New());
781 message_request->type = blink::mojom::PresentationMessageType::BLOB; 844 message_request->type = blink::mojom::PresentationMessageType::BLOB;
782 message_request->data = data; 845 message_request->data = data;
783 service_ptr_->SendSessionMessage( 846 service_ptr_->SendSessionMessage(
784 std::move(session), std::move(message_request), 847 std::move(session), std::move(message_request),
785 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, 848 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback,
786 base::Unretained(this))); 849 base::Unretained(this)));
787 850
(...skipping 20 matching lines...) Expand all
808 } 871 }
809 872
810 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { 873 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) {
811 const char* presentation_url = "http://fooUrl%d"; 874 const char* presentation_url = "http://fooUrl%d";
812 const char* presentation_id = "presentationId%d"; 875 const char* presentation_id = "presentationId%d";
813 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests; 876 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests;
814 int i = 0; 877 int i = 0;
815 EXPECT_CALL(mock_delegate_, JoinSession(_, _, _, _, _, _)) 878 EXPECT_CALL(mock_delegate_, JoinSession(_, _, _, _, _, _))
816 .Times(num_requests); 879 .Times(num_requests);
817 for (; i < num_requests; ++i) { 880 for (; i < num_requests; ++i) {
818 service_ptr_->JoinSession( 881 std::vector<url::mojom::UrlPtr> urls(1);
819 base::StringPrintf(presentation_url, i), 882 urls[0] = url::mojom::Url::New();
820 base::StringPrintf(presentation_id, i), 883 urls[0]->url = base::StringPrintf(presentation_url, i);
821 base::Bind(&DoNothing)); 884 service_ptr_->JoinSession(std::move(urls),
885 base::StringPrintf(presentation_id, i),
886 base::Bind(&DoNothing));
822 } 887 }
823 888
889 std::vector<url::mojom::UrlPtr> urls(1);
890 urls[0] = url::mojom::Url::New();
891 urls[0]->url = base::StringPrintf(presentation_url, i);
824 // Exceeded maximum queue size, should invoke mojo callback with error. 892 // Exceeded maximum queue size, should invoke mojo callback with error.
825 service_ptr_->JoinSession( 893 service_ptr_->JoinSession(
826 base::StringPrintf(presentation_url, i), 894 std::move(urls), base::StringPrintf(presentation_id, i),
827 base::StringPrintf(presentation_id, i), 895 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError,
828 base::Bind( 896 base::Unretained(this)));
829 &PresentationServiceImplTest::ExpectNewSessionCallbackError,
830 base::Unretained(this)));
831 SaveQuitClosureAndRunLoop(); 897 SaveQuitClosureAndRunLoop();
832 } 898 }
833 899
834 TEST_F(PresentationServiceImplTest, ScreenAvailabilityNotSupported) { 900 TEST_F(PresentationServiceImplTest, ScreenAvailabilityNotSupported) {
835 mock_delegate_.set_screen_availability_listening_supported(false); 901 mock_delegate_.set_screen_availability_listening_supported(false);
902 url::mojom::Url url;
903 url.url = kPresentationUrl1;
836 base::RunLoop run_loop; 904 base::RunLoop run_loop;
837 EXPECT_CALL(mock_client_, 905 EXPECT_CALL(mock_client_, OnScreenAvailabilityNotSupported(Equals(url)))
838 OnScreenAvailabilityNotSupported(Eq(kPresentationUrl)))
839 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 906 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
840 ListenForScreenAvailabilityAndWait(kPresentationUrl, false); 907 ListenForScreenAvailabilityAndWait(kPresentationUrl1, false);
841 run_loop.Run(); 908 run_loop.Run();
842 } 909 }
843 910
844 } // namespace content 911 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698