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

Side by Side Diff: content/browser/renderer_host/pepper/pepper_udp_socket_private_host.cc

Issue 11441012: PPB_UDPSocket_Private is switched to the new Pepper proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 8 years 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
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/renderer_host/pepper/pepper_udp_socket_private_host.h"
6
7 #include <vector>
8
9 #include "base/logging.h"
10 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
11 #include "content/browser/renderer_host/pepper/pepper_utils.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/common/process_type.h"
14 #include "content/public/common/socket_permission_request.h"
15 #include "ipc/ipc_message_macros.h"
16 #include "ppapi/c/pp_errors.h"
17 #include "ppapi/c/private/ppb_net_address_private.h"
18 #include "ppapi/host/dispatch_host_message.h"
19 #include "ppapi/host/host_message_context.h"
20 #include "ppapi/host/ppapi_host.h"
21 #include "ppapi/proxy/ppapi_messages.h"
22
23 namespace content {
24
25 PepperUDPSocketPrivateHost::PepperUDPSocketPrivateHost(
26 BrowserPpapiHostImpl* host,
27 PP_Instance instance,
28 PP_Resource resource)
29 : ResourceHost(host->GetPpapiHost(), instance, resource),
30 host_(host),
31 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
32 DCHECK(host_);
33 }
34
35 PepperUDPSocketPrivateHost::~PepperUDPSocketPrivateHost() {
36 }
37
38 int32_t PepperUDPSocketPrivateHost::OnResourceMessageReceived(
39 const IPC::Message& msg,
40 ppapi::host::HostMessageContext* context) {
41 IPC_BEGIN_MESSAGE_MAP(PepperUDPSocketPrivateHost, msg)
42 PPAPI_DISPATCH_HOST_RESOURCE_CALL(
43 PpapiHostMsg_UDPSocketPrivate_SetBoolSocketFeature,
44 OnMsgSetBoolSocketFeature)
45 PPAPI_DISPATCH_HOST_RESOURCE_CALL(
46 PpapiHostMsg_UDPSocketPrivate_Bind,
47 OnMsgBind)
48 PPAPI_DISPATCH_HOST_RESOURCE_CALL(
49 PpapiHostMsg_UDPSocketPrivate_RecvFrom,
50 OnMsgRecvFrom)
51 PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocketPrivate_SendTo,
52 OnMsgSendTo)
53 PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
54 PpapiHostMsg_UDPSocketPrivate_Close,
55 OnMsgClose)
56 IPC_END_MESSAGE_MAP()
57 return PP_ERROR_FAILED;
58 }
59
60 int32_t PepperUDPSocketPrivateHost::OnMsgSetBoolSocketFeature(
61 const ppapi::host::HostMessageContext* context,
62 int32_t name,
63 bool value) {
64 SetBoolSocketFeature(name, value);
65 return PP_OK;
66 }
67
68 int32_t PepperUDPSocketPrivateHost::OnMsgBind(
69 const ppapi::host::HostMessageContext* context,
70 const PP_NetAddress_Private& addr) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
72 DCHECK(context);
73
74 if (bind_context_.get())
75 return PP_ERROR_INPROGRESS;
76 bind_context_.reset(
77 new ppapi::host::ReplyMessageContext(context->MakeReplyMessageContext()));
78
79 SocketPermissionRequest params = PepperUtils::CreateSocketPermissionRequest(
80 SocketPermissionRequest::UDP_BIND, addr);
81 CheckSocketPermissionsAndReply(params,
82 base::Bind(&PepperUDPSocketPrivateHost::DoBind,
83 weak_factory_.GetWeakPtr(),
84 addr));
85 return PP_OK_COMPLETIONPENDING;
86 }
87
88 void PepperUDPSocketPrivateHost::DoBind(const PP_NetAddress_Private& addr,
89 bool allowed) {
90 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
91
92 if (!allowed) {
93 SendBindError();
94 return;
95 }
96 Bind(addr);
97 }
98
99 int32_t PepperUDPSocketPrivateHost::OnMsgRecvFrom(
100 const ppapi::host::HostMessageContext* context,
101 int32_t num_bytes) {
102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
103 DCHECK(context);
104
105 if (recv_from_context_.get())
106 return PP_ERROR_INPROGRESS;
107 recv_from_context_.reset(
108 new ppapi::host::ReplyMessageContext(context->MakeReplyMessageContext()));
109 RecvFrom(num_bytes);
110 return PP_OK_COMPLETIONPENDING;
111 }
112
113 int32_t PepperUDPSocketPrivateHost::OnMsgSendTo(
114 const ppapi::host::HostMessageContext* context,
115 const std::string& data,
116 const PP_NetAddress_Private& addr) {
117 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
118 DCHECK(context);
119
120 if (send_to_context_.get())
121 return PP_ERROR_INPROGRESS;
122 send_to_context_.reset(
123 new ppapi::host::ReplyMessageContext(context->MakeReplyMessageContext()));
124 SocketPermissionRequest params = PepperUtils::CreateSocketPermissionRequest(
125 SocketPermissionRequest::UDP_SEND_TO, addr);
126 CheckSocketPermissionsAndReply(params,
127 base::Bind(
128 &PepperUDPSocketPrivateHost::DoSendTo,
129 weak_factory_.GetWeakPtr(),
130 data,
131 addr));
132 return PP_OK_COMPLETIONPENDING;
133 }
134
135 void PepperUDPSocketPrivateHost::DoSendTo(const std::string& data,
136 const PP_NetAddress_Private& addr,
137 bool allowed) {
138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
139
140 if (!allowed) {
141 SendSendToError();
142 return;
143 }
144 SendTo(data, addr);
145 }
146
147 int32_t PepperUDPSocketPrivateHost::OnMsgClose(
148 const ppapi::host::HostMessageContext* context) {
149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
150
151 Close();
152 return PP_OK;
153 }
154
155 void PepperUDPSocketPrivateHost::SendBindReply(
156 bool succeeded,
157 const PP_NetAddress_Private& addr) {
158 DCHECK(bind_context_.get());
159
160 scoped_ptr<ppapi::host::ReplyMessageContext> context(bind_context_.release());
161 host()->SendReply(*context,
162 PpapiPluginMsg_UDPSocketPrivate_BindReply(succeeded, addr));
163 }
164
165 void PepperUDPSocketPrivateHost::SendRecvFromReply(
166 bool succeeded,
167 const std::string& data,
168 const PP_NetAddress_Private& addr) {
169 DCHECK(recv_from_context_.get());
170
171 scoped_ptr<ppapi::host::ReplyMessageContext> context(
172 recv_from_context_.release());
173 host()->SendReply(*context,
174 PpapiPluginMsg_UDPSocketPrivate_RecvFromReply(succeeded,
175 data,
176 addr));
177 }
178
179 void PepperUDPSocketPrivateHost::SendSendToReply(bool succeeded,
180 int32_t bytes_written) {
181 DCHECK(send_to_context_.get());
182
183 scoped_ptr<ppapi::host::ReplyMessageContext> context(
184 send_to_context_.release());
185 host()->SendReply(*context,
186 PpapiPluginMsg_UDPSocketPrivate_SendToReply(succeeded,
187 bytes_written));
188 }
189
190 void PepperUDPSocketPrivateHost::CheckSocketPermissionsAndReply(
191 const SocketPermissionRequest& params,
192 const RequestCallback& callback) {
193 host_->PostOnUIThreadWithRenderViewHostAndReply(
194 FROM_HERE,
195 pp_instance(),
196 base::Bind(&PepperUtils::CanUseSocketAPIs,
197 host_->plugin_process_type(), params),
198 callback);
199 }
200
201 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698