diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-28 17:00:37 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-28 17:00:37 +0000 |
commit | 0d31fbc5d7c041f9ddc0f46faf16b0123c5c2bb3 (patch) | |
tree | c3c60822caeabb8382fa5be457d81408775e21ff /net/test | |
parent | 96da69d1ae43ad3feff0ac96a280d3212467f9b5 (diff) | |
download | chromium_src-0d31fbc5d7c041f9ddc0f46faf16b0123c5c2bb3.zip chromium_src-0d31fbc5d7c041f9ddc0f46faf16b0123c5c2bb3.tar.gz chromium_src-0d31fbc5d7c041f9ddc0f46faf16b0123c5c2bb3.tar.bz2 |
Revert "Revert 202112 "GTTF: Convert most tests in content to use Embedd...""
This is a resubmit of https://codereview.chromium.org/15505003
TBR=avi
BUG=96594
Review URL: https://codereview.chromium.org/15740023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202586 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/test')
6 files changed, 53 insertions, 35 deletions
diff --git a/net/test/embedded_test_server/embedded_test_server.cc b/net/test/embedded_test_server/embedded_test_server.cc index ea1d8c5..95ccbcb 100644 --- a/net/test/embedded_test_server/embedded_test_server.cc +++ b/net/test/embedded_test_server/embedded_test_server.cc @@ -25,36 +25,31 @@ namespace test_server { namespace { -// Callback to handle requests with default predefined response for requests -// matching the address |url|. -scoped_ptr<HttpResponse> HandleDefaultRequest(const GURL& url, - const HttpResponse& response, - const HttpRequest& request) { - const GURL request_url = url.Resolve(request.relative_url); - if (url.path() != request_url.path()) - return scoped_ptr<HttpResponse>(NULL); - return scoped_ptr<HttpResponse>(new HttpResponse(response)); -} - // Handles |request| by serving a file from under |server_root|. -scoped_ptr<HttpResponse> HandleFileRequest(const base::FilePath& server_root, - const HttpRequest& request) { +scoped_ptr<HttpResponse> HandleFileRequest( + const base::FilePath& server_root, + const HttpRequest& request) { // This is a test-only server. Ignore I/O thread restrictions. base::ThreadRestrictions::ScopedAllowIO allow_io; // Trim the first byte ('/'). std::string request_path(request.relative_url.substr(1)); + // Remove the query string if present. + size_t query_pos = request_path.find('?'); + if (query_pos != std::string::npos) + request_path = request_path.substr(0, query_pos); + std::string file_contents; if (!file_util::ReadFileToString( server_root.AppendASCII(request_path), &file_contents)) { return scoped_ptr<HttpResponse>(NULL); } - scoped_ptr<HttpResponse> http_response(new HttpResponse); + scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse); http_response->set_code(net::test_server::SUCCESS); http_response->set_content(file_contents); - return http_response.Pass(); + return http_response.PassAs<HttpResponse>(); } } // namespace @@ -157,20 +152,26 @@ void EmbeddedTestServer::HandleRequest(HttpConnection* connection, scoped_ptr<HttpRequest> request) { DCHECK(io_thread_->BelongsToCurrentThread()); + bool request_handled = false; + for (size_t i = 0; i < request_handlers_.size(); ++i) { scoped_ptr<HttpResponse> response = request_handlers_[i].Run(*request.get()); if (response.get()) { connection->SendResponse(response.Pass()); - return; + request_handled = true; + break; } } - LOG(WARNING) << "Request not handled. Returning 404: " - << request->relative_url; - scoped_ptr<HttpResponse> not_found_response(new HttpResponse()); - not_found_response->set_code(NOT_FOUND); - connection->SendResponse(not_found_response.Pass()); + if (!request_handled) { + LOG(WARNING) << "Request not handled. Returning 404: " + << request->relative_url; + scoped_ptr<BasicHttpResponse> not_found_response(new BasicHttpResponse); + not_found_response->set_code(NOT_FOUND); + connection->SendResponse( + not_found_response.PassAs<HttpResponse>()); + } // Drop the connection, since we do not support multiple requests per // connection. diff --git a/net/test/embedded_test_server/embedded_test_server.h b/net/test/embedded_test_server/embedded_test_server.h index 6966227..2cf9cb2 100644 --- a/net/test/embedded_test_server/embedded_test_server.h +++ b/net/test/embedded_test_server/embedded_test_server.h @@ -77,8 +77,8 @@ class HttpListenSocket : public TCPListenSocket { // class EmbeddedTestServer : public StreamListenSocket::Delegate { public: - typedef base::Callback<scoped_ptr<HttpResponse>(const HttpRequest& request)> - HandleRequestCallback; + typedef base::Callback<scoped_ptr<HttpResponse>( + const HttpRequest& request)> HandleRequestCallback; // Creates a http test server. |io_thread| is a task runner // with IO message loop, used as a backend thread. diff --git a/net/test/embedded_test_server/embedded_test_server_unittest.cc b/net/test/embedded_test_server/embedded_test_server_unittest.cc index 33f1ff4..c0eb4ed 100644 --- a/net/test/embedded_test_server/embedded_test_server_unittest.cc +++ b/net/test/embedded_test_server/embedded_test_server_unittest.cc @@ -91,11 +91,11 @@ class EmbeddedTestServerTest : public testing::Test, GURL absolute_url = server_->GetURL(request.relative_url); if (absolute_url.path() == path) { - scoped_ptr<HttpResponse> http_response(new HttpResponse); + scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse); http_response->set_code(code); http_response->set_content(content); http_response->set_content_type(content_type); - return http_response.Pass(); + return http_response.PassAs<HttpResponse>(); } return scoped_ptr<HttpResponse>(); diff --git a/net/test/embedded_test_server/http_response.cc b/net/test/embedded_test_server/http_response.cc index 2c05c06..4f2bfe8 100644 --- a/net/test/embedded_test_server/http_response.cc +++ b/net/test/embedded_test_server/http_response.cc @@ -11,13 +11,16 @@ namespace net { namespace test_server { -HttpResponse::HttpResponse() : code_(SUCCESS) { +HttpResponse::~HttpResponse() { } -HttpResponse::~HttpResponse() { +BasicHttpResponse::BasicHttpResponse() : code_(SUCCESS) { +} + +BasicHttpResponse::~BasicHttpResponse() { } -std::string HttpResponse::ToResponseString() const { +std::string BasicHttpResponse::ToResponseString() const { // Response line with headers. std::string response_builder; diff --git a/net/test/embedded_test_server/http_response.h b/net/test/embedded_test_server/http_response.h index b597cce..141c8cb 100644 --- a/net/test/embedded_test_server/http_response.h +++ b/net/test/embedded_test_server/http_response.h @@ -9,6 +9,7 @@ #include <string> #include "base/basictypes.h" +#include "base/compiler_specific.h" namespace net { namespace test_server { @@ -24,12 +25,23 @@ enum ResponseCode { ACCESS_DENIED = 500, }; -// Respresents a HTTP response. Since it can be big, it may be better to use -// scoped_ptr to pass it instead of copying. -class HttpResponse { +// Interface for HTTP response implementations. +class HttpResponse{ public: - HttpResponse(); - ~HttpResponse(); + virtual ~HttpResponse(); + + // Returns raw contents to be written to the network socket + // in response. If you intend to make this a valid HTTP response, + // it should start with "HTTP/x.x" line, followed by response headers. + virtual std::string ToResponseString() const = 0; +}; + +// This class is used to handle basic HTTP responses with commonly used +// response headers such as "Content-Type". +class BasicHttpResponse : public HttpResponse { + public: + BasicHttpResponse(); + virtual ~BasicHttpResponse(); // The response code. ResponseCode code() const { return code_; } @@ -56,13 +68,15 @@ class HttpResponse { } // Generates and returns a http response string. - std::string ToResponseString() const; + virtual std::string ToResponseString() const OVERRIDE; private: ResponseCode code_; std::string content_; std::string content_type_; std::map<std::string, std::string> custom_headers_; + + DISALLOW_COPY_AND_ASSIGN(BasicHttpResponse); }; } // namespace test_server diff --git a/net/test/embedded_test_server/http_response_unittest.cc b/net/test/embedded_test_server/http_response_unittest.cc index a56feee..82f5112 100644 --- a/net/test/embedded_test_server/http_response_unittest.cc +++ b/net/test/embedded_test_server/http_response_unittest.cc @@ -10,7 +10,7 @@ namespace net { namespace test_server { TEST(HttpResponseTest, GenerateResponse) { - HttpResponse response; + BasicHttpResponse response; response.set_code(SUCCESS); response.set_content("Sample content - Hello world!"); response.set_content_type("text/plain"); |