OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/google_apis/test_server/http_server.h" | 5 #include "chrome/browser/google_apis/test_server/http_server.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
11 #include "chrome/browser/google_apis/test_server/http_request.h" | 12 #include "chrome/browser/google_apis/test_server/http_request.h" |
12 #include "chrome/browser/google_apis/test_server/http_response.h" | 13 #include "chrome/browser/google_apis/test_server/http_response.h" |
13 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
14 #include "content/public/test/test_utils.h" | 15 #include "content/public/test/test_utils.h" |
15 #include "net/tools/fetch/http_listen_socket.h" | 16 #include "net/tools/fetch/http_listen_socket.h" |
16 | 17 |
17 namespace google_apis { | 18 namespace google_apis { |
18 namespace test_server { | 19 namespace test_server { |
19 | 20 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 scoped_ptr<HttpResponse> not_found_response(new HttpResponse()); | 140 scoped_ptr<HttpResponse> not_found_response(new HttpResponse()); |
140 not_found_response->set_code(NOT_FOUND); | 141 not_found_response->set_code(NOT_FOUND); |
141 connection->SendResponse(not_found_response.Pass()); | 142 connection->SendResponse(not_found_response.Pass()); |
142 | 143 |
143 // Drop the connection, since we do not support multiple requests per | 144 // Drop the connection, since we do not support multiple requests per |
144 // connection. | 145 // connection. |
145 connections_.erase(connection->socket_.get()); | 146 connections_.erase(connection->socket_.get()); |
146 delete connection; | 147 delete connection; |
147 } | 148 } |
148 | 149 |
149 GURL HttpServer::GetBaseURL() { | 150 GURL HttpServer::GetBaseURL() const { |
150 return base_url_; | 151 return base_url_; |
151 } | 152 } |
152 | 153 |
| 154 GURL HttpServer::GetURL(const std::string& relative_url) const { |
| 155 DCHECK(StartsWithASCII(relative_url, "/", true /* case_sensitive */)) |
| 156 << relative_url; |
| 157 return base_url_.Resolve(relative_url); |
| 158 } |
| 159 |
153 void HttpServer::RegisterRequestHandler( | 160 void HttpServer::RegisterRequestHandler( |
154 const HandleRequestCallback& callback) { | 161 const HandleRequestCallback& callback) { |
155 request_handlers_.push_back(callback); | 162 request_handlers_.push_back(callback); |
156 } | 163 } |
157 | 164 |
158 GURL HttpServer::RegisterDefaultResponse( | 165 void HttpServer::RegisterDefaultResponse( |
159 const std::string& relative_path, | 166 const std::string& relative_path, |
160 const HttpResponse& default_response) { | 167 const HttpResponse& default_response) { |
161 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 168 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 169 DCHECK(StartsWithASCII(relative_path, "/", true /* case_sensitive */)) |
| 170 << relative_path; |
162 | 171 |
163 GURL request_url = base_url_.Resolve(relative_path); | 172 GURL request_url = base_url_.Resolve(relative_path); |
164 const HandleRequestCallback callback = | 173 const HandleRequestCallback callback = |
165 base::Bind(&HandleDefaultRequest, | 174 base::Bind(&HandleDefaultRequest, |
166 request_url, | 175 request_url, |
167 default_response); | 176 default_response); |
168 request_handlers_.push_back(callback); | 177 request_handlers_.push_back(callback); |
169 | |
170 return request_url; | |
171 } | 178 } |
172 | 179 |
173 GURL HttpServer::RegisterTextResponse( | 180 void HttpServer::RegisterTextResponse( |
174 const std::string& relative_path, | 181 const std::string& relative_path, |
175 const std::string& content, | 182 const std::string& content, |
176 const std::string& content_type, | 183 const std::string& content_type, |
177 const ResponseCode response_code) { | 184 const ResponseCode response_code) { |
178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 186 DCHECK(StartsWithASCII(relative_path, "/", true /* case_sensitive */)) |
| 187 << relative_path; |
179 | 188 |
180 HttpResponse default_response; | 189 HttpResponse default_response; |
181 default_response.set_content(content); | 190 default_response.set_content(content); |
182 default_response.set_content_type(content_type); | 191 default_response.set_content_type(content_type); |
183 default_response.set_code(response_code); | 192 default_response.set_code(response_code); |
184 | 193 |
185 return RegisterDefaultResponse(relative_path, default_response); | 194 RegisterDefaultResponse(relative_path, default_response); |
186 } | 195 } |
187 | 196 |
188 GURL HttpServer::RegisterFileResponse( | 197 void HttpServer::RegisterFileResponse( |
189 const std::string& relative_path, | 198 const std::string& relative_path, |
190 const FilePath& file_path, | 199 const FilePath& file_path, |
191 const std::string& content_type, | 200 const std::string& content_type, |
192 const ResponseCode response_code) { | 201 const ResponseCode response_code) { |
193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 202 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 203 DCHECK(StartsWithASCII(relative_path, "/", true /* case_sensitive */)) |
| 204 << relative_path; |
194 | 205 |
195 HttpResponse default_response; | 206 HttpResponse default_response; |
196 | 207 |
197 std::string content; | 208 std::string content; |
198 const bool success = file_util::ReadFileToString( | 209 const bool success = file_util::ReadFileToString( |
199 file_path, &content); | 210 file_path, &content); |
200 default_response.set_content(content); | 211 default_response.set_content(content); |
201 DCHECK(success) << "Failed to open the file: " << file_path.value(); | 212 DCHECK(success) << "Failed to open the file: " << file_path.value(); |
202 | 213 |
203 default_response.set_content_type(content_type); | 214 default_response.set_content_type(content_type); |
204 default_response.set_code(response_code); | 215 default_response.set_code(response_code); |
205 | 216 |
206 return RegisterDefaultResponse(relative_path, default_response); | 217 RegisterDefaultResponse(relative_path, default_response); |
207 } | 218 } |
208 | 219 |
209 void HttpServer::DidAccept(net::StreamListenSocket* server, | 220 void HttpServer::DidAccept(net::StreamListenSocket* server, |
210 net::StreamListenSocket* connection) { | 221 net::StreamListenSocket* connection) { |
211 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 222 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
212 | 223 |
213 HttpConnection* http_connection = new HttpConnection( | 224 HttpConnection* http_connection = new HttpConnection( |
214 connection, | 225 connection, |
215 base::Bind(&HttpServer::HandleRequest, weak_factory_.GetWeakPtr())); | 226 base::Bind(&HttpServer::HandleRequest, weak_factory_.GetWeakPtr())); |
216 connections_[connection] = http_connection; | 227 connections_[connection] = http_connection; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 std::map<net::StreamListenSocket*, HttpConnection*>::iterator it = | 259 std::map<net::StreamListenSocket*, HttpConnection*>::iterator it = |
249 connections_.find(socket); | 260 connections_.find(socket); |
250 if (it == connections_.end()) { | 261 if (it == connections_.end()) { |
251 return NULL; | 262 return NULL; |
252 } | 263 } |
253 return it->second; | 264 return it->second; |
254 } | 265 } |
255 | 266 |
256 } // namespace test_server | 267 } // namespace test_server |
257 } // namespace google_apis | 268 } // namespace google_apis |
OLD | NEW |