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

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

Issue 7629017: Add a unified resource tracker shared between the proxy and the impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments 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"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 return PP_ERROR_INPROGRESS; 106 return PP_ERROR_INPROGRESS;
107 107
108 P2PTransport::Protocol protocol = use_tcp_ ? 108 P2PTransport::Protocol protocol = use_tcp_ ?
109 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP; 109 P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP;
110 110
111 if (!p2p_transport_->Init(name_, protocol, "", this)) 111 if (!p2p_transport_->Init(name_, protocol, "", this))
112 return PP_ERROR_FAILED; 112 return PP_ERROR_FAILED;
113 113
114 started_ = true; 114 started_ = true;
115 115
116 PP_Resource resource_id = GetReferenceNoAddRef();
117 CHECK(resource_id);
118 connect_callback_ = new TrackedCompletionCallback( 116 connect_callback_ = new TrackedCompletionCallback(
119 instance()->module()->GetCallbackTracker(), resource_id, callback); 117 instance()->module()->GetCallbackTracker(), pp_resource(), callback);
120 return PP_OK_COMPLETIONPENDING; 118 return PP_OK_COMPLETIONPENDING;
121 } 119 }
122 120
123 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address, 121 int32_t PPB_Transport_Impl::GetNextAddress(PP_Var* address,
124 PP_CompletionCallback callback) { 122 PP_CompletionCallback callback) {
125 if (!p2p_transport_.get()) 123 if (!p2p_transport_.get())
126 return PP_ERROR_FAILED; 124 return PP_ERROR_FAILED;
127 125
128 if (next_address_callback_.get() && !next_address_callback_->completed()) 126 if (next_address_callback_.get() && !next_address_callback_->completed())
129 return PP_ERROR_INPROGRESS; 127 return PP_ERROR_INPROGRESS;
130 128
131 if (!local_candidates_.empty()) { 129 if (!local_candidates_.empty()) {
132 *address = StringVar::StringToPPVar(instance()->module()->pp_module(), 130 *address = StringVar::StringToPPVar(instance()->module()->pp_module(),
133 local_candidates_.front()); 131 local_candidates_.front());
134 local_candidates_.pop_front(); 132 local_candidates_.pop_front();
135 return PP_OK; 133 return PP_OK;
136 } 134 }
137 135
138 PP_Resource resource_id = GetReferenceNoAddRef();
139 CHECK(resource_id);
140 next_address_callback_ = new TrackedCompletionCallback( 136 next_address_callback_ = new TrackedCompletionCallback(
141 instance()->module()->GetCallbackTracker(), resource_id, callback); 137 instance()->module()->GetCallbackTracker(), pp_resource(), callback);
142 return PP_OK_COMPLETIONPENDING; 138 return PP_OK_COMPLETIONPENDING;
143 } 139 }
144 140
145 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) { 141 int32_t PPB_Transport_Impl::ReceiveRemoteAddress(PP_Var address) {
146 if (!p2p_transport_.get()) 142 if (!p2p_transport_.get())
147 return PP_ERROR_FAILED; 143 return PP_ERROR_FAILED;
148 144
149 scoped_refptr<StringVar> address_str = StringVar::FromPPVar(address); 145 scoped_refptr<StringVar> address_str = StringVar::FromPPVar(address);
150 if (!address_str) 146 if (!address_str)
151 return PP_ERROR_BADARGUMENT; 147 return PP_ERROR_BADARGUMENT;
(...skipping 11 matching lines...) Expand all
163 return PP_ERROR_INPROGRESS; 159 return PP_ERROR_INPROGRESS;
164 160
165 net::Socket* channel = p2p_transport_->GetChannel(); 161 net::Socket* channel = p2p_transport_->GetChannel();
166 if (!channel) 162 if (!channel)
167 return PP_ERROR_FAILED; 163 return PP_ERROR_FAILED;
168 164
169 scoped_refptr<net::IOBuffer> buffer = 165 scoped_refptr<net::IOBuffer> buffer =
170 new net::WrappedIOBuffer(static_cast<const char*>(data)); 166 new net::WrappedIOBuffer(static_cast<const char*>(data));
171 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_)); 167 int result = MapNetError(channel->Read(buffer, len, &channel_read_callback_));
172 if (result == PP_OK_COMPLETIONPENDING) { 168 if (result == PP_OK_COMPLETIONPENDING) {
173 PP_Resource resource_id = GetReferenceNoAddRef();
174 CHECK(resource_id);
175 recv_callback_ = new TrackedCompletionCallback( 169 recv_callback_ = new TrackedCompletionCallback(
176 instance()->module()->GetCallbackTracker(), resource_id, callback); 170 instance()->module()->GetCallbackTracker(), pp_resource(), callback);
177 } 171 }
178 172
179 return result; 173 return result;
180 } 174 }
181 175
182 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len, 176 int32_t PPB_Transport_Impl::Send(const void* data, uint32_t len,
183 PP_CompletionCallback callback) { 177 PP_CompletionCallback callback) {
184 if (!p2p_transport_.get()) 178 if (!p2p_transport_.get())
185 return PP_ERROR_FAILED; 179 return PP_ERROR_FAILED;
186 180
187 if (send_callback_.get() && !send_callback_->completed()) 181 if (send_callback_.get() && !send_callback_->completed())
188 return PP_ERROR_INPROGRESS; 182 return PP_ERROR_INPROGRESS;
189 183
190 net::Socket* channel = p2p_transport_->GetChannel(); 184 net::Socket* channel = p2p_transport_->GetChannel();
191 if (!channel) 185 if (!channel)
192 return PP_ERROR_FAILED; 186 return PP_ERROR_FAILED;
193 187
194 scoped_refptr<net::IOBuffer> buffer = 188 scoped_refptr<net::IOBuffer> buffer =
195 new net::WrappedIOBuffer(static_cast<const char*>(data)); 189 new net::WrappedIOBuffer(static_cast<const char*>(data));
196 int result = MapNetError(channel->Write(buffer, len, 190 int result = MapNetError(channel->Write(buffer, len,
197 &channel_write_callback_)); 191 &channel_write_callback_));
198 if (result == PP_OK_COMPLETIONPENDING) { 192 if (result == PP_OK_COMPLETIONPENDING) {
199 PP_Resource resource_id = GetReferenceNoAddRef();
200 CHECK(resource_id);
201 send_callback_ = new TrackedCompletionCallback( 193 send_callback_ = new TrackedCompletionCallback(
202 instance()->module()->GetCallbackTracker(), resource_id, callback); 194 instance()->module()->GetCallbackTracker(), pp_resource(), callback);
203 } 195 }
204 196
205 return result; 197 return result;
206 } 198 }
207 199
208 int32_t PPB_Transport_Impl::Close() { 200 int32_t PPB_Transport_Impl::Close() {
209 if (!p2p_transport_.get()) 201 if (!p2p_transport_.get())
210 return PP_ERROR_FAILED; 202 return PP_ERROR_FAILED;
211 203
212 p2p_transport_.reset(); 204 p2p_transport_.reset();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 void PPB_Transport_Impl::OnWritten(int result) { 246 void PPB_Transport_Impl::OnWritten(int result) {
255 DCHECK(send_callback_.get() && !send_callback_->completed()); 247 DCHECK(send_callback_.get() && !send_callback_->completed());
256 248
257 scoped_refptr<TrackedCompletionCallback> callback; 249 scoped_refptr<TrackedCompletionCallback> callback;
258 callback.swap(send_callback_); 250 callback.swap(send_callback_);
259 callback->Run(MapNetError(result)); 251 callback->Run(MapNetError(result));
260 } 252 }
261 253
262 } // namespace ppapi 254 } // namespace ppapi
263 } // namespace webkit 255 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698