| Index: net/url_request/url_fetcher_core.h
|
| diff --git a/net/url_request/url_fetcher_core.h b/net/url_request/url_fetcher_core.h
|
| deleted file mode 100644
|
| index 193edb46528d837529dad147e39fb6c8bfab00f6..0000000000000000000000000000000000000000
|
| --- a/net/url_request/url_fetcher_core.h
|
| +++ /dev/null
|
| @@ -1,331 +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_URL_FETCHER_CORE_H_
|
| -#define NET_URL_REQUEST_URL_FETCHER_CORE_H_
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/debug/stack_trace.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/timer/timer.h"
|
| -#include "net/base/host_port_pair.h"
|
| -#include "net/http/http_request_headers.h"
|
| -#include "net/url_request/url_fetcher.h"
|
| -#include "net/url_request/url_request.h"
|
| -#include "net/url_request/url_request_status.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace base {
|
| -class SingleThreadTaskRunner;
|
| -} // namespace base
|
| -
|
| -namespace net {
|
| -class DrainableIOBuffer;
|
| -class HttpResponseHeaders;
|
| -class IOBuffer;
|
| -class URLFetcherDelegate;
|
| -class URLFetcherResponseWriter;
|
| -class URLRequestContextGetter;
|
| -class URLRequestThrottlerEntryInterface;
|
| -
|
| -class URLFetcherCore
|
| - : public base::RefCountedThreadSafe<URLFetcherCore>,
|
| - public URLRequest::Delegate {
|
| - public:
|
| - URLFetcherCore(URLFetcher* fetcher,
|
| - const GURL& original_url,
|
| - URLFetcher::RequestType request_type,
|
| - URLFetcherDelegate* d);
|
| -
|
| - // Starts the load. It's important that this not happen in the constructor
|
| - // because it causes the IO thread to begin AddRef()ing and Release()ing
|
| - // us. If our caller hasn't had time to fully construct us and take a
|
| - // reference, the IO thread could interrupt things, run a task, Release()
|
| - // us, and destroy us, leaving the caller with an already-destroyed object
|
| - // when construction finishes.
|
| - void Start();
|
| -
|
| - // Stops any in-progress load and ensures no callback will happen. It is
|
| - // safe to call this multiple times.
|
| - void Stop();
|
| -
|
| - // URLFetcher-like functions.
|
| -
|
| - // For POST requests, set |content_type| to the MIME type of the
|
| - // content and set |content| to the data to upload.
|
| - void SetUploadData(const std::string& upload_content_type,
|
| - const std::string& upload_content);
|
| - 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);
|
| - void SetUploadStreamFactory(
|
| - const std::string& upload_content_type,
|
| - const URLFetcher::CreateUploadStreamCallback& callback);
|
| - void SetChunkedUpload(const std::string& upload_content_type);
|
| - // Adds a block of data to be uploaded in a POST body. This can only be
|
| - // called after Start().
|
| - void AppendChunkToUpload(const std::string& data, bool is_last_chunk);
|
| - // |flags| are flags to apply to the load operation--these should be
|
| - // one or more of the LOAD_* flags defined in net/base/load_flags.h.
|
| - void SetLoadFlags(int load_flags);
|
| - int GetLoadFlags() const;
|
| - void SetReferrer(const std::string& referrer);
|
| - void SetReferrerPolicy(URLRequest::ReferrerPolicy referrer_policy);
|
| - void SetExtraRequestHeaders(const std::string& extra_request_headers);
|
| - void AddExtraRequestHeader(const std::string& header_line);
|
| - void SetRequestContext(URLRequestContextGetter* request_context_getter);
|
| - // Set the URL that should be consulted for the third-party cookie
|
| - // blocking policy.
|
| - void SetFirstPartyForCookies(const GURL& first_party_for_cookies);
|
| - // Set the key and data callback that is used when setting the user
|
| - // data on any URLRequest objects this object creates.
|
| - void SetURLRequestUserData(
|
| - const void* key,
|
| - const URLFetcher::CreateDataCallback& create_data_callback);
|
| - void SetStopOnRedirect(bool stop_on_redirect);
|
| - void SetAutomaticallyRetryOn5xx(bool retry);
|
| - void SetMaxRetriesOn5xx(int max_retries);
|
| - int GetMaxRetriesOn5xx() const;
|
| - base::TimeDelta GetBackoffDelay() const;
|
| - void SetAutomaticallyRetryOnNetworkChanges(int max_retries);
|
| - void SaveResponseToFileAtPath(
|
| - const base::FilePath& file_path,
|
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner);
|
| - void SaveResponseToTemporaryFile(
|
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner);
|
| - void SaveResponseWithWriter(
|
| - scoped_ptr<URLFetcherResponseWriter> response_writer);
|
| - HttpResponseHeaders* GetResponseHeaders() const;
|
| - HostPortPair GetSocketAddress() const;
|
| - bool WasFetchedViaProxy() const;
|
| - const GURL& GetOriginalURL() const;
|
| - const GURL& GetURL() const;
|
| - const URLRequestStatus& GetStatus() const;
|
| - int GetResponseCode() const;
|
| - const ResponseCookies& GetCookies() const;
|
| - // Reports that the received content was malformed (i.e. failed parsing
|
| - // or validation). This makes the throttling logic that does exponential
|
| - // back-off when servers are having problems treat the current request as
|
| - // a failure. Your call to this method will be ignored if your request is
|
| - // already considered a failure based on the HTTP response code or response
|
| - // headers.
|
| - void ReceivedContentWasMalformed();
|
| - bool GetResponseAsString(std::string* out_response_string) const;
|
| - bool GetResponseAsFilePath(bool take_ownership,
|
| - base::FilePath* out_response_path);
|
| -
|
| - // Overridden from URLRequest::Delegate:
|
| - void OnReceivedRedirect(URLRequest* request,
|
| - const RedirectInfo& redirect_info,
|
| - bool* defer_redirect) override;
|
| - void OnResponseStarted(URLRequest* request) override;
|
| - void OnReadCompleted(URLRequest* request, int bytes_read) override;
|
| - void OnCertificateRequested(URLRequest* request,
|
| - SSLCertRequestInfo* cert_request_info) override;
|
| -
|
| - URLFetcherDelegate* delegate() const { return delegate_; }
|
| - static void CancelAll();
|
| - static int GetNumFetcherCores();
|
| - static void SetEnableInterceptionForTests(bool enabled);
|
| - static void SetIgnoreCertificateRequests(bool ignored);
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<URLFetcherCore>;
|
| -
|
| - class Registry {
|
| - public:
|
| - Registry();
|
| - ~Registry();
|
| -
|
| - void AddURLFetcherCore(URLFetcherCore* core);
|
| - void RemoveURLFetcherCore(URLFetcherCore* core);
|
| -
|
| - void CancelAll();
|
| -
|
| - int size() const {
|
| - return fetchers_.size();
|
| - }
|
| -
|
| - private:
|
| - std::set<URLFetcherCore*> fetchers_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Registry);
|
| - };
|
| -
|
| - ~URLFetcherCore() override;
|
| -
|
| - // Wrapper functions that allow us to ensure actions happen on the right
|
| - // thread.
|
| - void StartOnIOThread();
|
| - void StartURLRequest();
|
| - void DidInitializeWriter(int result);
|
| - void StartURLRequestWhenAppropriate();
|
| - void CancelURLRequest(int error);
|
| - void OnCompletedURLRequest(base::TimeDelta backoff_delay);
|
| - void InformDelegateFetchIsComplete();
|
| - void NotifyMalformedContent();
|
| - void DidFinishWriting(int result);
|
| - void RetryOrCompleteUrlFetch();
|
| -
|
| - // Deletes the request, removes it from the registry, and removes the
|
| - // destruction observer.
|
| - void ReleaseRequest();
|
| -
|
| - // Returns the max value of exponential back-off release time for
|
| - // |original_url_| and |url_|.
|
| - base::TimeTicks GetBackoffReleaseTime();
|
| -
|
| - void CompleteAddingUploadDataChunk(const std::string& data,
|
| - bool is_last_chunk);
|
| -
|
| - // Writes all bytes stored in |data| with |response_writer_|.
|
| - // Returns OK if all bytes in |data| get written synchronously. Otherwise,
|
| - // returns ERR_IO_PENDING or a network error code.
|
| - int WriteBuffer(scoped_refptr<DrainableIOBuffer> data);
|
| -
|
| - // Used to implement WriteBuffer().
|
| - void DidWriteBuffer(scoped_refptr<DrainableIOBuffer> data, int result);
|
| -
|
| - // Read response bytes from the request.
|
| - void ReadResponse();
|
| -
|
| - // Notify Delegate about the progress of upload/download.
|
| - void InformDelegateUploadProgress();
|
| - void InformDelegateUploadProgressInDelegateThread(int64 current, int64 total);
|
| - void InformDelegateDownloadProgress();
|
| - void InformDelegateDownloadProgressInDelegateThread(int64 current,
|
| - int64 total);
|
| -
|
| - // Check if any upload data is set or not.
|
| - void AssertHasNoUploadData() const;
|
| -
|
| - URLFetcher* fetcher_; // Corresponding fetcher object
|
| - GURL original_url_; // The URL we were asked to fetch
|
| - GURL url_; // The URL we eventually wound up at
|
| - URLFetcher::RequestType request_type_; // What type of request is this?
|
| - URLRequestStatus status_; // Status of the request
|
| - URLFetcherDelegate* delegate_; // Object to notify on completion
|
| - // Task runner for the creating thread. Used to interact with the delegate.
|
| - scoped_refptr<base::SingleThreadTaskRunner> delegate_task_runner_;
|
| - // Task runner for network operations.
|
| - scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
|
| - // Task runner for upload file access.
|
| - scoped_refptr<base::TaskRunner> upload_file_task_runner_;
|
| - scoped_ptr<URLRequest> request_; // The actual request this wraps
|
| - int load_flags_; // Flags for the load operation
|
| - int response_code_; // HTTP status code for the request
|
| - scoped_refptr<IOBuffer> buffer_;
|
| - // Read buffer
|
| - scoped_refptr<URLRequestContextGetter> request_context_getter_;
|
| - // Cookie/cache info for the request
|
| - GURL first_party_for_cookies_; // The first party URL for the request
|
| - // The user data to add to each newly-created URLRequest.
|
| - const void* url_request_data_key_;
|
| - URLFetcher::CreateDataCallback url_request_create_data_callback_;
|
| - ResponseCookies cookies_; // Response cookies
|
| - HttpRequestHeaders extra_request_headers_;
|
| - scoped_refptr<HttpResponseHeaders> response_headers_;
|
| - bool was_fetched_via_proxy_;
|
| - HostPortPair socket_address_;
|
| -
|
| - bool upload_content_set_; // SetUploadData has been called
|
| - std::string upload_content_; // HTTP POST payload
|
| - base::FilePath upload_file_path_; // Path to file containing POST payload
|
| - uint64 upload_range_offset_; // Offset from the beginning of the file
|
| - // to be uploaded.
|
| - uint64 upload_range_length_; // The length of the part of file to be
|
| - // uploaded.
|
| - URLFetcher::CreateUploadStreamCallback
|
| - upload_stream_factory_; // Callback to create HTTP POST payload.
|
| - std::string upload_content_type_; // MIME type of POST payload
|
| - std::string referrer_; // HTTP Referer header value and policy
|
| - URLRequest::ReferrerPolicy referrer_policy_;
|
| - bool is_chunked_upload_; // True if using chunked transfer encoding
|
| -
|
| - // Used to determine how long to wait before making a request or doing a
|
| - // retry.
|
| - //
|
| - // Both of them can only be accessed on the IO thread.
|
| - //
|
| - // To determine the proper backoff timing, throttler entries for
|
| - // both |original_URL| and |url| are needed. For example, consider
|
| - // the case that URL A redirects to URL B, for which the server
|
| - // returns a 500 response. In this case, the exponential back-off
|
| - // release time of URL A won't increase. If only the backoff
|
| - // constraints for URL A are considered, too many requests for URL A
|
| - // may be sent in a short period of time.
|
| - //
|
| - // Both of these will be NULL if
|
| - // URLRequestContext::throttler_manager() is NULL.
|
| - scoped_refptr<URLRequestThrottlerEntryInterface>
|
| - original_url_throttler_entry_;
|
| - scoped_refptr<URLRequestThrottlerEntryInterface> url_throttler_entry_;
|
| -
|
| - // True if the URLFetcher has been cancelled.
|
| - bool was_cancelled_;
|
| -
|
| - // Writer object to write response to the destination like file and string.
|
| - scoped_ptr<URLFetcherResponseWriter> response_writer_;
|
| -
|
| - // By default any server-initiated redirects are automatically followed. If
|
| - // this flag is set to true, however, a redirect will halt the fetch and call
|
| - // back to to the delegate immediately.
|
| - bool stop_on_redirect_;
|
| - // True when we're actually stopped due to a redirect halted by the above. We
|
| - // use this to ensure that |url_| is set to the redirect destination rather
|
| - // than the originally-fetched URL.
|
| - bool stopped_on_redirect_;
|
| -
|
| - // If |automatically_retry_on_5xx_| is false, 5xx responses will be
|
| - // propagated to the observer, if it is true URLFetcher will automatically
|
| - // re-execute the request, after the back-off delay has expired.
|
| - // true by default.
|
| - bool automatically_retry_on_5xx_;
|
| - // |num_retries_on_5xx_| indicates how many times we've failed to successfully
|
| - // fetch this URL due to 5xx responses. Once this value exceeds the maximum
|
| - // number of retries specified by the owner URLFetcher instance,
|
| - // we'll give up.
|
| - int num_retries_on_5xx_;
|
| - // Maximum retries allowed when 5xx responses are received.
|
| - int max_retries_on_5xx_;
|
| - // Back-off time delay. 0 by default.
|
| - base::TimeDelta backoff_delay_;
|
| -
|
| - // The number of retries that have been attempted due to ERR_NETWORK_CHANGED.
|
| - int num_retries_on_network_changes_;
|
| - // Maximum retries allowed when the request fails with ERR_NETWORK_CHANGED.
|
| - // 0 by default.
|
| - int max_retries_on_network_changes_;
|
| -
|
| - // Timer to poll the progress of uploading for POST and PUT requests.
|
| - // When crbug.com/119629 is fixed, scoped_ptr is not necessary here.
|
| - scoped_ptr<base::RepeatingTimer<URLFetcherCore> >
|
| - upload_progress_checker_timer_;
|
| - // Number of bytes sent so far.
|
| - int64 current_upload_bytes_;
|
| - // Number of bytes received so far.
|
| - int64 current_response_bytes_;
|
| - // Total expected bytes to receive (-1 if it cannot be determined).
|
| - int64 total_response_bytes_;
|
| -
|
| - // TODO(willchan): Get rid of this after debugging crbug.com/90971.
|
| - base::debug::StackTrace stack_trace_;
|
| -
|
| - static base::LazyInstance<Registry> g_registry;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(URLFetcherCore);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_URL_REQUEST_URL_FETCHER_CORE_H_
|
|
|