| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_ |
| #define MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_ |
| |
| #include <set> |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "mojo/services/network/interfaces/http_connection.mojom.h" |
| #include "mojo/services/network/interfaces/http_message.mojom.h" |
| #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" |
| |
| namespace net { |
| class HttpServerRequestInfo; |
| } |
| |
| namespace mojo { |
| |
| class HttpServerImpl; |
| |
| class HttpConnectionImpl : public HttpConnection { |
| public: |
| // |server| must outlive this object. |
| HttpConnectionImpl(int connection_id, |
| HttpServerImpl* server, |
| HttpConnectionDelegatePtr delegate, |
| HttpConnectionPtr* connection); |
| |
| ~HttpConnectionImpl() override; |
| |
| void OnReceivedHttpRequest(const net::HttpServerRequestInfo& info); |
| void OnReceivedWebSocketRequest(const net::HttpServerRequestInfo& info); |
| void OnReceivedWebSocketMessage(const std::string& data); |
| |
| private: |
| class SimpleDataPipeReader; |
| class WebSocketImpl; |
| |
| // HttpConnection implementation. |
| void SetSendBufferSize(uint32_t size, |
| const SetSendBufferSizeCallback& callback) override; |
| void SetReceiveBufferSize( |
| uint32_t size, |
| const SetReceiveBufferSizeCallback& callback) override; |
| |
| void OnFinishedReadingResponseBody(HttpResponsePtr response_ptr, |
| SimpleDataPipeReader* reader, |
| scoped_ptr<std::string> body); |
| |
| void Close(); |
| |
| // Checks whether Close() has been called. |
| bool IsClosing() const { return !binding_.is_bound(); } |
| |
| // Checks whether all wrap-up work has been done during the closing process. |
| // If yes, notifies the owner, which may result in the destruction of this |
| // object. |
| void NotifyOwnerCloseIfAllDone(); |
| |
| void OnWebSocketClosed(); |
| |
| const int connection_id_; |
| HttpServerImpl* const server_; |
| HttpConnectionDelegatePtr delegate_; |
| Binding<HttpConnection> binding_; |
| // Owns its elements. |
| std::set<SimpleDataPipeReader*> response_body_readers_; |
| |
| scoped_ptr<WebSocketImpl> web_socket_; |
| |
| DISALLOW_COPY_AND_ASSIGN(HttpConnectionImpl); |
| }; |
| |
| } // namespace mojo |
| |
| #endif // MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_ |