Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "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 25 matching lines...) Expand all Loading... | |
| 36 | 36 |
| 37 namespace content { | 37 namespace content { |
| 38 | 38 |
| 39 namespace { | 39 namespace { |
| 40 | 40 |
| 41 // Matches Mojo structs. | 41 // Matches Mojo structs. |
| 42 MATCHER_P(Equals, expected, "") { | 42 MATCHER_P(Equals, expected, "") { |
| 43 return expected.Equals(arg); | 43 return expected.Equals(arg); |
| 44 } | 44 } |
| 45 | 45 |
| 46 // Matches blink::mojom::PresentationSessionInfo passed by reference. | 46 // Matches content::PresentationSessionInfo passed by reference. |
| 47 MATCHER_P(SessionInfoEquals, expected, "") { | 47 MATCHER_P(SessionInfoEquals, expected, "") { |
| 48 blink::mojom::PresentationSessionInfo& expected_value = expected; | |
| 49 return expected_value.Equals(arg); | |
| 50 } | |
| 51 | |
| 52 // Matches content::PresentationSessionInfo passed by reference. | |
| 53 MATCHER_P(ContentSessionInfoEquals, expected, "") { | |
| 54 const content::PresentationSessionInfo& expected_value = expected; | 48 const content::PresentationSessionInfo& expected_value = expected; |
|
imcheng
2017/01/24 23:31:40
nit: |expected_value| seems unnecessary; can it be
mark a. foltz
2017/01/27 22:41:07
It's needed to unpack the reference passed via ByR
| |
| 55 return expected_value.presentation_url == arg.presentation_url && | 49 return expected_value.presentation_url == arg.presentation_url && |
| 56 expected_value.presentation_id == arg.presentation_id; | 50 expected_value.presentation_id == arg.presentation_id; |
| 57 } | 51 } |
| 58 | 52 |
| 59 const char kPresentationId[] = "presentationId"; | 53 const char kPresentationId[] = "presentationId"; |
| 60 const char kPresentationUrl1[] = "http://foo.com/index.html"; | 54 const char kPresentationUrl1[] = "http://foo.com/index.html"; |
| 61 const char kPresentationUrl2[] = "http://example.com/index.html"; | 55 const char kPresentationUrl2[] = "http://example.com/index.html"; |
| 62 const char kPresentationUrl3[] = "http://example.net/index.html"; | 56 const char kPresentationUrl3[] = "http://example.net/index.html"; |
| 63 | 57 |
| 64 void DoNothing(blink::mojom::PresentationSessionInfoPtr info, | 58 void DoNothing(const base::Optional<content::PresentationSessionInfo>& info, |
| 65 blink::mojom::PresentationErrorPtr error) {} | 59 const base::Optional<content::PresentationError>& error) {} |
| 66 | 60 |
| 67 } // namespace | 61 } // namespace |
| 68 | 62 |
| 69 class MockPresentationServiceDelegate | 63 class MockPresentationServiceDelegate |
| 70 : public ControllerPresentationServiceDelegate { | 64 : public ControllerPresentationServiceDelegate { |
| 71 public: | 65 public: |
| 72 MOCK_METHOD3(AddObserver, | 66 MOCK_METHOD3(AddObserver, |
| 73 void(int render_process_id, | 67 void(int render_process_id, |
| 74 int render_frame_id, | 68 int render_frame_id, |
| 75 PresentationServiceDelegate::Observer* observer)); | 69 PresentationServiceDelegate::Observer* observer)); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 }; | 180 }; |
| 187 | 181 |
| 188 class MockPresentationConnection : public blink::mojom::PresentationConnection { | 182 class MockPresentationConnection : public blink::mojom::PresentationConnection { |
| 189 public: | 183 public: |
| 190 void OnMessage(blink::mojom::ConnectionMessagePtr message, | 184 void OnMessage(blink::mojom::ConnectionMessagePtr message, |
| 191 const base::Callback<void(bool)>& send_message_cb) override { | 185 const base::Callback<void(bool)>& send_message_cb) override { |
| 192 OnConnectionMessageReceived(*message); | 186 OnConnectionMessageReceived(*message); |
| 193 } | 187 } |
| 194 MOCK_METHOD1(OnConnectionMessageReceived, | 188 MOCK_METHOD1(OnConnectionMessageReceived, |
| 195 void(const blink::mojom::ConnectionMessage& message)); | 189 void(const blink::mojom::ConnectionMessage& message)); |
| 196 MOCK_METHOD1(DidChangeState, | 190 MOCK_METHOD1(DidChangeState, void(PresentationConnectionState state)); |
| 197 void(blink::mojom::PresentationConnectionState state)); | |
| 198 }; | 191 }; |
| 199 | 192 |
| 200 class MockPresentationServiceClient | 193 class MockPresentationServiceClient |
| 201 : public blink::mojom::PresentationServiceClient { | 194 : public blink::mojom::PresentationServiceClient { |
| 202 public: | 195 public: |
| 203 MOCK_METHOD2(OnScreenAvailabilityUpdated, | 196 MOCK_METHOD2(OnScreenAvailabilityUpdated, |
| 204 void(const GURL& url, bool available)); | 197 void(const GURL& url, bool available)); |
| 205 void OnConnectionStateChanged( | |
| 206 blink::mojom::PresentationSessionInfoPtr connection, | |
| 207 blink::mojom::PresentationConnectionState new_state) override { | |
| 208 OnConnectionStateChanged(*connection, new_state); | |
| 209 } | |
| 210 MOCK_METHOD2(OnConnectionStateChanged, | 198 MOCK_METHOD2(OnConnectionStateChanged, |
| 211 void(const blink::mojom::PresentationSessionInfo& connection, | 199 void(const content::PresentationSessionInfo& connection, |
| 212 blink::mojom::PresentationConnectionState new_state)); | 200 PresentationConnectionState new_state)); |
| 213 | |
| 214 void OnConnectionClosed( | |
| 215 blink::mojom::PresentationSessionInfoPtr connection, | |
| 216 blink::mojom::PresentationConnectionCloseReason reason, | |
| 217 const std::string& message) override { | |
| 218 OnConnectionClosed(*connection, reason, message); | |
| 219 } | |
| 220 MOCK_METHOD3(OnConnectionClosed, | 201 MOCK_METHOD3(OnConnectionClosed, |
| 221 void(const blink::mojom::PresentationSessionInfo& connection, | 202 void(const content::PresentationSessionInfo& connection, |
| 222 blink::mojom::PresentationConnectionCloseReason reason, | 203 PresentationConnectionCloseReason reason, |
| 223 const std::string& message)); | 204 const std::string& message)); |
| 224 | |
| 225 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); | 205 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); |
| 226 | 206 |
| 227 void OnConnectionMessagesReceived( | 207 void OnConnectionMessagesReceived( |
| 228 blink::mojom::PresentationSessionInfoPtr session_info, | 208 const content::PresentationSessionInfo& session_info, |
| 229 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { | 209 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { |
| 230 messages_received_ = std::move(messages); | 210 messages_received_ = std::move(messages); |
| 231 MessagesReceived(); | 211 MessagesReceived(); |
| 232 } | 212 } |
| 233 MOCK_METHOD0(MessagesReceived, void()); | 213 MOCK_METHOD0(MessagesReceived, void()); |
| 234 | 214 |
| 235 void OnDefaultSessionStarted( | |
| 236 blink::mojom::PresentationSessionInfoPtr session_info) override { | |
| 237 OnDefaultSessionStarted(*session_info); | |
| 238 } | |
| 239 MOCK_METHOD1(OnDefaultSessionStarted, | 215 MOCK_METHOD1(OnDefaultSessionStarted, |
| 240 void(const blink::mojom::PresentationSessionInfo& session_info)); | 216 void(const content::PresentationSessionInfo& session_info)); |
| 241 | 217 |
| 242 void OnReceiverConnectionAvailable( | 218 void OnReceiverConnectionAvailable( |
| 243 blink::mojom::PresentationSessionInfoPtr session_info, | 219 const content::PresentationSessionInfo& session_info, |
| 244 blink::mojom::PresentationConnectionPtr controller_conn_ptr, | 220 blink::mojom::PresentationConnectionPtr controller_conn_ptr, |
| 245 blink::mojom::PresentationConnectionRequest receiver_conn_request) | 221 blink::mojom::PresentationConnectionRequest receiver_conn_request) |
| 246 override { | 222 override { |
| 247 OnReceiverConnectionAvailable(*session_info); | 223 OnReceiverConnectionAvailable(session_info); |
| 248 } | 224 } |
| 249 MOCK_METHOD1(OnReceiverConnectionAvailable, | 225 MOCK_METHOD1(OnReceiverConnectionAvailable, |
| 250 void(const blink::mojom::PresentationSessionInfo& session_info)); | 226 void(const content::PresentationSessionInfo& session_info)); |
| 251 | 227 |
| 252 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; | 228 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; |
| 253 }; | 229 }; |
| 254 | 230 |
| 255 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { | 231 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { |
| 256 public: | 232 public: |
| 257 PresentationServiceImplTest() | 233 PresentationServiceImplTest() |
| 258 : presentation_url1_(GURL(kPresentationUrl1)), | 234 : presentation_url1_(GURL(kPresentationUrl1)), |
| 259 presentation_url2_(GURL(kPresentationUrl2)), | 235 presentation_url2_(GURL(kPresentationUrl2)), |
| 260 presentation_url3_(GURL(kPresentationUrl3)) {} | 236 presentation_url3_(GURL(kPresentationUrl3)) {} |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 | 314 |
| 339 void ExpectCleanState() { | 315 void ExpectCleanState() { |
| 340 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); | 316 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); |
| 341 EXPECT_EQ( | 317 EXPECT_EQ( |
| 342 service_impl_->screen_availability_listeners_.find(presentation_url1_), | 318 service_impl_->screen_availability_listeners_.find(presentation_url1_), |
| 343 service_impl_->screen_availability_listeners_.end()); | 319 service_impl_->screen_availability_listeners_.end()); |
| 344 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); | 320 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); |
| 345 } | 321 } |
| 346 | 322 |
| 347 void ExpectNewSessionCallbackSuccess( | 323 void ExpectNewSessionCallbackSuccess( |
| 348 blink::mojom::PresentationSessionInfoPtr info, | 324 const base::Optional<content::PresentationSessionInfo>& info, |
| 349 blink::mojom::PresentationErrorPtr error) { | 325 const base::Optional<content::PresentationError>& error) { |
| 350 EXPECT_FALSE(info.is_null()); | 326 EXPECT_TRUE(info); |
| 351 EXPECT_TRUE(error.is_null()); | 327 EXPECT_FALSE(error); |
| 352 if (!run_loop_quit_closure_.is_null()) | 328 if (!run_loop_quit_closure_.is_null()) |
| 353 run_loop_quit_closure_.Run(); | 329 run_loop_quit_closure_.Run(); |
| 354 } | 330 } |
| 355 | 331 |
| 356 void ExpectNewSessionCallbackError( | 332 void ExpectNewSessionCallbackError( |
| 357 blink::mojom::PresentationSessionInfoPtr info, | 333 const base::Optional<content::PresentationSessionInfo>& info, |
| 358 blink::mojom::PresentationErrorPtr error) { | 334 const base::Optional<content::PresentationError>& error) { |
| 359 EXPECT_TRUE(info.is_null()); | 335 EXPECT_FALSE(info); |
| 360 EXPECT_FALSE(error.is_null()); | 336 EXPECT_TRUE(error); |
| 361 if (!run_loop_quit_closure_.is_null()) | 337 if (!run_loop_quit_closure_.is_null()) |
| 362 run_loop_quit_closure_.Run(); | 338 run_loop_quit_closure_.Run(); |
| 363 } | 339 } |
| 364 | 340 |
| 365 void ExpectConnectionMessages( | 341 void ExpectConnectionMessages( |
| 366 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, | 342 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, |
| 367 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { | 343 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { |
| 368 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); | 344 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); |
| 369 for (size_t i = 0; i < actual_msgs.size(); ++i) | 345 for (size_t i = 0; i < actual_msgs.size(); ++i) |
| 370 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); | 346 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 381 const std::vector<uint8_t>& binary_data, | 357 const std::vector<uint8_t>& binary_data, |
| 382 bool pass_ownership) { | 358 bool pass_ownership) { |
| 383 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); | 359 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); |
| 384 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); | 360 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); |
| 385 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; | 361 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; |
| 386 expected_msgs[0]->message = text_msg; | 362 expected_msgs[0]->message = text_msg; |
| 387 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); | 363 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); |
| 388 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; | 364 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; |
| 389 expected_msgs[1]->data = binary_data; | 365 expected_msgs[1]->data = binary_data; |
| 390 | 366 |
| 391 blink::mojom::PresentationSessionInfoPtr session( | 367 content::PresentationSessionInfo session(presentation_url1_, |
| 392 blink::mojom::PresentationSessionInfo::New()); | 368 kPresentationId); |
| 393 session->url = presentation_url1_; | |
| 394 session->id = kPresentationId; | |
| 395 | 369 |
| 396 PresentationConnectionMessageCallback message_cb; | 370 PresentationConnectionMessageCallback message_cb; |
| 397 { | 371 { |
| 398 base::RunLoop run_loop; | 372 base::RunLoop run_loop; |
| 399 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) | 373 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) |
| 400 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 374 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 401 SaveArg<3>(&message_cb))); | 375 SaveArg<3>(&message_cb))); |
| 402 service_ptr_->ListenForConnectionMessages(std::move(session)); | 376 service_ptr_->ListenForConnectionMessages(session); |
| 403 run_loop.Run(); | 377 run_loop.Run(); |
| 404 } | 378 } |
| 405 | 379 |
| 406 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; | 380 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; |
| 407 std::unique_ptr<content::PresentationConnectionMessage> message; | 381 std::unique_ptr<content::PresentationConnectionMessage> message; |
| 408 message.reset(new content::PresentationConnectionMessage( | 382 message.reset(new content::PresentationConnectionMessage( |
| 409 PresentationMessageType::TEXT)); | 383 PresentationMessageType::TEXT)); |
| 410 message->message = text_msg; | 384 message->message = text_msg; |
| 411 messages.push_back(std::move(message)); | 385 messages.push_back(std::move(message)); |
| 412 message.reset(new content::PresentationConnectionMessage( | 386 message.reset(new content::PresentationConnectionMessage( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 522 | 496 |
| 523 // Sets different DPUs. | 497 // Sets different DPUs. |
| 524 std::vector<GURL> more_urls = presentation_urls_; | 498 std::vector<GURL> more_urls = presentation_urls_; |
| 525 more_urls.push_back(presentation_url3_); | 499 more_urls.push_back(presentation_url3_); |
| 526 | 500 |
| 527 content::PresentationSessionStartedCallback callback; | 501 content::PresentationSessionStartedCallback callback; |
| 528 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) | 502 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) |
| 529 .WillOnce(SaveArg<3>(&callback)); | 503 .WillOnce(SaveArg<3>(&callback)); |
| 530 service_impl_->SetDefaultPresentationUrls(more_urls); | 504 service_impl_->SetDefaultPresentationUrls(more_urls); |
| 531 | 505 |
| 532 blink::mojom::PresentationSessionInfo session_info; | 506 content::PresentationSessionInfo session_info(presentation_url2_, |
| 533 session_info.url = presentation_url2_; | 507 kPresentationId); |
| 534 session_info.id = kPresentationId; | |
| 535 | 508 |
| 536 base::RunLoop run_loop; | 509 base::RunLoop run_loop; |
| 537 EXPECT_CALL(mock_client_, | 510 EXPECT_CALL(mock_client_, |
| 538 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info)))) | 511 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info)))) |
|
imcheng
2017/01/24 23:31:40
Is ByRef still needed?
mark a. foltz
2017/01/27 22:41:08
Shouldn't be. Removed.
| |
| 539 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 512 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 540 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); | 513 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); |
| 541 callback.Run( | 514 callback.Run( |
| 542 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); | 515 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); |
| 543 run_loop.Run(); | 516 run_loop.Run(); |
| 544 } | 517 } |
| 545 | 518 |
| 546 TEST_F(PresentationServiceImplTest, | 519 TEST_F(PresentationServiceImplTest, |
| 547 ListenForConnectionStateChangeAndChangeState) { | 520 ListenForConnectionStateChangeAndChangeState) { |
| 548 content::PresentationSessionInfo connection(presentation_url1_, | 521 content::PresentationSessionInfo connection(presentation_url1_, |
| 549 kPresentationId); | 522 kPresentationId); |
| 550 content::PresentationConnectionStateChangedCallback state_changed_cb; | 523 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 551 // Trigger state change. It should be propagated back up to |mock_client_|. | 524 // Trigger state change. It should be propagated back up to |mock_client_|. |
| 552 blink::mojom::PresentationSessionInfo presentation_connection; | 525 content::PresentationSessionInfo presentation_connection(presentation_url1_, |
| 553 presentation_connection.url = presentation_url1_; | 526 kPresentationId); |
| 554 presentation_connection.id = kPresentationId; | |
| 555 | 527 |
| 556 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 528 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 557 .WillOnce(SaveArg<3>(&state_changed_cb)); | 529 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 558 EXPECT_CALL(mock_client_, | 530 EXPECT_CALL(mock_client_, |
| 559 OnConnectionStateChanged( | 531 OnConnectionStateChanged( |
| 560 SessionInfoEquals(ByRef(presentation_connection)), | 532 SessionInfoEquals(ByRef(presentation_connection)), |
| 561 blink::mojom::PresentationConnectionState::CONNECTED)); | 533 content::PRESENTATION_CONNECTION_STATE_CONNECTED)); |
| 562 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); | 534 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); |
| 563 | 535 |
| 564 { | 536 { |
| 565 base::RunLoop run_loop; | 537 base::RunLoop run_loop; |
| 566 EXPECT_CALL(mock_client_, | 538 EXPECT_CALL(mock_client_, |
| 567 OnConnectionStateChanged( | 539 OnConnectionStateChanged( |
| 568 SessionInfoEquals(ByRef(presentation_connection)), | 540 SessionInfoEquals(ByRef(presentation_connection)), |
| 569 blink::mojom::PresentationConnectionState::TERMINATED)) | 541 content::PRESENTATION_CONNECTION_STATE_TERMINATED)) |
| 570 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 542 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 571 state_changed_cb.Run(PresentationConnectionStateChangeInfo( | 543 state_changed_cb.Run(PresentationConnectionStateChangeInfo( |
| 572 PRESENTATION_CONNECTION_STATE_TERMINATED)); | 544 PRESENTATION_CONNECTION_STATE_TERMINATED)); |
| 573 run_loop.Run(); | 545 run_loop.Run(); |
| 574 } | 546 } |
| 575 } | 547 } |
| 576 | 548 |
| 577 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { | 549 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { |
| 578 content::PresentationSessionInfo connection(presentation_url1_, | 550 content::PresentationSessionInfo connection(presentation_url1_, |
| 579 kPresentationId); | 551 kPresentationId); |
| 580 content::PresentationConnectionStateChangedCallback state_changed_cb; | 552 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 581 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 553 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 582 .WillOnce(SaveArg<3>(&state_changed_cb)); | 554 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 583 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); | 555 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); |
| 584 | 556 |
| 585 // Trigger connection close. It should be propagated back up to | 557 // Trigger connection close. It should be propagated back up to |
| 586 // |mock_client_|. | 558 // |mock_client_|. |
| 587 blink::mojom::PresentationSessionInfo presentation_connection; | 559 content::PresentationSessionInfo presentation_connection(presentation_url1_, |
| 588 presentation_connection.url = presentation_url1_; | 560 kPresentationId); |
| 589 presentation_connection.id = kPresentationId; | |
| 590 { | 561 { |
| 591 base::RunLoop run_loop; | 562 base::RunLoop run_loop; |
| 592 PresentationConnectionStateChangeInfo closed_info( | 563 PresentationConnectionStateChangeInfo closed_info( |
| 593 PRESENTATION_CONNECTION_STATE_CLOSED); | 564 PRESENTATION_CONNECTION_STATE_CLOSED); |
| 594 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; | 565 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; |
| 595 closed_info.message = "Foo"; | 566 closed_info.message = "Foo"; |
| 596 | 567 |
| 597 EXPECT_CALL( | 568 EXPECT_CALL(mock_client_, |
| 598 mock_client_, | 569 OnConnectionClosed( |
| 599 OnConnectionClosed( | 570 SessionInfoEquals(ByRef(presentation_connection)), |
| 600 SessionInfoEquals(ByRef(presentation_connection)), | 571 PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY, "Foo")) |
| 601 blink::mojom::PresentationConnectionCloseReason::WENT_AWAY, "Foo")) | |
| 602 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 572 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 603 state_changed_cb.Run(closed_info); | 573 state_changed_cb.Run(closed_info); |
| 604 run_loop.Run(); | 574 run_loop.Run(); |
| 605 } | 575 } |
| 606 } | 576 } |
| 607 | 577 |
| 608 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { | 578 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { |
| 609 EXPECT_CALL(mock_delegate_, | 579 EXPECT_CALL(mock_delegate_, |
| 610 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) | 580 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) |
| 611 .Times(1); | 581 .Times(1); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 714 RunListenForConnectionMessages(text_msg, binary_data, false); | 684 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 715 } | 685 } |
| 716 | 686 |
| 717 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesWithEmptyMsg) { | 687 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesWithEmptyMsg) { |
| 718 std::string text_msg(""); | 688 std::string text_msg(""); |
| 719 std::vector<uint8_t> binary_data; | 689 std::vector<uint8_t> binary_data; |
| 720 RunListenForConnectionMessages(text_msg, binary_data, false); | 690 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 721 } | 691 } |
| 722 | 692 |
| 723 TEST_F(PresentationServiceImplTest, SetPresentationConnection) { | 693 TEST_F(PresentationServiceImplTest, SetPresentationConnection) { |
| 724 blink::mojom::PresentationSessionInfoPtr session( | 694 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 725 blink::mojom::PresentationSessionInfo::New()); | |
| 726 session->url = presentation_url1_; | |
| 727 session->id = kPresentationId; | |
| 728 | 695 |
| 729 blink::mojom::PresentationConnectionPtr connection; | 696 blink::mojom::PresentationConnectionPtr connection; |
| 730 MockPresentationConnection mock_presentation_connection; | 697 MockPresentationConnection mock_presentation_connection; |
| 731 mojo::Binding<blink::mojom::PresentationConnection> connection_binding( | 698 mojo::Binding<blink::mojom::PresentationConnection> connection_binding( |
| 732 &mock_presentation_connection, mojo::MakeRequest(&connection)); | 699 &mock_presentation_connection, mojo::MakeRequest(&connection)); |
| 733 blink::mojom::PresentationConnectionPtr receiver_connection; | 700 blink::mojom::PresentationConnectionPtr receiver_connection; |
| 734 auto request = mojo::MakeRequest(&receiver_connection); | 701 auto request = mojo::MakeRequest(&receiver_connection); |
| 735 | 702 |
| 736 content::PresentationSessionInfo expected(presentation_url1_, | 703 content::PresentationSessionInfo expected(presentation_url1_, |
| 737 kPresentationId); | 704 kPresentationId); |
| 738 EXPECT_CALL(mock_delegate_, | 705 EXPECT_CALL(mock_delegate_, RegisterOffscreenPresentationConnectionRaw( |
| 739 RegisterOffscreenPresentationConnectionRaw( | 706 _, _, SessionInfoEquals(ByRef(expected)), _)); |
| 740 _, _, ContentSessionInfoEquals(ByRef(expected)), _)); | |
| 741 | 707 |
| 742 service_impl_->SetPresentationConnection( | 708 service_impl_->SetPresentationConnection(session, std::move(connection), |
| 743 std::move(session), std::move(connection), std::move(request)); | 709 std::move(request)); |
| 744 } | 710 } |
| 745 | 711 |
| 746 TEST_F(PresentationServiceImplTest, ReceiverPresentationServiceDelegate) { | 712 TEST_F(PresentationServiceImplTest, ReceiverPresentationServiceDelegate) { |
| 747 MockReceiverPresentationServiceDelegate mock_receiver_delegate; | 713 MockReceiverPresentationServiceDelegate mock_receiver_delegate; |
| 748 | 714 |
| 749 PresentationServiceImpl service_impl(contents()->GetMainFrame(), contents(), | 715 PresentationServiceImpl service_impl(contents()->GetMainFrame(), contents(), |
| 750 nullptr, &mock_receiver_delegate); | 716 nullptr, &mock_receiver_delegate); |
| 751 | 717 |
| 752 ReceiverConnectionAvailableCallback callback; | 718 ReceiverConnectionAvailableCallback callback; |
| 753 EXPECT_CALL(mock_receiver_delegate, | 719 EXPECT_CALL(mock_receiver_delegate, |
| 754 RegisterReceiverConnectionAvailableCallback(_)) | 720 RegisterReceiverConnectionAvailableCallback(_)) |
| 755 .WillOnce(SaveArg<0>(&callback)); | 721 .WillOnce(SaveArg<0>(&callback)); |
| 756 | 722 |
| 757 blink::mojom::PresentationServiceClientPtr client_ptr; | 723 blink::mojom::PresentationServiceClientPtr client_ptr; |
| 758 client_binding_.reset( | 724 client_binding_.reset( |
| 759 new mojo::Binding<blink::mojom::PresentationServiceClient>( | 725 new mojo::Binding<blink::mojom::PresentationServiceClient>( |
| 760 &mock_client_, mojo::MakeRequest(&client_ptr))); | 726 &mock_client_, mojo::MakeRequest(&client_ptr))); |
| 761 service_impl.controller_delegate_ = nullptr; | 727 service_impl.controller_delegate_ = nullptr; |
| 762 service_impl.SetClient(std::move(client_ptr)); | 728 service_impl.SetClient(std::move(client_ptr)); |
| 763 EXPECT_FALSE(callback.is_null()); | 729 EXPECT_FALSE(callback.is_null()); |
| 764 | 730 |
| 765 // NO-OP for ControllerPresentationServiceDelegate API functions | 731 // NO-OP for ControllerPresentationServiceDelegate API functions |
| 766 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)).Times(0); | 732 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)).Times(0); |
| 767 | 733 |
| 768 blink::mojom::PresentationSessionInfoPtr session( | 734 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 769 blink::mojom::PresentationSessionInfo::New()); | 735 service_impl.ListenForConnectionMessages(session); |
| 770 session->url = GURL(kPresentationUrl1); | |
| 771 session->id = kPresentationId; | |
| 772 | |
| 773 service_impl.ListenForConnectionMessages(std::move(session)); | |
| 774 } | 736 } |
| 775 | 737 |
| 776 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { | 738 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { |
| 777 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) | 739 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) |
| 778 .Times(1); | 740 .Times(1); |
| 779 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); | 741 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); |
| 780 | 742 |
| 781 // This request should fail immediately, since there is already a StartSession | 743 // This request should fail immediately, since there is already a StartSession |
| 782 // in progress. | 744 // in progress. |
| 783 service_ptr_->StartSession( | 745 service_ptr_->StartSession( |
| 784 presentation_urls_, | 746 presentation_urls_, |
| 785 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, | 747 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, |
| 786 base::Unretained(this))); | 748 base::Unretained(this))); |
| 787 SaveQuitClosureAndRunLoop(); | 749 SaveQuitClosureAndRunLoop(); |
| 788 } | 750 } |
| 789 | 751 |
| 790 TEST_F(PresentationServiceImplTest, SendStringMessage) { | 752 TEST_F(PresentationServiceImplTest, SendStringMessage) { |
| 791 std::string message("Test presentation session message"); | 753 std::string message("Test presentation session message"); |
| 792 | 754 |
| 793 blink::mojom::PresentationSessionInfoPtr session( | 755 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 794 blink::mojom::PresentationSessionInfo::New()); | |
| 795 session->url = presentation_url1_; | |
| 796 session->id = kPresentationId; | |
| 797 blink::mojom::ConnectionMessagePtr message_request( | 756 blink::mojom::ConnectionMessagePtr message_request( |
| 798 blink::mojom::ConnectionMessage::New()); | 757 blink::mojom::ConnectionMessage::New()); |
| 799 message_request->type = blink::mojom::PresentationMessageType::TEXT; | 758 message_request->type = blink::mojom::PresentationMessageType::TEXT; |
| 800 message_request->message = message; | 759 message_request->message = message; |
| 801 service_ptr_->SendConnectionMessage( | 760 service_ptr_->SendConnectionMessage( |
| 802 std::move(session), std::move(message_request), | 761 session, std::move(message_request), |
| 803 base::Bind( | 762 base::Bind( |
| 804 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 763 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 805 base::Unretained(this))); | 764 base::Unretained(this))); |
| 806 | 765 |
| 807 base::RunLoop run_loop; | 766 base::RunLoop run_loop; |
| 808 base::Callback<void(bool)> send_message_cb; | 767 base::Callback<void(bool)> send_message_cb; |
| 809 PresentationConnectionMessage* test_message = nullptr; | 768 PresentationConnectionMessage* test_message = nullptr; |
| 810 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 769 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 811 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 770 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 812 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 771 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 824 send_message_cb.Run(true); | 783 send_message_cb.Run(true); |
| 825 SaveQuitClosureAndRunLoop(); | 784 SaveQuitClosureAndRunLoop(); |
| 826 } | 785 } |
| 827 | 786 |
| 828 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { | 787 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { |
| 829 // Test Array buffer data. | 788 // Test Array buffer data. |
| 830 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 789 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
| 831 std::vector<uint8_t> data; | 790 std::vector<uint8_t> data; |
| 832 data.assign(buffer, buffer + sizeof(buffer)); | 791 data.assign(buffer, buffer + sizeof(buffer)); |
| 833 | 792 |
| 834 blink::mojom::PresentationSessionInfoPtr session( | 793 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 835 blink::mojom::PresentationSessionInfo::New()); | |
| 836 session->url = presentation_url1_; | |
| 837 session->id = kPresentationId; | |
| 838 blink::mojom::ConnectionMessagePtr message_request( | 794 blink::mojom::ConnectionMessagePtr message_request( |
| 839 blink::mojom::ConnectionMessage::New()); | 795 blink::mojom::ConnectionMessage::New()); |
| 840 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 796 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 841 message_request->data = data; | 797 message_request->data = data; |
| 842 service_ptr_->SendConnectionMessage( | 798 service_ptr_->SendConnectionMessage( |
| 843 std::move(session), std::move(message_request), | 799 session, std::move(message_request), |
| 844 base::Bind( | 800 base::Bind( |
| 845 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 801 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 846 base::Unretained(this))); | 802 base::Unretained(this))); |
| 847 | 803 |
| 848 base::RunLoop run_loop; | 804 base::RunLoop run_loop; |
| 849 base::Callback<void(bool)> send_message_cb; | 805 base::Callback<void(bool)> send_message_cb; |
| 850 PresentationConnectionMessage* test_message = nullptr; | 806 PresentationConnectionMessage* test_message = nullptr; |
| 851 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 807 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 852 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 808 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 853 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 809 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 870 | 826 |
| 871 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 827 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
| 872 // Create buffer with size exceeding the limit. | 828 // Create buffer with size exceeding the limit. |
| 873 // Use same size as in content::kMaxPresentationConnectionMessageSize. | 829 // Use same size as in content::kMaxPresentationConnectionMessageSize. |
| 874 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 830 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
| 875 uint8_t buffer[kMaxBufferSizeInBytes + 1]; | 831 uint8_t buffer[kMaxBufferSizeInBytes + 1]; |
| 876 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 832 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
| 877 std::vector<uint8_t> data; | 833 std::vector<uint8_t> data; |
| 878 data.assign(buffer, buffer + sizeof(buffer)); | 834 data.assign(buffer, buffer + sizeof(buffer)); |
| 879 | 835 |
| 880 blink::mojom::PresentationSessionInfoPtr session( | 836 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 881 blink::mojom::PresentationSessionInfo::New()); | |
| 882 session->url = presentation_url1_; | |
| 883 session->id = kPresentationId; | |
| 884 blink::mojom::ConnectionMessagePtr message_request( | 837 blink::mojom::ConnectionMessagePtr message_request( |
| 885 blink::mojom::ConnectionMessage::New()); | 838 blink::mojom::ConnectionMessage::New()); |
| 886 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 839 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 887 message_request->data = data; | 840 message_request->data = data; |
| 888 service_ptr_->SendConnectionMessage( | 841 service_ptr_->SendConnectionMessage( |
| 889 std::move(session), std::move(message_request), | 842 session, std::move(message_request), |
| 890 base::Bind( | 843 base::Bind( |
| 891 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 844 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 892 base::Unretained(this))); | 845 base::Unretained(this))); |
| 893 | 846 |
| 894 base::RunLoop run_loop; | 847 base::RunLoop run_loop; |
| 895 base::Callback<void(bool)> send_message_cb; | 848 base::Callback<void(bool)> send_message_cb; |
| 896 PresentationConnectionMessage* test_message = nullptr; | 849 PresentationConnectionMessage* test_message = nullptr; |
| 897 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 850 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 898 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 851 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 899 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 852 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 900 run_loop.Run(); | 853 run_loop.Run(); |
| 901 | 854 |
| 902 EXPECT_FALSE(test_message); | 855 EXPECT_FALSE(test_message); |
| 903 send_message_cb.Run(true); | 856 send_message_cb.Run(true); |
| 904 SaveQuitClosureAndRunLoop(); | 857 SaveQuitClosureAndRunLoop(); |
| 905 } | 858 } |
| 906 | 859 |
| 907 TEST_F(PresentationServiceImplTest, SendBlobData) { | 860 TEST_F(PresentationServiceImplTest, SendBlobData) { |
| 908 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 861 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
| 909 std::vector<uint8_t> data; | 862 std::vector<uint8_t> data; |
| 910 data.assign(buffer, buffer + sizeof(buffer)); | 863 data.assign(buffer, buffer + sizeof(buffer)); |
| 911 | 864 |
| 912 blink::mojom::PresentationSessionInfoPtr session( | 865 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 913 blink::mojom::PresentationSessionInfo::New()); | |
| 914 session->url = presentation_url1_; | |
| 915 session->id = kPresentationId; | |
| 916 blink::mojom::ConnectionMessagePtr message_request( | 866 blink::mojom::ConnectionMessagePtr message_request( |
| 917 blink::mojom::ConnectionMessage::New()); | 867 blink::mojom::ConnectionMessage::New()); |
| 918 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 868 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 919 message_request->data = data; | 869 message_request->data = data; |
| 920 service_ptr_->SendConnectionMessage( | 870 service_ptr_->SendConnectionMessage( |
| 921 std::move(session), std::move(message_request), | 871 session, std::move(message_request), |
| 922 base::Bind( | 872 base::Bind( |
| 923 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 873 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 924 base::Unretained(this))); | 874 base::Unretained(this))); |
| 925 | 875 |
| 926 base::RunLoop run_loop; | 876 base::RunLoop run_loop; |
| 927 base::Callback<void(bool)> send_message_cb; | 877 base::Callback<void(bool)> send_message_cb; |
| 928 PresentationConnectionMessage* test_message = nullptr; | 878 PresentationConnectionMessage* test_message = nullptr; |
| 929 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 879 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 930 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 880 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 931 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 881 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 972 mock_delegate_.set_screen_availability_listening_supported(false); | 922 mock_delegate_.set_screen_availability_listening_supported(false); |
| 973 base::RunLoop run_loop; | 923 base::RunLoop run_loop; |
| 974 EXPECT_CALL(mock_client_, | 924 EXPECT_CALL(mock_client_, |
| 975 OnScreenAvailabilityNotSupported(presentation_url1_)) | 925 OnScreenAvailabilityNotSupported(presentation_url1_)) |
| 976 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 926 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 977 ListenForScreenAvailabilityAndWait(presentation_url1_, false); | 927 ListenForScreenAvailabilityAndWait(presentation_url1_, false); |
| 978 run_loop.Run(); | 928 run_loop.Run(); |
| 979 } | 929 } |
| 980 | 930 |
| 981 } // namespace content | 931 } // namespace content |
| OLD | NEW |