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

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: Fix self-assignment 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
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 p2p_transport_.reset(
91 ResourceHelper::GetPluginDelegate(this)->CreateP2PTransport());
90 return p2p_transport_.get() != NULL; 92 return p2p_transport_.get() != NULL;
91 } 93 }
92 94
93 PP_Bool PPB_Transport_Impl::IsWritable() { 95 PP_Bool PPB_Transport_Impl::IsWritable() {
94 if (!p2p_transport_.get()) 96 if (!p2p_transport_.get())
95 return PP_FALSE; 97 return PP_FALSE;
96 98
97 return PP_FromBool(writable_); 99 return PP_FromBool(writable_);
98 } 100 }
99 101
100 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) { 102 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) {
101 if (!p2p_transport_.get()) 103 if (!p2p_transport_.get())
102 return PP_ERROR_FAILED; 104 return PP_ERROR_FAILED;
103 105
104 // Connect() has already been called. 106 // Connect() has already been called.
105 if (started_) 107 if (started_)
106 return PP_ERROR_INPROGRESS; 108 return PP_ERROR_INPROGRESS;
107 109
108 P2PTransport::Protocol protocol = use_tcp_ ? 110 P2PTransport::Protocol protocol = use_tcp_ ?
109 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP; 111 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP;
110 112
111 if (!p2p_transport_->Init(name_, protocol, "", this)) 113 if (!p2p_transport_->Init(name_, protocol, "", this))
112 return PP_ERROR_FAILED; 114 return PP_ERROR_FAILED;
113 115
114 started_ = true; 116 started_ = true;
115 117
118 PluginModule* module = ResourceHelper::GetPluginModule(this);
116 connect_callback_ = new TrackedCompletionCallback( 119 connect_callback_ = new TrackedCompletionCallback(
117 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 120 module->GetCallbackTracker(), pp_resource(), callback);
118 return PP_OK_COMPLETIONPENDING; 121 return PP_OK_COMPLETIONPENDING;
119 } 122 }
120 123
121 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address, 124 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address,
122 PP_CompletionCallback callback) { 125 PP_CompletionCallback callback) {
123 if (!p2p_transport_.get()) 126 if (!p2p_transport_.get())
124 return PP_ERROR_FAILED; 127 return PP_ERROR_FAILED;
125 128
126 if (next_address_callback_.get() && !next_address_callback_->completed()) 129 if (next_address_callback_.get() && !next_address_callback_->completed())
127 return PP_ERROR_INPROGRESS; 130 return PP_ERROR_INPROGRESS;
128 131
132 PluginModule* module = ResourceHelper::GetPluginModule(this);
129 if (!local_candidates_.empty()) { 133 if (!local_candidates_.empty()) {
130 *address = StringVar::StringToPPVar(instance()->module()->pp_module(), 134 *address = StringVar::StringToPPVar(module->pp_module(),
131 local_candidates_.front()); 135 local_candidates_.front());
132 local_candidates_.pop_front(); 136 local_candidates_.pop_front();
133 return PP_OK; 137 return PP_OK;
134 } 138 }
135 139
136 next_address_callback_ = new TrackedCompletionCallback( 140 next_address_callback_ = new TrackedCompletionCallback(
137 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 141 module->GetCallbackTracker(), pp_resource(), callback);
138 return PP_OK_COMPLETIONPENDING; 142 return PP_OK_COMPLETIONPENDING;
139 } 143 }
140 144
141 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) { 145 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) {
142 if (!p2p_transport_.get()) 146 if (!p2p_transport_.get())
143 return PP_ERROR_FAILED; 147 return PP_ERROR_FAILED;
144 148
145 StringVar* address_str = StringVar::FromPPVar(address); 149 StringVar* address_str = StringVar::FromPPVar(address);
146 if (!address_str) 150 if (!address_str)
147 return PP_ERROR_BADARGUMENT; 151 return PP_ERROR_BADARGUMENT;
148 152
149 return p2p_transport_->AddRemoteCandidate(address_str->value()) ? 153 return p2p_transport_->AddRemoteCandidate(address_str->value()) ?
150 PP_OK : PP_ERROR_FAILED; 154 PP_OK : PP_ERROR_FAILED;
151 } 155 }
152 156
153 int32_t PPB_Transport_Impl::Recv(void* data, uint32_t len, 157 int32_t PPB_Transport_Impl::Recv(void* data, uint32_t len,
154 PP_CompletionCallback callback) { 158 PP_CompletionCallback callback) {
155 if (!p2p_transport_.get()) 159 if (!p2p_transport_.get())
156 return PP_ERROR_FAILED; 160 return PP_ERROR_FAILED;
157 161
158 if (recv_callback_.get() && !recv_callback_->completed()) 162 if (recv_callback_.get() && !recv_callback_->completed())
159 return PP_ERROR_INPROGRESS; 163 return PP_ERROR_INPROGRESS;
160 164
161 net::Socket* channel = p2p_transport_->GetChannel(); 165 net::Socket* channel = p2p_transport_->GetChannel();
162 if (!channel) 166 if (!channel)
163 return PP_ERROR_FAILED; 167 return PP_ERROR_FAILED;
164 168
169 PluginModule* module = ResourceHelper::GetPluginModule(this);
170
165 scoped_refptr<net::IOBuffer> buffer = 171 scoped_refptr<net::IOBuffer> buffer =
166 new net::WrappedIOBuffer(static_cast<const char*>(data)); 172 new net::WrappedIOBuffer(static_cast<const char*>(data));
167 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_)); 173 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_));
168 if (result == PP_OK_COMPLETIONPENDING) { 174 if (result == PP_OK_COMPLETIONPENDING) {
169 recv_callback_ = new TrackedCompletionCallback( 175 recv_callback_ = new TrackedCompletionCallback(
170 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 176 module->GetCallbackTracker(), pp_resource(), callback);
171 } 177 }
172 178
173 return result; 179 return result;
174 } 180 }
175 181
176 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len, 182 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len,
177 PP_CompletionCallback callback) { 183 PP_CompletionCallback callback) {
178 if (!p2p_transport_.get()) 184 if (!p2p_transport_.get())
179 return PP_ERROR_FAILED; 185 return PP_ERROR_FAILED;
180 186
181 if (send_callback_.get() && !send_callback_->completed()) 187 if (send_callback_.get() && !send_callback_->completed())
182 return PP_ERROR_INPROGRESS; 188 return PP_ERROR_INPROGRESS;
183 189
184 net::Socket* channel = p2p_transport_->GetChannel(); 190 net::Socket* channel = p2p_transport_->GetChannel();
185 if (!channel) 191 if (!channel)
186 return PP_ERROR_FAILED; 192 return PP_ERROR_FAILED;
187 193
194 PluginModule* module = ResourceHelper::GetPluginModule(this);
195
188 scoped_refptr<net::IOBuffer> buffer = 196 scoped_refptr<net::IOBuffer> buffer =
189 new net::WrappedIOBuffer(static_cast<const char*>(data)); 197 new net::WrappedIOBuffer(static_cast<const char*>(data));
190 int result = MapNetError(channel->Write(buffer, len, 198 int result = MapNetError(channel->Write(buffer, len,
191 &channel_write_callback_)); 199 &channel_write_callback_));
192 if (result == PP_OK_COMPLETIONPENDING) { 200 if (result == PP_OK_COMPLETIONPENDING) {
193 send_callback_ = new TrackedCompletionCallback( 201 send_callback_ = new TrackedCompletionCallback(
194 instance()->module()->GetCallbackTracker(), pp_resource(), callback); 202 module->GetCallbackTracker(), pp_resource(), callback);
195 } 203 }
196 204
197 return result; 205 return result;
198 } 206 }
199 207
200 int32_t PPB_Transport_Impl::Close() { 208 int32_t PPB_Transport_Impl::Close() {
201 if (!p2p_transport_.get()) 209 if (!p2p_transport_.get())
202 return PP_ERROR_FAILED; 210 return PP_ERROR_FAILED;
203 211
204 p2p_transport_.reset(); 212 p2p_transport_.reset();
205 instance()->module()->GetCallbackTracker()->AbortAll(); 213 ResourceHelper::GetPluginModule(this)->GetCallbackTracker()->AbortAll();
206 return PP_OK; 214 return PP_OK;
207 } 215 }
208 216
209 void PPB_Transport_Impl::OnCandidateReady(const std::string& address) { 217 void PPB_Transport_Impl::OnCandidateReady(const std::string& address) {
210 // Store the candidate first before calling the callback. 218 // Store the candidate first before calling the callback.
211 local_candidates_.push_back(address); 219 local_candidates_.push_back(address);
212 220
213 if (next_address_callback_.get() && !next_address_callback_->completed()) { 221 if (next_address_callback_.get() && !next_address_callback_->completed()) {
214 scoped_refptr<TrackedCompletionCallback> callback; 222 scoped_refptr<TrackedCompletionCallback> callback;
215 callback.swap(next_address_callback_); 223 callback.swap(next_address_callback_);
(...skipping 30 matching lines...) Expand all
246 void PPB_Transport_Impl::OnWritten(int result) { 254 void PPB_Transport_Impl::OnWritten(int result) {
247 DCHECK(send_callback_.get() && !send_callback_->completed()); 255 DCHECK(send_callback_.get() && !send_callback_->completed());
248 256
249 scoped_refptr<TrackedCompletionCallback> callback; 257 scoped_refptr<TrackedCompletionCallback> callback;
250 callback.swap(send_callback_); 258 callback.swap(send_callback_);
251 callback->Run(MapNetError(result)); 259 callback->Run(MapNetError(result));
252 } 260 }
253 261
254 } // namespace ppapi 262 } // namespace ppapi
255 } // namespace webkit 263 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698