summaryrefslogtreecommitdiffstats
path: root/ppapi
diff options
context:
space:
mode:
authortoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-14 05:52:12 +0000
committertoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-14 05:52:12 +0000
commit9885a10cfe5569c9c15e5a123cd94ee24cceaf39 (patch)
tree6176f967588e2a34cf528b327dec2218a77b79bb /ppapi
parent3fd3cf7d3474d5bd2df4f8bd8585bba36f975120 (diff)
downloadchromium_src-9885a10cfe5569c9c15e5a123cd94ee24cceaf39.zip
chromium_src-9885a10cfe5569c9c15e5a123cd94ee24cceaf39.tar.gz
chromium_src-9885a10cfe5569c9c15e5a123cd94ee24cceaf39.tar.bz2
WebSocket Pepper API: PPB_WebSocket crashes when server close the connection.
PPB_WebSocket might crash when server intiates closing handshake. - close_callback_ could have no pointer in CLOSING state - On going ReceiveMessage must be done with PP_ERROR_FAILED BUG=127756 TEST=browser_tests --gtest_filter='PPAPI*Test_WebSocket_ValidClose' Review URL: https://chromiumcodereview.appspot.com/10378106 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136832 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r--ppapi/tests/test_websocket.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/ppapi/tests/test_websocket.cc b/ppapi/tests/test_websocket.cc
index 11a4260..93ce956 100644
--- a/ppapi/tests/test_websocket.cc
+++ b/ppapi/tests/test_websocket.cc
@@ -38,6 +38,9 @@ const char kEchoServerURL[] = "websocket/tests/hybi/echo-with-no-extension";
const char kCloseServerURL[] = "websocket/tests/hybi/close";
+const char kCloseWithCodeAndReasonServerURL[] =
+ "websocket/tests/hybi/close-code-and-reason";
+
const char kProtocolTestServerURL[] =
"websocket/tests/hybi/protocol-test?protocol=";
@@ -634,6 +637,21 @@ std::string TestWebSocket::TestValidClose() {
ASSERT_EQ(PP_OK, result);
core_interface_->ReleaseResource(ws);
+ // Server initiated closing handshake.
+ ws = Connect(GetFullURL(kCloseWithCodeAndReasonServerURL), &result, "");
+ ASSERT_TRUE(ws);
+ ASSERT_EQ(PP_OK, result);
+ // Text messsage "1000 bye" requests the server to initiate closing handshake
+ // with code being 1000 and reason being "bye".
+ PP_Var close_request_var = CreateVarString("1000 bye");
+ result = websocket_interface_->SendMessage(ws, close_request_var);
+ ReleaseVar(close_request_var);
+ callback.WaitForResult(websocket_interface_->ReceiveMessage(
+ ws, &receive_message_var,
+ callback.GetCallback().pp_completion_callback()));
+ ASSERT_EQ(PP_ERROR_FAILED, callback.result());
+ core_interface_->ReleaseResource(ws);
+
ReleaseVar(reason);
ReleaseVar(url);