| Index: net/url_request/test_url_fetcher_factory.h
|
| diff --git a/net/url_request/test_url_fetcher_factory.h b/net/url_request/test_url_fetcher_factory.h
|
| deleted file mode 100644
|
| index 5ceef51ec62f234211b7a3687962f88814248e51..0000000000000000000000000000000000000000
|
| --- a/net/url_request/test_url_fetcher_factory.h
|
| +++ /dev/null
|
| @@ -1,464 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef NET_URL_REQUEST_TEST_URL_FETCHER_FACTORY_H_
|
| -#define NET_URL_REQUEST_TEST_URL_FETCHER_FACTORY_H_
|
| -
|
| -#include <list>
|
| -#include <map>
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/callback.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/threading/non_thread_safe.h"
|
| -#include "net/http/http_request_headers.h"
|
| -#include "net/http/http_status_code.h"
|
| -#include "net/url_request/url_fetcher_factory.h"
|
| -#include "net/url_request/url_request_status.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace net {
|
| -
|
| -// Changes URLFetcher's Factory for the lifetime of the object.
|
| -// Note that this scoper cannot be nested (to make it even harder to misuse).
|
| -class ScopedURLFetcherFactory : public base::NonThreadSafe {
|
| - public:
|
| - explicit ScopedURLFetcherFactory(URLFetcherFactory* factory);
|
| - virtual ~ScopedURLFetcherFactory();
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(ScopedURLFetcherFactory);
|
| -};
|
| -
|
| -// TestURLFetcher and TestURLFetcherFactory are used for testing consumers of
|
| -// URLFetcher. TestURLFetcherFactory is a URLFetcherFactory that creates
|
| -// TestURLFetchers. TestURLFetcher::Start is overriden to do nothing. It is
|
| -// expected that you'll grab the delegate from the TestURLFetcher and invoke
|
| -// the callback method when appropriate. In this way it's easy to mock a
|
| -// URLFetcher.
|
| -// Typical usage:
|
| -// // TestURLFetcher requires a MessageLoop.
|
| -// MessageLoop message_loop;
|
| -// // And an IO thread to release URLRequestContextGetter in URLFetcher::Core.
|
| -// BrowserThreadImpl io_thread(BrowserThread::IO, &message_loop);
|
| -// // Create factory (it automatically sets itself as URLFetcher's factory).
|
| -// TestURLFetcherFactory factory;
|
| -// // Do something that triggers creation of a URLFetcher.
|
| -// ...
|
| -// TestURLFetcher* fetcher = factory.GetFetcherByID(expected_id);
|
| -// DCHECK(fetcher);
|
| -// // Notify delegate with whatever data you want.
|
| -// fetcher->delegate()->OnURLFetchComplete(...);
|
| -// // Make sure consumer of URLFetcher does the right thing.
|
| -// ...
|
| -//
|
| -// Note: if you don't know when your request objects will be created you
|
| -// might want to use the FakeURLFetcher and FakeURLFetcherFactory classes
|
| -// below.
|
| -
|
| -class TestURLFetcherFactory;
|
| -class TestURLFetcher : public URLFetcher {
|
| - public:
|
| - // Interface for tests to intercept production code classes using URLFetcher.
|
| - // Allows even-driven mock server classes to analyze the correctness of
|
| - // requests / uploads events and forge responses back at the right moment.
|
| - class DelegateForTests {
|
| - public:
|
| - // Callback issued correspondingly to the call to the |Start()| method.
|
| - virtual void OnRequestStart(int fetcher_id) = 0;
|
| -
|
| - // Callback issued correspondingly to the call to |AppendChunkToUpload|.
|
| - // Uploaded chunks can be retrieved with the |upload_chunks()| getter.
|
| - virtual void OnChunkUpload(int fetcher_id) = 0;
|
| -
|
| - // Callback issued correspondingly to the destructor.
|
| - virtual void OnRequestEnd(int fetcher_id) = 0;
|
| - };
|
| -
|
| - TestURLFetcher(int id,
|
| - const GURL& url,
|
| - URLFetcherDelegate* d);
|
| - ~TestURLFetcher() override;
|
| -
|
| - // URLFetcher implementation
|
| - void SetUploadData(const std::string& upload_content_type,
|
| - const std::string& upload_content) override;
|
| - void SetUploadFilePath(
|
| - const std::string& upload_content_type,
|
| - const base::FilePath& file_path,
|
| - uint64 range_offset,
|
| - uint64 range_length,
|
| - scoped_refptr<base::TaskRunner> file_task_runner) override;
|
| - void SetUploadStreamFactory(
|
| - const std::string& upload_content_type,
|
| - const CreateUploadStreamCallback& callback) override;
|
| - void SetChunkedUpload(const std::string& upload_content_type) override;
|
| - // Overriden to cache the chunks uploaded. Caller can read back the uploaded
|
| - // chunks with the upload_chunks() accessor.
|
| - void AppendChunkToUpload(const std::string& data,
|
| - bool is_last_chunk) override;
|
| - void SetLoadFlags(int load_flags) override;
|
| - int GetLoadFlags() const override;
|
| - void SetReferrer(const std::string& referrer) override;
|
| - void SetReferrerPolicy(URLRequest::ReferrerPolicy referrer_policy) override;
|
| - void SetExtraRequestHeaders(
|
| - const std::string& extra_request_headers) override;
|
| - void AddExtraRequestHeader(const std::string& header_line) override;
|
| - void SetRequestContext(
|
| - URLRequestContextGetter* request_context_getter) override;
|
| - void SetFirstPartyForCookies(const GURL& first_party_for_cookies) override;
|
| - void SetURLRequestUserData(
|
| - const void* key,
|
| - const CreateDataCallback& create_data_callback) override;
|
| - void SetStopOnRedirect(bool stop_on_redirect) override;
|
| - void SetAutomaticallyRetryOn5xx(bool retry) override;
|
| - void SetMaxRetriesOn5xx(int max_retries) override;
|
| - int GetMaxRetriesOn5xx() const override;
|
| - base::TimeDelta GetBackoffDelay() const override;
|
| - void SetAutomaticallyRetryOnNetworkChanges(int max_retries) override;
|
| - void SaveResponseToFileAtPath(
|
| - const base::FilePath& file_path,
|
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner) override;
|
| - void SaveResponseToTemporaryFile(
|
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner) override;
|
| - void SaveResponseWithWriter(
|
| - scoped_ptr<URLFetcherResponseWriter> response_writer) override;
|
| - HttpResponseHeaders* GetResponseHeaders() const override;
|
| - HostPortPair GetSocketAddress() const override;
|
| - bool WasFetchedViaProxy() const override;
|
| - void Start() override;
|
| -
|
| - // URL we were created with. Because of how we're using URLFetcher GetURL()
|
| - // always returns an empty URL. Chances are you'll want to use
|
| - // GetOriginalURL() in your tests.
|
| - const GURL& GetOriginalURL() const override;
|
| - const GURL& GetURL() const override;
|
| - const URLRequestStatus& GetStatus() const override;
|
| - int GetResponseCode() const override;
|
| - const ResponseCookies& GetCookies() const override;
|
| - void ReceivedContentWasMalformed() override;
|
| - // Override response access functions to return fake data.
|
| - bool GetResponseAsString(std::string* out_response_string) const override;
|
| - bool GetResponseAsFilePath(bool take_ownership,
|
| - base::FilePath* out_response_path) const override;
|
| -
|
| - void GetExtraRequestHeaders(HttpRequestHeaders* headers) const;
|
| -
|
| - // Sets owner of this class. Set it to a non-NULL value if you want
|
| - // to automatically unregister this fetcher from the owning factory
|
| - // upon destruction.
|
| - void set_owner(TestURLFetcherFactory* owner) { owner_ = owner; }
|
| -
|
| - // Unique ID in our factory.
|
| - int id() const { return id_; }
|
| -
|
| - // Returns the data uploaded on this URLFetcher.
|
| - const std::string& upload_content_type() const {
|
| - return upload_content_type_;
|
| - }
|
| - const std::string& upload_data() const { return upload_data_; }
|
| - const base::FilePath& upload_file_path() const { return upload_file_path_; }
|
| -
|
| - // Returns the chunks of data uploaded on this URLFetcher.
|
| - const std::list<std::string>& upload_chunks() const { return chunks_; }
|
| -
|
| - // Checks whether the last call to |AppendChunkToUpload(...)| was final.
|
| - bool did_receive_last_chunk() const { return did_receive_last_chunk_; }
|
| -
|
| - // Returns the delegate installed on the URLFetcher.
|
| - URLFetcherDelegate* delegate() const { return delegate_; }
|
| -
|
| - void set_url(const GURL& url) { fake_url_ = url; }
|
| - void set_status(const URLRequestStatus& status);
|
| - void set_response_code(int response_code) {
|
| - fake_response_code_ = response_code;
|
| - }
|
| - void set_cookies(const ResponseCookies& c) { fake_cookies_ = c; }
|
| - void set_was_fetched_via_proxy(bool flag);
|
| - void set_response_headers(scoped_refptr<HttpResponseHeaders> headers);
|
| - void set_backoff_delay(base::TimeDelta backoff_delay);
|
| - void SetDelegateForTests(DelegateForTests* delegate_for_tests);
|
| -
|
| - // Set string data.
|
| - void SetResponseString(const std::string& response);
|
| -
|
| - // Set File data.
|
| - void SetResponseFilePath(const base::FilePath& path);
|
| -
|
| - private:
|
| - enum ResponseDestinationType {
|
| - STRING, // Default: In a std::string
|
| - TEMP_FILE // Write to a temp file
|
| - };
|
| -
|
| - TestURLFetcherFactory* owner_;
|
| - const int id_;
|
| - const GURL original_url_;
|
| - URLFetcherDelegate* delegate_;
|
| - DelegateForTests* delegate_for_tests_;
|
| - std::string upload_content_type_;
|
| - std::string upload_data_;
|
| - base::FilePath upload_file_path_;
|
| - std::list<std::string> chunks_;
|
| - bool did_receive_last_chunk_;
|
| -
|
| - // User can use set_* methods to provide values returned by getters.
|
| - // Setting the real values is not possible, because the real class
|
| - // has no setters. The data is a private member of a class defined
|
| - // in a .cc file, so we can't get at it with friendship.
|
| - int fake_load_flags_;
|
| - GURL fake_url_;
|
| - URLRequestStatus fake_status_;
|
| - int fake_response_code_;
|
| - ResponseCookies fake_cookies_;
|
| - ResponseDestinationType fake_response_destination_;
|
| - std::string fake_response_string_;
|
| - base::FilePath fake_response_file_path_;
|
| - bool fake_was_fetched_via_proxy_;
|
| - scoped_refptr<HttpResponseHeaders> fake_response_headers_;
|
| - HttpRequestHeaders fake_extra_request_headers_;
|
| - int fake_max_retries_;
|
| - base::TimeDelta fake_backoff_delay_;
|
| - scoped_ptr<URLFetcherResponseWriter> response_writer_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestURLFetcher);
|
| -};
|
| -
|
| -typedef TestURLFetcher::DelegateForTests TestURLFetcherDelegateForTests;
|
| -
|
| -// Simple URLFetcherFactory method that creates TestURLFetchers. All fetchers
|
| -// are registered in a map by the id passed to the create method.
|
| -// Optionally, a fetcher may be automatically unregistered from the map upon
|
| -// its destruction.
|
| -class TestURLFetcherFactory : public URLFetcherFactory,
|
| - public ScopedURLFetcherFactory {
|
| - public:
|
| - TestURLFetcherFactory();
|
| - ~TestURLFetcherFactory() override;
|
| -
|
| - URLFetcher* CreateURLFetcher(int id,
|
| - const GURL& url,
|
| - URLFetcher::RequestType request_type,
|
| - URLFetcherDelegate* d) override;
|
| - TestURLFetcher* GetFetcherByID(int id) const;
|
| - void RemoveFetcherFromMap(int id);
|
| - void SetDelegateForTests(TestURLFetcherDelegateForTests* delegate_for_tests);
|
| - void set_remove_fetcher_on_delete(bool remove_fetcher_on_delete) {
|
| - remove_fetcher_on_delete_ = remove_fetcher_on_delete;
|
| - }
|
| -
|
| - private:
|
| - // Maps from id passed to create to the returned URLFetcher.
|
| - typedef std::map<int, TestURLFetcher*> Fetchers;
|
| - Fetchers fetchers_;
|
| - TestURLFetcherDelegateForTests* delegate_for_tests_;
|
| - // Whether to automatically unregister a fetcher from this factory upon its
|
| - // destruction, false by default.
|
| - bool remove_fetcher_on_delete_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestURLFetcherFactory);
|
| -};
|
| -
|
| -// The FakeURLFetcher and FakeURLFetcherFactory classes are similar to the
|
| -// ones above but don't require you to know when exactly the URLFetcher objects
|
| -// will be created.
|
| -//
|
| -// These classes let you set pre-baked HTTP responses for particular URLs.
|
| -// E.g., if the user requests http://a.com/ then respond with an HTTP/500.
|
| -//
|
| -// We assume that the thread that is calling Start() on the URLFetcher object
|
| -// has a message loop running.
|
| -
|
| -// FakeURLFetcher can be used to create a URLFetcher that will emit a fake
|
| -// response when started. This class can be used in place of an actual
|
| -// URLFetcher.
|
| -//
|
| -// Example usage:
|
| -// FakeURLFetcher fake_fetcher("http://a.com", some_delegate,
|
| -// "<html><body>hello world</body></html>",
|
| -// HTTP_OK);
|
| -//
|
| -// // Will schedule a call to some_delegate->OnURLFetchComplete(&fake_fetcher).
|
| -// fake_fetcher.Start();
|
| -class FakeURLFetcher : public TestURLFetcher {
|
| - public:
|
| - // Normal URL fetcher constructor but also takes in a pre-baked response.
|
| - FakeURLFetcher(const GURL& url,
|
| - URLFetcherDelegate* d,
|
| - const std::string& response_data,
|
| - HttpStatusCode response_code,
|
| - URLRequestStatus::Status status);
|
| -
|
| - // Start the request. This will call the given delegate asynchronously
|
| - // with the pre-baked response as parameter.
|
| - void Start() override;
|
| -
|
| - const GURL& GetURL() const override;
|
| -
|
| - ~FakeURLFetcher() override;
|
| -
|
| - private:
|
| - // This is the method which actually calls the delegate that is passed in the
|
| - // constructor.
|
| - void RunDelegate();
|
| -
|
| - base::WeakPtrFactory<FakeURLFetcher> weak_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FakeURLFetcher);
|
| -};
|
| -
|
| -
|
| -// FakeURLFetcherFactory is a factory for FakeURLFetcher objects. When
|
| -// instantiated, it sets itself up as the default URLFetcherFactory. Fake
|
| -// responses for given URLs can be set using SetFakeResponse.
|
| -//
|
| -// This class is not thread-safe. You should not call SetFakeResponse or
|
| -// ClearFakeResponse at the same time you call CreateURLFetcher. However, it is
|
| -// OK to start URLFetcher objects while setting or clearing fake responses
|
| -// since already created URLFetcher objects will not be affected by any changes
|
| -// made to the fake responses (once a URLFetcher object is created you cannot
|
| -// change its fake response).
|
| -//
|
| -// Example usage:
|
| -// FakeURLFetcherFactory factory;
|
| -//
|
| -// // You know that class SomeService will request http://a.com/success and you
|
| -// // want to respond with a simple html page and an HTTP/200 code.
|
| -// factory.SetFakeResponse("http://a.com/success",
|
| -// "<html><body>hello world</body></html>",
|
| -// HTTP_OK,
|
| -// URLRequestStatus::SUCCESS);
|
| -// // You know that class SomeService will request url http://a.com/servererror
|
| -// // and you want to test the service class by returning a server error.
|
| -// factory.SetFakeResponse("http://a.com/servererror",
|
| -// "",
|
| -// HTTP_INTERNAL_SERVER_ERROR,
|
| -// URLRequestStatus::SUCCESS);
|
| -// // You know that class SomeService will request url http://a.com/autherror
|
| -// // and you want to test the service class by returning a specific error
|
| -// // code, say, a HTTP/401 error.
|
| -// factory.SetFakeResponse("http://a.com/autherror",
|
| -// "some_response",
|
| -// HTTP_UNAUTHORIZED,
|
| -// URLRequestStatus::SUCCESS);
|
| -//
|
| -// // You know that class SomeService will request url http://a.com/failure
|
| -// // and you want to test the service class by returning a failure in the
|
| -// // network layer.
|
| -// factory.SetFakeResponse("http://a.com/failure",
|
| -// "",
|
| -// HTTP_INTERNAL_SERVER_ERROR,
|
| -// URLRequestStatus::FAILURE);
|
| -//
|
| -// SomeService service;
|
| -// service.Run(); // Will eventually request these three URLs.
|
| -class FakeURLFetcherFactory : public URLFetcherFactory,
|
| - public ScopedURLFetcherFactory {
|
| - public:
|
| - // Parameters to FakeURLFetcherCreator: url, delegate, response_data,
|
| - // response_code
|
| - // |url| URL for instantiated FakeURLFetcher
|
| - // |delegate| Delegate for FakeURLFetcher
|
| - // |response_data| response data for FakeURLFetcher
|
| - // |response_code| response code for FakeURLFetcher
|
| - // |status| URL fetch status for FakeURLFetcher
|
| - // These arguments should by default be used in instantiating FakeURLFetcher
|
| - // like so:
|
| - // new FakeURLFetcher(url, delegate, response_data, response_code, status)
|
| - typedef base::Callback<scoped_ptr<FakeURLFetcher>(
|
| - const GURL&,
|
| - URLFetcherDelegate*,
|
| - const std::string&,
|
| - HttpStatusCode,
|
| - URLRequestStatus::Status)> FakeURLFetcherCreator;
|
| -
|
| - // |default_factory|, which can be NULL, is a URLFetcherFactory that
|
| - // will be used to construct a URLFetcher in case the URL being created
|
| - // has no pre-baked response. If it is NULL, a URLFetcherImpl will be
|
| - // created in this case.
|
| - explicit FakeURLFetcherFactory(URLFetcherFactory* default_factory);
|
| -
|
| - // |default_factory|, which can be NULL, is a URLFetcherFactory that
|
| - // will be used to construct a URLFetcher in case the URL being created
|
| - // has no pre-baked response. If it is NULL, a URLFetcherImpl will be
|
| - // created in this case.
|
| - // |creator| is a callback that returns will be called to create a
|
| - // FakeURLFetcher if a response is found to a given URL. It can be
|
| - // set to MakeFakeURLFetcher.
|
| - FakeURLFetcherFactory(URLFetcherFactory* default_factory,
|
| - const FakeURLFetcherCreator& creator);
|
| -
|
| - ~FakeURLFetcherFactory() override;
|
| -
|
| - // If no fake response is set for the given URL this method will delegate the
|
| - // call to |default_factory_| if it is not NULL, or return NULL if it is
|
| - // NULL.
|
| - // Otherwise, it will return a URLFetcher object which will respond with the
|
| - // pre-baked response that the client has set by calling SetFakeResponse().
|
| - URLFetcher* CreateURLFetcher(int id,
|
| - const GURL& url,
|
| - URLFetcher::RequestType request_type,
|
| - URLFetcherDelegate* d) override;
|
| -
|
| - // Sets the fake response for a given URL. The |response_data| may be empty.
|
| - // The |response_code| may be any HttpStatusCode. For instance, HTTP_OK will
|
| - // return an HTTP/200 and HTTP_INTERNAL_SERVER_ERROR will return an HTTP/500.
|
| - // The |status| argument may be any URLRequestStatus::Status value. Typically,
|
| - // requests that return a valid HttpStatusCode have the SUCCESS status, while
|
| - // requests that indicate a failure to connect to the server have the FAILED
|
| - // status.
|
| - void SetFakeResponse(const GURL& url,
|
| - const std::string& response_data,
|
| - HttpStatusCode response_code,
|
| - URLRequestStatus::Status status);
|
| -
|
| - // Clear all the fake responses that were previously set via
|
| - // SetFakeResponse().
|
| - void ClearFakeResponses();
|
| -
|
| - private:
|
| - struct FakeURLResponse {
|
| - std::string response_data;
|
| - HttpStatusCode response_code;
|
| - URLRequestStatus::Status status;
|
| - };
|
| - typedef std::map<GURL, FakeURLResponse> FakeResponseMap;
|
| -
|
| - const FakeURLFetcherCreator creator_;
|
| - FakeResponseMap fake_responses_;
|
| - URLFetcherFactory* const default_factory_;
|
| -
|
| - static scoped_ptr<FakeURLFetcher> DefaultFakeURLFetcherCreator(
|
| - const GURL& url,
|
| - URLFetcherDelegate* delegate,
|
| - const std::string& response_data,
|
| - HttpStatusCode response_code,
|
| - URLRequestStatus::Status status);
|
| - DISALLOW_COPY_AND_ASSIGN(FakeURLFetcherFactory);
|
| -};
|
| -
|
| -// This is an implementation of URLFetcherFactory that will create a
|
| -// URLFetcherImpl. It can be use in conjunction with a FakeURLFetcherFactory in
|
| -// integration tests to control the behavior of some requests but execute
|
| -// all the other ones.
|
| -class URLFetcherImplFactory : public URLFetcherFactory {
|
| - public:
|
| - URLFetcherImplFactory();
|
| - ~URLFetcherImplFactory() override;
|
| -
|
| - // This method will create a real URLFetcher.
|
| - URLFetcher* CreateURLFetcher(int id,
|
| - const GURL& url,
|
| - URLFetcher::RequestType request_type,
|
| - URLFetcherDelegate* d) override;
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_URL_REQUEST_TEST_URL_FETCHER_FACTORY_H_
|
|
|