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