Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/proxy/tcp_server_socket_private_resource.h" | 5 #include "ppapi/proxy/tcp_server_socket_private_resource.h" |
| 6 | 6 |
| 7 #include "ppapi/proxy/plugin_dispatcher.h" | 7 #include "ppapi/proxy/plugin_dispatcher.h" |
| 8 #include "ppapi/proxy/plugin_globals.h" | |
| 8 #include "ppapi/proxy/ppapi_messages.h" | 9 #include "ppapi/proxy/ppapi_messages.h" |
| 9 #include "ppapi/proxy/ppb_tcp_socket_private_proxy.h" | 10 #include "ppapi/proxy/tcp_socket_private_resource.h" |
| 10 | 11 |
| 11 namespace ppapi { | 12 namespace ppapi { |
| 12 namespace proxy { | 13 namespace proxy { |
| 13 | 14 |
| 14 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( | 15 TCPServerSocketPrivateResource::TCPServerSocketPrivateResource( |
| 15 Connection connection, | 16 Connection connection, |
| 16 PP_Instance instance) | 17 PP_Instance instance) |
| 17 : PluginResource(connection, instance), | 18 : PluginResource(connection, instance), |
| 18 state_(STATE_BEFORE_LISTENING), | 19 state_(STATE_BEFORE_LISTENING), |
| 19 local_addr_(), | 20 local_addr_() { |
| 20 plugin_dispatcher_id_(0) { | |
| 21 SendCreate(BROWSER, PpapiHostMsg_TCPServerSocket_CreatePrivate()); | 21 SendCreate(BROWSER, PpapiHostMsg_TCPServerSocket_CreatePrivate()); |
| 22 | |
| 23 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); | |
| 24 if (dispatcher) | |
| 25 plugin_dispatcher_id_ = dispatcher->plugin_dispatcher_id(); | |
| 26 else | |
| 27 NOTREACHED(); | |
| 28 } | 22 } |
| 29 | 23 |
| 30 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { | 24 TCPServerSocketPrivateResource::~TCPServerSocketPrivateResource() { |
| 31 } | 25 } |
| 32 | 26 |
| 33 thunk::PPB_TCPServerSocket_Private_API* | 27 thunk::PPB_TCPServerSocket_Private_API* |
| 34 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { | 28 TCPServerSocketPrivateResource::AsPPB_TCPServerSocket_Private_API() { |
| 35 return this; | 29 return this; |
| 36 } | 30 } |
| 37 | 31 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 64 return PP_ERROR_BADARGUMENT; | 58 return PP_ERROR_BADARGUMENT; |
| 65 if (state_ != STATE_LISTENING) | 59 if (state_ != STATE_LISTENING) |
| 66 return PP_ERROR_FAILED; | 60 return PP_ERROR_FAILED; |
| 67 if (TrackedCallback::IsPending(accept_callback_)) | 61 if (TrackedCallback::IsPending(accept_callback_)) |
| 68 return PP_ERROR_INPROGRESS; | 62 return PP_ERROR_INPROGRESS; |
| 69 | 63 |
| 70 accept_callback_ = callback; | 64 accept_callback_ = callback; |
| 71 | 65 |
| 72 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( | 66 Call<PpapiPluginMsg_TCPServerSocket_AcceptReply>( |
| 73 BROWSER, | 67 BROWSER, |
| 74 PpapiHostMsg_TCPServerSocket_Accept(plugin_dispatcher_id_), | 68 PpapiHostMsg_TCPServerSocket_Accept(), |
| 75 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, | 69 base::Bind(&TCPServerSocketPrivateResource::OnPluginMsgAcceptReply, |
| 76 base::Unretained(this), tcp_socket)); | 70 base::Unretained(this), tcp_socket)); |
| 77 return PP_OK_COMPLETIONPENDING; | 71 return PP_OK_COMPLETIONPENDING; |
| 78 } | 72 } |
| 79 | 73 |
| 80 int32_t TCPServerSocketPrivateResource::GetLocalAddress( | 74 int32_t TCPServerSocketPrivateResource::GetLocalAddress( |
| 81 PP_NetAddress_Private* addr) { | 75 PP_NetAddress_Private* addr) { |
| 82 if (!addr) | 76 if (!addr) |
| 83 return PP_ERROR_BADARGUMENT; | 77 return PP_ERROR_BADARGUMENT; |
| 84 if (state_ != STATE_LISTENING) | 78 if (state_ != STATE_LISTENING) |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 108 if (params.result() == PP_OK) { | 102 if (params.result() == PP_OK) { |
| 109 local_addr_ = local_addr; | 103 local_addr_ = local_addr; |
| 110 state_ = STATE_LISTENING; | 104 state_ = STATE_LISTENING; |
| 111 } | 105 } |
| 112 listen_callback_->Run(params.result()); | 106 listen_callback_->Run(params.result()); |
| 113 } | 107 } |
| 114 | 108 |
| 115 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( | 109 void TCPServerSocketPrivateResource::OnPluginMsgAcceptReply( |
| 116 PP_Resource* tcp_socket, | 110 PP_Resource* tcp_socket, |
| 117 const ResourceMessageReplyParams& params, | 111 const ResourceMessageReplyParams& params, |
| 118 uint32 accepted_socket_id, | 112 int pending_resource_id, |
| 119 const PP_NetAddress_Private& local_addr, | 113 const PP_NetAddress_Private& local_addr, |
| 120 const PP_NetAddress_Private& remote_addr) { | 114 const PP_NetAddress_Private& remote_addr) { |
| 121 DCHECK(tcp_socket); | 115 DCHECK(tcp_socket); |
| 122 if (state_ != STATE_LISTENING || | 116 if (state_ != STATE_LISTENING || |
| 123 !TrackedCallback::IsPending(accept_callback_)) { | 117 !TrackedCallback::IsPending(accept_callback_)) { |
| 124 return; | 118 return; |
| 125 } | 119 } |
| 126 if (params.result() == PP_OK) { | 120 if (params.result() == PP_OK) { |
| 127 *tcp_socket = | 121 Connection connection(PluginGlobals::Get()->GetBrowserSender(), |
|
yzshen1
2013/08/16 20:40:42
TCPServerSocketPrivateResource itself has a connec
ygorshenin1
2013/08/19 14:33:35
Done.
| |
| 128 PPB_TCPSocket_Private_Proxy::CreateProxyResourceForConnectedSocket( | 122 PluginDispatcher::GetForInstance(pp_instance())); |
| 129 pp_instance(), | 123 *tcp_socket = (new TCPSocketPrivateResource(connection, pp_instance(), |
| 130 accepted_socket_id, | 124 pending_resource_id, |
| 131 local_addr, | 125 local_addr, |
| 132 remote_addr); | 126 remote_addr))->GetReference(); |
| 133 } | 127 } |
| 134 accept_callback_->Run(params.result()); | 128 accept_callback_->Run(params.result()); |
| 135 } | 129 } |
| 136 | 130 |
| 137 } // namespace proxy | 131 } // namespace proxy |
| 138 } // namespace ppapi | 132 } // namespace ppapi |
| OLD | NEW |