summaryrefslogtreecommitdiffstats
path: root/ppapi
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-26 20:53:14 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-26 20:53:14 +0000
commitae48adcd5ec344a0b0c2ff9c443897d73207f7f4 (patch)
treefe42b96739dd778e910a5c72f3aa3f9074af4831 /ppapi
parent7dd385150f61d0da787be6e5e1e5f819e6186699 (diff)
downloadchromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.zip
chromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.tar.gz
chromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.tar.bz2
Add SetProperti() in the PPB_Transport_Dev interface.
BUG=41776 TEST=Unittests Review URL: http://codereview.chromium.org/7713021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98485 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r--ppapi/c/dev/ppb_transport_dev.h29
-rw-r--r--ppapi/cpp/dev/transport_dev.cc8
-rw-r--r--ppapi/cpp/dev/transport_dev.h1
-rw-r--r--ppapi/tests/test_transport.cc63
-rw-r--r--ppapi/tests/test_transport.h1
-rw-r--r--ppapi/thunk/ppb_transport_api.h1
-rw-r--r--ppapi/thunk/ppb_transport_thunk.cc9
7 files changed, 99 insertions, 13 deletions
diff --git a/ppapi/c/dev/ppb_transport_dev.h b/ppapi/c/dev/ppb_transport_dev.h
index bc3a8cd..b1716e3 100644
--- a/ppapi/c/dev/ppb_transport_dev.h
+++ b/ppapi/c/dev/ppb_transport_dev.h
@@ -13,8 +13,28 @@
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_var.h"
-#define PPB_TRANSPORT_DEV_INTERFACE_0_5 "PPB_Transport;0.5"
-#define PPB_TRANSPORT_DEV_INTERFACE PPB_TRANSPORT_DEV_INTERFACE_0_5
+#define PPB_TRANSPORT_DEV_INTERFACE_0_6 "PPB_Transport;0.6"
+#define PPB_TRANSPORT_DEV_INTERFACE PPB_TRANSPORT_DEV_INTERFACE_0_6
+
+typedef enum {
+ // STUN server address and port, e.g "stun.example.com:19302".
+ PP_TRANSPORTPROPERTY_STUN_SERVER = 0,
+
+ // Relay server name, e.g. "relay.example.com".
+ PP_TRANSPORTPROPERTY_RELAY_SERVER = 1,
+
+ // Single string that specifies token for use with relay server.
+ PP_TRANSPORTPROPERTY_RELAY_TOKEN = 2,
+
+ // TCP receive window in bytes. Takes effect only for PseudoTCP
+ // connections.
+ PP_TRANSPORTPROPERTY_TCP_RECEIVE_WINDOW = 3,
+
+ // TCP send window in bytes. Takes effect only for PseudoTCP
+ // connections.
+ PP_TRANSPORTPROPERTY_TCP_SEND_WINDOW = 4
+} PP_TransportProperty;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_TransportProperty, 4);
struct PPB_Transport_Dev {
// Creates a new transport object with the specified name using the
@@ -34,6 +54,11 @@ struct PPB_Transport_Dev {
// connect type, protocol
// RTT
+ // Sets various configuration properties of the transport.
+ int32_t (*SetProperty)(PP_Resource transport,
+ PP_TransportProperty property,
+ struct PP_Var value);
+
// Establishes a connection to the remote peer. Returns
// PP_OK_COMPLETIONPENDING and notifies on |cb| when connectivity is
// established (or timeout occurs).
diff --git a/ppapi/cpp/dev/transport_dev.cc b/ppapi/cpp/dev/transport_dev.cc
index b625a7d..e725838 100644
--- a/ppapi/cpp/dev/transport_dev.cc
+++ b/ppapi/cpp/dev/transport_dev.cc
@@ -36,6 +36,14 @@ bool Transport_Dev::IsWritable() {
get_interface<PPB_Transport_Dev>()->IsWritable(pp_resource()));
}
+int32_t Transport_Dev::SetProperty(PP_TransportProperty property,
+ const Var& value) {
+ if (!has_interface<PPB_Transport_Dev>())
+ return PP_ERROR_NOINTERFACE;
+ return get_interface<PPB_Transport_Dev>()->SetProperty(
+ pp_resource(), property, value.pp_var());
+}
+
int32_t Transport_Dev::Connect(const CompletionCallback& cc) {
if (!has_interface<PPB_Transport_Dev>())
return cc.MayForce(PP_ERROR_NOINTERFACE);
diff --git a/ppapi/cpp/dev/transport_dev.h b/ppapi/cpp/dev/transport_dev.h
index d6ad56d..9c8c302 100644
--- a/ppapi/cpp/dev/transport_dev.h
+++ b/ppapi/cpp/dev/transport_dev.h
@@ -19,6 +19,7 @@ class Transport_Dev : public Resource {
Transport_Dev(Instance* instance, const char* name, const char* proto);
bool IsWritable();
+ int32_t SetProperty(PP_TransportProperty property, const Var& value);
int32_t Connect(const CompletionCallback& cc);
int32_t GetNextAddress(pp::Var* address, const CompletionCallback& cc);
int32_t ReceiveRemoteAddress(const pp::Var& address);
diff --git a/ppapi/tests/test_transport.cc b/ppapi/tests/test_transport.cc
index 1295f75..0df56cf 100644
--- a/ppapi/tests/test_transport.cc
+++ b/ppapi/tests/test_transport.cc
@@ -13,9 +13,10 @@
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/cpp/completion_callback.h"
+#include "ppapi/cpp/dev/transport_dev.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
-#include "ppapi/cpp/dev/transport_dev.h"
+#include "ppapi/cpp/var.h"
#include "ppapi/tests/test_utils.h"
#include "ppapi/tests/testing_instance.h"
@@ -103,11 +104,12 @@ bool TestTransport::Init() {
void TestTransport::RunTest() {
RUN_TEST(Create);
- RUN_TEST(Connect);
- RUN_TEST_FORCEASYNC(SendDataUdp);
- RUN_TEST(SendDataTcp);
- RUN_TEST(ConnectAndCloseUdp);
- RUN_TEST(ConnectAndCloseTcp);
+ RUN_TEST_FORCEASYNC_AND_NOT(Connect);
+ RUN_TEST(SetProperty);
+ RUN_TEST_FORCEASYNC_AND_NOT(SendDataUdp);
+ RUN_TEST_FORCEASYNC_AND_NOT(SendDataTcp);
+ RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseUdp);
+ RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseTcp);
}
std::string TestTransport::InitTargets(const char* proto) {
@@ -166,6 +168,47 @@ std::string TestTransport::TestCreate() {
PASS();
}
+std::string TestTransport::TestSetProperty() {
+ RUN_SUBTEST(InitTargets("tcp"));
+
+ // Try settings STUN and Relay properties.
+ ASSERT_EQ(transport1_->SetProperty(
+ PP_TRANSPORTPROPERTY_STUN_SERVER,
+ pp::Var("stun.example.com:19302")), PP_OK);
+
+ ASSERT_EQ(transport1_->SetProperty(
+ PP_TRANSPORTPROPERTY_RELAY_SERVER,
+ pp::Var("ralay.example.com:80")), PP_OK);
+
+ ASSERT_EQ(transport1_->SetProperty(
+ PP_TRANSPORTPROPERTY_RELAY_TOKEN,
+ pp::Var("INVALID_TOKEN")), PP_OK);
+
+ // Try changing TCP window size.
+ ASSERT_EQ(transport1_->SetProperty(PP_TRANSPORTPROPERTY_TCP_RECEIVE_WINDOW,
+ pp::Var(65536)), PP_OK);
+ ASSERT_EQ(transport1_->SetProperty(PP_TRANSPORTPROPERTY_TCP_RECEIVE_WINDOW,
+ pp::Var(10000000)), PP_ERROR_BADARGUMENT);
+
+ ASSERT_EQ(transport1_->SetProperty(PP_TRANSPORTPROPERTY_TCP_SEND_WINDOW,
+ pp::Var(65536)), PP_OK);
+ ASSERT_EQ(transport1_->SetProperty(PP_TRANSPORTPROPERTY_TCP_SEND_WINDOW,
+ pp::Var(10000000)), PP_ERROR_BADARGUMENT);
+
+ TestCompletionCallback connect_cb(instance_->pp_instance());
+ ASSERT_EQ(transport1_->Connect(connect_cb), PP_OK_COMPLETIONPENDING);
+
+ // SetProperty() should fail after we've connected.
+ ASSERT_EQ(transport1_->SetProperty(
+ PP_TRANSPORTPROPERTY_STUN_SERVER,
+ pp::Var("stun.example.com:31323")), PP_ERROR_FAILED);
+
+ Clean();
+ ASSERT_EQ(connect_cb.WaitForResult(), PP_ERROR_ABORTED);
+
+ PASS();
+}
+
std::string TestTransport::TestConnect() {
RUN_SUBTEST(InitTargets("udp"));
RUN_SUBTEST(Connect());
@@ -211,8 +254,9 @@ std::string TestTransport::TestSendDataUdp() {
}
// Limit waiting time.
- pp::Module::Get()->core()->CallOnMainThread(kUdpWaitTimeMs, done_cb);
- ASSERT_EQ(done_cb.WaitForResult(), PP_OK);
+ TestCompletionCallback timeout_cb(instance_->pp_instance());
+ pp::Module::Get()->core()->CallOnMainThread(kUdpWaitTimeMs, timeout_cb);
+ ASSERT_EQ(timeout_cb.WaitForResult(), PP_OK);
ASSERT_TRUE(reader.errors().size() == 0);
ASSERT_TRUE(reader.received().size() > 0);
@@ -235,7 +279,6 @@ std::string TestTransport::TestSendDataTcp() {
RUN_SUBTEST(Connect());
const int kTcpSendSize = 100000;
- const int kTimeoutMs = 20000; // 20 seconds.
TestCompletionCallback done_cb(instance_->pp_instance());
StreamReader reader(transport1_.get(), kTcpSendSize,
@@ -259,8 +302,6 @@ std::string TestTransport::TestSendDataTcp() {
pos += result;
}
- // Limit waiting time.
- pp::Module::Get()->core()->CallOnMainThread(kTimeoutMs, done_cb);
ASSERT_EQ(done_cb.WaitForResult(), PP_OK);
ASSERT_TRUE(reader.errors().size() == 0);
diff --git a/ppapi/tests/test_transport.h b/ppapi/tests/test_transport.h
index 9d1f3eb..75089b3 100644
--- a/ppapi/tests/test_transport.h
+++ b/ppapi/tests/test_transport.h
@@ -31,6 +31,7 @@ class TestTransport : public TestCase {
std::string TestCreate();
std::string TestConnect();
+ std::string TestSetProperty();
std::string TestSendDataTcp();
std::string TestSendDataUdp();
std::string TestConnectAndCloseTcp();
diff --git a/ppapi/thunk/ppb_transport_api.h b/ppapi/thunk/ppb_transport_api.h
index d8ab863..256d920 100644
--- a/ppapi/thunk/ppb_transport_api.h
+++ b/ppapi/thunk/ppb_transport_api.h
@@ -15,6 +15,7 @@ class PPB_Transport_API {
virtual ~PPB_Transport_API() {}
virtual PP_Bool IsWritable() = 0;
+ virtual int32_t SetProperty(PP_TransportProperty property, PP_Var value) = 0;
virtual int32_t Connect(PP_CompletionCallback callback) = 0;
virtual int32_t GetNextAddress(PP_Var* address,
PP_CompletionCallback callback) = 0;
diff --git a/ppapi/thunk/ppb_transport_thunk.cc b/ppapi/thunk/ppb_transport_thunk.cc
index cf573c5..b245514 100644
--- a/ppapi/thunk/ppb_transport_thunk.cc
+++ b/ppapi/thunk/ppb_transport_thunk.cc
@@ -36,6 +36,14 @@ PP_Bool IsWritable(PP_Resource transport) {
return enter.object()->IsWritable();
}
+int32_t SetProperty(PP_Resource transport, PP_TransportProperty property,
+ PP_Var value) {
+ EnterTransport enter(transport, true);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->SetProperty(property, value);
+}
+
int32_t Connect(PP_Resource transport, PP_CompletionCallback callback) {
EnterTransport enter(transport, true);
if (enter.failed())
@@ -89,6 +97,7 @@ const PPB_Transport_Dev g_ppb_transport_thunk = {
&Create,
&IsTransport,
&IsWritable,
+ &SetProperty,
&Connect,
&GetNextAddress,
&ReceiveRemoteAddress,