diff options
author | asanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-14 06:14:56 +0000 |
---|---|---|
committer | asanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-14 06:14:56 +0000 |
commit | 7f391888950e6517a9550783497ce9ce529b67da (patch) | |
tree | 2f0c6fe8e28fdc575151198c9dfae2cc277873db /content/public | |
parent | 66d4e0f30c56363cd5dca3b8d6a7c452e128d28f (diff) | |
download | chromium_src-7f391888950e6517a9550783497ce9ce529b67da.zip chromium_src-7f391888950e6517a9550783497ce9ce529b67da.tar.gz chromium_src-7f391888950e6517a9550783497ce9ce529b67da.tar.bz2 |
[Download] Return DownloadInterruptReason from OnStartedCallback
DownloadUrlParameters::OnStartedCallback is invoked when the server
response is received for a newly started download. If there's an error,
this callback used to receive a net::Error indicating why.
This CL changes the return value to a DownloadInterruptReason so that
the callback can indicate error conditions that affect downloads that
aren't considered errors at the network layer. Also, it avoids having to
call DownloadManager::Start() when the response indicates that a
download is not possible.
Currently downloads that fail to start return a net::Error, but those
that fail after starting return a DownloadInterruptReason. With this
change, all downloads will return a DownloadInterruptReason regardless
of when the download is interrupted.
BUG=7648
Review URL: https://codereview.chromium.org/114193009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244657 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/public')
6 files changed, 29 insertions, 18 deletions
diff --git a/content/public/browser/download_interrupt_reason_values.h b/content/public/browser/download_interrupt_reason_values.h index fcfa74a..b05207a 100644 --- a/content/public/browser/download_interrupt_reason_values.h +++ b/content/public/browser/download_interrupt_reason_values.h @@ -70,6 +70,12 @@ INTERRUPT_REASON(NETWORK_DISCONNECTED, 22) // "Server Down". INTERRUPT_REASON(NETWORK_SERVER_DOWN, 23) +// The network request was invalid. This may be due to the original URL or a +// redirected URL: +// - Having an unsupported scheme. +// - Being an invalid URL. +// - Being disallowed by policy. +INTERRUPT_REASON(NETWORK_INVALID_REQUEST, 24) // Server responses. diff --git a/content/public/browser/download_interrupt_reasons.h b/content/public/browser/download_interrupt_reasons.h index ebeef3a..78a81a0 100644 --- a/content/public/browser/download_interrupt_reasons.h +++ b/content/public/browser/download_interrupt_reasons.h @@ -21,7 +21,7 @@ enum DownloadInterruptReason { #undef INTERRUPT_REASON }; -std::string CONTENT_EXPORT InterruptReasonDebugString( +std::string CONTENT_EXPORT DownloadInterruptReasonToString( DownloadInterruptReason error); } // namespace content diff --git a/content/public/browser/download_url_parameters.h b/content/public/browser/download_url_parameters.h index b48bc2a..72969361 100644 --- a/content/public/browser/download_url_parameters.h +++ b/content/public/browser/download_url_parameters.h @@ -10,9 +10,9 @@ #include "base/basictypes.h" #include "base/callback.h" +#include "content/public/browser/download_interrupt_reasons.h" #include "content/public/browser/download_save_info.h" #include "content/public/common/referrer.h" -#include "net/base/net_errors.h" #include "url/gurl.h" namespace content { @@ -39,7 +39,8 @@ class WebContents; class CONTENT_EXPORT DownloadUrlParameters { public: // If there is an error, then |item| will be NULL. - typedef base::Callback<void(DownloadItem*, net::Error)> OnStartedCallback; + typedef base::Callback<void(DownloadItem*, DownloadInterruptReason)> + OnStartedCallback; typedef std::pair<std::string, std::string> RequestHeadersNameValuePair; typedef std::vector<RequestHeadersNameValuePair> RequestHeadersType; @@ -104,8 +105,8 @@ class CONTENT_EXPORT DownloadUrlParameters { const OnStartedCallback& callback() const { return callback_; } bool content_initiated() const { return content_initiated_; } int load_flags() const { return load_flags_; } - const std::string& last_modified() { return last_modified_; } - const std::string& etag() { return etag_; } + const std::string& last_modified() const { return last_modified_; } + const std::string& etag() const { return etag_; } const std::string& method() const { return method_; } const std::string& post_body() const { return post_body_; } int64 post_id() const { return post_id_; } diff --git a/content/public/browser/resource_dispatcher_host.h b/content/public/browser/resource_dispatcher_host.h index 0d4a624..7db278c 100644 --- a/content/public/browser/resource_dispatcher_host.h +++ b/content/public/browser/resource_dispatcher_host.h @@ -6,7 +6,8 @@ #define CONTENT_PUBLIC_BROWSER_RESOURCE_DISPATCHER_HOST_H_ #include "base/callback_forward.h" -#include "net/base/net_errors.h" +#include "base/memory/scoped_ptr.h" +#include "content/public/browser/download_interrupt_reasons.h" namespace net { class URLRequest; @@ -22,8 +23,8 @@ struct Referrer; class CONTENT_EXPORT ResourceDispatcherHost { public: - typedef base::Callback<void(DownloadItem*, net::Error)> - DownloadStartedCallback; + typedef base::Callback<void(DownloadItem*, DownloadInterruptReason)> + DownloadStartedCallback; // Returns the singleton instance of the ResourceDispatcherHost. static ResourceDispatcherHost* Get(); @@ -45,8 +46,8 @@ class CONTENT_EXPORT ResourceDispatcherHost { // will be used. (Note that this will result in re-use of an existing // download item if the download id was already assigned.) If the download // is started, |started_callback| will be called on the UI thread with the - // DownloadItem; otherwise an error code will be returned. - virtual net::Error BeginDownload( + // DownloadItem; otherwise an interrupt reason will be returned. + virtual DownloadInterruptReason BeginDownload( scoped_ptr<net::URLRequest> request, const Referrer& referrer, bool is_content_initiated, diff --git a/content/public/test/download_test_observer.cc b/content/public/test/download_test_observer.cc index adce290..8ce69b8 100644 --- a/content/public/test/download_test_observer.cc +++ b/content/public/test/download_test_observer.cc @@ -413,7 +413,7 @@ void DownloadTestFlushObserver::PingIOThread(int cycle) { DownloadTestItemCreationObserver::DownloadTestItemCreationObserver() : download_id_(DownloadItem::kInvalidId), - error_(net::OK), + interrupt_reason_(DOWNLOAD_INTERRUPT_REASON_NONE), called_back_count_(0), waiting_(false) { } @@ -433,12 +433,12 @@ void DownloadTestItemCreationObserver::WaitForDownloadItemCreation() { void DownloadTestItemCreationObserver::DownloadItemCreationCallback( DownloadItem* item, - net::Error error) { + DownloadInterruptReason interrupt_reason) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (item) download_id_ = item->GetId(); - error_ = error; + interrupt_reason_ = interrupt_reason; ++called_back_count_; DCHECK_EQ(1u, called_back_count_); diff --git a/content/public/test/download_test_observer.h b/content/public/test/download_test_observer.h index 15a055df..a06e994 100644 --- a/content/public/test/download_test_observer.h +++ b/content/public/test/download_test_observer.h @@ -11,10 +11,10 @@ #include "base/basictypes.h" #include "base/callback_forward.h" #include "base/memory/ref_counted.h" +#include "content/public/browser/download_interrupt_reasons.h" #include "content/public/browser/download_item.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/download_url_parameters.h" -#include "net/base/net_errors.h" namespace content { @@ -282,9 +282,11 @@ class DownloadTestItemCreationObserver void WaitForDownloadItemCreation(); uint32 download_id() const { return download_id_; } - net::Error error() const { return error_; } + DownloadInterruptReason interrupt_reason() const { return interrupt_reason_; } bool started() const { return called_back_count_ > 0; } - bool succeeded() const { return started() && (error_ == net::OK); } + bool succeeded() const { + return started() && interrupt_reason_ == DOWNLOAD_INTERRUPT_REASON_NONE; + } const DownloadUrlParameters::OnStartedCallback callback(); @@ -293,11 +295,12 @@ class DownloadTestItemCreationObserver ~DownloadTestItemCreationObserver(); - void DownloadItemCreationCallback(DownloadItem* item, net::Error error); + void DownloadItemCreationCallback(DownloadItem* item, + DownloadInterruptReason interrupt_reason); // The download creation information we received. uint32 download_id_; - net::Error error_; + DownloadInterruptReason interrupt_reason_; // Count of callbacks. size_t called_back_count_; |