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

Side by Side Diff: webkit/plugins/ppapi/ppb_transport_impl.cc

Issue 7669055: Remove webkit::ppapi::Resource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nulls auditeed Created 9 years, 4 months 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
« no previous file with comments | « webkit/plugins/ppapi/ppb_transport_impl.h ('k') | webkit/plugins/ppapi/ppb_url_loader_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "webkit/plugins/ppapi/ppb_transport_impl.h" 5 #include "webkit/plugins/ppapi/ppb_transport_impl.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "net/base/io_buffer.h" 9 #include "net/base/io_buffer.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/socket/socket.h" 11 #include "net/socket/socket.h"
12 #include "ppapi/c/dev/ppb_transport_dev.h" 12 #include "ppapi/c/dev/ppb_transport_dev.h"
13 #include "ppapi/c/pp_completion_callback.h" 13 #include "ppapi/c/pp_completion_callback.h"
14 #include "ppapi/c/pp_errors.h" 14 #include "ppapi/c/pp_errors.h"
15 #include "ppapi/shared_impl/var.h" 15 #include "ppapi/shared_impl/var.h"
16 #include "webkit/plugins/ppapi/common.h" 16 #include "webkit/plugins/ppapi/common.h"
17 #include "webkit/plugins/ppapi/plugin_module.h" 17 #include "webkit/plugins/ppapi/plugin_module.h"
18 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 18 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
19 #include "webkit/plugins/ppapi/resource_helper.h"
19 20
20 using ppapi::StringVar; 21 using ppapi::StringVar;
21 using ppapi::thunk::PPB_Transport_API; 22 using ppapi::thunk::PPB_Transport_API;
22 using webkit_glue::P2PTransport; 23 using webkit_glue::P2PTransport;
23 24
24 namespace webkit { 25 namespace webkit {
25 namespace ppapi { 26 namespace ppapi {
26 27
27 namespace { 28 namespace {
28 29
(...skipping 11 matching lines...) Expand all
40 return PP_OK_COMPLETIONPENDING; 41 return PP_OK_COMPLETIONPENDING;
41 case net::ERR_INVALID_ARGUMENT: 42 case net::ERR_INVALID_ARGUMENT:
42 return PP_ERROR_BADARGUMENT; 43 return PP_ERROR_BADARGUMENT;
43 default: 44 default:
44 return PP_ERROR_FAILED; 45 return PP_ERROR_FAILED;
45 } 46 }
46 } 47 }
47 48
48 } // namespace 49 } // namespace
49 50
50 PPB_Transport_Impl::PPB_Transport_Impl(PluginInstance* instance) 51 PPB_Transport_Impl::PPB_Transport_Impl(PP_Instance instance)
51 : Resource(instance), 52 : Resource(instance),
52 started_(false), 53 started_(false),
53 writable_(false), 54 writable_(false),
54 ALLOW_THIS_IN_INITIALIZER_LIST( 55 ALLOW_THIS_IN_INITIALIZER_LIST(
55 channel_write_callback_(this, &PPB_Transport_Impl::OnWritten)), 56 channel_write_callback_(this, &PPB_Transport_Impl::OnWritten)),
56 ALLOW_THIS_IN_INITIALIZER_LIST( 57 ALLOW_THIS_IN_INITIALIZER_LIST(
57 channel_read_callback_(this, &PPB_Transport_Impl::OnRead)) { 58 channel_read_callback_(this, &PPB_Transport_Impl::OnRead)) {
58 } 59 }
59 60
60 PPB_Transport_Impl::~PPB_Transport_Impl() { 61 PPB_Transport_Impl::~PPB_Transport_Impl() {
61 } 62 }
62 63
63 // static 64 // static
64 PP_Resource PPB_Transport_Impl::Create(PluginInstance* instance, 65 PP_Resource PPB_Transport_Impl::Create(PP_Instance instance,
65 const char* name, 66 const char* name,
66 const char* proto) { 67 const char* proto) {
67 scoped_refptr<PPB_Transport_Impl> t(new PPB_Transport_Impl(instance)); 68 scoped_refptr<PPB_Transport_Impl> t(new PPB_Transport_Impl(instance));
68 if (!t->Init(name, proto)) 69 if (!t->Init(name, proto))
69 return 0; 70 return 0;
70 return t->GetReference(); 71 return t->GetReference();
71 } 72 }
72 73
73 PPB_Transport_API* PPB_Transport_Impl::AsPPB_Transport_API() { 74 PPB_Transport_API* PPB_Transport_Impl::AsPPB_Transport_API() {
74 return this; 75 return this;
75 } 76 }
76 77
77 bool PPB_Transport_Impl::Init(const char* name, const char* proto) { 78 bool PPB_Transport_Impl::Init(const char* name, const char* proto) {
78 name_ = name; 79 name_ = name;
79 80
80 if (base::strcasecmp(proto, kUdpProtocolName) == 0) { 81 if (base::strcasecmp(proto, kUdpProtocolName) == 0) {
81 use_tcp_ = false; 82 use_tcp_ = false;
82 } else if (base::strcasecmp(proto, kTcpProtocolName) == 0) { 83 } else if (base::strcasecmp(proto, kTcpProtocolName) == 0) {
83 use_tcp_ = true; 84 use_tcp_ = true;
84 } else { 85 } else {
85 LOG(WARNING) << "Unknown protocol: " << proto; 86 LOG(WARNING) << "Unknown protocol: " << proto;
86 return false; 87 return false;
87 } 88 }
88 89
89 p2p_transport_.reset(instance()->delegate()->CreateP2PTransport()); 90 PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
91 if (!plugin_delegate)
92 return false;
93 p2p_transport_.reset(plugin_delegate->CreateP2PTransport());
90 return p2p_transport_.get() != NULL; 94 return p2p_transport_.get() != NULL;
91 } 95 }
92 96
93 PP_Bool PPB_Transport_Impl::IsWritable() { 97 PP_Bool PPB_Transport_Impl::IsWritable() {
94 if (!p2p_transport_.get()) 98 if (!p2p_transport_.get())
95 return PP_FALSE; 99 return PP_FALSE;
96 100
97 return PP_FromBool(writable_); 101 return PP_FromBool(writable_);
98 } 102 }
99 103
100 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) { 104 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) {
101 if (!p2p_transport_.get()) 105 if (!p2p_transport_.get())
102 return PP_ERROR_FAILED; 106 return PP_ERROR_FAILED;
103 107
104 // Connect() has already been called. 108 // Connect() has already been called.
105 if (started_) 109 if (started_)
106 return PP_ERROR_INPROGRESS; 110 return PP_ERROR_INPROGRESS;
107 111
108 P2PTransport::Protocol protocol = use_tcp_ ? 112 P2PTransport::Protocol protocol = use_tcp_ ?
109 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP; 113 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP;
110 114
111 if (!p2p_transport_->Init(name_, protocol, "", this)) 115 if (!p2p_transport_->Init(name_, protocol, "", this))
112 return PP_ERROR_FAILED; 116 return PP_ERROR_FAILED;
113 117
114 started_ = true; 118 started_ = true;
115 119
120 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this);
121 if (!plugin_module)
122 return PP_ERROR_FAILED;
123
116 connect_callback_ = new TrackedCompletionCallback( 124 connect_callback_ = new TrackedCompletionCallback(
117 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 125 plugin_module->GetCallbackTracker(), pp_resource(), callback);
118 return PP_OK_COMPLETIONPENDING; 126 return PP_OK_COMPLETIONPENDING;
119 } 127 }
120 128
121 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address, 129 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address,
122 PP_CompletionCallback callback) { 130 PP_CompletionCallback callback) {
123 if (!p2p_transport_.get()) 131 if (!p2p_transport_.get())
124 return PP_ERROR_FAILED; 132 return PP_ERROR_FAILED;
125 133
126 if (next_address_callback_.get() && !next_address_callback_->completed()) 134 if (next_address_callback_.get() && !next_address_callback_->completed())
127 return PP_ERROR_INPROGRESS; 135 return PP_ERROR_INPROGRESS;
128 136
137 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this);
138 if (!plugin_module)
139 return PP_ERROR_FAILED;
140
129 if (!local_candidates_.empty()) { 141 if (!local_candidates_.empty()) {
130 *address = StringVar::StringToPPVar(instance()->module()->pp_module(), 142 *address = StringVar::StringToPPVar(plugin_module->pp_module(),
131 local_candidates_.front()); 143 local_candidates_.front());
132 local_candidates_.pop_front(); 144 local_candidates_.pop_front();
133 return PP_OK; 145 return PP_OK;
134 } 146 }
135 147
136 next_address_callback_ = new TrackedCompletionCallback( 148 next_address_callback_ = new TrackedCompletionCallback(
137 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 149 plugin_module->GetCallbackTracker(), pp_resource(), callback);
138 return PP_OK_COMPLETIONPENDING; 150 return PP_OK_COMPLETIONPENDING;
139 } 151 }
140 152
141 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) { 153 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) {
142 if (!p2p_transport_.get()) 154 if (!p2p_transport_.get())
143 return PP_ERROR_FAILED; 155 return PP_ERROR_FAILED;
144 156
145 StringVar* address_str = StringVar::FromPPVar(address); 157 StringVar* address_str = StringVar::FromPPVar(address);
146 if (!address_str) 158 if (!address_str)
147 return PP_ERROR_BADARGUMENT; 159 return PP_ERROR_BADARGUMENT;
148 160
149 return p2p_transport_->AddRemoteCandidate(address_str->value()) ? 161 return p2p_transport_->AddRemoteCandidate(address_str->value()) ?
150 PP_OK : PP_ERROR_FAILED; 162 PP_OK : PP_ERROR_FAILED;
151 } 163 }
152 164
153 int32_t PPB_Transport_Impl::Recv(void* data, uint32_t len, 165 int32_t PPB_Transport_Impl::Recv(void* data, uint32_t len,
154 PP_CompletionCallback callback) { 166 PP_CompletionCallback callback) {
155 if (!p2p_transport_.get()) 167 if (!p2p_transport_.get())
156 return PP_ERROR_FAILED; 168 return PP_ERROR_FAILED;
157 169
158 if (recv_callback_.get() && !recv_callback_->completed()) 170 if (recv_callback_.get() && !recv_callback_->completed())
159 return PP_ERROR_INPROGRESS; 171 return PP_ERROR_INPROGRESS;
160 172
161 net::Socket* channel = p2p_transport_->GetChannel(); 173 net::Socket* channel = p2p_transport_->GetChannel();
162 if (!channel) 174 if (!channel)
163 return PP_ERROR_FAILED; 175 return PP_ERROR_FAILED;
164 176
177 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this);
178 if (!plugin_module)
179 return PP_ERROR_FAILED;
180
165 scoped_refptr<net::IOBuffer> buffer = 181 scoped_refptr<net::IOBuffer> buffer =
166 new net::WrappedIOBuffer(static_cast<const char*>(data)); 182 new net::WrappedIOBuffer(static_cast<const char*>(data));
167 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_)); 183 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_));
168 if (result == PP_OK_COMPLETIONPENDING) { 184 if (result == PP_OK_COMPLETIONPENDING) {
169 recv_callback_ = new TrackedCompletionCallback( 185 recv_callback_ = new TrackedCompletionCallback(
170 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 186 plugin_module->GetCallbackTracker(), pp_resource(), callback);
171 } 187 }
172 188
173 return result; 189 return result;
174 } 190 }
175 191
176 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len, 192 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len,
177 PP_CompletionCallback callback) { 193 PP_CompletionCallback callback) {
178 if (!p2p_transport_.get()) 194 if (!p2p_transport_.get())
179 return PP_ERROR_FAILED; 195 return PP_ERROR_FAILED;
180 196
181 if (send_callback_.get() && !send_callback_->completed()) 197 if (send_callback_.get() && !send_callback_->completed())
182 return PP_ERROR_INPROGRESS; 198 return PP_ERROR_INPROGRESS;
183 199
184 net::Socket* channel = p2p_transport_->GetChannel(); 200 net::Socket* channel = p2p_transport_->GetChannel();
185 if (!channel) 201 if (!channel)
186 return PP_ERROR_FAILED; 202 return PP_ERROR_FAILED;
187 203
204 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this);
205 if (!plugin_module)
206 return PP_ERROR_FAILED;
207
188 scoped_refptr<net::IOBuffer> buffer = 208 scoped_refptr<net::IOBuffer> buffer =
189 new net::WrappedIOBuffer(static_cast<const char*>(data)); 209 new net::WrappedIOBuffer(static_cast<const char*>(data));
190 int result = MapNetError(channel->Write(buffer, len, 210 int result = MapNetError(channel->Write(buffer, len,
191 &channel_write_callback_)); 211 &channel_write_callback_));
192 if (result == PP_OK_COMPLETIONPENDING) { 212 if (result == PP_OK_COMPLETIONPENDING) {
193 send_callback_ = new TrackedCompletionCallback( 213 send_callback_ = new TrackedCompletionCallback(
194 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 214 plugin_module->GetCallbackTracker(), pp_resource(), callback);
195 } 215 }
196 216
197 return result; 217 return result;
198 } 218 }
199 219
200 int32_t PPB_Transport_Impl::Close() { 220 int32_t PPB_Transport_Impl::Close() {
201 if (!p2p_transport_.get()) 221 if (!p2p_transport_.get())
202 return PP_ERROR_FAILED; 222 return PP_ERROR_FAILED;
203 223
204 p2p_transport_.reset(); 224 p2p_transport_.reset();
205 instance()->module()->GetCallbackTracker()->AbortAll(); 225
226
227 PluginModule* plugin_module = ResourceHelper::GetPluginModule(this);
228 if (plugin_module)
229 plugin_module->GetCallbackTracker()->AbortAll();
206 return PP_OK; 230 return PP_OK;
207 } 231 }
208 232
209 void PPB_Transport_Impl::OnCandidateReady(const std::string& address) { 233 void PPB_Transport_Impl::OnCandidateReady(const std::string& address) {
210 // Store the candidate first before calling the callback. 234 // Store the candidate first before calling the callback.
211 local_candidates_.push_back(address); 235 local_candidates_.push_back(address);
212 236
213 if (next_address_callback_.get() && !next_address_callback_->completed()) { 237 if (next_address_callback_.get() && !next_address_callback_->completed()) {
214 scoped_refptr<TrackedCompletionCallback> callback; 238 scoped_refptr<TrackedCompletionCallback> callback;
215 callback.swap(next_address_callback_); 239 callback.swap(next_address_callback_);
(...skipping 30 matching lines...) Expand all
246 void PPB_Transport_Impl::OnWritten(int result) { 270 void PPB_Transport_Impl::OnWritten(int result) {
247 DCHECK(send_callback_.get() && !send_callback_->completed()); 271 DCHECK(send_callback_.get() && !send_callback_->completed());
248 272
249 scoped_refptr<TrackedCompletionCallback> callback; 273 scoped_refptr<TrackedCompletionCallback> callback;
250 callback.swap(send_callback_); 274 callback.swap(send_callback_);
251 callback->Run(MapNetError(result)); 275 callback->Run(MapNetError(result));
252 } 276 }
253 277
254 } // namespace ppapi 278 } // namespace ppapi
255 } // namespace webkit 279 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_transport_impl.h ('k') | webkit/plugins/ppapi/ppb_url_loader_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698