| 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 const PresentationSessionStartedCallback& success_cb, | 106 const PresentationSessionStartedCallback& success_cb, |
| 107 const PresentationSessionErrorCallback& error_cb)); | 107 const PresentationSessionErrorCallback& error_cb)); |
| 108 MOCK_METHOD3(CloseConnection, | 108 MOCK_METHOD3(CloseConnection, |
| 109 void(int render_process_id, | 109 void(int render_process_id, |
| 110 int render_frame_id, | 110 int render_frame_id, |
| 111 const std::string& presentation_id)); | 111 const std::string& presentation_id)); |
| 112 MOCK_METHOD3(Terminate, | 112 MOCK_METHOD3(Terminate, |
| 113 void(int render_process_id, | 113 void(int render_process_id, |
| 114 int render_frame_id, | 114 int render_frame_id, |
| 115 const std::string& presentation_id)); | 115 const std::string& presentation_id)); |
| 116 MOCK_METHOD4(ListenForSessionMessages, | 116 MOCK_METHOD4(ListenForConnectionMessages, |
| 117 void(int render_process_id, | 117 void(int render_process_id, |
| 118 int render_frame_id, | 118 int render_frame_id, |
| 119 const content::PresentationSessionInfo& session, | 119 const content::PresentationSessionInfo& session, |
| 120 const PresentationSessionMessageCallback& message_cb)); | 120 const PresentationConnectionMessageCallback& message_cb)); |
| 121 MOCK_METHOD5(SendMessageRawPtr, | 121 MOCK_METHOD5(SendMessageRawPtr, |
| 122 void(int render_process_id, | 122 void(int render_process_id, |
| 123 int render_frame_id, | 123 int render_frame_id, |
| 124 const content::PresentationSessionInfo& session, | 124 const content::PresentationSessionInfo& session, |
| 125 PresentationSessionMessage* message_request, | 125 PresentationConnectionMessage* message_request, |
| 126 const SendMessageCallback& send_message_cb)); | 126 const SendMessageCallback& send_message_cb)); |
| 127 void SendMessage(int render_process_id, | 127 void SendMessage( |
| 128 int render_frame_id, | 128 int render_process_id, |
| 129 const content::PresentationSessionInfo& session, | 129 int render_frame_id, |
| 130 std::unique_ptr<PresentationSessionMessage> message_request, | 130 const content::PresentationSessionInfo& session, |
| 131 const SendMessageCallback& send_message_cb) override { | 131 std::unique_ptr<PresentationConnectionMessage> message_request, |
| 132 const SendMessageCallback& send_message_cb) override { |
| 132 SendMessageRawPtr(render_process_id, render_frame_id, session, | 133 SendMessageRawPtr(render_process_id, render_frame_id, session, |
| 133 message_request.release(), send_message_cb); | 134 message_request.release(), send_message_cb); |
| 134 } | 135 } |
| 135 MOCK_METHOD4(ListenForConnectionStateChange, | 136 MOCK_METHOD4(ListenForConnectionStateChange, |
| 136 void(int render_process_id, | 137 void(int render_process_id, |
| 137 int render_frame_id, | 138 int render_frame_id, |
| 138 const content::PresentationSessionInfo& connection, | 139 const content::PresentationSessionInfo& connection, |
| 139 const content::PresentationConnectionStateChangedCallback& | 140 const content::PresentationConnectionStateChangedCallback& |
| 140 state_changed_cb)); | 141 state_changed_cb)); |
| 141 | 142 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 167 const std::string& message) override { | 168 const std::string& message) override { |
| 168 OnConnectionClosed(*connection, reason, message); | 169 OnConnectionClosed(*connection, reason, message); |
| 169 } | 170 } |
| 170 MOCK_METHOD3(OnConnectionClosed, | 171 MOCK_METHOD3(OnConnectionClosed, |
| 171 void(const blink::mojom::PresentationSessionInfo& connection, | 172 void(const blink::mojom::PresentationSessionInfo& connection, |
| 172 blink::mojom::PresentationConnectionCloseReason reason, | 173 blink::mojom::PresentationConnectionCloseReason reason, |
| 173 const std::string& message)); | 174 const std::string& message)); |
| 174 | 175 |
| 175 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); | 176 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); |
| 176 | 177 |
| 177 void OnSessionMessagesReceived( | 178 void OnConnectionMessagesReceived( |
| 178 blink::mojom::PresentationSessionInfoPtr session_info, | 179 blink::mojom::PresentationSessionInfoPtr session_info, |
| 179 std::vector<blink::mojom::SessionMessagePtr> messages) override { | 180 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { |
| 180 messages_received_ = std::move(messages); | 181 messages_received_ = std::move(messages); |
| 181 MessagesReceived(); | 182 MessagesReceived(); |
| 182 } | 183 } |
| 183 MOCK_METHOD0(MessagesReceived, void()); | 184 MOCK_METHOD0(MessagesReceived, void()); |
| 184 | 185 |
| 185 void OnDefaultSessionStarted( | 186 void OnDefaultSessionStarted( |
| 186 blink::mojom::PresentationSessionInfoPtr session_info) override { | 187 blink::mojom::PresentationSessionInfoPtr session_info) override { |
| 187 OnDefaultSessionStarted(*session_info); | 188 OnDefaultSessionStarted(*session_info); |
| 188 } | 189 } |
| 189 MOCK_METHOD1(OnDefaultSessionStarted, | 190 MOCK_METHOD1(OnDefaultSessionStarted, |
| 190 void(const blink::mojom::PresentationSessionInfo& session_info)); | 191 void(const blink::mojom::PresentationSessionInfo& session_info)); |
| 191 | 192 |
| 192 void OnReceiverConnectionAvailable( | 193 void OnReceiverConnectionAvailable( |
| 193 blink::mojom::PresentationSessionInfoPtr session_info) override { | 194 blink::mojom::PresentationSessionInfoPtr session_info) override { |
| 194 OnReceiverConnectionAvailable(*session_info); | 195 OnReceiverConnectionAvailable(*session_info); |
| 195 } | 196 } |
| 196 MOCK_METHOD1(OnReceiverConnectionAvailable, | 197 MOCK_METHOD1(OnReceiverConnectionAvailable, |
| 197 void(const blink::mojom::PresentationSessionInfo& session_info)); | 198 void(const blink::mojom::PresentationSessionInfo& session_info)); |
| 198 | 199 |
| 199 std::vector<blink::mojom::SessionMessagePtr> messages_received_; | 200 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; |
| 200 }; | 201 }; |
| 201 | 202 |
| 202 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { | 203 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { |
| 203 public: | 204 public: |
| 204 PresentationServiceImplTest() | 205 PresentationServiceImplTest() |
| 205 : presentation_url1_(GURL(kPresentationUrl1)), | 206 : presentation_url1_(GURL(kPresentationUrl1)), |
| 206 presentation_url2_(GURL(kPresentationUrl2)), | 207 presentation_url2_(GURL(kPresentationUrl2)), |
| 207 presentation_url3_(GURL(kPresentationUrl3)) {} | 208 presentation_url3_(GURL(kPresentationUrl3)) {} |
| 208 | 209 |
| 209 void SetUp() override { | 210 void SetUp() override { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 | 282 |
| 282 void ExpectReset() { | 283 void ExpectReset() { |
| 283 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1); | 284 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1); |
| 284 } | 285 } |
| 285 | 286 |
| 286 void ExpectCleanState() { | 287 void ExpectCleanState() { |
| 287 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); | 288 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); |
| 288 EXPECT_EQ( | 289 EXPECT_EQ( |
| 289 service_impl_->screen_availability_listeners_.find(presentation_url1_), | 290 service_impl_->screen_availability_listeners_.find(presentation_url1_), |
| 290 service_impl_->screen_availability_listeners_.end()); | 291 service_impl_->screen_availability_listeners_.end()); |
| 291 EXPECT_FALSE(service_impl_->on_session_messages_callback_.get()); | 292 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); |
| 292 } | 293 } |
| 293 | 294 |
| 294 void ExpectNewSessionCallbackSuccess( | 295 void ExpectNewSessionCallbackSuccess( |
| 295 blink::mojom::PresentationSessionInfoPtr info, | 296 blink::mojom::PresentationSessionInfoPtr info, |
| 296 blink::mojom::PresentationErrorPtr error) { | 297 blink::mojom::PresentationErrorPtr error) { |
| 297 EXPECT_FALSE(info.is_null()); | 298 EXPECT_FALSE(info.is_null()); |
| 298 EXPECT_TRUE(error.is_null()); | 299 EXPECT_TRUE(error.is_null()); |
| 299 if (!run_loop_quit_closure_.is_null()) | 300 if (!run_loop_quit_closure_.is_null()) |
| 300 run_loop_quit_closure_.Run(); | 301 run_loop_quit_closure_.Run(); |
| 301 } | 302 } |
| 302 | 303 |
| 303 void ExpectNewSessionCallbackError( | 304 void ExpectNewSessionCallbackError( |
| 304 blink::mojom::PresentationSessionInfoPtr info, | 305 blink::mojom::PresentationSessionInfoPtr info, |
| 305 blink::mojom::PresentationErrorPtr error) { | 306 blink::mojom::PresentationErrorPtr error) { |
| 306 EXPECT_TRUE(info.is_null()); | 307 EXPECT_TRUE(info.is_null()); |
| 307 EXPECT_FALSE(error.is_null()); | 308 EXPECT_FALSE(error.is_null()); |
| 308 if (!run_loop_quit_closure_.is_null()) | 309 if (!run_loop_quit_closure_.is_null()) |
| 309 run_loop_quit_closure_.Run(); | 310 run_loop_quit_closure_.Run(); |
| 310 } | 311 } |
| 311 | 312 |
| 312 void ExpectSessionMessages( | 313 void ExpectConnectionMessages( |
| 313 const std::vector<blink::mojom::SessionMessagePtr>& expected_msgs, | 314 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, |
| 314 const std::vector<blink::mojom::SessionMessagePtr>& actual_msgs) { | 315 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { |
| 315 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); | 316 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); |
| 316 for (size_t i = 0; i < actual_msgs.size(); ++i) | 317 for (size_t i = 0; i < actual_msgs.size(); ++i) |
| 317 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); | 318 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); |
| 318 } | 319 } |
| 319 | 320 |
| 320 void ExpectSendSessionMessageCallback(bool success) { | 321 void ExpectSendConnectionMessageCallback(bool success) { |
| 321 EXPECT_TRUE(success); | 322 EXPECT_TRUE(success); |
| 322 EXPECT_FALSE(service_impl_->send_message_callback_); | 323 EXPECT_FALSE(service_impl_->send_message_callback_); |
| 323 if (!run_loop_quit_closure_.is_null()) | 324 if (!run_loop_quit_closure_.is_null()) |
| 324 run_loop_quit_closure_.Run(); | 325 run_loop_quit_closure_.Run(); |
| 325 } | 326 } |
| 326 | 327 |
| 327 void RunListenForSessionMessages(const std::string& text_msg, | 328 void RunListenForConnectionMessages(const std::string& text_msg, |
| 328 const std::vector<uint8_t>& binary_data, | 329 const std::vector<uint8_t>& binary_data, |
| 329 bool pass_ownership) { | 330 bool pass_ownership) { |
| 330 std::vector<blink::mojom::SessionMessagePtr> expected_msgs(2); | 331 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); |
| 331 expected_msgs[0] = blink::mojom::SessionMessage::New(); | 332 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); |
| 332 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; | 333 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; |
| 333 expected_msgs[0]->message = text_msg; | 334 expected_msgs[0]->message = text_msg; |
| 334 expected_msgs[1] = blink::mojom::SessionMessage::New(); | 335 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); |
| 335 expected_msgs[1]->type = | 336 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; |
| 336 blink::mojom::PresentationMessageType::ARRAY_BUFFER; | |
| 337 expected_msgs[1]->data = binary_data; | 337 expected_msgs[1]->data = binary_data; |
| 338 | 338 |
| 339 blink::mojom::PresentationSessionInfoPtr session( | 339 blink::mojom::PresentationSessionInfoPtr session( |
| 340 blink::mojom::PresentationSessionInfo::New()); | 340 blink::mojom::PresentationSessionInfo::New()); |
| 341 session->url = presentation_url1_; | 341 session->url = presentation_url1_; |
| 342 session->id = kPresentationId; | 342 session->id = kPresentationId; |
| 343 | 343 |
| 344 PresentationSessionMessageCallback message_cb; | 344 PresentationConnectionMessageCallback message_cb; |
| 345 { | 345 { |
| 346 base::RunLoop run_loop; | 346 base::RunLoop run_loop; |
| 347 EXPECT_CALL(mock_delegate_, ListenForSessionMessages(_, _, _, _)) | 347 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) |
| 348 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 348 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 349 SaveArg<3>(&message_cb))); | 349 SaveArg<3>(&message_cb))); |
| 350 service_ptr_->ListenForSessionMessages(std::move(session)); | 350 service_ptr_->ListenForConnectionMessages(std::move(session)); |
| 351 run_loop.Run(); | 351 run_loop.Run(); |
| 352 } | 352 } |
| 353 | 353 |
| 354 ScopedVector<PresentationSessionMessage> messages; | 354 ScopedVector<PresentationConnectionMessage> messages; |
| 355 std::unique_ptr<content::PresentationSessionMessage> message; | 355 std::unique_ptr<content::PresentationConnectionMessage> message; |
| 356 message.reset( | 356 message.reset(new content::PresentationConnectionMessage( |
| 357 new content::PresentationSessionMessage(PresentationMessageType::TEXT)); | 357 PresentationMessageType::TEXT)); |
| 358 message->message = text_msg; | 358 message->message = text_msg; |
| 359 messages.push_back(std::move(message)); | 359 messages.push_back(std::move(message)); |
| 360 message.reset(new content::PresentationSessionMessage( | 360 message.reset(new content::PresentationConnectionMessage( |
| 361 PresentationMessageType::ARRAY_BUFFER)); | 361 PresentationMessageType::BINARY)); |
| 362 message->data.reset(new std::vector<uint8_t>(binary_data)); | 362 message->data.reset(new std::vector<uint8_t>(binary_data)); |
| 363 messages.push_back(std::move(message)); | 363 messages.push_back(std::move(message)); |
| 364 | 364 |
| 365 std::vector<blink::mojom::SessionMessagePtr> actual_msgs; | 365 std::vector<blink::mojom::ConnectionMessagePtr> actual_msgs; |
| 366 { | 366 { |
| 367 base::RunLoop run_loop; | 367 base::RunLoop run_loop; |
| 368 EXPECT_CALL(mock_client_, MessagesReceived()) | 368 EXPECT_CALL(mock_client_, MessagesReceived()) |
| 369 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 369 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 370 message_cb.Run(std::move(messages), pass_ownership); | 370 message_cb.Run(std::move(messages), pass_ownership); |
| 371 run_loop.Run(); | 371 run_loop.Run(); |
| 372 } | 372 } |
| 373 ExpectSessionMessages(expected_msgs, mock_client_.messages_received_); | 373 ExpectConnectionMessages(expected_msgs, mock_client_.messages_received_); |
| 374 } | 374 } |
| 375 | 375 |
| 376 MockPresentationServiceDelegate mock_delegate_; | 376 MockPresentationServiceDelegate mock_delegate_; |
| 377 | 377 |
| 378 std::unique_ptr<PresentationServiceImpl> service_impl_; | 378 std::unique_ptr<PresentationServiceImpl> service_impl_; |
| 379 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_; | 379 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_; |
| 380 | 380 |
| 381 MockPresentationServiceClient mock_client_; | 381 MockPresentationServiceClient mock_client_; |
| 382 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>> | 382 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>> |
| 383 client_binding_; | 383 client_binding_; |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 } | 642 } |
| 643 | 643 |
| 644 TEST_F(PresentationServiceImplTest, Terminate) { | 644 TEST_F(PresentationServiceImplTest, Terminate) { |
| 645 service_ptr_->Terminate(presentation_url1_, kPresentationId); | 645 service_ptr_->Terminate(presentation_url1_, kPresentationId); |
| 646 base::RunLoop run_loop; | 646 base::RunLoop run_loop; |
| 647 EXPECT_CALL(mock_delegate_, Terminate(_, _, Eq(kPresentationId))) | 647 EXPECT_CALL(mock_delegate_, Terminate(_, _, Eq(kPresentationId))) |
| 648 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 648 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 649 run_loop.Run(); | 649 run_loop.Run(); |
| 650 } | 650 } |
| 651 | 651 |
| 652 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesPassed) { | 652 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesPassed) { |
| 653 std::string text_msg("123"); | 653 std::string text_msg("123"); |
| 654 std::vector<uint8_t> binary_data(3, '\1'); | 654 std::vector<uint8_t> binary_data(3, '\1'); |
| 655 RunListenForSessionMessages(text_msg, binary_data, true); | 655 RunListenForConnectionMessages(text_msg, binary_data, true); |
| 656 } | 656 } |
| 657 | 657 |
| 658 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesCopied) { | 658 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesCopied) { |
| 659 std::string text_msg("123"); | 659 std::string text_msg("123"); |
| 660 std::vector<uint8_t> binary_data(3, '\1'); | 660 std::vector<uint8_t> binary_data(3, '\1'); |
| 661 RunListenForSessionMessages(text_msg, binary_data, false); | 661 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 662 } | 662 } |
| 663 | 663 |
| 664 TEST_F(PresentationServiceImplTest, ListenForSessionMessagesWithEmptyMsg) { | 664 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesWithEmptyMsg) { |
| 665 std::string text_msg(""); | 665 std::string text_msg(""); |
| 666 std::vector<uint8_t> binary_data; | 666 std::vector<uint8_t> binary_data; |
| 667 RunListenForSessionMessages(text_msg, binary_data, false); | 667 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 668 } | 668 } |
| 669 | 669 |
| 670 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { | 670 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { |
| 671 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) | 671 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) |
| 672 .Times(1); | 672 .Times(1); |
| 673 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); | 673 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); |
| 674 | 674 |
| 675 // This request should fail immediately, since there is already a StartSession | 675 // This request should fail immediately, since there is already a StartSession |
| 676 // in progress. | 676 // in progress. |
| 677 service_ptr_->StartSession( | 677 service_ptr_->StartSession( |
| 678 presentation_urls_, | 678 presentation_urls_, |
| 679 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, | 679 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, |
| 680 base::Unretained(this))); | 680 base::Unretained(this))); |
| 681 SaveQuitClosureAndRunLoop(); | 681 SaveQuitClosureAndRunLoop(); |
| 682 } | 682 } |
| 683 | 683 |
| 684 TEST_F(PresentationServiceImplTest, SendStringMessage) { | 684 TEST_F(PresentationServiceImplTest, SendStringMessage) { |
| 685 std::string message("Test presentation session message"); | 685 std::string message("Test presentation session message"); |
| 686 | 686 |
| 687 blink::mojom::PresentationSessionInfoPtr session( | 687 blink::mojom::PresentationSessionInfoPtr session( |
| 688 blink::mojom::PresentationSessionInfo::New()); | 688 blink::mojom::PresentationSessionInfo::New()); |
| 689 session->url = presentation_url1_; | 689 session->url = presentation_url1_; |
| 690 session->id = kPresentationId; | 690 session->id = kPresentationId; |
| 691 blink::mojom::SessionMessagePtr message_request( | 691 blink::mojom::ConnectionMessagePtr message_request( |
| 692 blink::mojom::SessionMessage::New()); | 692 blink::mojom::ConnectionMessage::New()); |
| 693 message_request->type = blink::mojom::PresentationMessageType::TEXT; | 693 message_request->type = blink::mojom::PresentationMessageType::TEXT; |
| 694 message_request->message = message; | 694 message_request->message = message; |
| 695 service_ptr_->SendSessionMessage( | 695 service_ptr_->SendConnectionMessage( |
| 696 std::move(session), std::move(message_request), | 696 std::move(session), std::move(message_request), |
| 697 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 697 base::Bind( |
| 698 base::Unretained(this))); | 698 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 699 base::Unretained(this))); |
| 699 | 700 |
| 700 base::RunLoop run_loop; | 701 base::RunLoop run_loop; |
| 701 base::Callback<void(bool)> send_message_cb; | 702 base::Callback<void(bool)> send_message_cb; |
| 702 PresentationSessionMessage* test_message = nullptr; | 703 PresentationConnectionMessage* test_message = nullptr; |
| 703 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 704 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 704 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 705 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 705 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 706 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 706 run_loop.Run(); | 707 run_loop.Run(); |
| 707 | 708 |
| 708 // Make sure |test_message| gets deleted. | 709 // Make sure |test_message| gets deleted. |
| 709 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); | 710 std::unique_ptr<PresentationConnectionMessage> scoped_test_message( |
| 711 test_message); |
| 710 EXPECT_TRUE(test_message); | 712 EXPECT_TRUE(test_message); |
| 711 EXPECT_FALSE(test_message->is_binary()); | 713 EXPECT_FALSE(test_message->is_binary()); |
| 712 EXPECT_LE(test_message->message.size(), kMaxPresentationSessionMessageSize); | 714 EXPECT_LE(test_message->message.size(), |
| 715 kMaxPresentationConnectionMessageSize); |
| 713 EXPECT_EQ(message, test_message->message); | 716 EXPECT_EQ(message, test_message->message); |
| 714 ASSERT_FALSE(test_message->data); | 717 ASSERT_FALSE(test_message->data); |
| 715 send_message_cb.Run(true); | 718 send_message_cb.Run(true); |
| 716 SaveQuitClosureAndRunLoop(); | 719 SaveQuitClosureAndRunLoop(); |
| 717 } | 720 } |
| 718 | 721 |
| 719 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { | 722 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { |
| 720 // Test Array buffer data. | 723 // Test Array buffer data. |
| 721 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 724 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
| 722 std::vector<uint8_t> data; | 725 std::vector<uint8_t> data; |
| 723 data.assign(buffer, buffer + sizeof(buffer)); | 726 data.assign(buffer, buffer + sizeof(buffer)); |
| 724 | 727 |
| 725 blink::mojom::PresentationSessionInfoPtr session( | 728 blink::mojom::PresentationSessionInfoPtr session( |
| 726 blink::mojom::PresentationSessionInfo::New()); | 729 blink::mojom::PresentationSessionInfo::New()); |
| 727 session->url = presentation_url1_; | 730 session->url = presentation_url1_; |
| 728 session->id = kPresentationId; | 731 session->id = kPresentationId; |
| 729 blink::mojom::SessionMessagePtr message_request( | 732 blink::mojom::ConnectionMessagePtr message_request( |
| 730 blink::mojom::SessionMessage::New()); | 733 blink::mojom::ConnectionMessage::New()); |
| 731 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; | 734 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 732 message_request->data = data; | 735 message_request->data = data; |
| 733 service_ptr_->SendSessionMessage( | 736 service_ptr_->SendConnectionMessage( |
| 734 std::move(session), std::move(message_request), | 737 std::move(session), std::move(message_request), |
| 735 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 738 base::Bind( |
| 736 base::Unretained(this))); | 739 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 740 base::Unretained(this))); |
| 737 | 741 |
| 738 base::RunLoop run_loop; | 742 base::RunLoop run_loop; |
| 739 base::Callback<void(bool)> send_message_cb; | 743 base::Callback<void(bool)> send_message_cb; |
| 740 PresentationSessionMessage* test_message = nullptr; | 744 PresentationConnectionMessage* test_message = nullptr; |
| 741 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 745 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 742 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 746 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 743 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 747 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 744 run_loop.Run(); | 748 run_loop.Run(); |
| 745 | 749 |
| 746 // Make sure |test_message| gets deleted. | 750 // Make sure |test_message| gets deleted. |
| 747 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); | 751 std::unique_ptr<PresentationConnectionMessage> scoped_test_message( |
| 752 test_message); |
| 748 EXPECT_TRUE(test_message); | 753 EXPECT_TRUE(test_message); |
| 749 EXPECT_TRUE(test_message->is_binary()); | 754 EXPECT_TRUE(test_message->is_binary()); |
| 750 EXPECT_EQ(PresentationMessageType::ARRAY_BUFFER, test_message->type); | 755 EXPECT_EQ(PresentationMessageType::BINARY, test_message->type); |
| 751 EXPECT_TRUE(test_message->message.empty()); | 756 EXPECT_TRUE(test_message->message.empty()); |
| 752 ASSERT_TRUE(test_message->data); | 757 ASSERT_TRUE(test_message->data); |
| 753 EXPECT_EQ(data.size(), test_message->data->size()); | 758 EXPECT_EQ(data.size(), test_message->data->size()); |
| 754 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); | 759 EXPECT_LE(test_message->data->size(), kMaxPresentationConnectionMessageSize); |
| 755 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); | 760 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); |
| 756 send_message_cb.Run(true); | 761 send_message_cb.Run(true); |
| 757 SaveQuitClosureAndRunLoop(); | 762 SaveQuitClosureAndRunLoop(); |
| 758 } | 763 } |
| 759 | 764 |
| 760 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 765 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
| 761 // Create buffer with size exceeding the limit. | 766 // Create buffer with size exceeding the limit. |
| 762 // Use same size as in content::kMaxPresentationSessionMessageSize. | 767 // Use same size as in content::kMaxPresentationConnectionMessageSize. |
| 763 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 768 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
| 764 uint8_t buffer[kMaxBufferSizeInBytes + 1]; | 769 uint8_t buffer[kMaxBufferSizeInBytes + 1]; |
| 765 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 770 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
| 766 std::vector<uint8_t> data; | 771 std::vector<uint8_t> data; |
| 767 data.assign(buffer, buffer + sizeof(buffer)); | 772 data.assign(buffer, buffer + sizeof(buffer)); |
| 768 | 773 |
| 769 blink::mojom::PresentationSessionInfoPtr session( | 774 blink::mojom::PresentationSessionInfoPtr session( |
| 770 blink::mojom::PresentationSessionInfo::New()); | 775 blink::mojom::PresentationSessionInfo::New()); |
| 771 session->url = presentation_url1_; | 776 session->url = presentation_url1_; |
| 772 session->id = kPresentationId; | 777 session->id = kPresentationId; |
| 773 blink::mojom::SessionMessagePtr message_request( | 778 blink::mojom::ConnectionMessagePtr message_request( |
| 774 blink::mojom::SessionMessage::New()); | 779 blink::mojom::ConnectionMessage::New()); |
| 775 message_request->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER; | 780 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 776 message_request->data = data; | 781 message_request->data = data; |
| 777 service_ptr_->SendSessionMessage( | 782 service_ptr_->SendConnectionMessage( |
| 778 std::move(session), std::move(message_request), | 783 std::move(session), std::move(message_request), |
| 779 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 784 base::Bind( |
| 780 base::Unretained(this))); | 785 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 786 base::Unretained(this))); |
| 781 | 787 |
| 782 base::RunLoop run_loop; | 788 base::RunLoop run_loop; |
| 783 base::Callback<void(bool)> send_message_cb; | 789 base::Callback<void(bool)> send_message_cb; |
| 784 PresentationSessionMessage* test_message = nullptr; | 790 PresentationConnectionMessage* test_message = nullptr; |
| 785 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 791 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 786 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 792 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 787 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 793 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 788 run_loop.Run(); | 794 run_loop.Run(); |
| 789 | 795 |
| 790 EXPECT_FALSE(test_message); | 796 EXPECT_FALSE(test_message); |
| 791 send_message_cb.Run(true); | 797 send_message_cb.Run(true); |
| 792 SaveQuitClosureAndRunLoop(); | 798 SaveQuitClosureAndRunLoop(); |
| 793 } | 799 } |
| 794 | 800 |
| 795 TEST_F(PresentationServiceImplTest, SendBlobData) { | 801 TEST_F(PresentationServiceImplTest, SendBlobData) { |
| 796 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 802 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
| 797 std::vector<uint8_t> data; | 803 std::vector<uint8_t> data; |
| 798 data.assign(buffer, buffer + sizeof(buffer)); | 804 data.assign(buffer, buffer + sizeof(buffer)); |
| 799 | 805 |
| 800 blink::mojom::PresentationSessionInfoPtr session( | 806 blink::mojom::PresentationSessionInfoPtr session( |
| 801 blink::mojom::PresentationSessionInfo::New()); | 807 blink::mojom::PresentationSessionInfo::New()); |
| 802 session->url = presentation_url1_; | 808 session->url = presentation_url1_; |
| 803 session->id = kPresentationId; | 809 session->id = kPresentationId; |
| 804 blink::mojom::SessionMessagePtr message_request( | 810 blink::mojom::ConnectionMessagePtr message_request( |
| 805 blink::mojom::SessionMessage::New()); | 811 blink::mojom::ConnectionMessage::New()); |
| 806 message_request->type = blink::mojom::PresentationMessageType::BLOB; | 812 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 807 message_request->data = data; | 813 message_request->data = data; |
| 808 service_ptr_->SendSessionMessage( | 814 service_ptr_->SendConnectionMessage( |
| 809 std::move(session), std::move(message_request), | 815 std::move(session), std::move(message_request), |
| 810 base::Bind(&PresentationServiceImplTest::ExpectSendSessionMessageCallback, | 816 base::Bind( |
| 811 base::Unretained(this))); | 817 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 818 base::Unretained(this))); |
| 812 | 819 |
| 813 base::RunLoop run_loop; | 820 base::RunLoop run_loop; |
| 814 base::Callback<void(bool)> send_message_cb; | 821 base::Callback<void(bool)> send_message_cb; |
| 815 PresentationSessionMessage* test_message = nullptr; | 822 PresentationConnectionMessage* test_message = nullptr; |
| 816 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 823 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 817 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 824 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 818 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 825 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 819 run_loop.Run(); | 826 run_loop.Run(); |
| 820 | 827 |
| 821 // Make sure |test_message| gets deleted. | 828 // Make sure |test_message| gets deleted. |
| 822 std::unique_ptr<PresentationSessionMessage> scoped_test_message(test_message); | 829 std::unique_ptr<PresentationConnectionMessage> scoped_test_message( |
| 830 test_message); |
| 823 EXPECT_TRUE(test_message); | 831 EXPECT_TRUE(test_message); |
| 824 EXPECT_TRUE(test_message->is_binary()); | 832 EXPECT_TRUE(test_message->is_binary()); |
| 825 EXPECT_EQ(PresentationMessageType::BLOB, test_message->type); | 833 EXPECT_EQ(PresentationMessageType::BINARY, test_message->type); |
| 826 EXPECT_TRUE(test_message->message.empty()); | 834 EXPECT_TRUE(test_message->message.empty()); |
| 827 ASSERT_TRUE(test_message->data); | 835 ASSERT_TRUE(test_message->data); |
| 828 EXPECT_EQ(data.size(), test_message->data->size()); | 836 EXPECT_EQ(data.size(), test_message->data->size()); |
| 829 EXPECT_LE(test_message->data->size(), kMaxPresentationSessionMessageSize); | 837 EXPECT_LE(test_message->data->size(), kMaxPresentationConnectionMessageSize); |
| 830 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); | 838 EXPECT_EQ(0, memcmp(buffer, &(*test_message->data)[0], sizeof(buffer))); |
| 831 send_message_cb.Run(true); | 839 send_message_cb.Run(true); |
| 832 SaveQuitClosureAndRunLoop(); | 840 SaveQuitClosureAndRunLoop(); |
| 833 } | 841 } |
| 834 | 842 |
| 835 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { | 843 TEST_F(PresentationServiceImplTest, MaxPendingJoinSessionRequests) { |
| 836 const char* presentation_url = "http://fooUrl%d"; | 844 const char* presentation_url = "http://fooUrl%d"; |
| 837 const char* presentation_id = "presentationId%d"; | 845 const char* presentation_id = "presentationId%d"; |
| 838 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests; | 846 int num_requests = PresentationServiceImpl::kMaxNumQueuedSessionRequests; |
| 839 int i = 0; | 847 int i = 0; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 858 mock_delegate_.set_screen_availability_listening_supported(false); | 866 mock_delegate_.set_screen_availability_listening_supported(false); |
| 859 base::RunLoop run_loop; | 867 base::RunLoop run_loop; |
| 860 EXPECT_CALL(mock_client_, | 868 EXPECT_CALL(mock_client_, |
| 861 OnScreenAvailabilityNotSupported(presentation_url1_)) | 869 OnScreenAvailabilityNotSupported(presentation_url1_)) |
| 862 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 870 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 863 ListenForScreenAvailabilityAndWait(presentation_url1_, false); | 871 ListenForScreenAvailabilityAndWait(presentation_url1_, false); |
| 864 run_loop.Run(); | 872 run_loop.Run(); |
| 865 } | 873 } |
| 866 | 874 |
| 867 } // namespace content | 875 } // namespace content |
| OLD | NEW |