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

Side by Side Diff: ppapi/proxy/ppb_flash_net_connector_proxy.cc

Issue 8511032: Make the Pepper Flash net address just private, not Flash-specific. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ppb_flash_net_connector_proxy.h" 5 #include "ppapi/proxy/ppb_flash_net_connector_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ppapi/c/pp_errors.h" 9 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/c/private/ppb_flash_net_connector.h" 10 #include "ppapi/c/private/ppb_flash_net_connector.h"
11 #include "ppapi/proxy/enter_proxy.h" 11 #include "ppapi/proxy/enter_proxy.h"
12 #include "ppapi/proxy/plugin_dispatcher.h" 12 #include "ppapi/proxy/plugin_dispatcher.h"
13 #include "ppapi/proxy/ppapi_messages.h" 13 #include "ppapi/proxy/ppapi_messages.h"
14 #include "ppapi/proxy/serialized_var.h" 14 #include "ppapi/proxy/serialized_var.h"
15 #include "ppapi/thunk/enter.h" 15 #include "ppapi/thunk/enter.h"
16 #include "ppapi/thunk/ppb_flash_net_connector_api.h" 16 #include "ppapi/thunk/ppb_flash_net_connector_api.h"
17 #include "ppapi/thunk/resource_creation_api.h" 17 #include "ppapi/thunk/resource_creation_api.h"
18 #include "ppapi/thunk/thunk.h" 18 #include "ppapi/thunk/thunk.h"
19 19
20 using ppapi::thunk::EnterFunctionNoLock; 20 using ppapi::thunk::EnterFunctionNoLock;
21 using ppapi::thunk::PPB_Flash_NetConnector_API; 21 using ppapi::thunk::PPB_Flash_NetConnector_API;
22 using ppapi::thunk::ResourceCreationAPI; 22 using ppapi::thunk::ResourceCreationAPI;
23 23
24 namespace ppapi { 24 namespace ppapi {
25 namespace proxy { 25 namespace proxy {
26 26
27 std::string NetAddressToString(const PP_Flash_NetAddress& addr) { 27 std::string NetAddressToString(const PP_NetAddress_Private& addr) {
28 return std::string(addr.data, std::min(static_cast<size_t>(addr.size), 28 return std::string(addr.data, std::min(static_cast<size_t>(addr.size),
29 sizeof(addr.data))); 29 sizeof(addr.data)));
30 } 30 }
31 31
32 void StringToNetAddress(const std::string& str, PP_Flash_NetAddress* addr) { 32 void StringToNetAddress(const std::string& str, PP_NetAddress_Private* addr) {
33 addr->size = std::min(str.size(), sizeof(addr->data)); 33 addr->size = std::min(str.size(), sizeof(addr->data));
34 memcpy(addr->data, str.data(), addr->size); 34 memcpy(addr->data, str.data(), addr->size);
35 } 35 }
36 36
37 class AbortCallbackTask : public Task { 37 class AbortCallbackTask : public Task {
38 public: 38 public:
39 AbortCallbackTask(PP_CompletionCallback callback) 39 AbortCallbackTask(PP_CompletionCallback callback)
40 : callback_(callback) {} 40 : callback_(callback) {}
41 41
42 virtual void Run() { 42 virtual void Run() {
(...skipping 10 matching lines...) Expand all
53 explicit FlashNetConnector(const HostResource& resource); 53 explicit FlashNetConnector(const HostResource& resource);
54 virtual ~FlashNetConnector(); 54 virtual ~FlashNetConnector();
55 55
56 // Resource overrides. 56 // Resource overrides.
57 virtual PPB_Flash_NetConnector_API* AsPPB_Flash_NetConnector_API() OVERRIDE; 57 virtual PPB_Flash_NetConnector_API* AsPPB_Flash_NetConnector_API() OVERRIDE;
58 58
59 // PPB_Flash_NetConnector_API implementation. 59 // PPB_Flash_NetConnector_API implementation.
60 virtual int32_t ConnectTcp(const char* host, 60 virtual int32_t ConnectTcp(const char* host,
61 uint16_t port, 61 uint16_t port,
62 PP_FileHandle* socket_out, 62 PP_FileHandle* socket_out,
63 PP_Flash_NetAddress* local_addr_out, 63 PP_NetAddress_Private* local_addr_out,
64 PP_Flash_NetAddress* remote_addr_out, 64 PP_NetAddress_Private* remote_addr_out,
65 PP_CompletionCallback callback) OVERRIDE; 65 PP_CompletionCallback callback) OVERRIDE;
66 virtual int32_t ConnectTcpAddress(const PP_Flash_NetAddress* addr, 66 virtual int32_t ConnectTcpAddress(const PP_NetAddress_Private* addr,
67 PP_FileHandle* socket_out, 67 PP_FileHandle* socket_out,
68 PP_Flash_NetAddress* local_addr_out, 68 PP_NetAddress_Private* local_addr_out,
69 PP_Flash_NetAddress* remote_addr_out, 69 PP_NetAddress_Private* remote_addr_out,
70 PP_CompletionCallback callback) OVERRIDE; 70 PP_CompletionCallback callback) OVERRIDE;
71 71
72 void ConnectComplete(int32_t result, 72 void ConnectComplete(int32_t result,
73 base::PlatformFile file, 73 base::PlatformFile file,
74 const std::string& local_addr_as_string, 74 const std::string& local_addr_as_string,
75 const std::string& remote_addr_as_string); 75 const std::string& remote_addr_as_string);
76 76
77 private: 77 private:
78 // Backend for both ConnectTcp and ConnectTcpAddress. To keep things generic, 78 // Backend for both ConnectTcp and ConnectTcpAddress. To keep things generic,
79 // the message is passed in (on error, it's deleted). 79 // the message is passed in (on error, it's deleted).
80 int32_t ConnectWithMessage(IPC::Message* msg, 80 int32_t ConnectWithMessage(IPC::Message* msg,
81 PP_FileHandle* socket_out, 81 PP_FileHandle* socket_out,
82 PP_Flash_NetAddress* local_addr_out, 82 PP_NetAddress_Private* local_addr_out,
83 PP_Flash_NetAddress* remote_addr_out, 83 PP_NetAddress_Private* remote_addr_out,
84 PP_CompletionCallback callback); 84 PP_CompletionCallback callback);
85 85
86 PP_CompletionCallback callback_; 86 PP_CompletionCallback callback_;
87 PP_FileHandle* socket_out_; 87 PP_FileHandle* socket_out_;
88 PP_Flash_NetAddress* local_addr_out_; 88 PP_NetAddress_Private* local_addr_out_;
89 PP_Flash_NetAddress* remote_addr_out_; 89 PP_NetAddress_Private* remote_addr_out_;
90 }; 90 };
91 91
92 FlashNetConnector::FlashNetConnector(const HostResource& resource) 92 FlashNetConnector::FlashNetConnector(const HostResource& resource)
93 : Resource(resource), 93 : Resource(resource),
94 callback_(PP_BlockUntilComplete()), 94 callback_(PP_BlockUntilComplete()),
95 socket_out_(NULL), 95 socket_out_(NULL),
96 local_addr_out_(NULL), 96 local_addr_out_(NULL),
97 remote_addr_out_(NULL) { 97 remote_addr_out_(NULL) {
98 } 98 }
99 99
100 FlashNetConnector::~FlashNetConnector() { 100 FlashNetConnector::~FlashNetConnector() {
101 if (callback_.func) { 101 if (callback_.func) {
102 MessageLoop::current()->PostTask(FROM_HERE, 102 MessageLoop::current()->PostTask(FROM_HERE,
103 new AbortCallbackTask(callback_)); 103 new AbortCallbackTask(callback_));
104 } 104 }
105 } 105 }
106 106
107 PPB_Flash_NetConnector_API* FlashNetConnector::AsPPB_Flash_NetConnector_API() { 107 PPB_Flash_NetConnector_API* FlashNetConnector::AsPPB_Flash_NetConnector_API() {
108 return this; 108 return this;
109 } 109 }
110 110
111 int32_t FlashNetConnector::ConnectTcp( 111 int32_t FlashNetConnector::ConnectTcp(
112 const char* host, 112 const char* host,
113 uint16_t port, 113 uint16_t port,
114 PP_FileHandle* socket_out, 114 PP_FileHandle* socket_out,
115 PP_Flash_NetAddress* local_addr_out, 115 PP_NetAddress_Private* local_addr_out,
116 PP_Flash_NetAddress* remote_addr_out, 116 PP_NetAddress_Private* remote_addr_out,
117 PP_CompletionCallback callback) { 117 PP_CompletionCallback callback) {
118 return ConnectWithMessage( 118 return ConnectWithMessage(
119 new PpapiHostMsg_PPBFlashNetConnector_ConnectTcp( 119 new PpapiHostMsg_PPBFlashNetConnector_ConnectTcp(
120 API_ID_PPB_FLASH_NETCONNECTOR, host_resource(), host, port), 120 API_ID_PPB_FLASH_NETCONNECTOR, host_resource(), host, port),
121 socket_out, local_addr_out, remote_addr_out, callback); 121 socket_out, local_addr_out, remote_addr_out, callback);
122 } 122 }
123 123
124 int32_t FlashNetConnector::ConnectTcpAddress( 124 int32_t FlashNetConnector::ConnectTcpAddress(
125 const PP_Flash_NetAddress* addr, 125 const PP_NetAddress_Private* addr,
126 PP_FileHandle* socket_out, 126 PP_FileHandle* socket_out,
127 PP_Flash_NetAddress* local_addr_out, 127 PP_NetAddress_Private* local_addr_out,
128 PP_Flash_NetAddress* remote_addr_out, 128 PP_NetAddress_Private* remote_addr_out,
129 PP_CompletionCallback callback) { 129 PP_CompletionCallback callback) {
130 return ConnectWithMessage( 130 return ConnectWithMessage(
131 new PpapiHostMsg_PPBFlashNetConnector_ConnectTcpAddress( 131 new PpapiHostMsg_PPBFlashNetConnector_ConnectTcpAddress(
132 API_ID_PPB_FLASH_NETCONNECTOR, 132 API_ID_PPB_FLASH_NETCONNECTOR,
133 host_resource(), NetAddressToString(*addr)), 133 host_resource(), NetAddressToString(*addr)),
134 socket_out, local_addr_out, remote_addr_out, callback); 134 socket_out, local_addr_out, remote_addr_out, callback);
135 } 135 }
136 136
137 void FlashNetConnector::ConnectComplete( 137 void FlashNetConnector::ConnectComplete(
138 int32_t result, 138 int32_t result,
139 base::PlatformFile file, 139 base::PlatformFile file,
140 const std::string& local_addr_as_string, 140 const std::string& local_addr_as_string,
141 const std::string& remote_addr_as_string) { 141 const std::string& remote_addr_as_string) {
142 if (!callback_.func) { 142 if (!callback_.func) {
143 base::ClosePlatformFile(file); 143 base::ClosePlatformFile(file);
144 return; 144 return;
145 } 145 }
146 146
147 *socket_out_ = static_cast<PP_FileHandle>(file); 147 *socket_out_ = static_cast<PP_FileHandle>(file);
148 StringToNetAddress(local_addr_as_string, local_addr_out_); 148 StringToNetAddress(local_addr_as_string, local_addr_out_);
149 StringToNetAddress(remote_addr_as_string, remote_addr_out_); 149 StringToNetAddress(remote_addr_as_string, remote_addr_out_);
150 150
151 PP_RunAndClearCompletionCallback(&callback_, result); 151 PP_RunAndClearCompletionCallback(&callback_, result);
152 } 152 }
153 153
154 int32_t FlashNetConnector::ConnectWithMessage( 154 int32_t FlashNetConnector::ConnectWithMessage(
155 IPC::Message* msg, 155 IPC::Message* msg,
156 PP_FileHandle* socket_out, 156 PP_FileHandle* socket_out,
157 PP_Flash_NetAddress* local_addr_out, 157 PP_NetAddress_Private* local_addr_out,
158 PP_Flash_NetAddress* remote_addr_out, 158 PP_NetAddress_Private* remote_addr_out,
159 PP_CompletionCallback callback) { 159 PP_CompletionCallback callback) {
160 scoped_ptr<IPC::Message> msg_deletor(msg); 160 scoped_ptr<IPC::Message> msg_deletor(msg);
161 if (callback_.func != NULL) 161 if (callback_.func != NULL)
162 return PP_ERROR_INPROGRESS; // Can only have one pending request. 162 return PP_ERROR_INPROGRESS; // Can only have one pending request.
163 163
164 // Send the request, it will call us back via ConnectACK. 164 // Send the request, it will call us back via ConnectACK.
165 PluginDispatcher::GetForResource(this)->Send(msg_deletor.release()); 165 PluginDispatcher::GetForResource(this)->Send(msg_deletor.release());
166 166
167 callback_ = callback; 167 callback_ = callback;
168 socket_out_ = socket_out; 168 socket_out_ = socket_out;
169 local_addr_out_ = local_addr_out; 169 local_addr_out_ = local_addr_out;
170 remote_addr_out_ = remote_addr_out; 170 remote_addr_out_ = remote_addr_out;
171 return PP_OK_COMPLETIONPENDING; 171 return PP_OK_COMPLETIONPENDING;
172 } 172 }
173 173
174 // Contains the data that the host interface will write to so we can send it 174 // Contains the data that the host interface will write to so we can send it
175 // to the plugin. This is created when a request is initiated, and deleted in 175 // to the plugin. This is created when a request is initiated, and deleted in
176 // the callback handler. 176 // the callback handler.
177 struct PPB_Flash_NetConnector_Proxy::ConnectCallbackInfo { 177 struct PPB_Flash_NetConnector_Proxy::ConnectCallbackInfo {
178 ConnectCallbackInfo(const HostResource& r) : resource(r), handle(0) { 178 ConnectCallbackInfo(const HostResource& r) : resource(r), handle(0) {
179 memset(&local_addr, 0, sizeof(local_addr)); 179 memset(&local_addr, 0, sizeof(local_addr));
180 memset(&remote_addr, 0, sizeof(remote_addr)); 180 memset(&remote_addr, 0, sizeof(remote_addr));
181 } 181 }
182 182
183 HostResource resource; 183 HostResource resource;
184 184
185 PP_FileHandle handle; 185 PP_FileHandle handle;
186 PP_Flash_NetAddress local_addr; 186 PP_NetAddress_Private local_addr;
187 PP_Flash_NetAddress remote_addr; 187 PP_NetAddress_Private remote_addr;
188 }; 188 };
189 189
190 PPB_Flash_NetConnector_Proxy::PPB_Flash_NetConnector_Proxy( 190 PPB_Flash_NetConnector_Proxy::PPB_Flash_NetConnector_Proxy(
191 Dispatcher* dispatcher) 191 Dispatcher* dispatcher)
192 : InterfaceProxy(dispatcher), 192 : InterfaceProxy(dispatcher),
193 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 193 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
194 } 194 }
195 195
196 PPB_Flash_NetConnector_Proxy::~PPB_Flash_NetConnector_Proxy() { 196 PPB_Flash_NetConnector_Proxy::~PPB_Flash_NetConnector_Proxy() {
197 } 197 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 OnCompleteCallbackInHost(result, info); 256 OnCompleteCallbackInHost(result, info);
257 } 257 }
258 258
259 void PPB_Flash_NetConnector_Proxy::OnMsgConnectTcpAddress( 259 void PPB_Flash_NetConnector_Proxy::OnMsgConnectTcpAddress(
260 const HostResource& resource, 260 const HostResource& resource,
261 const std::string& net_address_as_string) { 261 const std::string& net_address_as_string) {
262 ConnectCallbackInfo* info = new ConnectCallbackInfo(resource); 262 ConnectCallbackInfo* info = new ConnectCallbackInfo(resource);
263 pp::CompletionCallback callback = callback_factory_.NewOptionalCallback( 263 pp::CompletionCallback callback = callback_factory_.NewOptionalCallback(
264 &PPB_Flash_NetConnector_Proxy::OnCompleteCallbackInHost, info); 264 &PPB_Flash_NetConnector_Proxy::OnCompleteCallbackInHost, info);
265 265
266 PP_Flash_NetAddress net_address; 266 PP_NetAddress_Private net_address;
267 StringToNetAddress(net_address_as_string, &net_address); 267 StringToNetAddress(net_address_as_string, &net_address);
268 268
269 EnterHostFromHostResource<PPB_Flash_NetConnector_API> enter(resource); 269 EnterHostFromHostResource<PPB_Flash_NetConnector_API> enter(resource);
270 int32_t result = PP_ERROR_BADRESOURCE; 270 int32_t result = PP_ERROR_BADRESOURCE;
271 if (enter.succeeded()) { 271 if (enter.succeeded()) {
272 result = enter.object()->ConnectTcpAddress( 272 result = enter.object()->ConnectTcpAddress(
273 &net_address, &info->handle, &info->local_addr, &info->remote_addr, 273 &net_address, &info->handle, &info->local_addr, &info->remote_addr,
274 callback.pp_completion_callback()); 274 callback.pp_completion_callback());
275 } 275 }
276 if (result != PP_OK_COMPLETIONPENDING) 276 if (result != PP_OK_COMPLETIONPENDING)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 } else { 313 } else {
314 dispatcher()->Send(new PpapiMsg_PPBFlashNetConnector_ConnectACK( 314 dispatcher()->Send(new PpapiMsg_PPBFlashNetConnector_ConnectACK(
315 API_ID_PPB_FLASH_NETCONNECTOR, 315 API_ID_PPB_FLASH_NETCONNECTOR,
316 info->resource, result, 316 info->resource, result,
317 IPC::InvalidPlatformFileForTransit(), std::string(), std::string())); 317 IPC::InvalidPlatformFileForTransit(), std::string(), std::string()));
318 } 318 }
319 } 319 }
320 320
321 } // namespace proxy 321 } // namespace proxy
322 } // namespace ppapi 322 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698