http_connection.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
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 3// found in the LICENSE file. 4 5#ifndef NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_ 6#define NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_ 7 8#include "base/basictypes.h" 9#include "base/callback.h" 10#include "base/memory/ref_counted.h" 11#include "base/strings/string_piece.h" 12#include "net/test/embedded_test_server/http_request.h" 13 14namespace net { 15 16class StreamListenSocket; 17 18namespace test_server { 19 20class HttpConnection; 21class HttpResponse; 22 23// Calblack called when a request is parsed. Response should be sent 24// using HttpConnection::SendResponse() on the |connection| argument. 25typedef base::Callback<void(HttpConnection* connection, 26 scoped_ptr<HttpRequest> request)> 27 HandleRequestCallback; 28 29// Wraps the connection socket. Accepts incoming data and sends responses. 30// If a valid request is parsed, then |callback_| is invoked. 31class HttpConnection { 32 public: 33 HttpConnection(StreamListenSocket* socket, 34 const HandleRequestCallback& callback); 35 ~HttpConnection(); 36 37 // Sends the HTTP response to the client. 38 void SendResponse(scoped_ptr<HttpResponse> response) const; 39 40 private: 41 friend class EmbeddedTestServer; 42 43 // Accepts raw chunk of data from the client. Internally, passes it to the 44 // HttpRequestParser class. If a request is parsed, then |callback_| is 45 // called. 46 void ReceiveData(const base::StringPiece& data); 47 48 scoped_refptr<StreamListenSocket> socket_; 49 const HandleRequestCallback callback_; 50 HttpRequestParser request_parser_; 51 52 DISALLOW_COPY_AND_ASSIGN(HttpConnection); 53}; 54 55} // namespace test_server 56} // namespace net 57 58#endif // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_ 59