Index: chrome/browser/views/download_item_view.cc |
diff --git a/chrome/browser/views/download_item_view.cc b/chrome/browser/views/download_item_view.cc |
index c2f2442a91a983ece10ec64e7260188c5d9ee681..29cb6e7c01396f723087875f200db0cf1e64d67e 100644 |
--- a/chrome/browser/views/download_item_view.cc |
+++ b/chrome/browser/views/download_item_view.cc |
@@ -62,6 +62,9 @@ static const SkColor kFileNameDisabledColor = SkColorSetRGB(171, 192, 212); |
// How long the 'download complete' animation should last for. |
static const int kCompleteAnimationDurationMs = 2500; |
+// How long the 'download interrupted' animation should last for. |
+static const int kInterruptedAnimationDurationMs = 2500; |
+ |
// How long we keep the item disabled after the user clicked it to open the |
// downloaded item. |
static const int kDisabledOnOpenDuration = 3000; |
@@ -352,6 +355,17 @@ void DownloadItemView::OnDownloadUpdated(DownloadItem* download) { |
case DownloadItem::IN_PROGRESS: |
download_->is_paused() ? StopDownloadProgress() : StartDownloadProgress(); |
break; |
+ case DownloadItem::INTERRUPTED: |
+ StopDownloadProgress(); |
+ interrupted_animation_.reset(new SlideAnimation(this)); |
+ interrupted_animation_->SetSlideDuration(kInterruptedAnimationDurationMs); |
+ interrupted_animation_->SetTweenType(Tween::LINEAR); |
+ interrupted_animation_->Show(); |
+ if (status_text.empty()) |
+ show_status_text_ = false; |
+ SchedulePaint(); |
+ LoadIcon(); |
+ break; |
case DownloadItem::COMPLETE: |
if (download_->auto_opened()) { |
parent_->RemoveDownloadView(this); // This will delete us! |
@@ -426,7 +440,7 @@ void DownloadItemView::ButtonPressed( |
if (sender == discard_button_) { |
UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", |
base::Time::Now() - creation_time_); |
- if (download_->state() == DownloadItem::IN_PROGRESS) |
+ if (download_->IsPartialDownload()) |
download_->Cancel(true); |
download_->Remove(true); |
// WARNING: we are deleted at this point. Don't access 'this'. |
@@ -653,6 +667,12 @@ void DownloadItemView::Paint(gfx::Canvas* canvas) { |
download_util::PaintDownloadComplete(canvas, this, 0, 0, |
complete_animation_->GetCurrentValue(), |
download_util::SMALL); |
+ } else if ((download_->state() == DownloadItem::INTERRUPTED) && |
+ interrupted_animation_.get() && |
+ interrupted_animation_->is_animating()) { |
+ download_util::PaintDownloadInterrupted(canvas, this, 0, 0, |
+ interrupted_animation_->GetCurrentValue(), |
+ download_util::SMALL); |
} |
} |
@@ -780,6 +800,10 @@ bool DownloadItemView::OnMousePressed(const views::MouseEvent& event) { |
if (complete_animation_.get() && complete_animation_->is_animating()) |
complete_animation_->End(); |
+ // Stop any 'interrupted' animation. |
+ if (interrupted_animation_.get() && interrupted_animation_->is_animating()) |
+ interrupted_animation_->End(); |
+ |
if (event.IsOnlyLeftMouseButton()) { |
gfx::Point point(event.location()); |
if (!InDropDownButtonXCoordinateRange(event.x())) { |