Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/download/download_item_view.h" | 5 #include "chrome/browser/ui/views/download/download_item_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 229 // ExperienceSampling: If the user took no action to remove the warning | 229 // ExperienceSampling: If the user took no action to remove the warning |
| 230 // before it disappeared, then the user effectively dismissed the download | 230 // before it disappeared, then the user effectively dismissed the download |
| 231 // without keeping it. | 231 // without keeping it. |
| 232 if (sampling_event_.get()) | 232 if (sampling_event_.get()) |
| 233 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kIgnore); | 233 sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kIgnore); |
| 234 } | 234 } |
| 235 | 235 |
| 236 // Progress animation handlers. | 236 // Progress animation handlers. |
| 237 | 237 |
| 238 void DownloadItemView::StartDownloadProgress() { | 238 void DownloadItemView::StartDownloadProgress() { |
| 239 if (progress_timer_.IsRunning()) | 239 if (progress_start_time_ != base::TimeTicks()) |
| 240 return; | 240 return; |
| 241 progress_start_time_ = base::TimeTicks::Now(); | 241 progress_start_time_ = base::TimeTicks::Now(); |
| 242 progress_timer_.Start( | |
| 243 FROM_HERE, | |
| 244 base::TimeDelta::FromMilliseconds(DownloadShelf::kProgressRateMs), | |
|
asanka
2015/12/18 03:39:16
Would you be willing to get rid of this 30ms timer
Evan Stade
2015/12/18 19:01:38
yea I meant to look at doing that, thanks for remi
Evan Stade
2015/12/29 18:50:49
This seems complicated enough that I'd want someon
| |
| 245 base::Bind(&DownloadItemView::SchedulePaint, base::Unretained(this))); | |
| 246 } | 242 } |
| 247 | 243 |
| 248 void DownloadItemView::StopDownloadProgress() { | 244 void DownloadItemView::StopDownloadProgress() { |
| 249 if (!progress_timer_.IsRunning()) | 245 if (progress_start_time_ == base::TimeTicks()) |
| 250 return; | 246 return; |
| 251 previous_progress_elapsed_ += base::TimeTicks::Now() - progress_start_time_; | 247 previous_progress_elapsed_ += base::TimeTicks::Now() - progress_start_time_; |
| 252 progress_start_time_ = base::TimeTicks(); | 248 progress_start_time_ = base::TimeTicks(); |
| 253 progress_timer_.Stop(); | |
| 254 } | 249 } |
| 255 | 250 |
| 256 void DownloadItemView::OnExtractIconComplete(gfx::Image* icon_bitmap) { | 251 void DownloadItemView::OnExtractIconComplete(gfx::Image* icon_bitmap) { |
| 257 if (icon_bitmap) | 252 if (icon_bitmap) |
| 258 shelf_->SchedulePaint(); | 253 shelf_->SchedulePaint(); |
| 259 } | 254 } |
| 260 | 255 |
| 261 // DownloadObserver interface. | 256 // DownloadObserver interface. |
| 262 | 257 |
| 263 // Update the progress graphic on the icon and our text status label | 258 // Update the progress graphic on the icon and our text status label |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 277 ShowWarningDialog(); | 272 ShowWarningDialog(); |
| 278 // Force the shelf to layout again as our size has changed. | 273 // Force the shelf to layout again as our size has changed. |
| 279 shelf_->Layout(); | 274 shelf_->Layout(); |
| 280 SchedulePaint(); | 275 SchedulePaint(); |
| 281 } else { | 276 } else { |
| 282 base::string16 status_text = model_.GetStatusText(); | 277 base::string16 status_text = model_.GetStatusText(); |
| 283 switch (download()->GetState()) { | 278 switch (download()->GetState()) { |
| 284 case DownloadItem::IN_PROGRESS: | 279 case DownloadItem::IN_PROGRESS: |
| 285 download()->IsPaused() ? | 280 download()->IsPaused() ? |
| 286 StopDownloadProgress() : StartDownloadProgress(); | 281 StopDownloadProgress() : StartDownloadProgress(); |
| 282 SchedulePaint(); | |
| 287 LoadIconIfItemPathChanged(); | 283 LoadIconIfItemPathChanged(); |
| 288 break; | 284 break; |
| 289 case DownloadItem::INTERRUPTED: | 285 case DownloadItem::INTERRUPTED: |
| 290 StopDownloadProgress(); | 286 StopDownloadProgress(); |
| 291 complete_animation_.reset(new gfx::SlideAnimation(this)); | 287 complete_animation_.reset(new gfx::SlideAnimation(this)); |
| 292 complete_animation_->SetSlideDuration(kInterruptedAnimationDurationMs); | 288 complete_animation_->SetSlideDuration(kInterruptedAnimationDurationMs); |
| 293 complete_animation_->SetTweenType(gfx::Tween::LINEAR); | 289 complete_animation_->SetTweenType(gfx::Tween::LINEAR); |
| 294 complete_animation_->Show(); | 290 complete_animation_->Show(); |
| 295 SchedulePaint(); | 291 SchedulePaint(); |
| 296 LoadIcon(); | 292 LoadIcon(); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 320 status_text_ = status_text; | 316 status_text_ = status_text; |
| 321 } | 317 } |
| 322 | 318 |
| 323 base::string16 new_tip = model_.GetTooltipText(font_list_, kTooltipMaxWidth); | 319 base::string16 new_tip = model_.GetTooltipText(font_list_, kTooltipMaxWidth); |
| 324 if (new_tip != tooltip_text_) { | 320 if (new_tip != tooltip_text_) { |
| 325 tooltip_text_ = new_tip; | 321 tooltip_text_ = new_tip; |
| 326 TooltipTextChanged(); | 322 TooltipTextChanged(); |
| 327 } | 323 } |
| 328 | 324 |
| 329 UpdateAccessibleName(); | 325 UpdateAccessibleName(); |
| 330 | |
| 331 // We use the parent's (DownloadShelfView's) SchedulePaint, since there | |
| 332 // are spaces between each DownloadItemView that the parent is responsible | |
| 333 // for painting. | |
| 334 shelf_->SchedulePaint(); | |
| 335 } | 326 } |
| 336 | 327 |
| 337 void DownloadItemView::OnDownloadDestroyed(DownloadItem* download) { | 328 void DownloadItemView::OnDownloadDestroyed(DownloadItem* download) { |
| 338 shelf_->RemoveDownloadView(this); // This will delete us! | 329 shelf_->RemoveDownloadView(this); // This will delete us! |
| 339 } | 330 } |
| 340 | 331 |
| 341 void DownloadItemView::OnDownloadOpened(DownloadItem* download) { | 332 void DownloadItemView::OnDownloadOpened(DownloadItem* download) { |
| 342 disabled_while_opening_ = true; | 333 disabled_while_opening_ = true; |
| 343 SetEnabled(false); | 334 SetEnabled(false); |
| 344 base::MessageLoop::current()->task_runner()->PostDelayedTask( | 335 base::MessageLoop::current()->task_runner()->PostDelayedTask( |
| (...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1389 void DownloadItemView::AnimateStateTransition(State from, State to, | 1380 void DownloadItemView::AnimateStateTransition(State from, State to, |
| 1390 gfx::SlideAnimation* animation) { | 1381 gfx::SlideAnimation* animation) { |
| 1391 if (from == NORMAL && to == HOT) { | 1382 if (from == NORMAL && to == HOT) { |
| 1392 animation->Show(); | 1383 animation->Show(); |
| 1393 } else if (from == HOT && to == NORMAL) { | 1384 } else if (from == HOT && to == NORMAL) { |
| 1394 animation->Hide(); | 1385 animation->Hide(); |
| 1395 } else if (from != to) { | 1386 } else if (from != to) { |
| 1396 animation->Reset((to == HOT) ? 1.0 : 0.0); | 1387 animation->Reset((to == HOT) ? 1.0 : 0.0); |
| 1397 } | 1388 } |
| 1398 } | 1389 } |
| OLD | NEW |