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 "content/public/test/test_url_fetcher_factory.h" | 5 #include "net/url_request/test_url_fetcher_factory.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
12 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
13 #include "net/base/host_port_pair.h" | 13 #include "net/base/host_port_pair.h" |
14 #include "net/http/http_response_headers.h" | 14 #include "net/http/http_response_headers.h" |
15 #include "net/url_request/url_fetcher_delegate.h" | 15 #include "net/url_request/url_fetcher_delegate.h" |
16 #include "net/url_request/url_fetcher_impl.h" | 16 #include "net/url_request/url_fetcher_impl.h" |
17 #include "net/url_request/url_request_status.h" | 17 #include "net/url_request/url_request_status.h" |
18 | 18 |
| 19 namespace net { |
| 20 |
19 ScopedURLFetcherFactory::ScopedURLFetcherFactory( | 21 ScopedURLFetcherFactory::ScopedURLFetcherFactory( |
20 net::URLFetcherFactory* factory) { | 22 URLFetcherFactory* factory) { |
21 DCHECK(!net::URLFetcherImpl::factory()); | 23 DCHECK(!URLFetcherImpl::factory()); |
22 net::URLFetcherImpl::set_factory(factory); | 24 URLFetcherImpl::set_factory(factory); |
23 } | 25 } |
24 | 26 |
25 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { | 27 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { |
26 DCHECK(net::URLFetcherImpl::factory()); | 28 DCHECK(URLFetcherImpl::factory()); |
27 net::URLFetcherImpl::set_factory(NULL); | 29 URLFetcherImpl::set_factory(NULL); |
28 } | 30 } |
29 | 31 |
30 TestURLFetcher::TestURLFetcher(int id, | 32 TestURLFetcher::TestURLFetcher(int id, |
31 const GURL& url, | 33 const GURL& url, |
32 net::URLFetcherDelegate* d) | 34 URLFetcherDelegate* d) |
33 : id_(id), | 35 : id_(id), |
34 original_url_(url), | 36 original_url_(url), |
35 delegate_(d), | 37 delegate_(d), |
36 did_receive_last_chunk_(false), | 38 did_receive_last_chunk_(false), |
37 fake_load_flags_(0), | 39 fake_load_flags_(0), |
38 fake_response_code_(-1), | 40 fake_response_code_(-1), |
39 fake_response_destination_(STRING), | 41 fake_response_destination_(STRING), |
40 fake_was_fetched_via_proxy_(false), | 42 fake_was_fetched_via_proxy_(false), |
41 fake_max_retries_(0) { | 43 fake_max_retries_(0) { |
42 } | 44 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 const std::string& extra_request_headers) { | 76 const std::string& extra_request_headers) { |
75 fake_extra_request_headers_.Clear(); | 77 fake_extra_request_headers_.Clear(); |
76 fake_extra_request_headers_.AddHeadersFromString(extra_request_headers); | 78 fake_extra_request_headers_.AddHeadersFromString(extra_request_headers); |
77 } | 79 } |
78 | 80 |
79 void TestURLFetcher::AddExtraRequestHeader(const std::string& header_line) { | 81 void TestURLFetcher::AddExtraRequestHeader(const std::string& header_line) { |
80 fake_extra_request_headers_.AddHeaderFromString(header_line); | 82 fake_extra_request_headers_.AddHeaderFromString(header_line); |
81 } | 83 } |
82 | 84 |
83 void TestURLFetcher::GetExtraRequestHeaders( | 85 void TestURLFetcher::GetExtraRequestHeaders( |
84 net::HttpRequestHeaders* headers) const { | 86 HttpRequestHeaders* headers) const { |
85 *headers = fake_extra_request_headers_; | 87 *headers = fake_extra_request_headers_; |
86 } | 88 } |
87 | 89 |
88 void TestURLFetcher::SetRequestContext( | 90 void TestURLFetcher::SetRequestContext( |
89 net::URLRequestContextGetter* request_context_getter) { | 91 URLRequestContextGetter* request_context_getter) { |
90 } | 92 } |
91 | 93 |
92 void TestURLFetcher::SetFirstPartyForCookies( | 94 void TestURLFetcher::SetFirstPartyForCookies( |
93 const GURL& first_party_for_cookies) { | 95 const GURL& first_party_for_cookies) { |
94 } | 96 } |
95 | 97 |
96 void TestURLFetcher::SetURLRequestUserData( | 98 void TestURLFetcher::SetURLRequestUserData( |
97 const void* key, | 99 const void* key, |
98 const CreateDataCallback& create_data_callback) { | 100 const CreateDataCallback& create_data_callback) { |
99 } | 101 } |
(...skipping 18 matching lines...) Expand all Loading... |
118 | 120 |
119 void TestURLFetcher::SaveResponseToFileAtPath( | 121 void TestURLFetcher::SaveResponseToFileAtPath( |
120 const FilePath& file_path, | 122 const FilePath& file_path, |
121 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy) { | 123 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy) { |
122 } | 124 } |
123 | 125 |
124 void TestURLFetcher::SaveResponseToTemporaryFile( | 126 void TestURLFetcher::SaveResponseToTemporaryFile( |
125 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy) { | 127 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy) { |
126 } | 128 } |
127 | 129 |
128 net::HttpResponseHeaders* TestURLFetcher::GetResponseHeaders() const { | 130 HttpResponseHeaders* TestURLFetcher::GetResponseHeaders() const { |
129 return fake_response_headers_; | 131 return fake_response_headers_; |
130 } | 132 } |
131 | 133 |
132 net::HostPortPair TestURLFetcher::GetSocketAddress() const { | 134 HostPortPair TestURLFetcher::GetSocketAddress() const { |
133 NOTIMPLEMENTED(); | 135 NOTIMPLEMENTED(); |
134 return net::HostPortPair(); | 136 return HostPortPair(); |
135 } | 137 } |
136 | 138 |
137 bool TestURLFetcher::WasFetchedViaProxy() const { | 139 bool TestURLFetcher::WasFetchedViaProxy() const { |
138 return fake_was_fetched_via_proxy_; | 140 return fake_was_fetched_via_proxy_; |
139 } | 141 } |
140 | 142 |
141 void TestURLFetcher::Start() { | 143 void TestURLFetcher::Start() { |
142 // Overriden to do nothing. It is assumed the caller will notify the delegate. | 144 // Overriden to do nothing. It is assumed the caller will notify the delegate. |
143 } | 145 } |
144 | 146 |
145 const GURL& TestURLFetcher::GetOriginalURL() const { | 147 const GURL& TestURLFetcher::GetOriginalURL() const { |
146 return original_url_; | 148 return original_url_; |
147 } | 149 } |
148 | 150 |
149 const GURL& TestURLFetcher::GetURL() const { | 151 const GURL& TestURLFetcher::GetURL() const { |
150 return fake_url_; | 152 return fake_url_; |
151 } | 153 } |
152 | 154 |
153 const net::URLRequestStatus& TestURLFetcher::GetStatus() const { | 155 const URLRequestStatus& TestURLFetcher::GetStatus() const { |
154 return fake_status_; | 156 return fake_status_; |
155 } | 157 } |
156 | 158 |
157 int TestURLFetcher::GetResponseCode() const { | 159 int TestURLFetcher::GetResponseCode() const { |
158 return fake_response_code_; | 160 return fake_response_code_; |
159 } | 161 } |
160 | 162 |
161 const net::ResponseCookies& TestURLFetcher::GetCookies() const { | 163 const ResponseCookies& TestURLFetcher::GetCookies() const { |
162 return fake_cookies_; | 164 return fake_cookies_; |
163 } | 165 } |
164 | 166 |
165 bool TestURLFetcher::FileErrorOccurred( | 167 bool TestURLFetcher::FileErrorOccurred( |
166 base::PlatformFileError* out_error_code) const { | 168 base::PlatformFileError* out_error_code) const { |
167 NOTIMPLEMENTED(); | 169 NOTIMPLEMENTED(); |
168 return false; | 170 return false; |
169 } | 171 } |
170 | 172 |
171 void TestURLFetcher::ReceivedContentWasMalformed() { | 173 void TestURLFetcher::ReceivedContentWasMalformed() { |
(...skipping 10 matching lines...) Expand all Loading... |
182 | 184 |
183 bool TestURLFetcher::GetResponseAsFilePath( | 185 bool TestURLFetcher::GetResponseAsFilePath( |
184 bool take_ownership, FilePath* out_response_path) const { | 186 bool take_ownership, FilePath* out_response_path) const { |
185 if (fake_response_destination_ != TEMP_FILE) | 187 if (fake_response_destination_ != TEMP_FILE) |
186 return false; | 188 return false; |
187 | 189 |
188 *out_response_path = fake_response_file_path_; | 190 *out_response_path = fake_response_file_path_; |
189 return true; | 191 return true; |
190 } | 192 } |
191 | 193 |
192 void TestURLFetcher::set_status(const net::URLRequestStatus& status) { | 194 void TestURLFetcher::set_status(const URLRequestStatus& status) { |
193 fake_status_ = status; | 195 fake_status_ = status; |
194 } | 196 } |
195 | 197 |
196 void TestURLFetcher::set_was_fetched_via_proxy(bool flag) { | 198 void TestURLFetcher::set_was_fetched_via_proxy(bool flag) { |
197 fake_was_fetched_via_proxy_ = flag; | 199 fake_was_fetched_via_proxy_ = flag; |
198 } | 200 } |
199 | 201 |
200 void TestURLFetcher::set_response_headers( | 202 void TestURLFetcher::set_response_headers( |
201 scoped_refptr<net::HttpResponseHeaders> headers) { | 203 scoped_refptr<HttpResponseHeaders> headers) { |
202 fake_response_headers_ = headers; | 204 fake_response_headers_ = headers; |
203 } | 205 } |
204 | 206 |
205 void TestURLFetcher::set_backoff_delay(base::TimeDelta backoff_delay) { | 207 void TestURLFetcher::set_backoff_delay(base::TimeDelta backoff_delay) { |
206 fake_backoff_delay_ = backoff_delay; | 208 fake_backoff_delay_ = backoff_delay; |
207 } | 209 } |
208 | 210 |
209 void TestURLFetcher::SetResponseString(const std::string& response) { | 211 void TestURLFetcher::SetResponseString(const std::string& response) { |
210 fake_response_destination_ = STRING; | 212 fake_response_destination_ = STRING; |
211 fake_response_string_ = response; | 213 fake_response_string_ = response; |
212 } | 214 } |
213 | 215 |
214 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { | 216 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { |
215 fake_response_destination_ = TEMP_FILE; | 217 fake_response_destination_ = TEMP_FILE; |
216 fake_response_file_path_ = path; | 218 fake_response_file_path_ = path; |
217 } | 219 } |
218 | 220 |
219 TestURLFetcherFactory::TestURLFetcherFactory() | 221 TestURLFetcherFactory::TestURLFetcherFactory() |
220 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 222 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
221 } | 223 } |
222 | 224 |
223 TestURLFetcherFactory::~TestURLFetcherFactory() {} | 225 TestURLFetcherFactory::~TestURLFetcherFactory() {} |
224 | 226 |
225 net::URLFetcher* TestURLFetcherFactory::CreateURLFetcher( | 227 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( |
226 int id, | 228 int id, |
227 const GURL& url, | 229 const GURL& url, |
228 net::URLFetcher::RequestType request_type, | 230 URLFetcher::RequestType request_type, |
229 net::URLFetcherDelegate* d) { | 231 URLFetcherDelegate* d) { |
230 TestURLFetcher* fetcher = new TestURLFetcher(id, url, d); | 232 TestURLFetcher* fetcher = new TestURLFetcher(id, url, d); |
231 fetchers_[id] = fetcher; | 233 fetchers_[id] = fetcher; |
232 return fetcher; | 234 return fetcher; |
233 } | 235 } |
234 | 236 |
235 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { | 237 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { |
236 Fetchers::const_iterator i = fetchers_.find(id); | 238 Fetchers::const_iterator i = fetchers_.find(id); |
237 return i == fetchers_.end() ? NULL : i->second; | 239 return i == fetchers_.end() ? NULL : i->second; |
238 } | 240 } |
239 | 241 |
240 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { | 242 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { |
241 Fetchers::iterator i = fetchers_.find(id); | 243 Fetchers::iterator i = fetchers_.find(id); |
242 DCHECK(i != fetchers_.end()); | 244 DCHECK(i != fetchers_.end()); |
243 fetchers_.erase(i); | 245 fetchers_.erase(i); |
244 } | 246 } |
245 | 247 |
246 // This class is used by the FakeURLFetcherFactory below. | 248 // This class is used by the FakeURLFetcherFactory below. |
247 class FakeURLFetcher : public TestURLFetcher { | 249 class FakeURLFetcher : public TestURLFetcher { |
248 public: | 250 public: |
249 // Normal URL fetcher constructor but also takes in a pre-baked response. | 251 // Normal URL fetcher constructor but also takes in a pre-baked response. |
250 FakeURLFetcher(const GURL& url, | 252 FakeURLFetcher(const GURL& url, |
251 net::URLFetcherDelegate* d, | 253 URLFetcherDelegate* d, |
252 const std::string& response_data, bool success) | 254 const std::string& response_data, bool success) |
253 : TestURLFetcher(0, url, d), | 255 : TestURLFetcher(0, url, d), |
254 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 256 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
255 set_status(net::URLRequestStatus( | 257 set_status(URLRequestStatus( |
256 success ? net::URLRequestStatus::SUCCESS : | 258 success ? URLRequestStatus::SUCCESS : |
257 net::URLRequestStatus::FAILED, | 259 URLRequestStatus::FAILED, |
258 0)); | 260 0)); |
259 set_response_code(success ? 200 : 500); | 261 set_response_code(success ? 200 : 500); |
260 SetResponseString(response_data); | 262 SetResponseString(response_data); |
261 } | 263 } |
262 | 264 |
263 // Start the request. This will call the given delegate asynchronously | 265 // Start the request. This will call the given delegate asynchronously |
264 // with the pre-baked response as parameter. | 266 // with the pre-baked response as parameter. |
265 virtual void Start() OVERRIDE { | 267 virtual void Start() OVERRIDE { |
266 MessageLoop::current()->PostTask( | 268 MessageLoop::current()->PostTask( |
267 FROM_HERE, | 269 FROM_HERE, |
(...skipping 18 matching lines...) Expand all Loading... |
286 | 288 |
287 DISALLOW_COPY_AND_ASSIGN(FakeURLFetcher); | 289 DISALLOW_COPY_AND_ASSIGN(FakeURLFetcher); |
288 }; | 290 }; |
289 | 291 |
290 FakeURLFetcherFactory::FakeURLFetcherFactory() | 292 FakeURLFetcherFactory::FakeURLFetcherFactory() |
291 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 293 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
292 default_factory_(NULL) { | 294 default_factory_(NULL) { |
293 } | 295 } |
294 | 296 |
295 FakeURLFetcherFactory::FakeURLFetcherFactory( | 297 FakeURLFetcherFactory::FakeURLFetcherFactory( |
296 net::URLFetcherFactory* default_factory) | 298 URLFetcherFactory* default_factory) |
297 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 299 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
298 default_factory_(default_factory) { | 300 default_factory_(default_factory) { |
299 } | 301 } |
300 | 302 |
301 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} | 303 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} |
302 | 304 |
303 net::URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( | 305 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( |
304 int id, | 306 int id, |
305 const GURL& url, | 307 const GURL& url, |
306 net::URLFetcher::RequestType request_type, | 308 URLFetcher::RequestType request_type, |
307 net::URLFetcherDelegate* d) { | 309 URLFetcherDelegate* d) { |
308 FakeResponseMap::const_iterator it = fake_responses_.find(url); | 310 FakeResponseMap::const_iterator it = fake_responses_.find(url); |
309 if (it == fake_responses_.end()) { | 311 if (it == fake_responses_.end()) { |
310 if (default_factory_ == NULL) { | 312 if (default_factory_ == NULL) { |
311 // If we don't have a baked response for that URL we return NULL. | 313 // If we don't have a baked response for that URL we return NULL. |
312 DLOG(ERROR) << "No baked response for URL: " << url.spec(); | 314 DLOG(ERROR) << "No baked response for URL: " << url.spec(); |
313 return NULL; | 315 return NULL; |
314 } else { | 316 } else { |
315 return default_factory_->CreateURLFetcher(id, url, request_type, d); | 317 return default_factory_->CreateURLFetcher(id, url, request_type, d); |
316 } | 318 } |
317 } | 319 } |
318 return new FakeURLFetcher(url, d, it->second.first, it->second.second); | 320 return new FakeURLFetcher(url, d, it->second.first, it->second.second); |
319 } | 321 } |
320 | 322 |
321 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url, | 323 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url, |
322 const std::string& response_data, | 324 const std::string& response_data, |
323 bool success) { | 325 bool success) { |
324 // Overwrite existing URL if it already exists. | 326 // Overwrite existing URL if it already exists. |
325 fake_responses_[GURL(url)] = std::make_pair(response_data, success); | 327 fake_responses_[GURL(url)] = std::make_pair(response_data, success); |
326 } | 328 } |
327 | 329 |
328 void FakeURLFetcherFactory::ClearFakeResponses() { | 330 void FakeURLFetcherFactory::ClearFakeResponses() { |
329 fake_responses_.clear(); | 331 fake_responses_.clear(); |
330 } | 332 } |
331 | 333 |
332 URLFetcherImplFactory::URLFetcherImplFactory() {} | 334 URLFetcherImplFactory::URLFetcherImplFactory() {} |
333 | 335 |
334 URLFetcherImplFactory::~URLFetcherImplFactory() {} | 336 URLFetcherImplFactory::~URLFetcherImplFactory() {} |
335 | 337 |
336 net::URLFetcher* URLFetcherImplFactory::CreateURLFetcher( | 338 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( |
337 int id, | 339 int id, |
338 const GURL& url, | 340 const GURL& url, |
339 net::URLFetcher::RequestType request_type, | 341 URLFetcher::RequestType request_type, |
340 net::URLFetcherDelegate* d) { | 342 URLFetcherDelegate* d) { |
341 return new net::URLFetcherImpl(url, request_type, d); | 343 return new URLFetcherImpl(url, request_type, d); |
342 } | 344 } |
| 345 |
| 346 } // namespace net |
OLD | NEW |