Chromium Code Reviews| Index: net/test/embedded_test_server/embedded_test_server.cc |
| diff --git a/net/test/embedded_test_server/embedded_test_server.cc b/net/test/embedded_test_server/embedded_test_server.cc |
| index deeed7d021efcaad503d0f347866170c91623adc..80a1e7c8f1be6ea5e9b009768d03b360426856b8 100644 |
| --- a/net/test/embedded_test_server/embedded_test_server.cc |
| +++ b/net/test/embedded_test_server/embedded_test_server.cc |
| @@ -27,36 +27,31 @@ const int kPort = 8040; |
| const char kIp[] = "127.0.0.1"; |
| const int kRetries = 10; |
| -// 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<HttpResponseInterface> 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); |
| + return scoped_ptr<HttpResponseInterface>(NULL); |
| } |
| scoped_ptr<HttpResponse> http_response(new HttpResponse); |
| http_response->set_code(net::test_server::SUCCESS); |
| http_response->set_content(file_contents); |
| - return http_response.Pass(); |
| + return http_response.PassAs<HttpResponseInterface>(); |
| } |
| } // namespace |
| @@ -161,20 +156,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 = |
| + scoped_ptr<HttpResponseInterface> 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) { |
|
satorux1
2013/05/22 01:54:56
thank you for fixing the bug.
|
| + 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.PassAs<HttpResponseInterface>()); |
| + } |
| // Drop the connection, since we do not support multiple requests per |
| // connection. |