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

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

Issue 7206016: Convert most remaining resources to use the API/thunk system. The significant (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 "webkit/plugins/ppapi/common.h" 15 #include "webkit/plugins/ppapi/common.h"
16 #include "webkit/plugins/ppapi/plugin_module.h" 16 #include "webkit/plugins/ppapi/plugin_module.h"
17 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 17 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
18 #include "webkit/plugins/ppapi/var.h" 18 #include "webkit/plugins/ppapi/var.h"
19 19
20 using ppapi::thunk::PPB_Transport_API;
20 using webkit_glue::P2PTransport; 21 using webkit_glue::P2PTransport;
21 22
22 namespace webkit { 23 namespace webkit {
23 namespace ppapi { 24 namespace ppapi {
24 25
25 namespace { 26 namespace {
26 27
27 const char kUdpProtocolName[] = "udp"; 28 const char kUdpProtocolName[] = "udp";
28 const char kTcpProtocolName[] = "tcp"; 29 const char kTcpProtocolName[] = "tcp";
29 30
30 PP_Resource CreateTransport(PP_Instance instance_id, const char* name,
31 const char* proto) {
32 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
33 if (!instance)
34 return 0;
35
36 scoped_refptr<PPB_Transport_Impl> t(new PPB_Transport_Impl(instance));
37 if (!t->Init(name, proto))
38 return 0;
39
40 return t->GetReference();
41 }
42
43 PP_Bool IsTransport(PP_Resource resource) {
44 return BoolToPPBool(Resource::GetAs<PPB_Transport_Impl>(resource) != NULL);
45 }
46
47 PP_Bool IsWritable(PP_Resource resource) {
48 scoped_refptr<PPB_Transport_Impl> t(
49 Resource::GetAs<PPB_Transport_Impl>(resource));
50 return BoolToPPBool((t.get()) ? t->IsWritable() : false);
51 }
52
53 int32_t Connect(PP_Resource resource, PP_CompletionCallback callback) {
54 scoped_refptr<PPB_Transport_Impl> t(
55 Resource::GetAs<PPB_Transport_Impl>(resource));
56 return (t.get()) ? t->Connect(callback) : PP_ERROR_BADRESOURCE;
57 }
58
59 int32_t GetNextAddress(PP_Resource resource, PP_Var* address,
60 PP_CompletionCallback callback) {
61 scoped_refptr<PPB_Transport_Impl> t(
62 Resource::GetAs<PPB_Transport_Impl>(resource));
63 return (t.get())? t->GetNextAddress(address, callback) : PP_ERROR_BADRESOURCE;
64 }
65
66 int32_t ReceiveRemoteAddress(PP_Resource resource, PP_Var address) {
67 scoped_refptr<PPB_Transport_Impl> t(
68 Resource::GetAs<PPB_Transport_Impl>(resource));
69 return (t.get())? t->ReceiveRemoteAddress(address) : PP_ERROR_BADRESOURCE;
70 }
71
72 int32_t Recv(PP_Resource resource, void* data, uint32_t len,
73 PP_CompletionCallback callback) {
74 scoped_refptr<PPB_Transport_Impl> t(
75 Resource::GetAs<PPB_Transport_Impl>(resource));
76 return (t.get())? t->Recv(data, len, callback) : PP_ERROR_BADRESOURCE;
77 }
78
79 int32_t Send(PP_Resource resource, const void* data, uint32_t len,
80 PP_CompletionCallback callback) {
81 scoped_refptr<PPB_Transport_Impl> t(
82 Resource::GetAs<PPB_Transport_Impl>(resource));
83 return (t.get())? t->Send(data, len, callback) : PP_ERROR_BADRESOURCE;
84 }
85
86 // Disconnects from the remote peer.
87 int32_t Close(PP_Resource resource) {
88 scoped_refptr<PPB_Transport_Impl> t(
89 Resource::GetAs<PPB_Transport_Impl>(resource));
90 return (t.get())? t->Close() : PP_ERROR_BADRESOURCE;
91 }
92
93 const PPB_Transport_Dev ppb_transport = {
94 &CreateTransport,
95 &IsTransport,
96 &IsWritable,
97 &Connect,
98 &GetNextAddress,
99 &ReceiveRemoteAddress,
100 &Recv,
101 &Send,
102 &Close,
103 };
104
105 int MapNetError(int result) { 31 int MapNetError(int result) {
106 if (result > 0) 32 if (result > 0)
107 return result; 33 return result;
108 34
109 switch (result) { 35 switch (result) {
110 case net::OK: 36 case net::OK:
111 return PP_OK; 37 return PP_OK;
112 case net::ERR_IO_PENDING: 38 case net::ERR_IO_PENDING:
113 return PP_OK_COMPLETIONPENDING; 39 return PP_OK_COMPLETIONPENDING;
114 case net::ERR_INVALID_ARGUMENT: 40 case net::ERR_INVALID_ARGUMENT:
(...skipping 11 matching lines...) Expand all
126 writable_(false), 52 writable_(false),
127 ALLOW_THIS_IN_INITIALIZER_LIST( 53 ALLOW_THIS_IN_INITIALIZER_LIST(
128 channel_write_callback_(this, &PPB_Transport_Impl::OnWritten)), 54 channel_write_callback_(this, &PPB_Transport_Impl::OnWritten)),
129 ALLOW_THIS_IN_INITIALIZER_LIST( 55 ALLOW_THIS_IN_INITIALIZER_LIST(
130 channel_read_callback_(this, &PPB_Transport_Impl::OnRead)) { 56 channel_read_callback_(this, &PPB_Transport_Impl::OnRead)) {
131 } 57 }
132 58
133 PPB_Transport_Impl::~PPB_Transport_Impl() { 59 PPB_Transport_Impl::~PPB_Transport_Impl() {
134 } 60 }
135 61
136 const PPB_Transport_Dev* PPB_Transport_Impl::GetInterface() { 62 // static
137 return &ppb_transport; 63 PP_Resource PPB_Transport_Impl::Create(PP_Instance pp_instance,
64 const char* name,
65 const char* proto) {
66 PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
67 if (!instance)
68 return 0;
69
70 scoped_refptr<PPB_Transport_Impl> t(new PPB_Transport_Impl(instance));
71 if (!t->Init(name, proto))
72 return 0;
73 return t->GetReference();
138 } 74 }
139 75
140 PPB_Transport_Impl* PPB_Transport_Impl::AsPPB_Transport_Impl() { 76 PPB_Transport_API* PPB_Transport_Impl::AsPPB_Transport_API() {
141 return this; 77 return this;
142 } 78 }
143 79
144 bool PPB_Transport_Impl::Init(const char* name, const char* proto) { 80 bool PPB_Transport_Impl::Init(const char* name, const char* proto) {
145 name_ = name; 81 name_ = name;
146 82
147 if (base::strcasecmp(proto, kUdpProtocolName) == 0) { 83 if (base::strcasecmp(proto, kUdpProtocolName) == 0) {
148 use_tcp_ = false; 84 use_tcp_ = false;
149 } else if (base::strcasecmp(proto, kTcpProtocolName) == 0) { 85 } else if (base::strcasecmp(proto, kTcpProtocolName) == 0) {
150 use_tcp_ = true; 86 use_tcp_ = true;
151 } else { 87 } else {
152 LOG(WARNING) << "Unknown protocol: " << proto; 88 LOG(WARNING) << "Unknown protocol: " << proto;
153 return false; 89 return false;
154 } 90 }
155 91
156 p2p_transport_.reset(instance()->delegate()->CreateP2PTransport()); 92 p2p_transport_.reset(instance()->delegate()->CreateP2PTransport());
157 return p2p_transport_.get() != NULL; 93 return p2p_transport_.get() != NULL;
158 } 94 }
159 95
160 bool PPB_Transport_Impl::IsWritable() const { 96 PP_Bool PPB_Transport_Impl::IsWritable() {
161 if (!p2p_transport_.get()) 97 if (!p2p_transport_.get())
162 return false; 98 return PP_FALSE;
163 99
164 return writable_; 100 return PP_FromBool(writable_);
165 } 101 }
166 102
167 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) { 103 int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) {
168 if (!p2p_transport_.get()) 104 if (!p2p_transport_.get())
169 return PP_ERROR_FAILED; 105 return PP_ERROR_FAILED;
170 106
171 // Connect() has already been called. 107 // Connect() has already been called.
172 if (started_) 108 if (started_)
173 return PP_ERROR_INPROGRESS; 109 return PP_ERROR_INPROGRESS;
174 110
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 void PPB_Transport_Impl::OnWritten(int result) { 257 void PPB_Transport_Impl::OnWritten(int result) {
322 DCHECK(send_callback_.get() && !send_callback_->completed()); 258 DCHECK(send_callback_.get() && !send_callback_->completed());
323 259
324 scoped_refptr<TrackedCompletionCallback> callback; 260 scoped_refptr<TrackedCompletionCallback> callback;
325 callback.swap(send_callback_); 261 callback.swap(send_callback_);
326 callback->Run(MapNetError(result)); 262 callback->Run(MapNetError(result));
327 } 263 }
328 264
329 } // namespace ppapi 265 } // namespace ppapi
330 } // namespace webkit 266 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_transport_impl.h ('k') | webkit/plugins/ppapi/ppb_video_decoder_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698