| 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;
|
| }
|
|
|
|
|