diff options
author | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-21 15:21:56 +0000 |
---|---|---|
committer | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-21 15:21:56 +0000 |
commit | 9e14121e3f252f278ee8d05cbb51d0e45a735603 (patch) | |
tree | d3eb50e71cf9f5a95bda1be5abeb47dc383aa6c6 /ppapi | |
parent | a69876c076c218567d4059a8a27ca63d2a1f1af2 (diff) | |
download | chromium_src-9e14121e3f252f278ee8d05cbb51d0e45a735603.zip chromium_src-9e14121e3f252f278ee8d05cbb51d0e45a735603.tar.gz chromium_src-9e14121e3f252f278ee8d05cbb51d0e45a735603.tar.bz2 |
PPB_UDPSocket_Private is switched to the new Pepper proxy.
BUG=164370
TEST=browser_tests:*UDPSocketPrivate*
Review URL: https://chromiumcodereview.appspot.com/11441012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177915 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/ppapi_proxy.gypi | 4 | ||||
-rw-r--r-- | ppapi/ppapi_shared.gypi | 2 | ||||
-rw-r--r-- | ppapi/proxy/interface_list.cc | 1 | ||||
-rw-r--r-- | ppapi/proxy/ppapi_messages.h | 53 | ||||
-rw-r--r-- | ppapi/proxy/ppb_udp_socket_private_proxy.cc | 180 | ||||
-rw-r--r-- | ppapi/proxy/ppb_udp_socket_private_proxy.h | 53 | ||||
-rw-r--r-- | ppapi/proxy/resource_creation_proxy.cc | 5 | ||||
-rw-r--r-- | ppapi/proxy/udp_socket_private_resource.cc (renamed from ppapi/shared_impl/private/udp_socket_private_impl.cc) | 163 | ||||
-rw-r--r-- | ppapi/proxy/udp_socket_private_resource.h (renamed from ppapi/shared_impl/private/udp_socket_private_impl.h) | 79 | ||||
-rw-r--r-- | ppapi/thunk/interfaces_ppb_private_no_permissions.h | 8 |
10 files changed, 157 insertions, 391 deletions
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi index 552dcf3..550cba4 100644 --- a/ppapi/ppapi_proxy.gypi +++ b/ppapi/ppapi_proxy.gypi @@ -119,8 +119,6 @@ 'proxy/ppb_tcp_socket_private_proxy.h', 'proxy/ppb_testing_proxy.cc', 'proxy/ppb_testing_proxy.h', - 'proxy/ppb_udp_socket_private_proxy.cc', - 'proxy/ppb_udp_socket_private_proxy.h', 'proxy/ppb_url_loader_proxy.cc', 'proxy/ppb_url_loader_proxy.h', 'proxy/ppb_var_deprecated_proxy.cc', @@ -166,6 +164,8 @@ 'proxy/resource_creation_proxy.h', 'proxy/talk_resource.cc', 'proxy/talk_resource.h', + 'proxy/udp_socket_private_resource.cc', + 'proxy/udp_socket_private_resource.h', 'proxy/url_request_info_resource.cc', 'proxy/url_request_info_resource.h', 'proxy/url_response_info_resource.cc', diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi index 12f0e87..54a042a 100644 --- a/ppapi/ppapi_shared.gypi +++ b/ppapi/ppapi_shared.gypi @@ -123,8 +123,6 @@ 'shared_impl/private/ppb_x509_certificate_private_shared.h', 'shared_impl/private/tcp_socket_private_impl.cc', 'shared_impl/private/tcp_socket_private_impl.h', - 'shared_impl/private/udp_socket_private_impl.cc', - 'shared_impl/private/udp_socket_private_impl.h', 'thunk/enter.cc', 'thunk/enter.h', diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc index 1cb27d1..a0d34c1 100644 --- a/ppapi/proxy/interface_list.cc +++ b/ppapi/proxy/interface_list.cc @@ -94,7 +94,6 @@ #include "ppapi/proxy/ppb_tcp_server_socket_private_proxy.h" #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" #include "ppapi/proxy/ppb_testing_proxy.h" -#include "ppapi/proxy/ppb_udp_socket_private_proxy.h" #include "ppapi/proxy/ppb_url_loader_proxy.h" #include "ppapi/proxy/ppb_var_deprecated_proxy.h" #include "ppapi/proxy/ppb_video_decoder_proxy.h" diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h index b4666e4..3671655 100644 --- a/ppapi/proxy/ppapi_messages.h +++ b/ppapi/proxy/ppapi_messages.h @@ -666,24 +666,6 @@ IPC_MESSAGE_ROUTED4(PpapiMsg_PPBTCPSocket_WriteACK, bool /* succeeded */, int32_t /* bytes_written */) -// PPB_UDPSocket_Private. -IPC_MESSAGE_ROUTED4(PpapiMsg_PPBUDPSocket_BindACK, - uint32 /* plugin_dispatcher_id */, - uint32 /* socket_id */, - bool /* succeeded */, - PP_NetAddress_Private /* bound_addr */) -IPC_MESSAGE_ROUTED5(PpapiMsg_PPBUDPSocket_RecvFromACK, - uint32 /* plugin_dispatcher_id */, - uint32 /* socket_id */, - bool /* succeeded */, - std::string /* data */, - PP_NetAddress_Private /* remote_addr */) -IPC_MESSAGE_ROUTED4(PpapiMsg_PPBUDPSocket_SendToACK, - uint32 /* plugin_dispatcher_id */, - uint32 /* socket_id */, - bool /* succeeded */, - int32_t /* bytes_written */) - // PPB_URLLoader_Trusted IPC_MESSAGE_ROUTED1( PpapiMsg_PPBURLLoader_UpdateProgress, @@ -1226,30 +1208,29 @@ IPC_MESSAGE_CONTROL2(PpapiHostMsg_PPBTCPSocket_Write, IPC_MESSAGE_CONTROL1(PpapiHostMsg_PPBTCPSocket_Disconnect, uint32 /* socket_id */) -// PPB_UDPSocket_Private. -IPC_SYNC_MESSAGE_CONTROL2_1(PpapiHostMsg_PPBUDPSocket_Create, - int32 /* routing_id */, - uint32 /* plugin_dispatcher_id */, - uint32 /* socket_id */) -IPC_MESSAGE_CONTROL4(PpapiHostMsg_PPBUDPSocket_SetBoolSocketFeature, - int32 /* routing_id */, - uint32 /* socket_id */, +// UDPSocketPrivate. +IPC_MESSAGE_CONTROL0(PpapiHostMsg_UDPSocketPrivate_Create) +IPC_MESSAGE_CONTROL2(PpapiHostMsg_UDPSocketPrivate_SetBoolSocketFeature, int32_t /* name */, bool /* value */) -IPC_MESSAGE_CONTROL3(PpapiHostMsg_PPBUDPSocket_Bind, - int32 /* routing_id */, - uint32 /* socket_id */, +IPC_MESSAGE_CONTROL1(PpapiHostMsg_UDPSocketPrivate_Bind, PP_NetAddress_Private /* net_addr */) -IPC_MESSAGE_CONTROL2(PpapiHostMsg_PPBUDPSocket_RecvFrom, - uint32 /* socket_id */, +IPC_MESSAGE_CONTROL1(PpapiHostMsg_UDPSocketPrivate_RecvFrom, int32_t /* num_bytes */) -IPC_MESSAGE_CONTROL4(PpapiHostMsg_PPBUDPSocket_SendTo, - int32 /* routing_id */, - uint32 /* socket_id */, +IPC_MESSAGE_CONTROL2(PpapiHostMsg_UDPSocketPrivate_SendTo, std::string /* data */, PP_NetAddress_Private /* net_addr */) -IPC_MESSAGE_CONTROL1(PpapiHostMsg_PPBUDPSocket_Close, - uint32 /* socket_id */) +IPC_MESSAGE_CONTROL0(PpapiHostMsg_UDPSocketPrivate_Close) +IPC_MESSAGE_CONTROL2(PpapiPluginMsg_UDPSocketPrivate_BindReply, + bool /* succeeded */, + PP_NetAddress_Private /* bound_addr */) +IPC_MESSAGE_CONTROL3(PpapiPluginMsg_UDPSocketPrivate_RecvFromReply, + bool /* succeeded */, + std::string /* data */, + PP_NetAddress_Private /* remote_addr */) +IPC_MESSAGE_CONTROL2(PpapiPluginMsg_UDPSocketPrivate_SendToReply, + bool /* succeeded */, + int32_t /* bytes_written */) // PPB_TCPServerSocket_Private. IPC_MESSAGE_CONTROL5(PpapiHostMsg_PPBTCPServerSocket_Listen, diff --git a/ppapi/proxy/ppb_udp_socket_private_proxy.cc b/ppapi/proxy/ppb_udp_socket_private_proxy.cc deleted file mode 100644 index 3f76e41..0000000 --- a/ppapi/proxy/ppb_udp_socket_private_proxy.cc +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ppapi/proxy/ppb_udp_socket_private_proxy.h" - -#include <map> - -#include "base/logging.h" -#include "ppapi/c/private/ppb_udp_socket_private.h" -#include "ppapi/proxy/plugin_dispatcher.h" -#include "ppapi/proxy/plugin_globals.h" -#include "ppapi/proxy/plugin_resource_tracker.h" -#include "ppapi/proxy/ppapi_messages.h" -#include "ppapi/shared_impl/private/udp_socket_private_impl.h" -#include "ppapi/shared_impl/resource.h" -#include "ppapi/thunk/thunk.h" - -namespace ppapi { -namespace proxy { - -namespace { - -typedef std::map<uint32, UDPSocketPrivateImpl*> IDToSocketMap; -IDToSocketMap* g_id_to_socket = NULL; - -class UDPSocket : public UDPSocketPrivateImpl { - public: - UDPSocket(const HostResource& resource, uint32 socket_id); - virtual ~UDPSocket(); - - virtual void SendBoolSocketFeature(int32_t name, bool value) OVERRIDE; - virtual void SendBind(const PP_NetAddress_Private& addr) OVERRIDE; - virtual void SendRecvFrom(int32_t num_bytes) OVERRIDE; - virtual void SendSendTo(const std::string& data, - const PP_NetAddress_Private& addr) OVERRIDE; - virtual void SendClose() OVERRIDE; - - private: - void SendToBrowser(IPC::Message* msg); - - DISALLOW_COPY_AND_ASSIGN(UDPSocket); -}; - -UDPSocket::UDPSocket(const HostResource& resource, uint32 socket_id) - : UDPSocketPrivateImpl(resource, socket_id) { - if (!g_id_to_socket) - g_id_to_socket = new IDToSocketMap(); - DCHECK(g_id_to_socket->find(socket_id) == g_id_to_socket->end()); - (*g_id_to_socket)[socket_id] = this; -} - -UDPSocket::~UDPSocket() { - Close(); -} - -void UDPSocket::SendBoolSocketFeature(int32_t name, bool value) { - SendToBrowser(new PpapiHostMsg_PPBUDPSocket_SetBoolSocketFeature( - API_ID_PPB_UDPSOCKET_PRIVATE, socket_id_, name, value)); -} - -void UDPSocket::SendBind(const PP_NetAddress_Private& addr) { - SendToBrowser(new PpapiHostMsg_PPBUDPSocket_Bind( - API_ID_PPB_UDPSOCKET_PRIVATE, socket_id_, addr)); -} - -void UDPSocket::SendRecvFrom(int32_t num_bytes) { - SendToBrowser(new PpapiHostMsg_PPBUDPSocket_RecvFrom(socket_id_, num_bytes)); -} - -void UDPSocket::SendSendTo(const std::string& data, - const PP_NetAddress_Private& addr) { - SendToBrowser(new PpapiHostMsg_PPBUDPSocket_SendTo( - API_ID_PPB_UDPSOCKET_PRIVATE, socket_id_, data, addr)); -} - -void UDPSocket::SendClose() { - // After removed from the mapping, this object won't receive any notifications - // from the proxy. - DCHECK(g_id_to_socket->find(socket_id_) != g_id_to_socket->end()); - g_id_to_socket->erase(socket_id_); - SendToBrowser(new PpapiHostMsg_PPBUDPSocket_Close(socket_id_)); -} - -void UDPSocket::SendToBrowser(IPC::Message* msg) { - PluginGlobals::Get()->GetBrowserSender()->Send(msg); -} - -} // namespace - -//------------------------------------------------------------------------------ - -PPB_UDPSocket_Private_Proxy::PPB_UDPSocket_Private_Proxy(Dispatcher* dispatcher) - : InterfaceProxy(dispatcher) { -} - -PPB_UDPSocket_Private_Proxy::~PPB_UDPSocket_Private_Proxy() { -} - -// static -PP_Resource PPB_UDPSocket_Private_Proxy::CreateProxyResource( - PP_Instance instance) { - PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); - if (!dispatcher) - return 0; - - uint32 socket_id = 0; - PluginGlobals::Get()->GetBrowserSender()->Send( - new PpapiHostMsg_PPBUDPSocket_Create( - API_ID_PPB_UDPSOCKET_PRIVATE, dispatcher->plugin_dispatcher_id(), - &socket_id)); - if (socket_id == 0) - return 0; - - return (new UDPSocket(HostResource::MakeInstanceOnly(instance), - socket_id))->GetReference(); -} - -bool PPB_UDPSocket_Private_Proxy::OnMessageReceived(const IPC::Message& msg) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(PPB_UDPSocket_Private_Proxy, msg) - IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_BindACK, - OnMsgBindACK) - IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_RecvFromACK, - OnMsgRecvFromACK) - IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_SendToACK, - OnMsgSendToACK) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - return handled; -} - -void PPB_UDPSocket_Private_Proxy::OnMsgBindACK( - uint32 /* plugin_dispatcher_id */, - uint32 socket_id, - bool succeeded, - const PP_NetAddress_Private& bound_addr) { - if (!g_id_to_socket) { - NOTREACHED(); - return; - } - IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); - if (iter == g_id_to_socket->end()) - return; - iter->second->OnBindCompleted(succeeded, bound_addr); -} - -void PPB_UDPSocket_Private_Proxy::OnMsgRecvFromACK( - uint32 /* plugin_dispatcher_id */, - uint32 socket_id, - bool succeeded, - const std::string& data, - const PP_NetAddress_Private& addr) { - if (!g_id_to_socket) { - NOTREACHED(); - return; - } - IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); - if (iter == g_id_to_socket->end()) - return; - iter->second->OnRecvFromCompleted(succeeded, data, addr); -} - -void PPB_UDPSocket_Private_Proxy::OnMsgSendToACK( - uint32 /* plugin_dispatcher_id */, - uint32 socket_id, - bool succeeded, - int32_t bytes_written) { - if (!g_id_to_socket) { - NOTREACHED(); - return; - } - IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); - if (iter == g_id_to_socket->end()) - return; - iter->second->OnSendToCompleted(succeeded, bytes_written); -} - -} // namespace proxy -} // namespace ppapi diff --git a/ppapi/proxy/ppb_udp_socket_private_proxy.h b/ppapi/proxy/ppb_udp_socket_private_proxy.h deleted file mode 100644 index 4677b4e..0000000 --- a/ppapi/proxy/ppb_udp_socket_private_proxy.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef PPAPI_PROXY_PPB_UDP_SOCKET_PRIVATE_PROXY_H_ -#define PPAPI_PROXY_PPB_UDP_SOCKET_PRIVATE_PROXY_H_ - -#include <string> - -#include "base/basictypes.h" -#include "ppapi/c/pp_instance.h" -#include "ppapi/c/pp_resource.h" -#include "ppapi/c/private/ppb_udp_socket_private.h" -#include "ppapi/proxy/interface_proxy.h" - -namespace ppapi { -namespace proxy { - -class PPB_UDPSocket_Private_Proxy : public InterfaceProxy { - public: - PPB_UDPSocket_Private_Proxy(Dispatcher* dispatcher); - virtual ~PPB_UDPSocket_Private_Proxy(); - - static PP_Resource CreateProxyResource(PP_Instance instance); - - // InterfaceProxy implementation. - virtual bool OnMessageReceived(const IPC::Message& msg); - - static const ApiID kApiID = API_ID_PPB_UDPSOCKET_PRIVATE; - - private: - // Browser->plugin message handlers. - void OnMsgBindACK(uint32 plugin_dispatcher_id, - uint32 socket_id, - bool succeeded, - const PP_NetAddress_Private& bound_addr); - void OnMsgRecvFromACK(uint32 plugin_dispatcher_id, - uint32 socket_id, - bool succeeded, - const std::string& data, - const PP_NetAddress_Private& addr); - void OnMsgSendToACK(uint32 plugin_dispatcher_id, - uint32 socket_id, - bool succeeded, - int32_t bytes_written); - - DISALLOW_COPY_AND_ASSIGN(PPB_UDPSocket_Private_Proxy); -}; - -} // namespace proxy -} // namespace ppapi - -#endif // PPAPI_PROXY_PPB_UDP_SOCKET_PRIVATE_PROXY_H_ diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc index e3f1b79..d8d4f7f 100644 --- a/ppapi/proxy/resource_creation_proxy.cc +++ b/ppapi/proxy/resource_creation_proxy.cc @@ -32,12 +32,12 @@ #include "ppapi/proxy/ppb_network_monitor_private_proxy.h" #include "ppapi/proxy/ppb_tcp_server_socket_private_proxy.h" #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" -#include "ppapi/proxy/ppb_udp_socket_private_proxy.h" #include "ppapi/proxy/ppb_url_loader_proxy.h" #include "ppapi/proxy/ppb_video_decoder_proxy.h" #include "ppapi/proxy/ppb_x509_certificate_private_proxy.h" #include "ppapi/proxy/printing_resource.h" #include "ppapi/proxy/talk_resource.h" +#include "ppapi/proxy/udp_socket_private_resource.h" #include "ppapi/proxy/url_request_info_resource.h" #include "ppapi/proxy/url_response_info_resource.h" #include "ppapi/proxy/video_capture_resource.h" @@ -276,7 +276,8 @@ PP_Resource ResourceCreationProxy::CreateTCPSocketPrivate( PP_Resource ResourceCreationProxy::CreateUDPSocketPrivate( PP_Instance instance) { - return PPB_UDPSocket_Private_Proxy::CreateProxyResource(instance); + return (new UDPSocketPrivateResource( + GetConnection(), instance))->GetReference(); } PP_Resource ResourceCreationProxy::CreateWebSocket(PP_Instance instance) { diff --git a/ppapi/shared_impl/private/udp_socket_private_impl.cc b/ppapi/proxy/udp_socket_private_resource.cc index 288c38f..5469f30 100644 --- a/ppapi/shared_impl/private/udp_socket_private_impl.cc +++ b/ppapi/proxy/udp_socket_private_resource.cc @@ -2,47 +2,52 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ppapi/shared_impl/private/udp_socket_private_impl.h" - -#include <string.h> +#include "ppapi/proxy/udp_socket_private_resource.h" #include <algorithm> +#include <cstring> #include "base/basictypes.h" -#include "base/bind.h" #include "base/logging.h" -#include "base/message_loop.h" #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_errors.h" +#include "ppapi/proxy/ppapi_messages.h" namespace ppapi { +namespace proxy { + +const int32_t UDPSocketPrivateResource::kMaxReadSize = 1024 * 1024; +const int32_t UDPSocketPrivateResource::kMaxWriteSize = 1024 * 1024; + +UDPSocketPrivateResource::UDPSocketPrivateResource(Connection connection, + PP_Instance instance) + : PluginResource(connection, instance), + bound_(false), + closed_(false), + read_buffer_(NULL), + bytes_to_read_(-1) { + recvfrom_addr_.size = 0; + memset(recvfrom_addr_.data, 0, + arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data)); + bound_addr_.size = 0; + memset(bound_addr_.data, 0, + arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); -const int32_t UDPSocketPrivateImpl::kMaxReadSize = 1024 * 1024; -const int32_t UDPSocketPrivateImpl::kMaxWriteSize = 1024 * 1024; - -UDPSocketPrivateImpl::UDPSocketPrivateImpl(const HostResource& resource, - uint32 socket_id) - : Resource(OBJECT_IS_PROXY, resource) { - Init(socket_id); -} - -UDPSocketPrivateImpl::UDPSocketPrivateImpl(PP_Instance instance, - uint32 socket_id) - : Resource(OBJECT_IS_IMPL, instance) { - Init(socket_id); + SendCreate(BROWSER, PpapiHostMsg_UDPSocketPrivate_Create()); } -UDPSocketPrivateImpl::~UDPSocketPrivateImpl() { +UDPSocketPrivateResource::~UDPSocketPrivateResource() { } thunk::PPB_UDPSocket_Private_API* -UDPSocketPrivateImpl::AsPPB_UDPSocket_Private_API() { +UDPSocketPrivateResource::AsPPB_UDPSocket_Private_API() { return this; } -int32_t UDPSocketPrivateImpl::SetSocketFeature(PP_UDPSocketFeature_Private name, - PP_Var value) { +int32_t UDPSocketPrivateResource::SetSocketFeature( + PP_UDPSocketFeature_Private name, + PP_Var value) { if (bound_ || closed_) return PP_ERROR_FAILED; @@ -60,8 +65,9 @@ int32_t UDPSocketPrivateImpl::SetSocketFeature(PP_UDPSocketFeature_Private name, return PP_OK; } -int32_t UDPSocketPrivateImpl::Bind(const PP_NetAddress_Private* addr, - scoped_refptr<TrackedCallback> callback) { +int32_t UDPSocketPrivateResource::Bind( + const PP_NetAddress_Private* addr, + scoped_refptr<TrackedCallback> callback) { if (!addr) return PP_ERROR_BADARGUMENT; if (bound_ || closed_) @@ -76,7 +82,7 @@ int32_t UDPSocketPrivateImpl::Bind(const PP_NetAddress_Private* addr, return PP_OK_COMPLETIONPENDING; } -PP_Bool UDPSocketPrivateImpl::GetBoundAddress(PP_NetAddress_Private* addr) { +PP_Bool UDPSocketPrivateResource::GetBoundAddress(PP_NetAddress_Private* addr) { if (!addr || !bound_ || closed_) return PP_FALSE; @@ -84,7 +90,7 @@ PP_Bool UDPSocketPrivateImpl::GetBoundAddress(PP_NetAddress_Private* addr) { return PP_TRUE; } -int32_t UDPSocketPrivateImpl::RecvFrom( +int32_t UDPSocketPrivateResource::RecvFrom( char* buffer, int32_t num_bytes, scoped_refptr<TrackedCallback> callback) { @@ -104,18 +110,25 @@ int32_t UDPSocketPrivateImpl::RecvFrom( return PP_OK_COMPLETIONPENDING; } -PP_Bool UDPSocketPrivateImpl::GetRecvFromAddress(PP_NetAddress_Private* addr) { +PP_Bool UDPSocketPrivateResource::GetRecvFromAddress( + PP_NetAddress_Private* addr) { if (!addr) return PP_FALSE; - *addr = recvfrom_addr_; return PP_TRUE; } -int32_t UDPSocketPrivateImpl::SendTo(const char* buffer, - int32_t num_bytes, - const PP_NetAddress_Private* addr, - scoped_refptr<TrackedCallback> callback) { +void UDPSocketPrivateResource::PostAbortIfNecessary( + scoped_refptr<TrackedCallback>* callback) { + if (TrackedCallback::IsPending(*callback)) + (*callback)->PostAbort(); +} + +int32_t UDPSocketPrivateResource::SendTo( + const char* buffer, + int32_t num_bytes, + const PP_NetAddress_Private* addr, + scoped_refptr<TrackedCallback> callback) { if (!buffer || num_bytes <= 0 || !addr) return PP_ERROR_BADARGUMENT; if (!bound_) @@ -133,7 +146,7 @@ int32_t UDPSocketPrivateImpl::SendTo(const char* buffer, return PP_OK_COMPLETIONPENDING; } -void UDPSocketPrivateImpl::Close() { +void UDPSocketPrivateResource::Close() { if(closed_) return; @@ -142,30 +155,65 @@ void UDPSocketPrivateImpl::Close() { SendClose(); - socket_id_ = 0; - PostAbortIfNecessary(&bind_callback_); PostAbortIfNecessary(&recvfrom_callback_); PostAbortIfNecessary(&sendto_callback_); } -void UDPSocketPrivateImpl::OnBindCompleted( +void UDPSocketPrivateResource::SendBoolSocketFeature(int32_t name, bool value) { + PpapiHostMsg_UDPSocketPrivate_SetBoolSocketFeature msg(name, value); + Post(BROWSER, msg); +} + +void UDPSocketPrivateResource::SendBind(const PP_NetAddress_Private& addr) { + PpapiHostMsg_UDPSocketPrivate_Bind msg(addr); + Call<PpapiPluginMsg_UDPSocketPrivate_BindReply>( + BROWSER, + msg, + base::Bind(&UDPSocketPrivateResource::OnPluginMsgBindReply, + base::Unretained(this))); +} + +void UDPSocketPrivateResource::SendRecvFrom(int32_t num_bytes) { + PpapiHostMsg_UDPSocketPrivate_RecvFrom msg(num_bytes); + Call<PpapiPluginMsg_UDPSocketPrivate_RecvFromReply>( + BROWSER, + msg, + base::Bind(&UDPSocketPrivateResource::OnPluginMsgRecvFromReply, + base::Unretained(this))); +} + +void UDPSocketPrivateResource::SendSendTo(const std::string& buffer, + const PP_NetAddress_Private& addr) { + PpapiHostMsg_UDPSocketPrivate_SendTo msg(buffer, addr); + Call<PpapiPluginMsg_UDPSocketPrivate_SendToReply>( + BROWSER, + msg, + base::Bind(&UDPSocketPrivateResource::OnPluginMsgSendToReply, + base::Unretained(this))); +} + +void UDPSocketPrivateResource::SendClose() { + PpapiHostMsg_UDPSocketPrivate_Close msg; + Post(BROWSER, msg); +} + +void UDPSocketPrivateResource::OnPluginMsgBindReply( + const ResourceMessageReplyParams& params, bool succeeded, - const PP_NetAddress_Private& addr) { + const PP_NetAddress_Private& bound_addr) { if (!TrackedCallback::IsPending(bind_callback_)) { NOTREACHED(); return; } - if (succeeded) bound_ = true; - - bound_addr_ = addr; - + bound_addr_ = bound_addr; bind_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); } -void UDPSocketPrivateImpl::OnRecvFromCompleted( +void UDPSocketPrivateResource::OnPluginMsgRecvFromReply( + const ResourceMessageReplyParams& params, bool succeeded, const std::string& data, const PP_NetAddress_Private& addr) { @@ -173,7 +221,6 @@ void UDPSocketPrivateImpl::OnRecvFromCompleted( NOTREACHED(); return; } - if (succeeded) { CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); if (!data.empty()) @@ -187,37 +234,17 @@ void UDPSocketPrivateImpl::OnRecvFromCompleted( static_cast<int32_t>(PP_ERROR_FAILED)); } -void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded, - int32_t bytes_written) { +void UDPSocketPrivateResource::OnPluginMsgSendToReply( + const ResourceMessageReplyParams& params, + bool succeeded, + int32_t bytes_written) { if (!TrackedCallback::IsPending(sendto_callback_)) { NOTREACHED(); return; } - sendto_callback_->Run( succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); } -void UDPSocketPrivateImpl::Init(uint32 socket_id) { - DCHECK(socket_id != 0); - socket_id_ = socket_id; - bound_ = false; - closed_ = false; - read_buffer_ = NULL; - bytes_to_read_ = -1; - - recvfrom_addr_.size = 0; - memset(recvfrom_addr_.data, 0, - arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data)); - bound_addr_.size = 0; - memset(bound_addr_.data, 0, - arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); -} - -void UDPSocketPrivateImpl::PostAbortIfNecessary( - scoped_refptr<TrackedCallback>* callback) { - if (TrackedCallback::IsPending(*callback)) - (*callback)->PostAbort(); -} - +} // namespace proxy } // namespace ppapi diff --git a/ppapi/shared_impl/private/udp_socket_private_impl.h b/ppapi/proxy/udp_socket_private_resource.h index e8e3cb2..d49e085 100644 --- a/ppapi/shared_impl/private/udp_socket_private_impl.h +++ b/ppapi/proxy/udp_socket_private_resource.h @@ -2,32 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef PPAPI_SHARED_IMPL_PRIVATE_UDP_SOCKET_PRIVATE_IMPL_H_ -#define PPAPI_SHARED_IMPL_PRIVATE_UDP_SOCKET_PRIVATE_IMPL_H_ - -#include <string> +#ifndef PPAPI_PROXY_UDP_SOCKET_PRIVATE_RESOURCE_H_ +#define PPAPI_PROXY_UDP_SOCKET_PRIVATE_RESOURCE_H_ +#include "base/basictypes.h" #include "base/compiler_specific.h" -#include "ppapi/shared_impl/resource.h" +#include "ppapi/proxy/plugin_resource.h" +#include "ppapi/proxy/ppapi_proxy_export.h" #include "ppapi/shared_impl/tracked_callback.h" #include "ppapi/thunk/ppb_udp_socket_private_api.h" namespace ppapi { +namespace proxy { -// This class provides the shared implementation of a -// PPB_UDPSocket_Private. The functions that actually send messages -// to browser are implemented differently for the proxied and -// non-proxied derived classes. -class PPAPI_SHARED_EXPORT UDPSocketPrivateImpl - : public thunk::PPB_UDPSocket_Private_API, - public Resource { +class PPAPI_PROXY_EXPORT UDPSocketPrivateResource + : public PluginResource, + public thunk::PPB_UDPSocket_Private_API { public: - // C-tor used in Impl case. - UDPSocketPrivateImpl(PP_Instance instance, uint32 socket_id); - // C-tor used in Proxy case. - UDPSocketPrivateImpl(const HostResource& resource, uint32 socket_id); - - virtual ~UDPSocketPrivateImpl(); + UDPSocketPrivateResource(Connection connection, + PP_Instance instance); + virtual ~UDPSocketPrivateResource(); // The maximum number of bytes that each PpapiHostMsg_PPBUDPSocket_RecvFrom // message is allowed to request. @@ -36,8 +30,9 @@ class PPAPI_SHARED_EXPORT UDPSocketPrivateImpl // message is allowed to carry. static const int32_t kMaxWriteSize; - // Resource overrides. - virtual PPB_UDPSocket_Private_API* AsPPB_UDPSocket_Private_API() OVERRIDE; + // PluginResource implementation. + virtual thunk::PPB_UDPSocket_Private_API* + AsPPB_UDPSocket_Private_API() OVERRIDE; // PPB_UDPSocket_Private_API implementation. virtual int32_t SetSocketFeature(PP_UDPSocketFeature_Private name, @@ -55,28 +50,27 @@ class PPAPI_SHARED_EXPORT UDPSocketPrivateImpl scoped_refptr<TrackedCallback> callback) OVERRIDE; virtual void Close() OVERRIDE; - // Notifications from the proxy. - void OnBindCompleted(bool succeeded, - const PP_NetAddress_Private& bound_addr); - void OnRecvFromCompleted(bool succeeded, - const std::string& data, - const PP_NetAddress_Private& addr); - void OnSendToCompleted(bool succeeded, int32_t bytes_written); - - // Send functions that need to be implemented differently for - // the proxied and non-proxied derived classes. - virtual void SendBoolSocketFeature(int32_t name, bool value) = 0; - virtual void SendBind(const PP_NetAddress_Private& addr) = 0; - virtual void SendRecvFrom(int32_t num_bytes) = 0; - virtual void SendSendTo(const std::string& buffer, - const PP_NetAddress_Private& addr) = 0; - virtual void SendClose() = 0; - - protected: - void Init(uint32 socket_id); + private: void PostAbortIfNecessary(scoped_refptr<TrackedCallback>* callback); - uint32 socket_id_; + void SendBoolSocketFeature(int32_t name, bool value); + void SendBind(const PP_NetAddress_Private& addr); + void SendRecvFrom(int32_t num_bytes); + void SendSendTo(const std::string& buffer, + const PP_NetAddress_Private& addr); + void SendClose(); + + // IPC message handlers. + void OnPluginMsgBindReply(const ResourceMessageReplyParams& params, + bool succeeded, + const PP_NetAddress_Private& bound_addr); + void OnPluginMsgRecvFromReply(const ResourceMessageReplyParams& params, + bool succeeded, + const std::string& data, + const PP_NetAddress_Private& addr); + void OnPluginMsgSendToReply(const ResourceMessageReplyParams& params, + bool succeeded, + int32_t bytes_written); bool bound_; bool closed_; @@ -91,9 +85,10 @@ class PPAPI_SHARED_EXPORT UDPSocketPrivateImpl PP_NetAddress_Private recvfrom_addr_; PP_NetAddress_Private bound_addr_; - DISALLOW_COPY_AND_ASSIGN(UDPSocketPrivateImpl); + DISALLOW_COPY_AND_ASSIGN(UDPSocketPrivateResource); }; +} // namespace proxy } // namespace ppapi -#endif // PPAPI_SHARED_IMPL_PRIVATE_UDP_SOCKET_PRIVATE_IMPL_H_ +#endif // PPAPI_PROXY_UDP_SOCKET_PRIVATE_RESOURCE_H_ diff --git a/ppapi/thunk/interfaces_ppb_private_no_permissions.h b/ppapi/thunk/interfaces_ppb_private_no_permissions.h index 0eb636a..219a72f 100644 --- a/ppapi/thunk/interfaces_ppb_private_no_permissions.h +++ b/ppapi/thunk/interfaces_ppb_private_no_permissions.h @@ -12,7 +12,6 @@ PROXIED_API(PPB_HostResolver_Private) PROXIED_API(PPB_TCPServerSocket_Private) PROXIED_API(PPB_TCPSocket_Private) -PROXIED_API(PPB_UDPSocket_Private) UNPROXIED_API(PPB_NetworkList_Private) PROXIED_API(PPB_NetworkMonitor_Private) @@ -25,11 +24,11 @@ PROXIED_IFACE(PPB_TCPSocket_Private, PPB_TCPSOCKET_PRIVATE_INTERFACE_0_3, PPB_TCPSocket_Private_0_3) PROXIED_IFACE(PPB_TCPSocket_Private, PPB_TCPSOCKET_PRIVATE_INTERFACE_0_4, PPB_TCPSocket_Private_0_4) -PROXIED_IFACE(PPB_UDPSocket_Private, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_2, +PROXIED_IFACE(NoAPIName, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_2, PPB_UDPSocket_Private_0_2) -PROXIED_IFACE(PPB_UDPSocket_Private, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3, +PROXIED_IFACE(NoAPIName, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3, PPB_UDPSocket_Private_0_3) -PROXIED_IFACE(PPB_UDPSocket_Private, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4, +PROXIED_IFACE(NoAPIName, PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4, PPB_UDPSocket_Private_0_4) PROXIED_IFACE(NoAPIName, PPB_NETADDRESS_PRIVATE_INTERFACE_0_1, @@ -45,4 +44,3 @@ PROXIED_IFACE(PPB_NetworkMonitor_Private, PPB_NetworkMonitor_Private_0_2) #include "ppapi/thunk/interfaces_postamble.h" - |