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

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

Issue 1037483003: [PresentationAPI] Implementing send() from WebPresentationClient to the PresentationService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: No (c) in new files Copyright message. Created 5 years, 7 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/test/test_timeouts.h" 8 #include "base/test/test_timeouts.h"
9 #include "content/browser/presentation/presentation_service_impl.h" 9 #include "content/browser/presentation/presentation_service_impl.h"
10 #include "content/public/browser/presentation_service_delegate.h" 10 #include "content/public/browser/presentation_service_delegate.h"
11 #include "content/public/browser/presentation_session.h" 11 #include "content/public/browser/presentation_session.h"
12 #include "content/public/common/presentation_constants.h"
12 #include "content/test/test_render_frame_host.h" 13 #include "content/test/test_render_frame_host.h"
13 #include "content/test/test_render_view_host.h" 14 #include "content/test/test_render_view_host.h"
14 #include "content/test/test_web_contents.h" 15 #include "content/test/test_web_contents.h"
15 #include "mojo/public/cpp/bindings/interface_ptr.h" 16 #include "mojo/public/cpp/bindings/interface_ptr.h"
16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
17 18
18 using ::testing::_; 19 using ::testing::_;
19 using ::testing::Eq; 20 using ::testing::Eq;
20 using ::testing::InvokeWithoutArgs; 21 using ::testing::InvokeWithoutArgs;
21 using ::testing::Mock; 22 using ::testing::Mock;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 const PresentationSessionSuccessCallback& success_cb, 82 const PresentationSessionSuccessCallback& success_cb,
82 const PresentationSessionErrorCallback& error_cb)); 83 const PresentationSessionErrorCallback& error_cb));
83 MOCK_METHOD6(JoinSession, 84 MOCK_METHOD6(JoinSession,
84 void( 85 void(
85 int render_process_id, 86 int render_process_id,
86 int render_frame_id, 87 int render_frame_id,
87 const std::string& presentation_url, 88 const std::string& presentation_url,
88 const std::string& presentation_id, 89 const std::string& presentation_id,
89 const PresentationSessionSuccessCallback& success_cb, 90 const PresentationSessionSuccessCallback& success_cb,
90 const PresentationSessionErrorCallback& error_cb)); 91 const PresentationSessionErrorCallback& error_cb));
92
91 MOCK_METHOD3(ListenForSessionMessages, 93 MOCK_METHOD3(ListenForSessionMessages,
92 void( 94 void(
93 int render_process_id, 95 int render_process_id,
94 int render_frame_id, 96 int render_frame_id,
95 const PresentationSessionMessageCallback& message_cb)); 97 const PresentationSessionMessageCallback& message_cb));
98
99 MOCK_METHOD4(SendMessageRawPtr,
100 void(
101 int render_process_id,
102 int render_frame_id,
103 PresentationSessionMessage* message_request,
104 const SendMessageCallback& send_message_cb));
105
106 void SendMessage(
107 int render_process_id,
108 int render_frame_id,
109 scoped_ptr<PresentationSessionMessage> message_request,
110 const SendMessageCallback& send_message_cb) {
111 SendMessageRawPtr(
112 render_process_id,
113 render_frame_id,
114 message_request.release(),
115 send_message_cb);
116 }
96 }; 117 };
97 118
98 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { 119 class PresentationServiceImplTest : public RenderViewHostImplTestHarness {
99 public: 120 public:
100 PresentationServiceImplTest() 121 PresentationServiceImplTest()
101 : callback_count_(0), default_session_started_count_(0) {} 122 : callback_count_(0), default_session_started_count_(0) {}
102 123
103 void SetUp() override { 124 void SetUp() override {
104 RenderViewHostImplTestHarness::SetUp(); 125 RenderViewHostImplTestHarness::SetUp();
105 126
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 mojo::Array<presentation::SessionMessagePtr> actual_msgs) { 257 mojo::Array<presentation::SessionMessagePtr> actual_msgs) {
237 EXPECT_TRUE(actual_msgs.size() == expected_msgs_.size()); 258 EXPECT_TRUE(actual_msgs.size() == expected_msgs_.size());
238 for (size_t i = 0; i < actual_msgs.size(); ++i) { 259 for (size_t i = 0; i < actual_msgs.size(); ++i) {
239 EXPECT_TRUE(ArePresentationSessionMessagesEqual(expected_msgs_[i].get(), 260 EXPECT_TRUE(ArePresentationSessionMessagesEqual(expected_msgs_[i].get(),
240 actual_msgs[i].get())); 261 actual_msgs[i].get()));
241 } 262 }
242 if (!run_loop_quit_closure_.is_null()) 263 if (!run_loop_quit_closure_.is_null())
243 run_loop_quit_closure_.Run(); 264 run_loop_quit_closure_.Run();
244 } 265 }
245 266
267 void ExpectSendMessageMojoCallback(bool success) {
268 EXPECT_TRUE(success);
269 EXPECT_FALSE(service_impl_->send_message_callback_);
270 if (!run_loop_quit_closure_.is_null())
271 run_loop_quit_closure_.Run();
272 }
273
246 void RunListenForSessionMessages(std::string& text_msg, 274 void RunListenForSessionMessages(std::string& text_msg,
247 std::vector<uint8_t>& binary_data) { 275 std::vector<uint8_t>& binary_data) {
248 std::string presentation_url("http://fooUrl"); 276 std::string presentation_url("http://fooUrl");
249 std::string presentation_id("presentationId"); 277 std::string presentation_id("presentationId");
250 278
251 expected_msgs_ = mojo::Array<presentation::SessionMessagePtr>::New(2); 279 expected_msgs_ = mojo::Array<presentation::SessionMessagePtr>::New(2);
252 expected_msgs_[0] = presentation::SessionMessage::New(); 280 expected_msgs_[0] = presentation::SessionMessage::New();
253 expected_msgs_[0]->presentation_url = presentation_url; 281 expected_msgs_[0]->presentation_url = presentation_url;
254 expected_msgs_[0]->presentation_id = presentation_id; 282 expected_msgs_[0]->presentation_id = presentation_id;
255 expected_msgs_[0]->type = 283 expected_msgs_[0]->type =
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 base::Unretained(this))); 804 base::Unretained(this)));
777 RunLoopFor(TestTimeouts::tiny_timeout()); 805 RunLoopFor(TestTimeouts::tiny_timeout());
778 806
779 ExpectReset(); 807 ExpectReset();
780 service_impl_->Reset(); 808 service_impl_->Reset();
781 ExpectCleanState(); 809 ExpectCleanState();
782 SaveQuitClosureAndRunLoop(); 810 SaveQuitClosureAndRunLoop();
783 EXPECT_EQ(1, default_session_started_count_); 811 EXPECT_EQ(1, default_session_started_count_);
784 } 812 }
785 813
814 TEST_F(PresentationServiceImplTest, SendStringMessage) {
815 std::string presentation_url("http://foo.com/index.html");
816 std::string presentation_id("presentationId");
817 std::string message("Test presentation session message");
818
819 presentation::SessionMessagePtr message_request(
820 presentation::SessionMessage::New());
821 message_request->presentation_url = presentation_url;
822 message_request->presentation_id = presentation_id;
823 message_request->type = presentation::PresentationMessageType::
824 PRESENTATION_MESSAGE_TYPE_TEXT;
825 message_request->message = message;
826 service_ptr_->SendSessionMessage(
827 message_request.Pass(),
828 base::Bind(
829 &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
830 base::Unretained(this)));
831
832 base::RunLoop run_loop;
833 base::Closure send_message_cb;
834 PresentationSessionMessage* test_message = nullptr;
835 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
836 _, _, _, _))
837 .WillOnce(DoAll(
838 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
839 SaveArg<2>(&test_message),
840 SaveArg<3>(&send_message_cb)));
841 run_loop.Run();
842
843 EXPECT_TRUE(test_message);
844 EXPECT_EQ(presentation_url, test_message->presentation_url);
845 EXPECT_EQ(presentation_id, test_message->presentation_id);
846 EXPECT_FALSE(test_message->is_binary());
847 EXPECT_TRUE(test_message->message.get()->size() <=
848 kMaxPresentationSessionMessageSize);
849 EXPECT_EQ(message, *(test_message->message.get()));
850 EXPECT_FALSE(test_message->data);
851 delete test_message;
852 send_message_cb.Run();
853 SaveQuitClosureAndRunLoop();
854 }
855
856 TEST_F(PresentationServiceImplTest, SendArrayBuffer) {
857 std::string presentation_url("http://foo.com/index.html");
858 std::string presentation_id("presentationId");
859 // Test Array buffer data.
860 const uint8 buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
861 std::vector<uint8> data;
862 data.assign(buffer, buffer + sizeof(buffer));
863
864 presentation::SessionMessagePtr message_request(
865 presentation::SessionMessage::New());
866 message_request->presentation_url = presentation_url;
867 message_request->presentation_id = presentation_id;
868 message_request->type = presentation::PresentationMessageType::
869 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER;
870 message_request->data = mojo::Array<uint8>::From(data);
871 service_ptr_->SendSessionMessage(
872 message_request.Pass(),
873 base::Bind(
874 &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
875 base::Unretained(this)));
876
877 base::RunLoop run_loop;
878 base::Closure send_message_cb;
879 PresentationSessionMessage* test_message = nullptr;
880 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
881 _, _, _, _))
882 .WillOnce(DoAll(
883 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
884 SaveArg<2>(&test_message),
885 SaveArg<3>(&send_message_cb)));
886 run_loop.Run();
887
888 EXPECT_TRUE(test_message);
889 EXPECT_EQ(presentation_url, test_message->presentation_url);
890 EXPECT_EQ(presentation_id, test_message->presentation_id);
891 EXPECT_TRUE(test_message->is_binary());
892 EXPECT_FALSE(test_message->message);
893 EXPECT_EQ(data.size(), test_message->data.get()->size());
894 EXPECT_TRUE(test_message->data.get()->size() <=
895 kMaxPresentationSessionMessageSize);
896 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data.get())[0], sizeof(buffer)));
897 delete test_message;
898 send_message_cb.Run();
899 SaveQuitClosureAndRunLoop();
900 }
901
902 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) {
903 std::string presentation_url("http://foo.com/index.html");
904 std::string presentation_id("presentationId");
905 // Create buffer with size exceeding the limit.
906 // Use same size as in content::kMaxPresentationSessionMessageSize.
907 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB.
908 uint8 buffer[kMaxBufferSizeInBytes+1];
909 memset(buffer, 0, kMaxBufferSizeInBytes+1);
910 std::vector<uint8> data;
911 data.assign(buffer, buffer + sizeof(buffer));
912
913 presentation::SessionMessagePtr message_request(
914 presentation::SessionMessage::New());
915 message_request->presentation_url = presentation_url;
916 message_request->presentation_id = presentation_id;
917 message_request->type = presentation::PresentationMessageType::
918 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER;
919 message_request->data = mojo::Array<uint8>::From(data);
920 service_ptr_->SendSessionMessage(
921 message_request.Pass(),
922 base::Bind(
923 &PresentationServiceImplTest::ExpectSendMessageMojoCallback,
924 base::Unretained(this)));
925
926 base::RunLoop run_loop;
927 base::Closure send_message_cb;
928 PresentationSessionMessage* test_message = nullptr;
929 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(
930 _, _, _, _))
931 .WillOnce(DoAll(
932 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
933 SaveArg<2>(&test_message),
934 SaveArg<3>(&send_message_cb)));
935 run_loop.Run();
936
937 EXPECT_FALSE(test_message);
938 send_message_cb.Run();
939 SaveQuitClosureAndRunLoop();
940 }
941
786 } // namespace content 942 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/presentation/presentation_service_impl.cc ('k') | content/common/presentation/presentation_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698