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

Unified Diff: ppapi/tests/test_websocket.cc

Issue 9026007: WebSocket Pepper API: WebArrayBuffer support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_websocket.cc
diff --git a/ppapi/tests/test_websocket.cc b/ppapi/tests/test_websocket.cc
index ae1db5489eaa03237e93affccb7ccde95e99330e..584dea167351f4c781658c6e1fda0bf915d8d982 100644
--- a/ppapi/tests/test_websocket.cc
+++ b/ppapi/tests/test_websocket.cc
@@ -8,6 +8,7 @@
#include <vector>
#include "ppapi/c/dev/ppb_testing_dev.h"
+#include "ppapi/c/dev/ppb_var_array_buffer_dev.h"
#include "ppapi/c/dev/ppb_websocket_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/pp_var.h"
@@ -48,9 +49,13 @@ bool TestWebSocket::Init() {
pp::Module::Get()->GetBrowserInterface(PPB_WEBSOCKET_DEV_INTERFACE));
var_interface_ = static_cast<const PPB_Var*>(
pp::Module::Get()->GetBrowserInterface(PPB_VAR_INTERFACE));
+ arraybuffer_interface_ = static_cast<const PPB_VarArrayBuffer_Dev*>(
+ pp::Module::Get()->GetBrowserInterface(
+ PPB_VAR_ARRAY_BUFFER_DEV_INTERFACE));
core_interface_ = static_cast<const PPB_Core*>(
pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
- if (!websocket_interface_ || !var_interface_ || !core_interface_)
+ if (!websocket_interface_ || !var_interface_ || !arraybuffer_interface_ ||
+ !core_interface_)
return false;
return InitTestingInterface();
@@ -67,19 +72,27 @@ void TestWebSocket::RunTests(const std::string& filter) {
RUN_TEST_WITH_REFERENCE_CHECK(ValidClose, filter);
RUN_TEST_WITH_REFERENCE_CHECK(GetProtocol, filter);
RUN_TEST_WITH_REFERENCE_CHECK(TextSendReceive, filter);
+ RUN_TEST_WITH_REFERENCE_CHECK(BinarySendReceive, filter);
RUN_TEST_WITH_REFERENCE_CHECK(CcInterfaces, filter);
}
-PP_Var TestWebSocket::CreateVar(const char* string) {
+PP_Var TestWebSocket::CreateVarString(const char* string) {
return var_interface_->VarFromUtf8(string, strlen(string));
}
+PP_Var TestWebSocket::CreateVarBinary(const uint8_t* data, uint32_t size) {
+ PP_Var var = arraybuffer_interface_->Create(size);
+ void* var_data = arraybuffer_interface_->Map(var);
+ memcpy(var_data, data, size);
+ return var;
+}
+
void TestWebSocket::ReleaseVar(const PP_Var& var) {
var_interface_->Release(var);
}
-bool TestWebSocket::AreEqual(const PP_Var& var, const char* string) {
+bool TestWebSocket::AreEqualWithString(const PP_Var& var, const char* string) {
if (var.type != PP_VARTYPE_STRING)
return false;
uint32_t utf8_length;
@@ -92,17 +105,27 @@ bool TestWebSocket::AreEqual(const PP_Var& var, const char* string) {
return true;
}
+bool TestWebSocket::AreEqualWithBinary(const PP_Var& var,
+ const uint8_t* data,
+ uint32_t size) {
+ if (arraybuffer_interface_->ByteLength(var) != size)
+ return false;
+ if (memcmp(arraybuffer_interface_->Map(var), data, size))
+ return false;
+ return true;
+}
+
PP_Resource TestWebSocket::Connect(
const char* url, int32_t* result, const char* protocol) {
PP_Var protocols[] = { PP_MakeUndefined() };
PP_Resource ws = websocket_interface_->Create(instance_->pp_instance());
if (!ws)
return 0;
- PP_Var url_var = CreateVar(url);
+ PP_Var url_var = CreateVarString(url);
TestCompletionCallback callback(instance_->pp_instance(), force_async_);
uint32_t protocol_count = 0U;
if (protocol) {
- protocols[0] = CreateVar(protocol);
+ protocols[0] = CreateVarString(protocol);
protocol_count = 1U;
}
*result = websocket_interface_->Connect(
@@ -145,18 +168,18 @@ std::string TestWebSocket::TestUninitializedPropertiesAccess() {
ASSERT_EQ(0U, close_code);
PP_Var close_reason = websocket_interface_->GetCloseReason(ws);
- ASSERT_TRUE(AreEqual(close_reason, ""));
+ ASSERT_TRUE(AreEqualWithString(close_reason, ""));
ReleaseVar(close_reason);
PP_Bool close_was_clean = websocket_interface_->GetCloseWasClean(ws);
ASSERT_EQ(PP_FALSE, close_was_clean);
PP_Var extensions = websocket_interface_->GetExtensions(ws);
- ASSERT_TRUE(AreEqual(extensions, ""));
+ ASSERT_TRUE(AreEqualWithString(extensions, ""));
ReleaseVar(extensions);
PP_Var protocol = websocket_interface_->GetProtocol(ws);
- ASSERT_TRUE(AreEqual(protocol, ""));
+ ASSERT_TRUE(AreEqualWithString(protocol, ""));
ReleaseVar(protocol);
PP_WebSocketReadyState_Dev ready_state =
@@ -164,7 +187,7 @@ std::string TestWebSocket::TestUninitializedPropertiesAccess() {
ASSERT_EQ(PP_WEBSOCKETREADYSTATE_INVALID_DEV, ready_state);
PP_Var url = websocket_interface_->GetURL(ws);
- ASSERT_TRUE(AreEqual(url, ""));
+ ASSERT_TRUE(AreEqualWithString(url, ""));
ReleaseVar(url);
core_interface_->ReleaseResource(ws);
@@ -203,9 +226,15 @@ std::string TestWebSocket::TestInvalidConnect() {
}
std::string TestWebSocket::TestProtocols() {
- PP_Var url = CreateVar(kEchoServerURL);
- PP_Var bad_protocols[] = { CreateVar("x-test"), CreateVar("x-test") };
- PP_Var good_protocols[] = { CreateVar("x-test"), CreateVar("x-yatest") };
+ PP_Var url = CreateVarString(kEchoServerURL);
+ PP_Var bad_protocols[] = {
+ CreateVarString("x-test"),
+ CreateVarString("x-test")
+ };
+ PP_Var good_protocols[] = {
+ CreateVarString("x-test"),
+ CreateVarString("x-yatest")
+ };
PP_Resource ws = websocket_interface_->Create(instance_->pp_instance());
ASSERT_TRUE(ws);
@@ -237,7 +266,7 @@ std::string TestWebSocket::TestGetURL() {
PP_Resource ws = Connect(kInvalidURLs[i], &result, NULL);
ASSERT_TRUE(ws);
PP_Var url = websocket_interface_->GetURL(ws);
- ASSERT_TRUE(AreEqual(url, kInvalidURLs[i]));
+ ASSERT_TRUE(AreEqualWithString(url, kInvalidURLs[i]));
ASSERT_EQ(PP_ERROR_BADARGUMENT, result);
ReleaseVar(url);
@@ -258,7 +287,7 @@ std::string TestWebSocket::TestValidConnect() {
}
std::string TestWebSocket::TestInvalidClose() {
- PP_Var reason = CreateVar("close for test");
+ PP_Var reason = CreateVarString("close for test");
TestCompletionCallback callback(instance_->pp_instance());
// Close before connect.
@@ -284,8 +313,8 @@ std::string TestWebSocket::TestInvalidClose() {
}
std::string TestWebSocket::TestValidClose() {
- PP_Var reason = CreateVar("close for test");
- PP_Var url = CreateVar(kEchoServerURL);
+ PP_Var reason = CreateVarString("close for test");
+ PP_Var url = CreateVarString(kEchoServerURL);
PP_Var protocols[] = { PP_MakeUndefined() };
TestCompletionCallback callback(instance_->pp_instance());
TestCompletionCallback another_callback(instance_->pp_instance());
@@ -375,7 +404,7 @@ std::string TestWebSocket::TestGetProtocol() {
ASSERT_EQ(PP_OK, result);
PP_Var protocol = websocket_interface_->GetProtocol(ws);
- ASSERT_TRUE(AreEqual(protocol, expected_protocols[i]));
+ ASSERT_TRUE(AreEqualWithString(protocol, expected_protocols[i]));
ReleaseVar(protocol);
core_interface_->ReleaseResource(ws);
@@ -393,7 +422,7 @@ std::string TestWebSocket::TestTextSendReceive() {
// Send 'hello pepper' text message.
const char* message = "hello pepper";
- PP_Var message_var = CreateVar(message);
+ PP_Var message_var = CreateVarString(message);
int32_t result = websocket_interface_->SendMessage(ws, message_var);
ReleaseVar(message_var);
ASSERT_EQ(PP_OK, result);
@@ -407,7 +436,40 @@ std::string TestWebSocket::TestTextSendReceive() {
if (result == PP_OK_COMPLETIONPENDING)
result = callback.WaitForResult();
ASSERT_EQ(PP_OK, result);
- ASSERT_TRUE(AreEqual(received_message, message));
+ ASSERT_TRUE(AreEqualWithString(received_message, message));
+ ReleaseVar(received_message);
+ core_interface_->ReleaseResource(ws);
+
+ PASS();
+}
+
+std::string TestWebSocket::TestBinarySendReceive() {
+ // Connect to test echo server.
+ int32_t connect_result;
+ PP_Resource ws = Connect(kEchoServerURL, &connect_result, NULL);
+ ASSERT_TRUE(ws);
+ ASSERT_EQ(PP_OK, connect_result);
+
+ // Send binary message.
+ uint32_t len = 256;
+ uint8_t data[256];
+ for (uint32_t i = 0; i < len; ++i)
+ data[i] = i;
+ PP_Var message_var = CreateVarBinary(data, len);
+ int32_t result = websocket_interface_->SendMessage(ws, message_var);
+ ReleaseVar(message_var);
+ ASSERT_EQ(PP_OK, result);
+
+ // Receive echoed binary.
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
+ PP_Var received_message;
+ result = websocket_interface_->ReceiveMessage(ws, &received_message,
+ static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
+ ASSERT_TRUE(result == PP_OK || result == PP_OK_COMPLETIONPENDING);
+ if (result == PP_OK_COMPLETIONPENDING)
+ result = callback.WaitForResult();
+ ASSERT_EQ(PP_OK, result);
+ ASSERT_TRUE(AreEqualWithBinary(received_message, data, len));
ReleaseVar(received_message);
core_interface_->ReleaseResource(ws);
@@ -430,12 +492,12 @@ std::string TestWebSocket::TestCcInterfaces() {
// Check uninitialized properties access.
ASSERT_EQ(0, ws.GetBufferedAmount());
ASSERT_EQ(0, ws.GetCloseCode());
- ASSERT_TRUE(AreEqual(ws.GetCloseReason().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetCloseReason().pp_var(), ""));
ASSERT_EQ(false, ws.GetCloseWasClean());
- ASSERT_TRUE(AreEqual(ws.GetExtensions().pp_var(), ""));
- ASSERT_TRUE(AreEqual(ws.GetProtocol().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetExtensions().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetProtocol().pp_var(), ""));
ASSERT_EQ(PP_WEBSOCKETREADYSTATE_INVALID_DEV, ws.GetReadyState());
- ASSERT_TRUE(AreEqual(ws.GetURL().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetURL().pp_var(), ""));
// Check communication interfaces (connect, send, receive, and close).
TestCompletionCallback connect_callback(instance_->pp_instance());
@@ -445,17 +507,35 @@ std::string TestWebSocket::TestCcInterfaces() {
result = connect_callback.WaitForResult();
ASSERT_EQ(PP_OK, result);
- std::string message("hello C++");
- result = ws.SendMessage(pp::Var(message));
+ std::string text_message("hello C++");
+ result = ws.SendMessage(pp::Var(text_message));
+ ASSERT_EQ(PP_OK, result);
+
+ uint32_t binary_length = 256;
+ uint8_t binary_message[256];
+ for (uint32_t i = 0; i < binary_length; ++i)
+ binary_message[i] = i;
+ result = ws.SendMessage(pp::Var(
+ pp::Var::PassRef(), CreateVarBinary(binary_message, binary_length)));
+ ASSERT_EQ(PP_OK, result);
+
+ pp::Var text_receive_var;
+ TestCompletionCallback text_receive_callback(instance_->pp_instance());
+ result = ws.ReceiveMessage(&text_receive_var, text_receive_callback);
+ if (result == PP_OK_COMPLETIONPENDING)
+ result = text_receive_callback.WaitForResult();
ASSERT_EQ(PP_OK, result);
+ ASSERT_TRUE(
+ AreEqualWithString(text_receive_var.pp_var(), text_message.c_str()));
- pp::Var receive_var;
- TestCompletionCallback receive_callback(instance_->pp_instance());
- result = ws.ReceiveMessage(&receive_var, receive_callback);
+ pp::Var binary_receive_var;
+ TestCompletionCallback binary_receive_callback(instance_->pp_instance());
+ result = ws.ReceiveMessage(&binary_receive_var, binary_receive_callback);
if (result == PP_OK_COMPLETIONPENDING)
- result = receive_callback.WaitForResult();
+ result = binary_receive_callback.WaitForResult();
ASSERT_EQ(PP_OK, result);
- ASSERT_TRUE(AreEqual(receive_var.pp_var(), message.c_str()));
+ ASSERT_TRUE(AreEqualWithBinary(
+ binary_receive_var.pp_var(), binary_message, binary_length));
TestCompletionCallback close_callback(instance_->pp_instance());
std::string reason("bye");
@@ -467,12 +547,12 @@ std::string TestWebSocket::TestCcInterfaces() {
// Check initialized properties access.
ASSERT_EQ(0, ws.GetBufferedAmount());
ASSERT_EQ(kCloseCodeNormalClosure, ws.GetCloseCode());
- ASSERT_TRUE(AreEqual(ws.GetCloseReason().pp_var(), reason.c_str()));
+ ASSERT_TRUE(AreEqualWithString(ws.GetCloseReason().pp_var(), reason.c_str()));
ASSERT_EQ(true, ws.GetCloseWasClean());
- ASSERT_TRUE(AreEqual(ws.GetExtensions().pp_var(), ""));
- ASSERT_TRUE(AreEqual(ws.GetProtocol().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetExtensions().pp_var(), ""));
+ ASSERT_TRUE(AreEqualWithString(ws.GetProtocol().pp_var(), ""));
ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED_DEV, ws.GetReadyState());
- ASSERT_TRUE(AreEqual(ws.GetURL().pp_var(), kCloseServerURL));
+ ASSERT_TRUE(AreEqualWithString(ws.GetURL().pp_var(), kCloseServerURL));
PASS();
}

Powered by Google App Engine
This is Rietveld 408576698