OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ppapi/tests/test_websocket.h" | 5 #include "ppapi/tests/test_websocket.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ppapi/c/dev/ppb_testing_dev.h" | 10 #include "ppapi/c/dev/ppb_testing_dev.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 const char kProtocolTestServerURL[] = | 35 const char kProtocolTestServerURL[] = |
36 "ws://localhost:8880/websocket/tests/hybi/protocol-test?protocol="; | 36 "ws://localhost:8880/websocket/tests/hybi/protocol-test?protocol="; |
37 | 37 |
38 const char* const kInvalidURLs[] = { | 38 const char* const kInvalidURLs[] = { |
39 "http://www.google.com/invalid_scheme", | 39 "http://www.google.com/invalid_scheme", |
40 "ws://www.google.com/invalid#fragment", | 40 "ws://www.google.com/invalid#fragment", |
41 "ws://www.google.com:65535/invalid_port", | 41 "ws://www.google.com:65535/invalid_port", |
42 NULL | 42 NULL |
43 }; | 43 }; |
44 | 44 |
45 // Connection close code is defined in WebSocket protocol specification. | |
46 // The magic number 1000 means gracefull closure without any error. | |
47 // See section 7.4.1. of RFC 6455. | |
48 const uint16_t kCloseCodeNormalClosure = 1000U; | |
49 | |
50 // Internal packet sizes. | 45 // Internal packet sizes. |
51 const uint64_t kCloseFrameSize = 6; | 46 const uint64_t kCloseFrameSize = 6; |
52 const uint64_t kMessageFrameOverhead = 6; | 47 const uint64_t kMessageFrameOverhead = 6; |
53 | 48 |
54 namespace { | 49 namespace { |
55 | 50 |
56 struct WebSocketEvent { | 51 struct WebSocketEvent { |
57 enum EventType { | 52 enum EventType { |
58 EVENT_OPEN, | 53 EVENT_OPEN, |
59 EVENT_MESSAGE, | 54 EVENT_MESSAGE, |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 PASS(); | 421 PASS(); |
427 } | 422 } |
428 | 423 |
429 std::string TestWebSocket::TestInvalidClose() { | 424 std::string TestWebSocket::TestInvalidClose() { |
430 PP_Var reason = CreateVarString("close for test"); | 425 PP_Var reason = CreateVarString("close for test"); |
431 TestCompletionCallback callback(instance_->pp_instance()); | 426 TestCompletionCallback callback(instance_->pp_instance()); |
432 | 427 |
433 // Close before connect. | 428 // Close before connect. |
434 PP_Resource ws = websocket_interface_->Create(instance_->pp_instance()); | 429 PP_Resource ws = websocket_interface_->Create(instance_->pp_instance()); |
435 int32_t result = websocket_interface_->Close( | 430 int32_t result = websocket_interface_->Close( |
436 ws, kCloseCodeNormalClosure, reason, | 431 ws, PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
437 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 432 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
438 ASSERT_EQ(PP_ERROR_FAILED, result); | 433 ASSERT_EQ(PP_ERROR_FAILED, result); |
439 core_interface_->ReleaseResource(ws); | 434 core_interface_->ReleaseResource(ws); |
440 | 435 |
441 // Close with bad arguments. | 436 // Close with bad arguments. |
442 ws = Connect(kEchoServerURL, &result, NULL); | 437 ws = Connect(kEchoServerURL, &result, NULL); |
443 ASSERT_TRUE(ws); | 438 ASSERT_TRUE(ws); |
444 ASSERT_EQ(PP_OK, result); | 439 ASSERT_EQ(PP_OK, result); |
445 result = websocket_interface_->Close(ws, 1U, reason, | 440 result = websocket_interface_->Close(ws, 1U, reason, |
446 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 441 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
(...skipping 10 matching lines...) Expand all Loading... |
457 PP_Var url = CreateVarString(kEchoServerURL); | 452 PP_Var url = CreateVarString(kEchoServerURL); |
458 PP_Var protocols[] = { PP_MakeUndefined() }; | 453 PP_Var protocols[] = { PP_MakeUndefined() }; |
459 TestCompletionCallback callback(instance_->pp_instance()); | 454 TestCompletionCallback callback(instance_->pp_instance()); |
460 TestCompletionCallback another_callback(instance_->pp_instance()); | 455 TestCompletionCallback another_callback(instance_->pp_instance()); |
461 | 456 |
462 // Close. | 457 // Close. |
463 int32_t result; | 458 int32_t result; |
464 PP_Resource ws = Connect(kEchoServerURL, &result, NULL); | 459 PP_Resource ws = Connect(kEchoServerURL, &result, NULL); |
465 ASSERT_TRUE(ws); | 460 ASSERT_TRUE(ws); |
466 ASSERT_EQ(PP_OK, result); | 461 ASSERT_EQ(PP_OK, result); |
467 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 462 result = websocket_interface_->Close(ws, |
| 463 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
468 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 464 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
469 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 465 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
470 result = callback.WaitForResult(); | 466 result = callback.WaitForResult(); |
471 ASSERT_EQ(PP_OK, result); | 467 ASSERT_EQ(PP_OK, result); |
472 core_interface_->ReleaseResource(ws); | 468 core_interface_->ReleaseResource(ws); |
473 | 469 |
474 // Close in connecting. | 470 // Close in connecting. |
475 // The ongoing connect failed with PP_ERROR_ABORTED, then the close is done | 471 // The ongoing connect failed with PP_ERROR_ABORTED, then the close is done |
476 // successfully. | 472 // successfully. |
477 ws = websocket_interface_->Create(instance_->pp_instance()); | 473 ws = websocket_interface_->Create(instance_->pp_instance()); |
478 result = websocket_interface_->Connect(ws, url, protocols, 0U, | 474 result = websocket_interface_->Connect(ws, url, protocols, 0U, |
479 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 475 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
480 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 476 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
481 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 477 result = websocket_interface_->Close(ws, |
| 478 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
482 static_cast<pp::CompletionCallback>( | 479 static_cast<pp::CompletionCallback>( |
483 another_callback).pp_completion_callback()); | 480 another_callback).pp_completion_callback()); |
484 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 481 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
485 result = callback.WaitForResult(); | 482 result = callback.WaitForResult(); |
486 ASSERT_EQ(PP_ERROR_ABORTED, result); | 483 ASSERT_EQ(PP_ERROR_ABORTED, result); |
487 result = another_callback.WaitForResult(); | 484 result = another_callback.WaitForResult(); |
488 ASSERT_EQ(PP_OK, result); | 485 ASSERT_EQ(PP_OK, result); |
489 core_interface_->ReleaseResource(ws); | 486 core_interface_->ReleaseResource(ws); |
490 | 487 |
491 // Close in closing. | 488 // Close in closing. |
492 // The first close will be done successfully, then the second one failed with | 489 // The first close will be done successfully, then the second one failed with |
493 // with PP_ERROR_INPROGRESS immediately. | 490 // with PP_ERROR_INPROGRESS immediately. |
494 ws = Connect(kEchoServerURL, &result, NULL); | 491 ws = Connect(kEchoServerURL, &result, NULL); |
495 ASSERT_TRUE(ws); | 492 ASSERT_TRUE(ws); |
496 ASSERT_EQ(PP_OK, result); | 493 ASSERT_EQ(PP_OK, result); |
497 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 494 result = websocket_interface_->Close(ws, |
| 495 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
498 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 496 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
499 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 497 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
500 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 498 result = websocket_interface_->Close(ws, |
| 499 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
501 static_cast<pp::CompletionCallback>( | 500 static_cast<pp::CompletionCallback>( |
502 another_callback).pp_completion_callback()); | 501 another_callback).pp_completion_callback()); |
503 ASSERT_EQ(PP_ERROR_INPROGRESS, result); | 502 ASSERT_EQ(PP_ERROR_INPROGRESS, result); |
504 result = callback.WaitForResult(); | 503 result = callback.WaitForResult(); |
505 ASSERT_EQ(PP_OK, result); | 504 ASSERT_EQ(PP_OK, result); |
506 core_interface_->ReleaseResource(ws); | 505 core_interface_->ReleaseResource(ws); |
507 | 506 |
508 // Close with ongoing receive message. | 507 // Close with ongoing receive message. |
509 ws = Connect(kEchoServerURL, &result, NULL); | 508 ws = Connect(kEchoServerURL, &result, NULL); |
510 ASSERT_TRUE(ws); | 509 ASSERT_TRUE(ws); |
511 ASSERT_EQ(PP_OK, result); | 510 ASSERT_EQ(PP_OK, result); |
512 PP_Var receive_message_var; | 511 PP_Var receive_message_var; |
513 result = websocket_interface_->ReceiveMessage(ws, &receive_message_var, | 512 result = websocket_interface_->ReceiveMessage(ws, &receive_message_var, |
514 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 513 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
515 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 514 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
516 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 515 result = websocket_interface_->Close(ws, |
| 516 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
517 static_cast<pp::CompletionCallback>( | 517 static_cast<pp::CompletionCallback>( |
518 another_callback).pp_completion_callback()); | 518 another_callback).pp_completion_callback()); |
519 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 519 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
520 result = callback.WaitForResult(); | 520 result = callback.WaitForResult(); |
521 ASSERT_EQ(PP_ERROR_ABORTED, result); | 521 ASSERT_EQ(PP_ERROR_ABORTED, result); |
522 result = another_callback.WaitForResult(); | 522 result = another_callback.WaitForResult(); |
523 ASSERT_EQ(PP_OK, result); | 523 ASSERT_EQ(PP_OK, result); |
524 core_interface_->ReleaseResource(ws); | 524 core_interface_->ReleaseResource(ws); |
525 | 525 |
526 ReleaseVar(reason); | 526 ReleaseVar(reason); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 buffered_amount = websocket_interface_->GetBufferedAmount(ws); | 638 buffered_amount = websocket_interface_->GetBufferedAmount(ws); |
639 // Buffered amount size 262144 is too big for the internal buffer size. | 639 // Buffered amount size 262144 is too big for the internal buffer size. |
640 if (buffered_amount > 262144) | 640 if (buffered_amount > 262144) |
641 break; | 641 break; |
642 } | 642 } |
643 | 643 |
644 // Close connection. | 644 // Close connection. |
645 std::string reason_str = "close while busy"; | 645 std::string reason_str = "close while busy"; |
646 PP_Var reason = CreateVarString(reason_str.c_str()); | 646 PP_Var reason = CreateVarString(reason_str.c_str()); |
647 TestCompletionCallback callback(instance_->pp_instance()); | 647 TestCompletionCallback callback(instance_->pp_instance()); |
648 result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason, | 648 result = websocket_interface_->Close(ws, |
| 649 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason, |
649 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); | 650 static_cast<pp::CompletionCallback>(callback).pp_completion_callback()); |
650 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 651 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
651 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSING, | 652 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSING, |
652 websocket_interface_->GetReadyState(ws)); | 653 websocket_interface_->GetReadyState(ws)); |
653 | 654 |
654 result = callback.WaitForResult(); | 655 result = callback.WaitForResult(); |
655 ASSERT_EQ(PP_OK, result); | 656 ASSERT_EQ(PP_OK, result); |
656 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, | 657 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, |
657 websocket_interface_->GetReadyState(ws)); | 658 websocket_interface_->GetReadyState(ws)); |
658 | 659 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 TestCompletionCallback binary_receive_callback(instance_->pp_instance()); | 730 TestCompletionCallback binary_receive_callback(instance_->pp_instance()); |
730 result = ws.ReceiveMessage(&binary_receive_var, binary_receive_callback); | 731 result = ws.ReceiveMessage(&binary_receive_var, binary_receive_callback); |
731 if (result == PP_OK_COMPLETIONPENDING) | 732 if (result == PP_OK_COMPLETIONPENDING) |
732 result = binary_receive_callback.WaitForResult(); | 733 result = binary_receive_callback.WaitForResult(); |
733 ASSERT_EQ(PP_OK, result); | 734 ASSERT_EQ(PP_OK, result); |
734 ASSERT_TRUE(AreEqualWithBinary( | 735 ASSERT_TRUE(AreEqualWithBinary( |
735 binary_receive_var.pp_var(), binary_message, binary_length)); | 736 binary_receive_var.pp_var(), binary_message, binary_length)); |
736 | 737 |
737 TestCompletionCallback close_callback(instance_->pp_instance()); | 738 TestCompletionCallback close_callback(instance_->pp_instance()); |
738 std::string reason("bye"); | 739 std::string reason("bye"); |
739 result = ws.Close(kCloseCodeNormalClosure, pp::Var(reason), close_callback); | 740 result = ws.Close( |
| 741 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason), close_callback); |
740 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 742 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
741 result = close_callback.WaitForResult(); | 743 result = close_callback.WaitForResult(); |
742 ASSERT_EQ(PP_OK, result); | 744 ASSERT_EQ(PP_OK, result); |
743 | 745 |
744 // Check initialized properties access. | 746 // Check initialized properties access. |
745 ASSERT_EQ(0, ws.GetBufferedAmount()); | 747 ASSERT_EQ(0, ws.GetBufferedAmount()); |
746 ASSERT_EQ(kCloseCodeNormalClosure, ws.GetCloseCode()); | 748 ASSERT_EQ(PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, ws.GetCloseCode()); |
747 ASSERT_TRUE(AreEqualWithString(ws.GetCloseReason().pp_var(), reason.c_str())); | 749 ASSERT_TRUE(AreEqualWithString(ws.GetCloseReason().pp_var(), reason.c_str())); |
748 ASSERT_EQ(true, ws.GetCloseWasClean()); | 750 ASSERT_EQ(true, ws.GetCloseWasClean()); |
749 ASSERT_TRUE(AreEqualWithString(ws.GetExtensions().pp_var(), "")); | 751 ASSERT_TRUE(AreEqualWithString(ws.GetExtensions().pp_var(), "")); |
750 ASSERT_TRUE(AreEqualWithString(ws.GetProtocol().pp_var(), "")); | 752 ASSERT_TRUE(AreEqualWithString(ws.GetProtocol().pp_var(), "")); |
751 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, ws.GetReadyState()); | 753 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, ws.GetReadyState()); |
752 ASSERT_TRUE(AreEqualWithString(ws.GetURL().pp_var(), kCloseServerURL)); | 754 ASSERT_TRUE(AreEqualWithString(ws.GetURL().pp_var(), kCloseServerURL)); |
753 | 755 |
754 PASS(); | 756 PASS(); |
755 } | 757 } |
756 | 758 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 | 840 |
839 PASS(); | 841 PASS(); |
840 } | 842 } |
841 | 843 |
842 std::string TestWebSocket::TestUtilityInvalidClose() { | 844 std::string TestWebSocket::TestUtilityInvalidClose() { |
843 const pp::Var reason = pp::Var(std::string("close for test")); | 845 const pp::Var reason = pp::Var(std::string("close for test")); |
844 | 846 |
845 // Close before connect. | 847 // Close before connect. |
846 { | 848 { |
847 TestWebSocketAPI websocket(instance_); | 849 TestWebSocketAPI websocket(instance_); |
848 int32_t result = websocket.Close(kCloseCodeNormalClosure, reason); | 850 int32_t result = websocket.Close( |
| 851 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, reason); |
849 ASSERT_EQ(PP_ERROR_FAILED, result); | 852 ASSERT_EQ(PP_ERROR_FAILED, result); |
850 ASSERT_EQ(0U, websocket.GetSeenEvents().size()); | 853 ASSERT_EQ(0U, websocket.GetSeenEvents().size()); |
851 } | 854 } |
852 | 855 |
853 // Close with bad arguments. | 856 // Close with bad arguments. |
854 { | 857 { |
855 TestWebSocketAPI websocket(instance_); | 858 TestWebSocketAPI websocket(instance_); |
856 int32_t result = websocket.Connect(pp::Var(std::string(kEchoServerURL)), | 859 int32_t result = websocket.Connect(pp::Var(std::string(kEchoServerURL)), |
857 NULL, 0); | 860 NULL, 0); |
858 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 861 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
(...skipping 11 matching lines...) Expand all Loading... |
870 std::string TestWebSocket::TestUtilityValidClose() { | 873 std::string TestWebSocket::TestUtilityValidClose() { |
871 std::string reason("close for test"); | 874 std::string reason("close for test"); |
872 pp::Var url = pp::Var(std::string(kCloseServerURL)); | 875 pp::Var url = pp::Var(std::string(kCloseServerURL)); |
873 | 876 |
874 // Close. | 877 // Close. |
875 { | 878 { |
876 TestWebSocketAPI websocket(instance_); | 879 TestWebSocketAPI websocket(instance_); |
877 int32_t result = websocket.Connect(url, NULL, 0U); | 880 int32_t result = websocket.Connect(url, NULL, 0U); |
878 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 881 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
879 websocket.WaitForConnected(); | 882 websocket.WaitForConnected(); |
880 result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason)); | 883 result = websocket.Close( |
| 884 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason)); |
881 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 885 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
882 websocket.WaitForClosed(); | 886 websocket.WaitForClosed(); |
883 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); | 887 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); |
884 ASSERT_EQ(2U, events.size()); | 888 ASSERT_EQ(2U, events.size()); |
885 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type); | 889 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type); |
886 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[1].event_type); | 890 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[1].event_type); |
887 ASSERT_TRUE(events[1].was_clean); | 891 ASSERT_TRUE(events[1].was_clean); |
888 ASSERT_EQ(kCloseCodeNormalClosure, events[1].close_code); | 892 ASSERT_EQ(PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, events[1].close_code); |
889 ASSERT_TRUE(AreEqualWithString(events[1].var.pp_var(), reason.c_str())); | 893 ASSERT_TRUE(AreEqualWithString(events[1].var.pp_var(), reason.c_str())); |
890 } | 894 } |
891 | 895 |
892 // Close in connecting. | 896 // Close in connecting. |
893 // The ongoing connect failed with PP_ERROR_ABORTED, then the close is done | 897 // The ongoing connect failed with PP_ERROR_ABORTED, then the close is done |
894 // successfully. | 898 // successfully. |
895 { | 899 { |
896 TestWebSocketAPI websocket(instance_); | 900 TestWebSocketAPI websocket(instance_); |
897 int32_t result = websocket.Connect(url, NULL, 0U); | 901 int32_t result = websocket.Connect(url, NULL, 0U); |
898 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 902 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
899 result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason)); | 903 result = websocket.Close( |
| 904 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason)); |
900 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 905 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
901 websocket.WaitForClosed(); | 906 websocket.WaitForClosed(); |
902 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); | 907 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); |
903 ASSERT_TRUE(events.size() == 2 || events.size() == 3); | 908 ASSERT_TRUE(events.size() == 2 || events.size() == 3); |
904 int index = 0; | 909 int index = 0; |
905 if (events.size() == 3) | 910 if (events.size() == 3) |
906 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type); | 911 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type); |
907 ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type); | 912 ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type); |
908 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type); | 913 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type); |
909 ASSERT_FALSE(events[index].was_clean); | 914 ASSERT_FALSE(events[index].was_clean); |
910 } | 915 } |
911 | 916 |
912 // Close in closing. | 917 // Close in closing. |
913 // The first close will be done successfully, then the second one failed with | 918 // The first close will be done successfully, then the second one failed with |
914 // with PP_ERROR_INPROGRESS immediately. | 919 // with PP_ERROR_INPROGRESS immediately. |
915 { | 920 { |
916 TestWebSocketAPI websocket(instance_); | 921 TestWebSocketAPI websocket(instance_); |
917 int32_t result = websocket.Connect(url, NULL, 0U); | 922 int32_t result = websocket.Connect(url, NULL, 0U); |
918 result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason)); | 923 result = websocket.Close( |
| 924 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason)); |
919 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); | 925 ASSERT_EQ(PP_OK_COMPLETIONPENDING, result); |
920 result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason)); | 926 result = websocket.Close( |
| 927 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason)); |
921 ASSERT_EQ(PP_ERROR_INPROGRESS, result); | 928 ASSERT_EQ(PP_ERROR_INPROGRESS, result); |
922 websocket.WaitForClosed(); | 929 websocket.WaitForClosed(); |
923 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); | 930 const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents(); |
924 ASSERT_TRUE(events.size() == 2 || events.size() == 3) | 931 ASSERT_TRUE(events.size() == 2 || events.size() == 3) |
925 int index = 0; | 932 int index = 0; |
926 if (events.size() == 3) | 933 if (events.size() == 3) |
927 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type); | 934 ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type); |
928 ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type); | 935 ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type); |
929 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type); | 936 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type); |
930 ASSERT_FALSE(events[index].was_clean); | 937 ASSERT_FALSE(events[index].was_clean); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 result = websocket.Send(pp::Var(message_str)); | 1049 result = websocket.Send(pp::Var(message_str)); |
1043 ASSERT_EQ(PP_OK, result); | 1050 ASSERT_EQ(PP_OK, result); |
1044 buffered_amount = websocket.GetBufferedAmount(); | 1051 buffered_amount = websocket.GetBufferedAmount(); |
1045 // Buffered amount size 262144 is too big for the internal buffer size. | 1052 // Buffered amount size 262144 is too big for the internal buffer size. |
1046 if (buffered_amount > 262144) | 1053 if (buffered_amount > 262144) |
1047 break; | 1054 break; |
1048 } | 1055 } |
1049 | 1056 |
1050 // Close connection. | 1057 // Close connection. |
1051 std::string reason_str = "close while busy"; | 1058 std::string reason_str = "close while busy"; |
1052 result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason_str)); | 1059 result = websocket.Close( |
| 1060 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE, pp::Var(reason_str)); |
1053 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSING, websocket.GetReadyState()); | 1061 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSING, websocket.GetReadyState()); |
1054 websocket.WaitForClosed(); | 1062 websocket.WaitForClosed(); |
1055 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, websocket.GetReadyState()); | 1063 ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED, websocket.GetReadyState()); |
1056 | 1064 |
1057 uint64_t base_buffered_amount = websocket.GetBufferedAmount(); | 1065 uint64_t base_buffered_amount = websocket.GetBufferedAmount(); |
1058 size_t events_on_closed = websocket.GetSeenEvents().size(); | 1066 size_t events_on_closed = websocket.GetSeenEvents().size(); |
1059 | 1067 |
1060 // After connection closure, all sending requests fail and just increase | 1068 // After connection closure, all sending requests fail and just increase |
1061 // the bufferedAmount property. | 1069 // the bufferedAmount property. |
1062 result = websocket.Send(pp::Var(std::string(""))); | 1070 result = websocket.Send(pp::Var(std::string(""))); |
(...skipping 14 matching lines...) Expand all Loading... |
1077 size_t last_event = events_on_closed - 1; | 1085 size_t last_event = events_on_closed - 1; |
1078 for (uint32_t i = 1; i < last_event; ++i) { | 1086 for (uint32_t i = 1; i < last_event; ++i) { |
1079 ASSERT_EQ(WebSocketEvent::EVENT_MESSAGE, events[i].event_type); | 1087 ASSERT_EQ(WebSocketEvent::EVENT_MESSAGE, events[i].event_type); |
1080 ASSERT_TRUE(AreEqualWithString(events[i].var.pp_var(), message_char)); | 1088 ASSERT_TRUE(AreEqualWithString(events[i].var.pp_var(), message_char)); |
1081 } | 1089 } |
1082 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[last_event].event_type); | 1090 ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[last_event].event_type); |
1083 ASSERT_TRUE(events[last_event].was_clean); | 1091 ASSERT_TRUE(events[last_event].was_clean); |
1084 | 1092 |
1085 PASS(); | 1093 PASS(); |
1086 } | 1094 } |
OLD | NEW |