Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: net/url_request/test_url_fetcher_factory.cc

Issue 12211076: Refactored FakeURLFetcher to make it more flexible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated reviewer feedback Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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.
283 class FakeURLFetcher : public TestURLFetcher {
284 public:
285 // Normal URL fetcher constructor but also takes in a pre-baked response.
286 FakeURLFetcher(const GURL& url,
287 URLFetcherDelegate* d,
288 const std::string& response_data, bool success)
289 : TestURLFetcher(0, url, d),
290 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
291 set_status(URLRequestStatus(
292 success ? URLRequestStatus::SUCCESS : URLRequestStatus::FAILED,
293 0));
294 set_response_code(success ? 200 : 500);
295 SetResponseString(response_data);
296 }
297
298 // Start the request. This will call the given delegate asynchronously
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
306 virtual const GURL& GetURL() const OVERRIDE {
307 return TestURLFetcher::GetOriginalURL();
308 }
309
310 private:
311 virtual ~FakeURLFetcher() {
312 }
313
314 // This is the method which actually calls the delegate that is passed in the
315 // constructor.
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() 282 FakeURLFetcherFactory::FakeURLFetcherFactory()
326 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 283 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
284 creator_(base::Bind(&DefaultFakeURLFetcherCreator)),
327 default_factory_(NULL) { 285 default_factory_(NULL) {
328 } 286 }
329 287
330 FakeURLFetcherFactory::FakeURLFetcherFactory( 288 FakeURLFetcherFactory::FakeURLFetcherFactory(
331 URLFetcherFactory* default_factory) 289 URLFetcherFactory* default_factory)
332 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 290 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
291 creator_(base::Bind(&DefaultFakeURLFetcherCreator)),
333 default_factory_(default_factory) { 292 default_factory_(default_factory) {
334 } 293 }
335 294
295 FakeURLFetcherFactory::FakeURLFetcherFactory(
296 const FakeURLFetcherCreator& creator,
297 URLFetcherFactory* default_factory)
298 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
299 creator_(creator),
300 default_factory_(default_factory) {
301 }
302
303 FakeURLFetcher* FakeURLFetcherFactory::DefaultFakeURLFetcherCreator(
304 const GURL& url,
305 URLFetcherDelegate* delegate,
306 const std::string& response,
307 bool success) {
308 return new FakeURLFetcher(url, delegate, response, success);
309 }
310
336 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} 311 FakeURLFetcherFactory::~FakeURLFetcherFactory() {}
337 312
338 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( 313 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher(
339 int id, 314 int id,
340 const GURL& url, 315 const GURL& url,
341 URLFetcher::RequestType request_type, 316 URLFetcher::RequestType request_type,
342 URLFetcherDelegate* d) { 317 URLFetcherDelegate* d) {
343 FakeResponseMap::const_iterator it = fake_responses_.find(url); 318 FakeResponseMap::const_iterator it = fake_responses_.find(url);
344 if (it == fake_responses_.end()) { 319 if (it == fake_responses_.end()) {
345 if (default_factory_ == NULL) { 320 if (default_factory_ == NULL) {
346 // If we don't have a baked response for that URL we return NULL. 321 // If we don't have a baked response for that URL we return NULL.
347 DLOG(ERROR) << "No baked response for URL: " << url.spec(); 322 DLOG(ERROR) << "No baked response for URL: " << url.spec();
348 return NULL; 323 return NULL;
349 } else { 324 } else {
350 return default_factory_->CreateURLFetcher(id, url, request_type, d); 325 return default_factory_->CreateURLFetcher(id, url, request_type, d);
351 } 326 }
352 } 327 }
353 return new FakeURLFetcher(url, d, it->second.first, it->second.second); 328 return creator_.Run(url, d, it->second.first, it->second.second);
354 } 329 }
355 330
356 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url, 331 void FakeURLFetcherFactory::SetFakeResponse(const std::string& url,
357 const std::string& response_data, 332 const std::string& response_data,
358 bool success) { 333 bool success) {
359 // Overwrite existing URL if it already exists. 334 // Overwrite existing URL if it already exists.
360 fake_responses_[GURL(url)] = std::make_pair(response_data, success); 335 fake_responses_[GURL(url)] = std::make_pair(response_data, success);
361 } 336 }
362 337
363 void FakeURLFetcherFactory::ClearFakeResponses() { 338 void FakeURLFetcherFactory::ClearFakeResponses() {
364 fake_responses_.clear(); 339 fake_responses_.clear();
365 } 340 }
366 341
342
akalin 2013/02/13 20:44:01 remove extra newline
Noam Samuel (WRONG ACCOUNT) 2013/02/13 21:37:46 Done.
343
344 FakeURLFetcher::FakeURLFetcher(const GURL& url,
akalin 2013/02/13 20:44:01 move this above the FakeURLFetcherFactory methods
Noam Samuel (WRONG ACCOUNT) 2013/02/13 21:37:46 Done.
345 URLFetcherDelegate* d,
346 const std::string& response_data, bool success)
347 : TestURLFetcher(0, url, d),
348 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
349 set_status(URLRequestStatus(
350 success ? URLRequestStatus::SUCCESS : URLRequestStatus::FAILED,
351 0));
352 set_response_code(success ? 200 : 500);
353 SetResponseString(response_data);
354 }
355
356 void FakeURLFetcher::Start() {
357 MessageLoop::current()->PostTask(
358 FROM_HERE,
359 base::Bind(&FakeURLFetcher::RunDelegate, weak_factory_.GetWeakPtr()));
360 }
361
362 FakeURLFetcher::~FakeURLFetcher() {}
363
364 void FakeURLFetcher::RunDelegate() {
365 delegate()->OnURLFetchComplete(this);
366 }
367
368
369 const GURL& FakeURLFetcher::GetURL() const {
370 return TestURLFetcher::GetOriginalURL();
371 }
372
367 URLFetcherImplFactory::URLFetcherImplFactory() {} 373 URLFetcherImplFactory::URLFetcherImplFactory() {}
368 374
369 URLFetcherImplFactory::~URLFetcherImplFactory() {} 375 URLFetcherImplFactory::~URLFetcherImplFactory() {}
370 376
371 URLFetcher* URLFetcherImplFactory::CreateURLFetcher( 377 URLFetcher* URLFetcherImplFactory::CreateURLFetcher(
372 int id, 378 int id,
373 const GURL& url, 379 const GURL& url,
374 URLFetcher::RequestType request_type, 380 URLFetcher::RequestType request_type,
375 URLFetcherDelegate* d) { 381 URLFetcherDelegate* d) {
376 return new URLFetcherImpl(url, request_type, d); 382 return new URLFetcherImpl(url, request_type, d);
377 } 383 }
378 384
379 } // namespace net 385 } // namespace net
OLDNEW
« net/url_request/test_url_fetcher_factory.h ('K') | « net/url_request/test_url_fetcher_factory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698