diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-26 20:53:14 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-26 20:53:14 +0000 |
commit | ae48adcd5ec344a0b0c2ff9c443897d73207f7f4 (patch) | |
tree | fe42b96739dd778e910a5c72f3aa3f9074af4831 /ppapi | |
parent | 7dd385150f61d0da787be6e5e1e5f819e6186699 (diff) | |
download | chromium_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.h | 29 | ||||
-rw-r--r-- | ppapi/cpp/dev/transport_dev.cc | 8 | ||||
-rw-r--r-- | ppapi/cpp/dev/transport_dev.h | 1 | ||||
-rw-r--r-- | ppapi/tests/test_transport.cc | 63 | ||||
-rw-r--r-- | ppapi/tests/test_transport.h | 1 | ||||
-rw-r--r-- | ppapi/thunk/ppb_transport_api.h | 1 | ||||
-rw-r--r-- | ppapi/thunk/ppb_transport_thunk.cc | 9 |
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, |