| 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 "base/location.h" | 5 #include "base/location.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
| 9 #include "base/test/test_timeouts.h" | 9 #include "base/test/test_timeouts.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 message_request->type = presentation::PresentationMessageType:: | 654 message_request->type = presentation::PresentationMessageType:: |
| 655 PRESENTATION_MESSAGE_TYPE_TEXT; | 655 PRESENTATION_MESSAGE_TYPE_TEXT; |
| 656 message_request->message = message; | 656 message_request->message = message; |
| 657 service_ptr_->SendSessionMessage( | 657 service_ptr_->SendSessionMessage( |
| 658 message_request.Pass(), | 658 message_request.Pass(), |
| 659 base::Bind( | 659 base::Bind( |
| 660 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, | 660 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, |
| 661 base::Unretained(this))); | 661 base::Unretained(this))); |
| 662 | 662 |
| 663 base::RunLoop run_loop; | 663 base::RunLoop run_loop; |
| 664 base::Closure send_message_cb; | 664 base::Callback<void(bool)> send_message_cb; |
| 665 PresentationSessionMessage* test_message = nullptr; | 665 PresentationSessionMessage* test_message = nullptr; |
| 666 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( | 666 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( |
| 667 _, _, _, _)) | 667 _, _, _, _)) |
| 668 .WillOnce(DoAll( | 668 .WillOnce(DoAll( |
| 669 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 669 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 670 SaveArg<2>(&test_message), | 670 SaveArg<2>(&test_message), |
| 671 SaveArg<3>(&send_message_cb))); | 671 SaveArg<3>(&send_message_cb))); |
| 672 run_loop.Run(); | 672 run_loop.Run(); |
| 673 | 673 |
| 674 EXPECT_TRUE(test_message); | 674 EXPECT_TRUE(test_message); |
| 675 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); | 675 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); |
| 676 EXPECT_EQ(kPresentationId, test_message->presentation_id); | 676 EXPECT_EQ(kPresentationId, test_message->presentation_id); |
| 677 EXPECT_FALSE(test_message->is_binary()); | 677 EXPECT_FALSE(test_message->is_binary()); |
| 678 EXPECT_TRUE(test_message->message.get()->size() <= | 678 EXPECT_TRUE(test_message->message.get()->size() <= |
| 679 kMaxPresentationSessionMessageSize); | 679 kMaxPresentationSessionMessageSize); |
| 680 EXPECT_EQ(message, *(test_message->message.get())); | 680 EXPECT_EQ(message, *(test_message->message.get())); |
| 681 EXPECT_FALSE(test_message->data); | 681 EXPECT_FALSE(test_message->data); |
| 682 delete test_message; | 682 delete test_message; |
| 683 send_message_cb.Run(); | 683 send_message_cb.Run(true); |
| 684 SaveQuitClosureAndRunLoop(); | 684 SaveQuitClosureAndRunLoop(); |
| 685 } | 685 } |
| 686 | 686 |
| 687 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { | 687 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { |
| 688 // Test Array buffer data. | 688 // Test Array buffer data. |
| 689 const uint8 buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 689 const uint8 buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
| 690 std::vector<uint8> data; | 690 std::vector<uint8> data; |
| 691 data.assign(buffer, buffer + sizeof(buffer)); | 691 data.assign(buffer, buffer + sizeof(buffer)); |
| 692 | 692 |
| 693 presentation::SessionMessagePtr message_request( | 693 presentation::SessionMessagePtr message_request( |
| 694 presentation::SessionMessage::New()); | 694 presentation::SessionMessage::New()); |
| 695 message_request->presentation_url = kPresentationUrl; | 695 message_request->presentation_url = kPresentationUrl; |
| 696 message_request->presentation_id = kPresentationId; | 696 message_request->presentation_id = kPresentationId; |
| 697 message_request->type = presentation::PresentationMessageType:: | 697 message_request->type = presentation::PresentationMessageType:: |
| 698 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; | 698 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; |
| 699 message_request->data = mojo::Array<uint8>::From(data); | 699 message_request->data = mojo::Array<uint8>::From(data); |
| 700 service_ptr_->SendSessionMessage( | 700 service_ptr_->SendSessionMessage( |
| 701 message_request.Pass(), | 701 message_request.Pass(), |
| 702 base::Bind( | 702 base::Bind( |
| 703 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, | 703 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, |
| 704 base::Unretained(this))); | 704 base::Unretained(this))); |
| 705 | 705 |
| 706 base::RunLoop run_loop; | 706 base::RunLoop run_loop; |
| 707 base::Closure send_message_cb; | 707 base::Callback<void(bool)> send_message_cb; |
| 708 PresentationSessionMessage* test_message = nullptr; | 708 PresentationSessionMessage* test_message = nullptr; |
| 709 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( | 709 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( |
| 710 _, _, _, _)) | 710 _, _, _, _)) |
| 711 .WillOnce(DoAll( | 711 .WillOnce(DoAll( |
| 712 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 712 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 713 SaveArg<2>(&test_message), | 713 SaveArg<2>(&test_message), |
| 714 SaveArg<3>(&send_message_cb))); | 714 SaveArg<3>(&send_message_cb))); |
| 715 run_loop.Run(); | 715 run_loop.Run(); |
| 716 | 716 |
| 717 EXPECT_TRUE(test_message); | 717 EXPECT_TRUE(test_message); |
| 718 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); | 718 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); |
| 719 EXPECT_EQ(kPresentationId, test_message->presentation_id); | 719 EXPECT_EQ(kPresentationId, test_message->presentation_id); |
| 720 EXPECT_TRUE(test_message->is_binary()); | 720 EXPECT_TRUE(test_message->is_binary()); |
| 721 EXPECT_EQ(PresentationMessageType::ARRAY_BUFFER, test_message->type); | 721 EXPECT_EQ(PresentationMessageType::ARRAY_BUFFER, test_message->type); |
| 722 EXPECT_FALSE(test_message->message); | 722 EXPECT_FALSE(test_message->message); |
| 723 EXPECT_EQ(data.size(), test_message->data.get()->size()); | 723 EXPECT_EQ(data.size(), test_message->data.get()->size()); |
| 724 EXPECT_TRUE(test_message->data.get()->size() <= | 724 EXPECT_TRUE(test_message->data.get()->size() <= |
| 725 kMaxPresentationSessionMessageSize); | 725 kMaxPresentationSessionMessageSize); |
| 726 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); | 726 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); |
| 727 delete test_message; | 727 delete test_message; |
| 728 send_message_cb.Run(); | 728 send_message_cb.Run(true); |
| 729 SaveQuitClosureAndRunLoop(); | 729 SaveQuitClosureAndRunLoop(); |
| 730 } | 730 } |
| 731 | 731 |
| 732 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 732 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
| 733 // Create buffer with size exceeding the limit. | 733 // Create buffer with size exceeding the limit. |
| 734 // Use same size as in content::kMaxPresentationSessionMessageSize. | 734 // Use same size as in content::kMaxPresentationSessionMessageSize. |
| 735 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 735 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
| 736 uint8 buffer[kMaxBufferSizeInBytes+1]; | 736 uint8 buffer[kMaxBufferSizeInBytes+1]; |
| 737 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 737 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
| 738 std::vector<uint8> data; | 738 std::vector<uint8> data; |
| 739 data.assign(buffer, buffer + sizeof(buffer)); | 739 data.assign(buffer, buffer + sizeof(buffer)); |
| 740 | 740 |
| 741 presentation::SessionMessagePtr message_request( | 741 presentation::SessionMessagePtr message_request( |
| 742 presentation::SessionMessage::New()); | 742 presentation::SessionMessage::New()); |
| 743 message_request->presentation_url = kPresentationUrl; | 743 message_request->presentation_url = kPresentationUrl; |
| 744 message_request->presentation_id = kPresentationId; | 744 message_request->presentation_id = kPresentationId; |
| 745 message_request->type = presentation::PresentationMessageType:: | 745 message_request->type = presentation::PresentationMessageType:: |
| 746 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; | 746 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; |
| 747 message_request->data = mojo::Array<uint8>::From(data); | 747 message_request->data = mojo::Array<uint8>::From(data); |
| 748 service_ptr_->SendSessionMessage( | 748 service_ptr_->SendSessionMessage( |
| 749 message_request.Pass(), | 749 message_request.Pass(), |
| 750 base::Bind( | 750 base::Bind( |
| 751 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, | 751 &PresentationServiceImplTest::ExpectSendMessageMojoCallback, |
| 752 base::Unretained(this))); | 752 base::Unretained(this))); |
| 753 | 753 |
| 754 base::RunLoop run_loop; | 754 base::RunLoop run_loop; |
| 755 base::Closure send_message_cb; | 755 base::Callback<void(bool)> send_message_cb; |
| 756 PresentationSessionMessage* test_message = nullptr; | 756 PresentationSessionMessage* test_message = nullptr; |
| 757 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( | 757 EXPECT_CALL(mock_delegate_, SendMessageRawPtr( |
| 758 _, _, _, _)) | 758 _, _, _, _)) |
| 759 .WillOnce(DoAll( | 759 .WillOnce(DoAll( |
| 760 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 760 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 761 SaveArg<2>(&test_message), | 761 SaveArg<2>(&test_message), |
| 762 SaveArg<3>(&send_message_cb))); | 762 SaveArg<3>(&send_message_cb))); |
| 763 run_loop.Run(); | 763 run_loop.Run(); |
| 764 | 764 |
| 765 EXPECT_FALSE(test_message); | 765 EXPECT_FALSE(test_message); |
| 766 send_message_cb.Run(); | 766 send_message_cb.Run(true); |
| 767 SaveQuitClosureAndRunLoop(); | 767 SaveQuitClosureAndRunLoop(); |
| 768 } | 768 } |
| 769 | 769 |
| 770 TEST_F(PresentationServiceImplTest, SendBlobData) { | 770 TEST_F(PresentationServiceImplTest, SendBlobData) { |
| 771 const uint8 buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 771 const uint8 buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
| 772 std::vector<uint8> data; | 772 std::vector<uint8> data; |
| 773 data.assign(buffer, buffer + sizeof(buffer)); | 773 data.assign(buffer, buffer + sizeof(buffer)); |
| 774 | 774 |
| 775 presentation::SessionMessagePtr message_request( | 775 presentation::SessionMessagePtr message_request( |
| 776 presentation::SessionMessage::New()); | 776 presentation::SessionMessage::New()); |
| 777 message_request->presentation_url = kPresentationUrl; | 777 message_request->presentation_url = kPresentationUrl; |
| 778 message_request->presentation_id = kPresentationId; | 778 message_request->presentation_id = kPresentationId; |
| 779 message_request->type = | 779 message_request->type = |
| 780 presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_BLOB; | 780 presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_BLOB; |
| 781 message_request->data = mojo::Array<uint8>::From(data); | 781 message_request->data = mojo::Array<uint8>::From(data); |
| 782 service_ptr_->SendSessionMessage( | 782 service_ptr_->SendSessionMessage( |
| 783 message_request.Pass(), | 783 message_request.Pass(), |
| 784 base::Bind(&PresentationServiceImplTest::ExpectSendMessageMojoCallback, | 784 base::Bind(&PresentationServiceImplTest::ExpectSendMessageMojoCallback, |
| 785 base::Unretained(this))); | 785 base::Unretained(this))); |
| 786 | 786 |
| 787 base::RunLoop run_loop; | 787 base::RunLoop run_loop; |
| 788 base::Closure send_message_cb; | 788 base::Callback<void(bool)> send_message_cb; |
| 789 PresentationSessionMessage* test_message = nullptr; | 789 PresentationSessionMessage* test_message = nullptr; |
| 790 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _)) | 790 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _)) |
| 791 .WillOnce(DoAll( | 791 .WillOnce(DoAll( |
| 792 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 792 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 793 SaveArg<2>(&test_message), | 793 SaveArg<2>(&test_message), |
| 794 SaveArg<3>(&send_message_cb))); | 794 SaveArg<3>(&send_message_cb))); |
| 795 run_loop.Run(); | 795 run_loop.Run(); |
| 796 | 796 |
| 797 EXPECT_TRUE(test_message); | 797 EXPECT_TRUE(test_message); |
| 798 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); | 798 EXPECT_EQ(kPresentationUrl, test_message->presentation_url); |
| 799 EXPECT_EQ(kPresentationId, test_message->presentation_id); | 799 EXPECT_EQ(kPresentationId, test_message->presentation_id); |
| 800 EXPECT_TRUE(test_message->is_binary()); | 800 EXPECT_TRUE(test_message->is_binary()); |
| 801 EXPECT_EQ(PresentationMessageType::BLOB, test_message->type); | 801 EXPECT_EQ(PresentationMessageType::BLOB, test_message->type); |
| 802 EXPECT_FALSE(test_message->message); | 802 EXPECT_FALSE(test_message->message); |
| 803 EXPECT_EQ(data.size(), test_message->data.get()->size()); | 803 EXPECT_EQ(data.size(), test_message->data.get()->size()); |
| 804 EXPECT_TRUE(test_message->data.get()->size() <= | 804 EXPECT_TRUE(test_message->data.get()->size() <= |
| 805 kMaxPresentationSessionMessageSize); | 805 kMaxPresentationSessionMessageSize); |
| 806 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); | 806 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer))); |
| 807 delete test_message; | 807 delete test_message; |
| 808 send_message_cb.Run(); | 808 send_message_cb.Run(true); |
| 809 SaveQuitClosureAndRunLoop(); | 809 SaveQuitClosureAndRunLoop(); |
| 810 } | 810 } |
| 811 | 811 |
| 812 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { | 812 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { |
| 813 const char* presentation_url = "http://fooUrl%d"; | 813 const char* presentation_url = "http://fooUrl%d"; |
| 814 const char* presentation_id = "presentationId%d"; | 814 const char* presentation_id = "presentationId%d"; |
| 815 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests; | 815 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests; |
| 816 int i = 0; | 816 int i = 0; |
| 817 EXPECT_CALL(mock_delegate_, JoinSession(_, _, _, _, _, _)) | 817 EXPECT_CALL(mock_delegate_, JoinSession(_, _, _, _, _, _)) |
| 818 .Times(num_requests); | 818 .Times(num_requests); |
| 819 for (; i < num_requests; ++i) { | 819 for (; i < num_requests; ++i) { |
| 820 service_ptr_->JoinSession( | 820 service_ptr_->JoinSession( |
| 821 base::StringPrintf(presentation_url, i), | 821 base::StringPrintf(presentation_url, i), |
| 822 base::StringPrintf(presentation_id, i), | 822 base::StringPrintf(presentation_id, i), |
| 823 base::Bind(&DoNothing)); | 823 base::Bind(&DoNothing)); |
| 824 } | 824 } |
| 825 | 825 |
| 826 // Exceeded maximum queue size, should invoke mojo callback with error. | 826 // Exceeded maximum queue size, should invoke mojo callback with error. |
| 827 service_ptr_->JoinSession( | 827 service_ptr_->JoinSession( |
| 828 base::StringPrintf(presentation_url, i), | 828 base::StringPrintf(presentation_url, i), |
| 829 base::StringPrintf(presentation_id, i), | 829 base::StringPrintf(presentation_id, i), |
| 830 base::Bind( | 830 base::Bind( |
| 831 &PresentationServiceImplTest::ExpectNewSessionMojoCallbackError, | 831 &PresentationServiceImplTest::ExpectNewSessionMojoCallbackError, |
| 832 base::Unretained(this))); | 832 base::Unretained(this))); |
| 833 SaveQuitClosureAndRunLoop(); | 833 SaveQuitClosureAndRunLoop(); |
| 834 } | 834 } |
| 835 | 835 |
| 836 } // namespace content | 836 } // namespace content |
| OLD | NEW |