Index: chrome/browser/extensions/webstore_installer.cc |
diff --git a/chrome/browser/extensions/webstore_installer.cc b/chrome/browser/extensions/webstore_installer.cc |
index ffae6402dcf5fcb74cdc07ea4ac88cc8e8b47c12..8b80979f052812f50953ee08585abf267ec46be0 100644 |
--- a/chrome/browser/extensions/webstore_installer.cc |
+++ b/chrome/browser/extensions/webstore_installer.cc |
@@ -136,6 +136,16 @@ void GetDownloadFilePath( |
namespace extensions { |
+void WebstoreInstaller::Delegate::OnExtensionDownloadStarted( |
+ const std::string& id, |
+ content::DownloadItem* item) { |
+} |
+ |
+void WebstoreInstaller::Delegate::OnExtensionDownloadProgress( |
+ const std::string& id, |
+ content::DownloadItem* item) { |
+} |
+ |
WebstoreInstaller::Approval::Approval() |
: profile(NULL), |
use_app_installed_bubble(false), |
@@ -201,7 +211,7 @@ void WebstoreInstaller::Start() { |
AddRef(); // Balanced in ReportSuccess and ReportFailure. |
if (!Extension::IdIsValid(id_)) { |
- ReportFailure(kInvalidIdError); |
+ ReportFailure(kInvalidIdError, FAILURE_REASON_OTHER); |
return; |
} |
@@ -224,7 +234,7 @@ void WebstoreInstaller::Observe(int type, |
if (extension == NULL && download_item_ != NULL && |
installer->download_url() == download_item_->GetURL() && |
installer->profile()->IsSameProfile(profile_)) { |
- ReportFailure(kInstallCanceledError); |
+ ReportFailure(kInstallCanceledError, FAILURE_REASON_CANCELLED); |
} |
break; |
} |
@@ -249,7 +259,7 @@ void WebstoreInstaller::Observe(int type, |
const string16* error = content::Details<const string16>(details).ptr(); |
const std::string utf8_error = UTF16ToUTF8(*error); |
if (download_url_ == crx_installer->original_download_url()) |
- ReportFailure(utf8_error); |
+ ReportFailure(utf8_error, FAILURE_REASON_OTHER); |
break; |
} |
@@ -271,7 +281,7 @@ WebstoreInstaller::~WebstoreInstaller() { |
void WebstoreInstaller::OnDownloadStarted(DownloadId id, net::Error error) { |
if (error != net::OK) { |
- ReportFailure(net::ErrorToString(error)); |
+ ReportFailure(net::ErrorToString(error), FAILURE_REASON_OTHER); |
return; |
} |
@@ -288,6 +298,8 @@ void WebstoreInstaller::OnDownloadStarted(DownloadId id, net::Error error) { |
download_item_->AddObserver(this); |
if (approval_.get()) |
download_item_->SetUserData(kApprovalKey, approval_.release()); |
+ if (delegate_) |
+ delegate_->OnExtensionDownloadStarted(id_, download_item_); |
} |
} |
@@ -296,15 +308,21 @@ void WebstoreInstaller::OnDownloadUpdated(DownloadItem* download) { |
switch (download->GetState()) { |
case DownloadItem::CANCELLED: |
- ReportFailure(kDownloadCanceledError); |
+ ReportFailure(kDownloadCanceledError, FAILURE_REASON_CANCELLED); |
break; |
case DownloadItem::INTERRUPTED: |
- ReportFailure(kDownloadInterruptedError); |
+ ReportFailure(kDownloadInterruptedError, FAILURE_REASON_OTHER); |
break; |
case DownloadItem::COMPLETE: |
// Wait for other notifications if the download is really an extension. |
if (!download_crx_util::IsExtensionDownload(*download)) |
- ReportFailure(kInvalidDownloadError); |
+ ReportFailure(kInvalidDownloadError, FAILURE_REASON_OTHER); |
+ else if (delegate_) |
+ delegate_->OnExtensionDownloadProgress(id_, download); |
+ break; |
+ case DownloadItem::IN_PROGRESS: |
+ if (delegate_) |
+ delegate_->OnExtensionDownloadProgress(id_, download); |
break; |
default: |
// Continue listening if the download is not in one of the above states. |
@@ -331,7 +349,7 @@ void WebstoreInstaller::StartDownload(const FilePath& file) { |
!controller_->GetWebContents()->GetBrowserContext() || |
!controller_->GetWebContents()->GetBrowserContext() |
->GetResourceContext()) { |
- ReportFailure(kDownloadDirectoryError); |
+ ReportFailure(kDownloadDirectoryError, FAILURE_REASON_OTHER); |
return; |
} |
@@ -354,9 +372,10 @@ void WebstoreInstaller::StartDownload(const FilePath& file) { |
download_manager->DownloadUrl(params.Pass()); |
} |
-void WebstoreInstaller::ReportFailure(const std::string& error) { |
+void WebstoreInstaller::ReportFailure(const std::string& error, |
+ FailureReason reason) { |
if (delegate_) { |
- delegate_->OnExtensionInstallFailure(id_, error); |
+ delegate_->OnExtensionInstallFailure(id_, error, reason); |
delegate_ = NULL; |
} |