| 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 "net/url_request/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/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "net/base/host_port_pair.h" | 13 #include "net/base/host_port_pair.h" |
| 14 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
| 15 #include "net/base/net_errors.h" | 15 #include "net/base/net_errors.h" |
| 16 #include "net/http/http_response_headers.h" | 16 #include "net/http/http_response_headers.h" |
| 17 #include "net/url_request/url_fetcher_delegate.h" | 17 #include "net/url_request/url_fetcher_delegate.h" |
| 18 #include "net/url_request/url_fetcher_impl.h" | 18 #include "net/url_request/url_fetcher_impl.h" |
| 19 #include "net/url_request/url_fetcher_response_writer.h" | 19 #include "net/url_request/url_fetcher_response_writer.h" |
| 20 #include "net/url_request/url_request_status.h" | 20 #include "net/url_request/url_request_status.h" |
| 21 | 21 |
| 22 namespace net { | 22 namespace net { |
| 23 | 23 |
| 24 ScopedURLFetcherFactory::ScopedURLFetcherFactory( | 24 ScopedURLFetcherFactory::ScopedURLFetcherFactory(URLFetcherFactory* factory) { |
| 25 URLFetcherFactory* factory) { | |
| 26 DCHECK(!URLFetcherImpl::factory()); | 25 DCHECK(!URLFetcherImpl::factory()); |
| 27 URLFetcherImpl::set_factory(factory); | 26 URLFetcherImpl::set_factory(factory); |
| 28 } | 27 } |
| 29 | 28 |
| 30 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { | 29 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { |
| 31 DCHECK(URLFetcherImpl::factory()); | 30 DCHECK(URLFetcherImpl::factory()); |
| 32 URLFetcherImpl::set_factory(NULL); | 31 URLFetcherImpl::set_factory(NULL); |
| 33 } | 32 } |
| 34 | 33 |
| 35 TestURLFetcher::TestURLFetcher(int id, | 34 TestURLFetcher::TestURLFetcher(int id, const GURL& url, URLFetcherDelegate* d) |
| 36 const GURL& url, | |
| 37 URLFetcherDelegate* d) | |
| 38 : owner_(NULL), | 35 : owner_(NULL), |
| 39 id_(id), | 36 id_(id), |
| 40 original_url_(url), | 37 original_url_(url), |
| 41 delegate_(d), | 38 delegate_(d), |
| 42 delegate_for_tests_(NULL), | 39 delegate_for_tests_(NULL), |
| 43 did_receive_last_chunk_(false), | 40 did_receive_last_chunk_(false), |
| 44 fake_load_flags_(0), | 41 fake_load_flags_(0), |
| 45 fake_response_code_(-1), | 42 fake_response_code_(-1), |
| 46 fake_response_destination_(STRING), | 43 fake_response_destination_(STRING), |
| 47 fake_was_fetched_via_proxy_(false), | 44 fake_was_fetched_via_proxy_(false), |
| (...skipping 27 matching lines...) Expand all Loading... |
| 75 void TestURLFetcher::AppendChunkToUpload(const std::string& data, | 72 void TestURLFetcher::AppendChunkToUpload(const std::string& data, |
| 76 bool is_last_chunk) { | 73 bool is_last_chunk) { |
| 77 DCHECK(!did_receive_last_chunk_); | 74 DCHECK(!did_receive_last_chunk_); |
| 78 did_receive_last_chunk_ = is_last_chunk; | 75 did_receive_last_chunk_ = is_last_chunk; |
| 79 chunks_.push_back(data); | 76 chunks_.push_back(data); |
| 80 if (delegate_for_tests_) | 77 if (delegate_for_tests_) |
| 81 delegate_for_tests_->OnChunkUpload(id_); | 78 delegate_for_tests_->OnChunkUpload(id_); |
| 82 } | 79 } |
| 83 | 80 |
| 84 void TestURLFetcher::SetLoadFlags(int load_flags) { | 81 void TestURLFetcher::SetLoadFlags(int load_flags) { |
| 85 fake_load_flags_= load_flags; | 82 fake_load_flags_ = load_flags; |
| 86 } | 83 } |
| 87 | 84 |
| 88 int TestURLFetcher::GetLoadFlags() const { | 85 int TestURLFetcher::GetLoadFlags() const { |
| 89 return fake_load_flags_; | 86 return fake_load_flags_; |
| 90 } | 87 } |
| 91 | 88 |
| 92 void TestURLFetcher::SetReferrer(const std::string& referrer) { | 89 void TestURLFetcher::SetReferrer(const std::string& referrer) { |
| 93 } | 90 } |
| 94 | 91 |
| 95 void TestURLFetcher::SetReferrerPolicy( | 92 void TestURLFetcher::SetReferrerPolicy( |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 | 148 |
| 152 void TestURLFetcher::SaveResponseWithWriter( | 149 void TestURLFetcher::SaveResponseWithWriter( |
| 153 scoped_ptr<URLFetcherResponseWriter> response_writer) { | 150 scoped_ptr<URLFetcherResponseWriter> response_writer) { |
| 154 if (fake_response_destination_ == STRING) { | 151 if (fake_response_destination_ == STRING) { |
| 155 response_writer_ = response_writer.Pass(); | 152 response_writer_ = response_writer.Pass(); |
| 156 int response = response_writer_->Initialize(CompletionCallback()); | 153 int response = response_writer_->Initialize(CompletionCallback()); |
| 157 // The TestURLFetcher doesn't handle asynchronous writes. | 154 // The TestURLFetcher doesn't handle asynchronous writes. |
| 158 DCHECK_EQ(OK, response); | 155 DCHECK_EQ(OK, response); |
| 159 | 156 |
| 160 scoped_refptr<IOBuffer> buffer(new StringIOBuffer(fake_response_string_)); | 157 scoped_refptr<IOBuffer> buffer(new StringIOBuffer(fake_response_string_)); |
| 161 response = response_writer_->Write(buffer.get(), | 158 response = response_writer_->Write( |
| 162 fake_response_string_.size(), | 159 buffer.get(), fake_response_string_.size(), CompletionCallback()); |
| 163 CompletionCallback()); | |
| 164 DCHECK_EQ(static_cast<int>(fake_response_string_.size()), response); | 160 DCHECK_EQ(static_cast<int>(fake_response_string_.size()), response); |
| 165 response = response_writer_->Finish(CompletionCallback()); | 161 response = response_writer_->Finish(CompletionCallback()); |
| 166 DCHECK_EQ(OK, response); | 162 DCHECK_EQ(OK, response); |
| 167 } else { | 163 } else { |
| 168 NOTIMPLEMENTED(); | 164 NOTIMPLEMENTED(); |
| 169 } | 165 } |
| 170 } | 166 } |
| 171 | 167 |
| 172 HttpResponseHeaders* TestURLFetcher::GetResponseHeaders() const { | 168 HttpResponseHeaders* TestURLFetcher::GetResponseHeaders() const { |
| 173 return fake_response_headers_.get(); | 169 return fake_response_headers_.get(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 bool TestURLFetcher::GetResponseAsString( | 210 bool TestURLFetcher::GetResponseAsString( |
| 215 std::string* out_response_string) const { | 211 std::string* out_response_string) const { |
| 216 if (fake_response_destination_ != STRING) | 212 if (fake_response_destination_ != STRING) |
| 217 return false; | 213 return false; |
| 218 | 214 |
| 219 *out_response_string = fake_response_string_; | 215 *out_response_string = fake_response_string_; |
| 220 return true; | 216 return true; |
| 221 } | 217 } |
| 222 | 218 |
| 223 bool TestURLFetcher::GetResponseAsFilePath( | 219 bool TestURLFetcher::GetResponseAsFilePath( |
| 224 bool take_ownership, base::FilePath* out_response_path) const { | 220 bool take_ownership, |
| 221 base::FilePath* out_response_path) const { |
| 225 if (fake_response_destination_ != TEMP_FILE) | 222 if (fake_response_destination_ != TEMP_FILE) |
| 226 return false; | 223 return false; |
| 227 | 224 |
| 228 *out_response_path = fake_response_file_path_; | 225 *out_response_path = fake_response_file_path_; |
| 229 return true; | 226 return true; |
| 230 } | 227 } |
| 231 | 228 |
| 232 void TestURLFetcher::GetExtraRequestHeaders( | 229 void TestURLFetcher::GetExtraRequestHeaders(HttpRequestHeaders* headers) const { |
| 233 HttpRequestHeaders* headers) const { | |
| 234 *headers = fake_extra_request_headers_; | 230 *headers = fake_extra_request_headers_; |
| 235 } | 231 } |
| 236 | 232 |
| 237 void TestURLFetcher::set_status(const URLRequestStatus& status) { | 233 void TestURLFetcher::set_status(const URLRequestStatus& status) { |
| 238 fake_status_ = status; | 234 fake_status_ = status; |
| 239 } | 235 } |
| 240 | 236 |
| 241 void TestURLFetcher::set_was_fetched_via_proxy(bool flag) { | 237 void TestURLFetcher::set_was_fetched_via_proxy(bool flag) { |
| 242 fake_was_fetched_via_proxy_ = flag; | 238 fake_was_fetched_via_proxy_ = flag; |
| 243 } | 239 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 264 fake_response_destination_ = TEMP_FILE; | 260 fake_response_destination_ = TEMP_FILE; |
| 265 fake_response_file_path_ = path; | 261 fake_response_file_path_ = path; |
| 266 } | 262 } |
| 267 | 263 |
| 268 TestURLFetcherFactory::TestURLFetcherFactory() | 264 TestURLFetcherFactory::TestURLFetcherFactory() |
| 269 : ScopedURLFetcherFactory(this), | 265 : ScopedURLFetcherFactory(this), |
| 270 delegate_for_tests_(NULL), | 266 delegate_for_tests_(NULL), |
| 271 remove_fetcher_on_delete_(false) { | 267 remove_fetcher_on_delete_(false) { |
| 272 } | 268 } |
| 273 | 269 |
| 274 TestURLFetcherFactory::~TestURLFetcherFactory() {} | 270 TestURLFetcherFactory::~TestURLFetcherFactory() { |
| 271 } |
| 275 | 272 |
| 276 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( | 273 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( |
| 277 int id, | 274 int id, |
| 278 const GURL& url, | 275 const GURL& url, |
| 279 URLFetcher::RequestType request_type, | 276 URLFetcher::RequestType request_type, |
| 280 URLFetcherDelegate* d) { | 277 URLFetcherDelegate* d) { |
| 281 TestURLFetcher* fetcher = new TestURLFetcher(id, url, d); | 278 TestURLFetcher* fetcher = new TestURLFetcher(id, url, d); |
| 282 if (remove_fetcher_on_delete_) | 279 if (remove_fetcher_on_delete_) |
| 283 fetcher->set_owner(this); | 280 fetcher->set_owner(this); |
| 284 fetcher->SetDelegateForTests(delegate_for_tests_); | 281 fetcher->SetDelegateForTests(delegate_for_tests_); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 300 void TestURLFetcherFactory::SetDelegateForTests( | 297 void TestURLFetcherFactory::SetDelegateForTests( |
| 301 TestURLFetcherDelegateForTests* delegate_for_tests) { | 298 TestURLFetcherDelegateForTests* delegate_for_tests) { |
| 302 delegate_for_tests_ = delegate_for_tests; | 299 delegate_for_tests_ = delegate_for_tests; |
| 303 } | 300 } |
| 304 | 301 |
| 305 FakeURLFetcher::FakeURLFetcher(const GURL& url, | 302 FakeURLFetcher::FakeURLFetcher(const GURL& url, |
| 306 URLFetcherDelegate* d, | 303 URLFetcherDelegate* d, |
| 307 const std::string& response_data, | 304 const std::string& response_data, |
| 308 HttpStatusCode response_code, | 305 HttpStatusCode response_code, |
| 309 URLRequestStatus::Status status) | 306 URLRequestStatus::Status status) |
| 310 : TestURLFetcher(0, url, d), | 307 : TestURLFetcher(0, url, d), weak_factory_(this) { |
| 311 weak_factory_(this) { | |
| 312 Error error = OK; | 308 Error error = OK; |
| 313 switch(status) { | 309 switch (status) { |
| 314 case URLRequestStatus::SUCCESS: | 310 case URLRequestStatus::SUCCESS: |
| 315 // |error| is initialized to OK. | 311 // |error| is initialized to OK. |
| 316 break; | 312 break; |
| 317 case URLRequestStatus::IO_PENDING: | 313 case URLRequestStatus::IO_PENDING: |
| 318 error = ERR_IO_PENDING; | 314 error = ERR_IO_PENDING; |
| 319 break; | 315 break; |
| 320 case URLRequestStatus::CANCELED: | 316 case URLRequestStatus::CANCELED: |
| 321 error = ERR_ABORTED; | 317 error = ERR_ABORTED; |
| 322 break; | 318 break; |
| 323 case URLRequestStatus::FAILED: | 319 case URLRequestStatus::FAILED: |
| 324 error = ERR_FAILED; | 320 error = ERR_FAILED; |
| 325 break; | 321 break; |
| 326 } | 322 } |
| 327 set_status(URLRequestStatus(status, error)); | 323 set_status(URLRequestStatus(status, error)); |
| 328 set_response_code(response_code); | 324 set_response_code(response_code); |
| 329 SetResponseString(response_data); | 325 SetResponseString(response_data); |
| 330 } | 326 } |
| 331 | 327 |
| 332 FakeURLFetcher::~FakeURLFetcher() {} | 328 FakeURLFetcher::~FakeURLFetcher() { |
| 329 } |
| 333 | 330 |
| 334 void FakeURLFetcher::Start() { | 331 void FakeURLFetcher::Start() { |
| 335 base::MessageLoop::current()->PostTask( | 332 base::MessageLoop::current()->PostTask( |
| 336 FROM_HERE, | 333 FROM_HERE, |
| 337 base::Bind(&FakeURLFetcher::RunDelegate, weak_factory_.GetWeakPtr())); | 334 base::Bind(&FakeURLFetcher::RunDelegate, weak_factory_.GetWeakPtr())); |
| 338 } | 335 } |
| 339 | 336 |
| 340 void FakeURLFetcher::RunDelegate() { | 337 void FakeURLFetcher::RunDelegate() { |
| 341 delegate()->OnURLFetchComplete(this); | 338 delegate()->OnURLFetchComplete(this); |
| 342 } | 339 } |
| 343 | 340 |
| 344 const GURL& FakeURLFetcher::GetURL() const { | 341 const GURL& FakeURLFetcher::GetURL() const { |
| 345 return TestURLFetcher::GetOriginalURL(); | 342 return TestURLFetcher::GetOriginalURL(); |
| 346 } | 343 } |
| 347 | 344 |
| 348 FakeURLFetcherFactory::FakeURLFetcherFactory( | 345 FakeURLFetcherFactory::FakeURLFetcherFactory(URLFetcherFactory* default_factory) |
| 349 URLFetcherFactory* default_factory) | |
| 350 : ScopedURLFetcherFactory(this), | 346 : ScopedURLFetcherFactory(this), |
| 351 creator_(base::Bind(&DefaultFakeURLFetcherCreator)), | 347 creator_(base::Bind(&DefaultFakeURLFetcherCreator)), |
| 352 default_factory_(default_factory) { | 348 default_factory_(default_factory) { |
| 353 } | 349 } |
| 354 | 350 |
| 355 FakeURLFetcherFactory::FakeURLFetcherFactory( | 351 FakeURLFetcherFactory::FakeURLFetcherFactory( |
| 356 URLFetcherFactory* default_factory, | 352 URLFetcherFactory* default_factory, |
| 357 const FakeURLFetcherCreator& creator) | 353 const FakeURLFetcherCreator& creator) |
| 358 : ScopedURLFetcherFactory(this), | 354 : ScopedURLFetcherFactory(this), |
| 359 creator_(creator), | 355 creator_(creator), |
| 360 default_factory_(default_factory) { | 356 default_factory_(default_factory) { |
| 361 } | 357 } |
| 362 | 358 |
| 363 scoped_ptr<FakeURLFetcher> FakeURLFetcherFactory::DefaultFakeURLFetcherCreator( | 359 scoped_ptr<FakeURLFetcher> FakeURLFetcherFactory::DefaultFakeURLFetcherCreator( |
| 364 const GURL& url, | 360 const GURL& url, |
| 365 URLFetcherDelegate* delegate, | 361 URLFetcherDelegate* delegate, |
| 366 const std::string& response_data, | 362 const std::string& response_data, |
| 367 HttpStatusCode response_code, | 363 HttpStatusCode response_code, |
| 368 URLRequestStatus::Status status) { | 364 URLRequestStatus::Status status) { |
| 369 return scoped_ptr<FakeURLFetcher>( | 365 return scoped_ptr<FakeURLFetcher>( |
| 370 new FakeURLFetcher(url, delegate, response_data, response_code, status)); | 366 new FakeURLFetcher(url, delegate, response_data, response_code, status)); |
| 371 } | 367 } |
| 372 | 368 |
| 373 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} | 369 FakeURLFetcherFactory::~FakeURLFetcherFactory() { |
| 370 } |
| 374 | 371 |
| 375 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( | 372 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( |
| 376 int id, | 373 int id, |
| 377 const GURL& url, | 374 const GURL& url, |
| 378 URLFetcher::RequestType request_type, | 375 URLFetcher::RequestType request_type, |
| 379 URLFetcherDelegate* d) { | 376 URLFetcherDelegate* d) { |
| 380 FakeResponseMap::const_iterator it = fake_responses_.find(url); | 377 FakeResponseMap::const_iterator it = fake_responses_.find(url); |
| 381 if (it == fake_responses_.end()) { | 378 if (it == fake_responses_.end()) { |
| 382 if (default_factory_ == NULL) { | 379 if (default_factory_ == NULL) { |
| 383 // If we don't have a baked response for that URL we return NULL. | 380 // If we don't have a baked response for that URL we return NULL. |
| 384 DLOG(ERROR) << "No baked response for URL: " << url.spec(); | 381 DLOG(ERROR) << "No baked response for URL: " << url.spec(); |
| 385 return NULL; | 382 return NULL; |
| 386 } else { | 383 } else { |
| 387 return default_factory_->CreateURLFetcher(id, url, request_type, d); | 384 return default_factory_->CreateURLFetcher(id, url, request_type, d); |
| 388 } | 385 } |
| 389 } | 386 } |
| 390 | 387 |
| 391 scoped_ptr<FakeURLFetcher> fake_fetcher = | 388 scoped_ptr<FakeURLFetcher> fake_fetcher = |
| 392 creator_.Run(url, d, it->second.response_data, | 389 creator_.Run(url, |
| 393 it->second.response_code, it->second.status); | 390 d, |
| 391 it->second.response_data, |
| 392 it->second.response_code, |
| 393 it->second.status); |
| 394 // TODO: Make URLFetcherFactory::CreateURLFetcher return a scoped_ptr | 394 // TODO: Make URLFetcherFactory::CreateURLFetcher return a scoped_ptr |
| 395 return fake_fetcher.release(); | 395 return fake_fetcher.release(); |
| 396 } | 396 } |
| 397 | 397 |
| 398 void FakeURLFetcherFactory::SetFakeResponse( | 398 void FakeURLFetcherFactory::SetFakeResponse(const GURL& url, |
| 399 const GURL& url, | 399 const std::string& response_data, |
| 400 const std::string& response_data, | 400 HttpStatusCode response_code, |
| 401 HttpStatusCode response_code, | 401 URLRequestStatus::Status status) { |
| 402 URLRequestStatus::Status status) { | |
| 403 // Overwrite existing URL if it already exists. | 402 // Overwrite existing URL if it already exists. |
| 404 FakeURLResponse response; | 403 FakeURLResponse response; |
| 405 response.response_data = response_data; | 404 response.response_data = response_data; |
| 406 response.response_code = response_code; | 405 response.response_code = response_code; |
| 407 response.status = status; | 406 response.status = status; |
| 408 fake_responses_[url] = response; | 407 fake_responses_[url] = response; |
| 409 } | 408 } |
| 410 | 409 |
| 411 void FakeURLFetcherFactory::ClearFakeResponses() { | 410 void FakeURLFetcherFactory::ClearFakeResponses() { |
| 412 fake_responses_.clear(); | 411 fake_responses_.clear(); |
| 413 } | 412 } |
| 414 | 413 |
| 415 URLFetcherImplFactory::URLFetcherImplFactory() {} | 414 URLFetcherImplFactory::URLFetcherImplFactory() { |
| 415 } |
| 416 | 416 |
| 417 URLFetcherImplFactory::~URLFetcherImplFactory() {} | 417 URLFetcherImplFactory::~URLFetcherImplFactory() { |
| 418 } |
| 418 | 419 |
| 419 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( | 420 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( |
| 420 int id, | 421 int id, |
| 421 const GURL& url, | 422 const GURL& url, |
| 422 URLFetcher::RequestType request_type, | 423 URLFetcher::RequestType request_type, |
| 423 URLFetcherDelegate* d) { | 424 URLFetcherDelegate* d) { |
| 424 return new URLFetcherImpl(url, request_type, d); | 425 return new URLFetcherImpl(url, request_type, d); |
| 425 } | 426 } |
| 426 | 427 |
| 427 } // namespace net | 428 } // namespace net |
| OLD | NEW |