• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_API_SOCKETS_TCP_SOCKETS_TCP_API_H_
6 #define EXTENSIONS_BROWSER_API_SOCKETS_TCP_SOCKETS_TCP_API_H_
7 
8 #include "extensions/browser/api/socket/socket_api.h"
9 #include "extensions/common/api/sockets_tcp.h"
10 
11 namespace extensions {
12 class ResumableTCPSocket;
13 }
14 
15 namespace extensions {
16 namespace core_api {
17 
18 class TCPSocketEventDispatcher;
19 
20 class TCPSocketAsyncApiFunction : public SocketAsyncApiFunction {
21  protected:
22   virtual ~TCPSocketAsyncApiFunction();
23 
24   virtual scoped_ptr<SocketResourceManagerInterface>
25       CreateSocketResourceManager() OVERRIDE;
26 
27   ResumableTCPSocket* GetTcpSocket(int socket_id);
28 };
29 
30 class TCPSocketExtensionWithDnsLookupFunction
31     : public SocketExtensionWithDnsLookupFunction {
32  protected:
33   virtual ~TCPSocketExtensionWithDnsLookupFunction();
34 
35   virtual scoped_ptr<SocketResourceManagerInterface>
36       CreateSocketResourceManager() OVERRIDE;
37 
38   ResumableTCPSocket* GetTcpSocket(int socket_id);
39 };
40 
41 class SocketsTcpCreateFunction : public TCPSocketAsyncApiFunction {
42  public:
43   DECLARE_EXTENSION_FUNCTION("sockets.tcp.create", SOCKETS_TCP_CREATE)
44 
45   SocketsTcpCreateFunction();
46 
47  protected:
48   virtual ~SocketsTcpCreateFunction();
49 
50   // AsyncApiFunction:
51   virtual bool Prepare() OVERRIDE;
52   virtual void Work() OVERRIDE;
53 
54  private:
55   FRIEND_TEST_ALL_PREFIXES(SocketsTcpUnitTest, Create);
56   scoped_ptr<sockets_tcp::Create::Params> params_;
57 };
58 
59 class SocketsTcpUpdateFunction : public TCPSocketAsyncApiFunction {
60  public:
61   DECLARE_EXTENSION_FUNCTION("sockets.tcp.update", SOCKETS_TCP_UPDATE)
62 
63   SocketsTcpUpdateFunction();
64 
65  protected:
66   virtual ~SocketsTcpUpdateFunction();
67 
68   // AsyncApiFunction:
69   virtual bool Prepare() OVERRIDE;
70   virtual void Work() OVERRIDE;
71 
72  private:
73   scoped_ptr<sockets_tcp::Update::Params> params_;
74 };
75 
76 class SocketsTcpSetPausedFunction : public TCPSocketAsyncApiFunction {
77  public:
78   DECLARE_EXTENSION_FUNCTION("sockets.tcp.setPaused", SOCKETS_TCP_SETPAUSED)
79 
80   SocketsTcpSetPausedFunction();
81 
82  protected:
83   virtual ~SocketsTcpSetPausedFunction();
84 
85   // AsyncApiFunction
86   virtual bool Prepare() OVERRIDE;
87   virtual void Work() OVERRIDE;
88 
89  private:
90   scoped_ptr<sockets_tcp::SetPaused::Params> params_;
91   TCPSocketEventDispatcher* socket_event_dispatcher_;
92 };
93 
94 class SocketsTcpSetKeepAliveFunction : public TCPSocketAsyncApiFunction {
95  public:
96   DECLARE_EXTENSION_FUNCTION("sockets.tcp.setKeepAlive",
97                              SOCKETS_TCP_SETKEEPALIVE)
98 
99   SocketsTcpSetKeepAliveFunction();
100 
101  protected:
102   virtual ~SocketsTcpSetKeepAliveFunction();
103 
104   // AsyncApiFunction
105   virtual bool Prepare() OVERRIDE;
106   virtual void Work() OVERRIDE;
107 
108  private:
109   scoped_ptr<sockets_tcp::SetKeepAlive::Params> params_;
110 };
111 
112 class SocketsTcpSetNoDelayFunction : public TCPSocketAsyncApiFunction {
113  public:
114   DECLARE_EXTENSION_FUNCTION("sockets.tcp.setNoDelay", SOCKETS_TCP_SETNODELAY)
115 
116   SocketsTcpSetNoDelayFunction();
117 
118  protected:
119   virtual ~SocketsTcpSetNoDelayFunction();
120 
121   // AsyncApiFunction
122   virtual bool Prepare() OVERRIDE;
123   virtual void Work() OVERRIDE;
124 
125  private:
126   scoped_ptr<sockets_tcp::SetNoDelay::Params> params_;
127 };
128 
129 class SocketsTcpConnectFunction
130     : public TCPSocketExtensionWithDnsLookupFunction {
131  public:
132   DECLARE_EXTENSION_FUNCTION("sockets.tcp.connect", SOCKETS_TCP_CONNECT)
133 
134   SocketsTcpConnectFunction();
135 
136  protected:
137   virtual ~SocketsTcpConnectFunction();
138 
139   // AsyncApiFunction:
140   virtual bool Prepare() OVERRIDE;
141   virtual void AsyncWorkStart() OVERRIDE;
142 
143   // SocketExtensionWithDnsLookupFunction:
144   virtual void AfterDnsLookup(int lookup_result) OVERRIDE;
145 
146  private:
147   void StartConnect();
148   void OnCompleted(int net_result);
149 
150   scoped_ptr<sockets_tcp::Connect::Params> params_;
151   TCPSocketEventDispatcher* socket_event_dispatcher_;
152 };
153 
154 class SocketsTcpDisconnectFunction : public TCPSocketAsyncApiFunction {
155  public:
156   DECLARE_EXTENSION_FUNCTION("sockets.tcp.disconnect", SOCKETS_TCP_DISCONNECT)
157 
158   SocketsTcpDisconnectFunction();
159 
160  protected:
161   virtual ~SocketsTcpDisconnectFunction();
162 
163   // AsyncApiFunction:
164   virtual bool Prepare() OVERRIDE;
165   virtual void Work() OVERRIDE;
166 
167  private:
168   scoped_ptr<sockets_tcp::Disconnect::Params> params_;
169 };
170 
171 class SocketsTcpSendFunction : public TCPSocketAsyncApiFunction {
172  public:
173   DECLARE_EXTENSION_FUNCTION("sockets.tcp.send", SOCKETS_TCP_SEND)
174 
175   SocketsTcpSendFunction();
176 
177  protected:
178   virtual ~SocketsTcpSendFunction();
179 
180   // AsyncApiFunction:
181   virtual bool Prepare() OVERRIDE;
182   virtual void AsyncWorkStart() OVERRIDE;
183 
184  private:
185   void OnCompleted(int net_result);
186   void SetSendResult(int net_result, int bytes_sent);
187 
188   scoped_ptr<sockets_tcp::Send::Params> params_;
189   scoped_refptr<net::IOBuffer> io_buffer_;
190   size_t io_buffer_size_;
191 };
192 
193 class SocketsTcpCloseFunction : public TCPSocketAsyncApiFunction {
194  public:
195   DECLARE_EXTENSION_FUNCTION("sockets.tcp.close", SOCKETS_TCP_CLOSE)
196 
197   SocketsTcpCloseFunction();
198 
199  protected:
200   virtual ~SocketsTcpCloseFunction();
201 
202   // AsyncApiFunction:
203   virtual bool Prepare() OVERRIDE;
204   virtual void Work() OVERRIDE;
205 
206  private:
207   scoped_ptr<sockets_tcp::Close::Params> params_;
208 };
209 
210 class SocketsTcpGetInfoFunction : public TCPSocketAsyncApiFunction {
211  public:
212   DECLARE_EXTENSION_FUNCTION("sockets.tcp.getInfo", SOCKETS_TCP_GETINFO)
213 
214   SocketsTcpGetInfoFunction();
215 
216  protected:
217   virtual ~SocketsTcpGetInfoFunction();
218 
219   // AsyncApiFunction:
220   virtual bool Prepare() OVERRIDE;
221   virtual void Work() OVERRIDE;
222 
223  private:
224   scoped_ptr<sockets_tcp::GetInfo::Params> params_;
225 };
226 
227 class SocketsTcpGetSocketsFunction : public TCPSocketAsyncApiFunction {
228  public:
229   DECLARE_EXTENSION_FUNCTION("sockets.tcp.getSockets", SOCKETS_TCP_GETSOCKETS)
230 
231   SocketsTcpGetSocketsFunction();
232 
233  protected:
234   virtual ~SocketsTcpGetSocketsFunction();
235 
236   // AsyncApiFunction:
237   virtual bool Prepare() OVERRIDE;
238   virtual void Work() OVERRIDE;
239 };
240 
241 }  // namespace core_api
242 }  // namespace extensions
243 
244 #endif  // EXTENSIONS_BROWSER_API_SOCKETS_TCP_SOCKETS_TCP_API_H_
245