| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "chrome/browser/extensions/api/api_function.h" | 10 #include "chrome/browser/extensions/api/api_function.h" |
| 11 #include "net/base/io_buffer.h" | 11 #include "net/base/io_buffer.h" |
| 12 #include "net/base/ip_endpoint.h" | |
| 13 | 12 |
| 14 #include <string> | 13 #include <string> |
| 15 | 14 |
| 16 namespace extensions { | 15 namespace extensions { |
| 17 | 16 |
| 18 class APIResourceController; | 17 class APIResourceController; |
| 19 class APIResourceEventNotifier; | 18 class APIResourceEventNotifier; |
| 20 | 19 |
| 21 extern const char kBytesWrittenKey[]; | 20 extern const char kBytesWrittenKey[]; |
| 22 extern const char kSocketIdKey[]; | 21 extern const char kSocketIdKey[]; |
| 23 extern const char kUdpSocketType[]; | 22 extern const char kUdpSocketType[]; |
| 24 | 23 |
| 24 class SocketExtensionFunction : public AsyncIOAPIFunction { |
| 25 public: |
| 26 virtual void Work() OVERRIDE; |
| 27 virtual bool Respond() OVERRIDE; |
| 28 }; |
| 29 |
| 25 // Many of these socket functions are synchronous in the sense that | 30 // Many of these socket functions are synchronous in the sense that |
| 26 // they don't involve blocking operations, but we've made them all | 31 // they don't involve blocking operations, but we've made them all |
| 27 // AsyncExtensionFunctions because the underlying UDPClientSocket | 32 // AsyncExtensionFunctions because the underlying UDPClientSocket |
| 28 // library wants all operations to happen on the same thread as the | 33 // library wants all operations to happen on the same thread as the |
| 29 // one that created the socket. Too bad. | 34 // one that created the socket. Too bad. |
| 30 | 35 |
| 31 class SocketCreateFunction : public AsyncIOAPIFunction { | 36 class SocketCreateFunction : public SocketExtensionFunction { |
| 32 public: | 37 public: |
| 33 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.create") | 38 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.create") |
| 34 | 39 |
| 35 SocketCreateFunction(); | 40 SocketCreateFunction(); |
| 36 | 41 |
| 37 protected: | 42 protected: |
| 38 virtual ~SocketCreateFunction(); | 43 virtual ~SocketCreateFunction(); |
| 39 | 44 |
| 40 // AsyncIOAPIFunction: | 45 // AsyncIOAPIFunction: |
| 41 virtual bool Prepare() OVERRIDE; | 46 virtual bool Prepare() OVERRIDE; |
| 42 virtual void Work() OVERRIDE; | 47 virtual void Work() OVERRIDE; |
| 43 virtual bool Respond() OVERRIDE; | |
| 44 | 48 |
| 45 private: | 49 private: |
| 46 enum SocketType { | 50 enum SocketType { |
| 47 kSocketTypeInvalid = -1, | 51 kSocketTypeInvalid = -1, |
| 48 kSocketTypeTCP, | 52 kSocketTypeTCP, |
| 49 kSocketTypeUDP | 53 kSocketTypeUDP |
| 50 }; | 54 }; |
| 51 | 55 |
| 52 SocketType socket_type_; | 56 SocketType socket_type_; |
| 53 int src_id_; | 57 int src_id_; |
| 54 APIResourceEventNotifier* event_notifier_; | 58 APIResourceEventNotifier* event_notifier_; |
| 55 }; | 59 }; |
| 56 | 60 |
| 57 class SocketDestroyFunction : public AsyncIOAPIFunction { | 61 class SocketDestroyFunction : public SocketExtensionFunction { |
| 58 public: | 62 public: |
| 59 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.destroy") | 63 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.destroy") |
| 60 | 64 |
| 61 protected: | 65 protected: |
| 62 virtual ~SocketDestroyFunction() {} | 66 virtual ~SocketDestroyFunction() {} |
| 63 | 67 |
| 64 // AsyncIOAPIFunction: | 68 // AsyncIOAPIFunction: |
| 65 virtual bool Prepare() OVERRIDE; | 69 virtual bool Prepare() OVERRIDE; |
| 66 virtual void Work() OVERRIDE; | 70 virtual void Work() OVERRIDE; |
| 67 virtual bool Respond() OVERRIDE; | |
| 68 | 71 |
| 69 private: | 72 private: |
| 70 int socket_id_; | 73 int socket_id_; |
| 71 }; | 74 }; |
| 72 | 75 |
| 73 class SocketConnectFunction : public AsyncIOAPIFunction { | 76 class SocketConnectFunction : public SocketExtensionFunction { |
| 74 public: | 77 public: |
| 75 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.connect") | 78 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.connect") |
| 76 | 79 |
| 80 void OnCompleted(int result); |
| 81 |
| 77 protected: | 82 protected: |
| 78 virtual ~SocketConnectFunction() {} | 83 virtual ~SocketConnectFunction() {} |
| 79 | 84 |
| 80 // AsyncIOAPIFunction: | 85 // AsyncIOAPIFunction: |
| 81 virtual bool Prepare() OVERRIDE; | 86 virtual bool Prepare() OVERRIDE; |
| 82 virtual void Work() OVERRIDE; | 87 virtual void AsyncWorkStart() OVERRIDE; |
| 83 virtual bool Respond() OVERRIDE; | |
| 84 | 88 |
| 85 private: | 89 private: |
| 86 int socket_id_; | 90 int socket_id_; |
| 87 std::string address_; | 91 std::string address_; |
| 88 int port_; | 92 int port_; |
| 89 }; | 93 }; |
| 90 | 94 |
| 91 class SocketDisconnectFunction : public AsyncIOAPIFunction { | 95 class SocketDisconnectFunction : public SocketExtensionFunction { |
| 92 public: | 96 public: |
| 93 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.disconnect") | 97 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.disconnect") |
| 94 | 98 |
| 95 protected: | 99 protected: |
| 96 virtual ~SocketDisconnectFunction() {} | 100 virtual ~SocketDisconnectFunction() {} |
| 97 | 101 |
| 98 // AsyncIOAPIFunction: | 102 // AsyncIOAPIFunction: |
| 99 virtual bool Prepare() OVERRIDE; | 103 virtual bool Prepare() OVERRIDE; |
| 100 virtual void Work() OVERRIDE; | 104 virtual void Work() OVERRIDE; |
| 101 virtual bool Respond() OVERRIDE; | |
| 102 | 105 |
| 103 private: | 106 private: |
| 104 int socket_id_; | 107 int socket_id_; |
| 105 }; | 108 }; |
| 106 | 109 |
| 107 class SocketBindFunction : public AsyncIOAPIFunction { | 110 class SocketBindFunction : public SocketExtensionFunction { |
| 108 protected: | 111 protected: |
| 109 virtual bool Prepare() OVERRIDE; | 112 virtual bool Prepare() OVERRIDE; |
| 110 virtual void Work() OVERRIDE; | 113 virtual void Work() OVERRIDE; |
| 111 virtual bool Respond() OVERRIDE; | |
| 112 | 114 |
| 113 private: | 115 private: |
| 114 int socket_id_; | 116 int socket_id_; |
| 115 std::string address_; | 117 std::string address_; |
| 116 int port_; | 118 int port_; |
| 117 | 119 |
| 118 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.bind") | 120 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.bind") |
| 119 }; | 121 }; |
| 120 | 122 |
| 121 class SocketReadFunction : public AsyncIOAPIFunction { | 123 class SocketReadFunction : public SocketExtensionFunction { |
| 122 public: | 124 public: |
| 123 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.read") | 125 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.read") |
| 124 | 126 |
| 127 void OnCompleted(int result, scoped_refptr<net::IOBuffer> io_buffer); |
| 128 |
| 125 protected: | 129 protected: |
| 126 virtual ~SocketReadFunction() {} | 130 virtual ~SocketReadFunction() {} |
| 127 | 131 |
| 128 // AsyncIOAPIFunction: | 132 // AsyncIOAPIFunction: |
| 129 virtual bool Prepare() OVERRIDE; | 133 virtual bool Prepare() OVERRIDE; |
| 130 virtual void Work() OVERRIDE; | 134 virtual void AsyncWorkStart() OVERRIDE; |
| 131 virtual bool Respond() OVERRIDE; | |
| 132 | 135 |
| 133 private: | 136 private: |
| 134 int socket_id_; | 137 int socket_id_; |
| 135 }; | 138 }; |
| 136 | 139 |
| 137 class SocketWriteFunction : public AsyncIOAPIFunction { | 140 class SocketWriteFunction : public SocketExtensionFunction { |
| 138 public: | 141 public: |
| 139 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.write") | 142 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.write") |
| 140 | 143 |
| 141 SocketWriteFunction(); | 144 SocketWriteFunction(); |
| 145 void OnCompleted(int result); |
| 142 | 146 |
| 143 protected: | 147 protected: |
| 144 virtual ~SocketWriteFunction(); | 148 virtual ~SocketWriteFunction(); |
| 145 | 149 |
| 146 // AsyncIOAPIFunction: | 150 // AsyncIOAPIFunction: |
| 147 virtual bool Prepare() OVERRIDE; | 151 virtual bool Prepare() OVERRIDE; |
| 148 virtual void Work() OVERRIDE; | 152 virtual void AsyncWorkStart() OVERRIDE; |
| 149 virtual bool Respond() OVERRIDE; | |
| 150 | 153 |
| 151 private: | 154 private: |
| 152 int socket_id_; | 155 int socket_id_; |
| 153 scoped_refptr<net::IOBufferWithSize> io_buffer_; | 156 scoped_refptr<net::IOBufferWithSize> io_buffer_; |
| 154 }; | 157 }; |
| 155 | 158 |
| 156 class SocketRecvFromFunction : public AsyncIOAPIFunction { | 159 class SocketRecvFromFunction : public SocketExtensionFunction { |
| 157 public: | 160 public: |
| 158 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.recvFrom") | 161 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.recvFrom") |
| 159 | 162 |
| 163 void OnCompleted(int result, |
| 164 scoped_refptr<net::IOBuffer> io_buffer, |
| 165 const std::string& address, |
| 166 int port); |
| 167 |
| 160 protected: | 168 protected: |
| 161 virtual ~SocketRecvFromFunction(); | 169 virtual ~SocketRecvFromFunction(); |
| 162 | 170 |
| 163 // AsyncIOAPIFunction | 171 // AsyncIOAPIFunction |
| 164 virtual bool Prepare() OVERRIDE; | 172 virtual bool Prepare() OVERRIDE; |
| 165 virtual void Work() OVERRIDE; | 173 virtual void AsyncWorkStart() OVERRIDE; |
| 166 virtual bool Respond() OVERRIDE; | |
| 167 | 174 |
| 168 private: | 175 private: |
| 169 int socket_id_; | 176 int socket_id_; |
| 170 net::IPEndPoint address_; | |
| 171 }; | 177 }; |
| 172 | 178 |
| 173 class SocketSendToFunction : public AsyncIOAPIFunction { | 179 class SocketSendToFunction : public SocketExtensionFunction { |
| 174 public: | 180 public: |
| 175 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.sendTo") | 181 DECLARE_EXTENSION_FUNCTION_NAME("experimental.socket.sendTo") |
| 176 | 182 |
| 177 SocketSendToFunction(); | 183 SocketSendToFunction(); |
| 178 | 184 |
| 179 protected: | 185 protected: |
| 180 virtual ~SocketSendToFunction(); | 186 virtual ~SocketSendToFunction(); |
| 187 void OnCompleted(int result); |
| 181 | 188 |
| 182 // AsyncIOAPIFunction: | 189 // AsyncIOAPIFunction: |
| 183 virtual bool Prepare() OVERRIDE; | 190 virtual bool Prepare() OVERRIDE; |
| 184 virtual void Work() OVERRIDE; | 191 virtual void AsyncWorkStart() OVERRIDE; |
| 185 virtual bool Respond() OVERRIDE; | |
| 186 | 192 |
| 187 private: | 193 private: |
| 188 int socket_id_; | 194 int socket_id_; |
| 189 scoped_refptr<net::IOBufferWithSize> io_buffer_; | 195 scoped_refptr<net::IOBufferWithSize> io_buffer_; |
| 190 std::string address_; | 196 std::string address_; |
| 191 int port_; | 197 int port_; |
| 192 }; | 198 }; |
| 193 | 199 |
| 194 } // namespace extensions | 200 } // namespace extensions |
| 195 | 201 |
| 196 #endif // CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ | 202 #endif // CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_H_ |
| OLD | NEW |