| 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" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 Fetchers::iterator i = fetchers_.find(id); | 272 Fetchers::iterator i = fetchers_.find(id); |
| 273 DCHECK(i != fetchers_.end()); | 273 DCHECK(i != fetchers_.end()); |
| 274 fetchers_.erase(i); | 274 fetchers_.erase(i); |
| 275 } | 275 } |
| 276 | 276 |
| 277 void TestURLFetcherFactory::SetDelegateForTests( | 277 void TestURLFetcherFactory::SetDelegateForTests( |
| 278 TestURLFetcherDelegateForTests* delegate_for_tests) { | 278 TestURLFetcherDelegateForTests* delegate_for_tests) { |
| 279 delegate_for_tests_ = delegate_for_tests; | 279 delegate_for_tests_ = delegate_for_tests; |
| 280 } | 280 } |
| 281 | 281 |
| 282 // This class is used by the FakeURLFetcherFactory below. | 282 FakeURLFetcher::FakeURLFetcher(const GURL& url, |
| 283 class FakeURLFetcher : public TestURLFetcher { | 283 URLFetcherDelegate* d, |
| 284 public: | 284 const std::string& response_data, |
| 285 // Normal URL fetcher constructor but also takes in a pre-baked response. | 285 bool success) |
| 286 FakeURLFetcher(const GURL& url, | 286 : TestURLFetcher(0, url, d), |
| 287 URLFetcherDelegate* d, | 287 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| 288 const std::string& response_data, bool success) | 288 set_status(URLRequestStatus( |
| 289 : TestURLFetcher(0, url, d), | 289 success ? URLRequestStatus::SUCCESS : URLRequestStatus::FAILED, |
| 290 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 290 0)); |
| 291 set_status(URLRequestStatus( | 291 set_response_code(success ? 200 : 500); |
| 292 success ? URLRequestStatus::SUCCESS : URLRequestStatus::FAILED, | 292 SetResponseString(response_data); |
| 293 0)); | 293 } |
| 294 set_response_code(success ? 200 : 500); | |
| 295 SetResponseString(response_data); | |
| 296 } | |
| 297 | 294 |
| 298 // Start the request. This will call the given delegate asynchronously | 295 FakeURLFetcher::~FakeURLFetcher() {} |
| 299 // with the pre-baked response as parameter. | |
| 300 virtual void Start() OVERRIDE { | |
| 301 MessageLoop::current()->PostTask( | |
| 302 FROM_HERE, | |
| 303 base::Bind(&FakeURLFetcher::RunDelegate, weak_factory_.GetWeakPtr())); | |
| 304 } | |
| 305 | 296 |
| 306 virtual const GURL& GetURL() const OVERRIDE { | 297 void FakeURLFetcher::Start() { |
| 307 return TestURLFetcher::GetOriginalURL(); | 298 MessageLoop::current()->PostTask( |
| 308 } | 299 FROM_HERE, |
| 300 base::Bind(&FakeURLFetcher::RunDelegate, weak_factory_.GetWeakPtr())); |
| 301 } |
| 309 | 302 |
| 310 private: | 303 void FakeURLFetcher::RunDelegate() { |
| 311 virtual ~FakeURLFetcher() { | 304 delegate()->OnURLFetchComplete(this); |
| 312 } | 305 } |
| 313 | 306 |
| 314 // This is the method which actually calls the delegate that is passed in the | 307 const GURL& FakeURLFetcher::GetURL() const { |
| 315 // constructor. | 308 return TestURLFetcher::GetOriginalURL(); |
| 316 void RunDelegate() { | |
| 317 delegate()->OnURLFetchComplete(this); | |
| 318 } | |
| 319 | |
| 320 base::WeakPtrFactory<FakeURLFetcher> weak_factory_; | |
| 321 | |
| 322 DISALLOW_COPY_AND_ASSIGN(FakeURLFetcher); | |
| 323 }; | |
| 324 | |
| 325 FakeURLFetcherFactory::FakeURLFetcherFactory() | |
| 326 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | |
| 327 default_factory_(NULL) { | |
| 328 } | 309 } |
| 329 | 310 |
| 330 FakeURLFetcherFactory::FakeURLFetcherFactory( | 311 FakeURLFetcherFactory::FakeURLFetcherFactory( |
| 331 URLFetcherFactory* default_factory) | 312 URLFetcherFactory* default_factory) |
| 332 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 313 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 314 creator_(base::Bind(&DefaultFakeURLFetcherCreator)), |
| 333 default_factory_(default_factory) { | 315 default_factory_(default_factory) { |
| 334 } | 316 } |
| 335 | 317 |
| 318 FakeURLFetcherFactory::FakeURLFetcherFactory( |
| 319 URLFetcherFactory* default_factory, |
| 320 const FakeURLFetcherCreator& creator) |
| 321 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 322 creator_(creator), |
| 323 default_factory_(default_factory) { |
| 324 } |
| 325 |
| 326 scoped_ptr<FakeURLFetcher> FakeURLFetcherFactory::DefaultFakeURLFetcherCreator( |
| 327 const GURL& url, |
| 328 URLFetcherDelegate* delegate, |
| 329 const std::string& response, |
| 330 bool success) { |
| 331 return scoped_ptr<FakeURLFetcher>(new FakeURLFetcher(url, delegate, |
| 332 response, success)); |
| 333 } |
| 334 |
| 336 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} | 335 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} |
| 337 | 336 |
| 338 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( | 337 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( |
| 339 int id, | 338 int id, |
| 340 const GURL& url, | 339 const GURL& url, |
| 341 URLFetcher::RequestType request_type, | 340 URLFetcher::RequestType request_type, |
| 342 URLFetcherDelegate* d) { | 341 URLFetcherDelegate* d) { |
| 343 FakeResponseMap::const_iterator it = fake_responses_.find(url); | 342 FakeResponseMap::const_iterator it = fake_responses_.find(url); |
| 344 if (it == fake_responses_.end()) { | 343 if (it == fake_responses_.end()) { |
| 345 if (default_factory_ == NULL) { | 344 if (default_factory_ == NULL) { |
| 346 // If we don't have a baked response for that URL we return NULL. | 345 // If we don't have a baked response for that URL we return NULL. |
| 347 DLOG(ERROR) << "No baked response for URL: " << url.spec(); | 346 DLOG(ERROR) << "No baked response for URL: " << url.spec(); |
| 348 return NULL; | 347 return NULL; |
| 349 } else { | 348 } else { |
| 350 return default_factory_->CreateURLFetcher(id, url, request_type, d); | 349 return default_factory_->CreateURLFetcher(id, url, request_type, d); |
| 351 } | 350 } |
| 352 } | 351 } |
| 353 return new FakeURLFetcher(url, d, it->second.first, it->second.second); | 352 |
| 353 scoped_ptr<FakeURLFetcher> fake_fetcher = |
| 354 creator_.Run(url, d, it->second.first, it->second.second); |
| 355 // TODO: Make URLFetcherFactory::CreateURLFetcher return a scoped_ptr |
| 356 return fake_fetcher.release(); |
| 354 } | 357 } |
| 355 | 358 |
| 356 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url, | 359 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url, |
| 357 const std::string& response_data, | 360 const std::string& response_data, |
| 358 bool success) { | 361 bool success) { |
| 359 // Overwrite existing URL if it already exists. | 362 // Overwrite existing URL if it already exists. |
| 360 fake_responses_[GURL(url)] = std::make_pair(response_data, success); | 363 fake_responses_[GURL(url)] = std::make_pair(response_data, success); |
| 361 } | 364 } |
| 362 | 365 |
| 363 void FakeURLFetcherFactory::ClearFakeResponses() { | 366 void FakeURLFetcherFactory::ClearFakeResponses() { |
| 364 fake_responses_.clear(); | 367 fake_responses_.clear(); |
| 365 } | 368 } |
| 366 | 369 |
| 367 URLFetcherImplFactory::URLFetcherImplFactory() {} | 370 URLFetcherImplFactory::URLFetcherImplFactory() {} |
| 368 | 371 |
| 369 URLFetcherImplFactory::~URLFetcherImplFactory() {} | 372 URLFetcherImplFactory::~URLFetcherImplFactory() {} |
| 370 | 373 |
| 371 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( | 374 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( |
| 372 int id, | 375 int id, |
| 373 const GURL& url, | 376 const GURL& url, |
| 374 URLFetcher::RequestType request_type, | 377 URLFetcher::RequestType request_type, |
| 375 URLFetcherDelegate* d) { | 378 URLFetcherDelegate* d) { |
| 376 return new URLFetcherImpl(url, request_type, d); | 379 return new URLFetcherImpl(url, request_type, d); |
| 377 } | 380 } |
| 378 | 381 |
| 379 } // namespace net | 382 } // namespace net |
| OLD | NEW |