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

Side by Side Diff: ppapi/shared_impl/private/ppb_tcp_server_socket_shared.cc

Issue 9283022: Exposed Listen and Accept methods to plugin. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Changed type of tcp_socket_buffer_ field of PPB_TCPServerSocket_Private class. Created 8 years, 10 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
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 "ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h"
6
7 #include <cstddef>
8
9 #include "base/logging.h"
10 #include "base/message_loop.h"
11 #include "ppapi/c/pp_errors.h"
12
13 namespace ppapi {
14
15 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(PP_Instance instance)
16 : Resource(instance), instance_(instance), state_(NOT_INITIALIZED) {
brettw 2012/02/09 00:13:48 Can you initialize tcp_socket_buffer_ to null in t
ygorshenin1 2012/02/09 15:00:10 Done.
17 }
18
19 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(
20 const HostResource& resource)
21 : Resource(resource), instance_(0), state_(NOT_INITIALIZED) {
22 }
23
24 PPB_TCPServerSocket_Shared::~PPB_TCPServerSocket_Shared() {
25 }
26
27 thunk::PPB_TCPServerSocket_Private_API*
28 PPB_TCPServerSocket_Shared::AsPPB_TCPServerSocket_Private_API() {
29 return this;
30 }
31
32 int32_t PPB_TCPServerSocket_Shared::Initialize(PP_CompletionCallback callback) {
33 if (state_ != NOT_INITIALIZED)
34 return PP_ERROR_FAILED;
35 if (!callback.func)
36 return PP_ERROR_BLOCKS_MAIN_THREAD;
37 if (TrackedCallback::IsPending(initialize_callback_))
38 return PP_ERROR_INPROGRESS;
39
40 initialize_callback_ = new TrackedCallback(this, callback);
41 // Send the request, the browser will call us back via InitializeACK
42 SendInitialize();
43 return PP_OK_COMPLETIONPENDING;
44 }
45
46 int32_t PPB_TCPServerSocket_Shared::Listen(const PP_NetAddress_Private* addr,
47 int32_t backlog,
48 PP_CompletionCallback callback) {
49 if (!addr)
50 return PP_ERROR_BADARGUMENT;
51 if (!callback.func)
52 return PP_ERROR_BLOCKS_MAIN_THREAD;
53 if (state_ != BEFORE_LISTENING)
54 return PP_ERROR_FAILED;
55 if (TrackedCallback::IsPending(listen_callback_))
56 return PP_ERROR_INPROGRESS; // Can only have one pending request.
57
58 listen_callback_ = new TrackedCallback(this, callback);
59 // Send the request, the browser will call us back via ListenACK
60 SendListen(*addr, backlog);
61 return PP_OK_COMPLETIONPENDING;
62 }
63
64 int32_t PPB_TCPServerSocket_Shared::Accept(PP_Resource* tcp_socket,
65 PP_CompletionCallback callback) {
66 if (!tcp_socket)
67 return PP_ERROR_BADARGUMENT;
68 if (!callback.func)
69 return PP_ERROR_BLOCKS_MAIN_THREAD;
70
71 if (state_ != LISTENING)
72 return PP_ERROR_FAILED;
73 if (TrackedCallback::IsPending(accept_callback_))
74 return PP_ERROR_INPROGRESS;
75
76 tcp_socket_buffer_ = tcp_socket;
77 accept_callback_ = new TrackedCallback(this, callback);
78
79 SendAccept();
80 return PP_OK_COMPLETIONPENDING;
81 }
82
83 void PPB_TCPServerSocket_Shared::StopListening() {
84 if (state_ == CLOSED)
85 return;
86
87 state_ = CLOSED;
88
89 SendStopListening();
90 socket_id_ = 0;
91
92 PostAbortAndClearIfNecessary(&listen_callback_);
93 PostAbortAndClearIfNecessary(&accept_callback_);
yzshen1 2012/02/09 02:31:50 Do you need to post abort for initialize_callback_
ygorshenin1 2012/02/09 15:00:10 Done.
94 tcp_socket_buffer_ = NULL;
95 }
96
97 void PPB_TCPServerSocket_Shared::OnInitializeCompleted(uint32 socket_id) {
98 if (state_ != NOT_INITIALIZED ||
99 !TrackedCallback::IsPending(initialize_callback_)) {
100 NOTREACHED();
101 return;
102 }
103
104 InternalInitialize(socket_id);
105 TrackedCallback::ClearAndRun(&initialize_callback_,
106 socket_id != 0 ? PP_OK : PP_ERROR_FAILED);
107 }
108
109 void PPB_TCPServerSocket_Shared::OnListenCompleted(bool succeeded) {
110 if (state_ != BEFORE_LISTENING ||
111 !TrackedCallback::IsPending(listen_callback_)) {
112 NOTREACHED();
113 return;
114 }
115
116 if (succeeded)
117 state_ = LISTENING;
118
119 TrackedCallback::ClearAndRun(&listen_callback_,
120 succeeded ? PP_OK : PP_ERROR_FAILED);
121 }
122
123 void PPB_TCPServerSocket_Shared::InternalInitialize(uint32 socket_id) {
124 DCHECK(socket_id != 0);
125
126 socket_id_ = socket_id;
127 state_ = BEFORE_LISTENING;
128 tcp_socket_buffer_ = NULL;
129 }
130
131 void PPB_TCPServerSocket_Shared::PostAbortAndClearIfNecessary(
132 scoped_refptr<TrackedCallback>* callback) {
133 if (callback->get())
134 (*callback)->PostAbort();
135 }
136
137 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698