diff options
Diffstat (limited to 'chrome/browser/extensions/api/socket')
-rw-r--r-- | chrome/browser/extensions/api/socket/tcp_socket.cc | 31 | ||||
-rw-r--r-- | chrome/browser/extensions/api/socket/tcp_socket.h | 36 |
2 files changed, 67 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/socket/tcp_socket.cc b/chrome/browser/extensions/api/socket/tcp_socket.cc index 8401dc26..4c0de16 100644 --- a/chrome/browser/extensions/api/socket/tcp_socket.cc +++ b/chrome/browser/extensions/api/socket/tcp_socket.cc @@ -28,6 +28,17 @@ ApiResourceManager<ResumableTCPSocket>::GetFactoryInstance() { return &g_factory.Get(); } +static base::LazyInstance<ProfileKeyedAPIFactory< + ApiResourceManager<ResumableTCPServerSocket> > > + g_server_factory = LAZY_INSTANCE_INITIALIZER; + +// static +template <> +ProfileKeyedAPIFactory<ApiResourceManager<ResumableTCPServerSocket> >* +ApiResourceManager<ResumableTCPServerSocket>::GetFactoryInstance() { + return &g_server_factory.Get(); +} + TCPSocket::TCPSocket(const std::string& owner_extension_id) : Socket(owner_extension_id), socket_mode_(UNKNOWN) { @@ -304,8 +315,28 @@ ResumableTCPSocket::ResumableTCPSocket(const std::string& owner_extension_id) paused_(false) { } +ResumableTCPSocket::ResumableTCPSocket(net::TCPClientSocket* tcp_client_socket, + const std::string& owner_extension_id, + bool is_connected) + : TCPSocket(tcp_client_socket, owner_extension_id, is_connected), + persistent_(false), + buffer_size_(0), + paused_(false) { +} + bool ResumableTCPSocket::persistent() const { return persistent_; } +ResumableTCPServerSocket::ResumableTCPServerSocket( + const std::string& owner_extension_id) + : TCPSocket(owner_extension_id), + persistent_(false), + paused_(false) { +} + +bool ResumableTCPServerSocket::persistent() const { + return persistent_; +} + } // namespace extensions diff --git a/chrome/browser/extensions/api/socket/tcp_socket.h b/chrome/browser/extensions/api/socket/tcp_socket.h index c684824..d5b4844 100644 --- a/chrome/browser/extensions/api/socket/tcp_socket.h +++ b/chrome/browser/extensions/api/socket/tcp_socket.h @@ -102,10 +102,14 @@ class TCPSocket : public Socket { class ResumableTCPSocket : public TCPSocket { public: explicit ResumableTCPSocket(const std::string& owner_extension_id); + explicit ResumableTCPSocket(net::TCPClientSocket* tcp_client_socket, + const std::string& owner_extension_id, + bool is_connected); const std::string& name() const { return name_; } void set_name(const std::string& name) { name_ = name; } + // Overriden from ApiResource virtual bool persistent() const OVERRIDE; void set_persistent(bool persistent) { persistent_ = persistent; } @@ -133,6 +137,38 @@ class ResumableTCPSocket : public TCPSocket { bool paused_; }; +// TCP Socket instances from the "sockets.tcpServer" namespace. These are +// regular socket objects with additional properties related to the behavior +// defined in the "sockets.tcpServer" namespace. +class ResumableTCPServerSocket : public TCPSocket { + public: + explicit ResumableTCPServerSocket(const std::string& owner_extension_id); + + const std::string& name() const { return name_; } + void set_name(const std::string& name) { name_ = name; } + + virtual bool persistent() const OVERRIDE; + void set_persistent(bool persistent) { persistent_ = persistent; } + + bool paused() const { return paused_; } + void set_paused(bool paused) { paused_ = paused; } + + private: + friend class ApiResourceManager<ResumableTCPServerSocket>; + static const char* service_name() { + return "ResumableTCPServerSocketManager"; + } + + // Application-defined string - see sockets_tcp_server.idl. + std::string name_; + // Flag indicating whether the socket is left open when the application is + // suspended - see sockets_tcp_server.idl. + bool persistent_; + // Flag indicating whether a connected socket blocks its peer from sending + // more data - see sockets_tcp_server.idl. + bool paused_; +}; + } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_SOCKET_TCP_SOCKET_H_ |