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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 } | 325 } |
326 | 326 |
327 void RunListenForSessionMessages(const std::string& text_msg, | 327 void RunListenForSessionMessages(const std::string& text_msg, |
328 const std::vector<uint8_t>& binary_data, | 328 const std::vector<uint8_t>& binary_data, |
329 bool pass_ownership) { | 329 bool pass_ownership) { |
330 std::vector<blink::mojom::SessionMessagePtr> expected_msgs(2); | 330 std::vector<blink::mojom::SessionMessagePtr> expected_msgs(2); |
331 expected_msgs[0] = blink::mojom::SessionMessage::New(); | 331 expected_msgs[0] = blink::mojom::SessionMessage::New(); |
332 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; | 332 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; |
333 expected_msgs[0]->message = text_msg; | 333 expected_msgs[0]->message = text_msg; |
334 expected_msgs[1] = blink::mojom::SessionMessage::New(); | 334 expected_msgs[1] = blink::mojom::SessionMessage::New(); |
335 expected_msgs[1]->type = | 335 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; |
336 blink::mojom::PresentationMessageType::ARRAY_BUFFER; | |
337 expected_msgs[1]->data = binary_data; | 336 expected_msgs[1]->data = binary_data; |
338 | 337 |
339 blink::mojom::PresentationSessionInfoPtr session( | 338 blink::mojom::PresentationSessionInfoPtr session( |
340 blink::mojom::PresentationSessionInfo::New()); | 339 blink::mojom::PresentationSessionInfo::New()); |
341 session->url = presentation_url1_; | 340 session->url = presentation_url1_; |
342 session->id = kPresentationId; | 341 session->id = kPresentationId; |
343 | 342 |
344 PresentationSessionMessageCallback message_cb; | 343 PresentationSessionMessageCallback message_cb; |
345 { | 344 { |
346 base::RunLoop run_loop; | 345 base::RunLoop run_loop; |
347 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _)) | 346 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _)) |
348 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 347 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
349 SaveArg<3>(&message_cb))); | 348 SaveArg<3>(&message_cb))); |
350 service_ptr_->ListenForSessionMessages(std::move(session)); | 349 service_ptr_->ListenForSessionMessages(std::move(session)); |
351 run_loop.Run(); | 350 run_loop.Run(); |
352 } | 351 } |
353 | 352 |
354 ScopedVector<PresentationSessionMessage> messages; | 353 ScopedVector<PresentationSessionMessage> messages; |
355 std::unique_ptr<content::PresentationSessionMessage> message; | 354 std::unique_ptr<content::PresentationSessionMessage> message; |
356 message.reset( | 355 message.reset( |
357 new content::PresentationSessionMessage(PresentationMessageType::TEXT)); | 356 new content::PresentationSessionMessage(PresentationMessageType::TEXT)); |
358 message->message = text_msg; | 357 message->message = text_msg; |
359 messages.push_back(std::move(message)); | 358 messages.push_back(std::move(message)); |
360 message.reset(new content::PresentationSessionMessage( | 359 message.reset(new content::PresentationSessionMessage( |
361 PresentationMessageType::ARRAY_BUFFER)); | 360 PresentationMessageType::BINARY)); |
362 message->data.reset(new std::vector<uint8_t>(binary_data)); | 361 message->data.reset(new std::vector<uint8_t>(binary_data)); |
363 messages.push_back(std::move(message)); | 362 messages.push_back(std::move(message)); |
364 | 363 |
365 std::vector<blink::mojom::SessionMessagePtr> actual_msgs; | 364 std::vector<blink::mojom::SessionMessagePtr> actual_msgs; |
366 { | 365 { |
367 base::RunLoop run_loop; | 366 base::RunLoop run_loop; |
368 EXPECT_CALL(mock_client_, MessagesReceived()) | 367 EXPECT_CALL(mock_client_, MessagesReceived()) |
369 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 368 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
370 message_cb.Run(std::move(messages), pass_ownership); | 369 message_cb.Run(std::move(messages), pass_ownership); |
371 run_loop.Run(); | 370 run_loop.Run(); |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 720 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
722 std::vector<uint8_t> data; | 721 std::vector<uint8_t> data; |
723 data.assign(buffer, buffer + sizeof(buffer)); | 722 data.assign(buffer, buffer + sizeof(buffer)); |
724 | 723 |
725 blink::mojom::PresentationSessionInfoPtr session( | 724 blink::mojom::PresentationSessionInfoPtr session( |
726 blink::mojom::PresentationSessionInfo::New()); | 725 blink::mojom::PresentationSessionInfo::New()); |
727 session->url = presentation_url1_; | 726 session->url = presentation_url1_; |
728 session->id = kPresentationId; | 727 session->id = kPresentationId; |
729 blink::mojom::SessionMessagePtr message_request( | 728 blink::mojom::SessionMessagePtr message_request( |
730 blink::mojom::SessionMessage::New()); | 729 blink::mojom::SessionMessage::New()); |
731 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; | 730 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
732 message_request->data = data; | 731 message_request->data = data; |
733 service_ptr_->SendSessionMessage( | 732 service_ptr_->SendSessionMessage( |
734 std::move(session), std::move(message_request), | 733 std::move(session), std::move(message_request), |
735 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 734 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, |
736 base::Unretained(this))); | 735 base::Unretained(this))); |
737 | 736 |
738 base::RunLoop run_loop; | 737 base::RunLoop run_loop; |
739 base::Callback<void(bool)> send_message_cb; | 738 base::Callback<void(bool)> send_message_cb; |
740 PresentationSessionMessage* test_message = nullptr; | 739 PresentationSessionMessage* test_message = nullptr; |
741 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 740 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
742 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 741 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
743 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 742 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
744 run_loop.Run(); | 743 run_loop.Run(); |
745 | 744 |
746 // Make sure |test_message| gets deleted. | 745 // Make sure |test_message| gets deleted. |
747 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); | 746 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); |
748 EXPECT_TRUE(test_message); | 747 EXPECT_TRUE(test_message); |
749 EXPECT_TRUE(test_message->is_binary()); | 748 EXPECT_TRUE(test_message->is_binary()); |
750 EXPECT_EQ(PresentationMessageType::ARRAY_BUFFER, test_message->type); | 749 EXPECT_EQ(PresentationMessageType::BINARY, test_message->type); |
751 EXPECT_TRUE(test_message->message.empty()); | 750 EXPECT_TRUE(test_message->message.empty()); |
752 ASSERT_TRUE(test_message->data); | 751 ASSERT_TRUE(test_message->data); |
753 EXPECT_EQ(data.size(), test_message->data->size()); | 752 EXPECT_EQ(data.size(), test_message->data->size()); |
754 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); | 753 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); |
755 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); | 754 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); |
756 send_message_cb.Run(true); | 755 send_message_cb.Run(true); |
757 SaveQuitClosureAndRunLoop(); | 756 SaveQuitClosureAndRunLoop(); |
758 } | 757 } |
759 | 758 |
760 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 759 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
761 // Create buffer with size exceeding the limit. | 760 // Create buffer with size exceeding the limit. |
762 // Use same size as in content::kMaxPresentationSessionMessageSize. | 761 // Use same size as in content::kMaxPresentationSessionMessageSize. |
763 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 762 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
764 uint8_t buffer[kMaxBufferSizeInBytes + 1]; | 763 uint8_t buffer[kMaxBufferSizeInBytes + 1]; |
765 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 764 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
766 std::vector<uint8_t> data; | 765 std::vector<uint8_t> data; |
767 data.assign(buffer, buffer + sizeof(buffer)); | 766 data.assign(buffer, buffer + sizeof(buffer)); |
768 | 767 |
769 blink::mojom::PresentationSessionInfoPtr session( | 768 blink::mojom::PresentationSessionInfoPtr session( |
770 blink::mojom::PresentationSessionInfo::New()); | 769 blink::mojom::PresentationSessionInfo::New()); |
771 session->url = presentation_url1_; | 770 session->url = presentation_url1_; |
772 session->id = kPresentationId; | 771 session->id = kPresentationId; |
773 blink::mojom::SessionMessagePtr message_request( | 772 blink::mojom::SessionMessagePtr message_request( |
774 blink::mojom::SessionMessage::New()); | 773 blink::mojom::SessionMessage::New()); |
775 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; | 774 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
776 message_request->data = data; | 775 message_request->data = data; |
777 service_ptr_->SendSessionMessage( | 776 service_ptr_->SendSessionMessage( |
778 std::move(session), std::move(message_request), | 777 std::move(session), std::move(message_request), |
779 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 778 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, |
780 base::Unretained(this))); | 779 base::Unretained(this))); |
781 | 780 |
782 base::RunLoop run_loop; | 781 base::RunLoop run_loop; |
783 base::Callback<void(bool)> send_message_cb; | 782 base::Callback<void(bool)> send_message_cb; |
784 PresentationSessionMessage* test_message = nullptr; | 783 PresentationSessionMessage* test_message = nullptr; |
785 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 784 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
(...skipping 10 matching lines...) Expand all Loading... |
796 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 795 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
797 std::vector<uint8_t> data; | 796 std::vector<uint8_t> data; |
798 data.assign(buffer, buffer + sizeof(buffer)); | 797 data.assign(buffer, buffer + sizeof(buffer)); |
799 | 798 |
800 blink::mojom::PresentationSessionInfoPtr session( | 799 blink::mojom::PresentationSessionInfoPtr session( |
801 blink::mojom::PresentationSessionInfo::New()); | 800 blink::mojom::PresentationSessionInfo::New()); |
802 session->url = presentation_url1_; | 801 session->url = presentation_url1_; |
803 session->id = kPresentationId; | 802 session->id = kPresentationId; |
804 blink::mojom::SessionMessagePtr message_request( | 803 blink::mojom::SessionMessagePtr message_request( |
805 blink::mojom::SessionMessage::New()); | 804 blink::mojom::SessionMessage::New()); |
806 message_request->type = blink::mojom::PresentationMessageType::BLOB; | 805 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
807 message_request->data = data; | 806 message_request->data = data; |
808 service_ptr_->SendSessionMessage( | 807 service_ptr_->SendSessionMessage( |
809 std::move(session), std::move(message_request), | 808 std::move(session), std::move(message_request), |
810 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 809 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, |
811 base::Unretained(this))); | 810 base::Unretained(this))); |
812 | 811 |
813 base::RunLoop run_loop; | 812 base::RunLoop run_loop; |
814 base::Callback<void(bool)> send_message_cb; | 813 base::Callback<void(bool)> send_message_cb; |
815 PresentationSessionMessage* test_message = nullptr; | 814 PresentationSessionMessage* test_message = nullptr; |
816 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 815 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
817 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 816 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
818 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 817 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
819 run_loop.Run(); | 818 run_loop.Run(); |
820 | 819 |
821 // Make sure |test_message| gets deleted. | 820 // Make sure |test_message| gets deleted. |
822 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); | 821 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); |
823 EXPECT_TRUE(test_message); | 822 EXPECT_TRUE(test_message); |
824 EXPECT_TRUE(test_message->is_binary()); | 823 EXPECT_TRUE(test_message->is_binary()); |
825 EXPECT_EQ(PresentationMessageType::BLOB, test_message->type); | 824 EXPECT_EQ(PresentationMessageType::BINARY, test_message->type); |
826 EXPECT_TRUE(test_message->message.empty()); | 825 EXPECT_TRUE(test_message->message.empty()); |
827 ASSERT_TRUE(test_message->data); | 826 ASSERT_TRUE(test_message->data); |
828 EXPECT_EQ(data.size(), test_message->data->size()); | 827 EXPECT_EQ(data.size(), test_message->data->size()); |
829 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); | 828 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); |
830 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); | 829 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); |
831 send_message_cb.Run(true); | 830 send_message_cb.Run(true); |
832 SaveQuitClosureAndRunLoop(); | 831 SaveQuitClosureAndRunLoop(); |
833 } | 832 } |
834 | 833 |
835 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { | 834 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { |
(...skipping 22 matching lines...) Expand all Loading... |
858 mock_delegate_.set_screen_availability_listening_supported(false); | 857 mock_delegate_.set_screen_availability_listening_supported(false); |
859 base::RunLoop run_loop; | 858 base::RunLoop run_loop; |
860 EXPECT_CALL(mock_client_, | 859 EXPECT_CALL(mock_client_, |
861 OnScreenAvailabilityNotSupported(presentation_url1_)) | 860 OnScreenAvailabilityNotSupported(presentation_url1_)) |
862 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 861 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
863 ListenForScreenAvailabilityAndWait(presentation_url1_, false); | 862 ListenForScreenAvailabilityAndWait(presentation_url1_, false); |
864 run_loop.Run(); | 863 run_loop.Run(); |
865 } | 864 } |
866 | 865 |
867 } // namespace content | 866 } // namespace content |
OLD | NEW |