| Index: chrome/browser/download/download_ui_controller.cc
|
| diff --git a/chrome/browser/download/download_ui_controller.cc b/chrome/browser/download/download_ui_controller.cc
|
| index 89a3694d8b5592ffca30fb61979f64df5e22a32a..f584ef7959c3dda7bc31a15e31a9231c64795f9b 100644
|
| --- a/chrome/browser/download/download_ui_controller.cc
|
| +++ b/chrome/browser/download/download_ui_controller.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/download/download_ui_controller.h"
|
|
|
| +#include "base/callback.h"
|
| #include "base/stl_util.h"
|
| #include "chrome/browser/download/download_item_model.h"
|
| #include "chrome/browser/ui/browser_finder.h"
|
| @@ -32,11 +33,17 @@ class DefaultUIControllerDelegateAndroid
|
|
|
| private:
|
| // DownloadUIController::Delegate
|
| - virtual void NotifyDownloadStarting(content::DownloadItem* item) OVERRIDE;
|
| + virtual void OnNewDownloadReady(content::DownloadItem* item) OVERRIDE;
|
| };
|
|
|
| -void DefaultUIControllerDelegateAndroid::NotifyDownloadStarting(
|
| +void DefaultUIControllerDelegateAndroid::OnNewDownloadReady(
|
| content::DownloadItem* item) {
|
| + // The Android DownloadController is only interested in IN_PROGRESS downloads.
|
| + // Ones which are INTERRUPTED etc. can't be handed over to the Android
|
| + // DownloadManager.
|
| + if (item->GetState() != content::DownloadItem::IN_PROGRESS)
|
| + return;
|
| +
|
| // GET downloads without authentication are delegated to the Android
|
| // DownloadManager. Chrome is responsible for the rest. See
|
| // InterceptDownloadResourceThrottle::ProcessDownloadRequest().
|
| @@ -54,12 +61,12 @@ class DefaultUIControllerDelegate : public DownloadUIController::Delegate {
|
|
|
| private:
|
| // DownloadUIController::Delegate
|
| - virtual void NotifyDownloadStarting(content::DownloadItem* item) OVERRIDE;
|
| + virtual void OnNewDownloadReady(content::DownloadItem* item) OVERRIDE;
|
|
|
| Profile* profile_;
|
| };
|
|
|
| -void DefaultUIControllerDelegate::NotifyDownloadStarting(
|
| +void DefaultUIControllerDelegate::OnNewDownloadReady(
|
| content::DownloadItem* item) {
|
| content::WebContents* web_contents = item->GetWebContents();
|
| Browser* browser =
|
| @@ -105,11 +112,6 @@ DownloadUIController::~DownloadUIController() {
|
|
|
| void DownloadUIController::OnDownloadCreated(content::DownloadManager* manager,
|
| content::DownloadItem* item) {
|
| - // If this isn't a new download, there's nothing to do.
|
| - if (item->GetState() != content::DownloadItem::IN_PROGRESS)
|
| - return;
|
| -
|
| - DownloadItemModel(item).SetShouldNotifyUI(true);
|
| // SavePackage downloads are created in a state where they can be shown in the
|
| // browser. Call OnDownloadUpdated() once to notify the UI immediately.
|
| OnDownloadUpdated(manager, item);
|
| @@ -117,19 +119,17 @@ void DownloadUIController::OnDownloadCreated(content::DownloadManager* manager,
|
|
|
| void DownloadUIController::OnDownloadUpdated(content::DownloadManager* manager,
|
| content::DownloadItem* item) {
|
| + DownloadItemModel item_model(item);
|
| +
|
| // Ignore if we've already notified the UI about |item| or if it isn't a new
|
| // download.
|
| - if (!DownloadItemModel(item).ShouldNotifyUI())
|
| + if (item_model.WasUINotified() || !item_model.ShouldNotifyUI())
|
| return;
|
|
|
| // Wait until the target path is determined.
|
| if (item->GetTargetFilePath().empty())
|
| return;
|
|
|
| - // Can't be complete. That would imply that we didn't receive an
|
| - // OnDownloadUpdated() after the target was determined.
|
| - DCHECK_NE(content::DownloadItem::COMPLETE, item->GetState());
|
| -
|
| - DownloadItemModel(item).SetShouldNotifyUI(false);
|
| - delegate_->NotifyDownloadStarting(item);
|
| + DownloadItemModel(item).SetWasUINotified(true);
|
| + delegate_->OnNewDownloadReady(item);
|
| }
|
|
|