| 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 // Download utility implementation | 5 // Download utility implementation |
| 6 | 6 |
| 7 #define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first. | 7 #define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first. |
| 8 | 8 |
| 9 #include "chrome/browser/download/download_util.h" | 9 #include "chrome/browser/download/download_util.h" |
| 10 | 10 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 #endif | 68 #endif |
| 69 | 69 |
| 70 #if defined(USE_AURA) | 70 #if defined(USE_AURA) |
| 71 #include "ui/aura/client/drag_drop_client.h" | 71 #include "ui/aura/client/drag_drop_client.h" |
| 72 #include "ui/aura/root_window.h" | 72 #include "ui/aura/root_window.h" |
| 73 #include "ui/aura/window.h" | 73 #include "ui/aura/window.h" |
| 74 #endif | 74 #endif |
| 75 | 75 |
| 76 namespace { | 76 namespace { |
| 77 | 77 |
| 78 // Returns a string constant to be used as the |danger_type| value in | |
| 79 // CreateDownloadItemValue(). We only return strings for DANGEROUS_FILE, | |
| 80 // DANGEROUS_URL, DANGEROUS_CONTENT, and UNCOMMON_CONTENT because the | |
| 81 // |danger_type| value is only defined if the value of |state| is |DANGEROUS|. | |
| 82 const char* GetDangerTypeString(content::DownloadDangerType danger_type) { | |
| 83 switch (danger_type) { | |
| 84 case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE: | |
| 85 return "DANGEROUS_FILE"; | |
| 86 case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: | |
| 87 return "DANGEROUS_URL"; | |
| 88 case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: | |
| 89 return "DANGEROUS_CONTENT"; | |
| 90 case content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT: | |
| 91 return "UNCOMMON_CONTENT"; | |
| 92 default: | |
| 93 // We shouldn't be returning a danger type string if it is | |
| 94 // NOT_DANGEROUS or MAYBE_DANGEROUS_CONTENT. | |
| 95 NOTREACHED(); | |
| 96 return ""; | |
| 97 } | |
| 98 } | |
| 99 | |
| 100 // Get the opacity based on |animation_progress|, with values in [0.0, 1.0]. | 78 // Get the opacity based on |animation_progress|, with values in [0.0, 1.0]. |
| 101 // Range of return value is [0, 255]. | 79 // Range of return value is [0, 255]. |
| 102 int GetOpacity(double animation_progress) { | 80 int GetOpacity(double animation_progress) { |
| 103 DCHECK(animation_progress >= 0 && animation_progress <= 1); | 81 DCHECK(animation_progress >= 0 && animation_progress <= 1); |
| 104 | 82 |
| 105 // How many times to cycle the complete animation. This should be an odd | 83 // How many times to cycle the complete animation. This should be an odd |
| 106 // number so that the animation ends faded out. | 84 // number so that the animation ends faded out. |
| 107 static const int kCompleteAnimationCycles = 5; | 85 static const int kCompleteAnimationCycles = 5; |
| 108 double temp = animation_progress * kCompleteAnimationCycles * M_PI + M_PI_2; | 86 double temp = animation_progress * kCompleteAnimationCycles * M_PI + M_PI_2; |
| 109 temp = sin(temp) / 2 + 0.5; | 87 temp = sin(temp) / 2 + 0.5; |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 #endif // TOOLKIT_GTK | 391 #endif // TOOLKIT_GTK |
| 414 } | 392 } |
| 415 #elif defined(USE_X11) | 393 #elif defined(USE_X11) |
| 416 void DragDownload(const DownloadItem* download, | 394 void DragDownload(const DownloadItem* download, |
| 417 gfx::Image* icon, | 395 gfx::Image* icon, |
| 418 gfx::NativeView view) { | 396 gfx::NativeView view) { |
| 419 DownloadItemDrag::BeginDrag(download, icon); | 397 DownloadItemDrag::BeginDrag(download, icon); |
| 420 } | 398 } |
| 421 #endif // USE_X11 | 399 #endif // USE_X11 |
| 422 | 400 |
| 423 DictionaryValue* CreateDownloadItemValue(DownloadItem* download, int id) { | |
| 424 DictionaryValue* file_value = new DictionaryValue(); | |
| 425 | |
| 426 file_value->SetInteger("started", | |
| 427 static_cast<int>(download->GetStartTime().ToTimeT())); | |
| 428 file_value->SetString("since_string", | |
| 429 TimeFormat::RelativeDate(download->GetStartTime(), NULL)); | |
| 430 file_value->SetString("date_string", | |
| 431 base::TimeFormatShortDate(download->GetStartTime())); | |
| 432 file_value->SetInteger("id", id); | |
| 433 | |
| 434 FilePath download_path(download->GetTargetFilePath()); | |
| 435 file_value->Set("file_path", base::CreateFilePathValue(download_path)); | |
| 436 file_value->SetString("file_url", | |
| 437 net::FilePathToFileURL(download_path).spec()); | |
| 438 | |
| 439 // Keep file names as LTR. | |
| 440 string16 file_name = download->GetFileNameToReportUser().LossyDisplayName(); | |
| 441 file_name = base::i18n::GetDisplayStringInLTRDirectionality(file_name); | |
| 442 file_value->SetString("file_name", file_name); | |
| 443 file_value->SetString("url", download->GetURL().spec()); | |
| 444 file_value->SetBoolean("otr", download->IsOtr()); | |
| 445 file_value->SetInteger("total", static_cast<int>(download->GetTotalBytes())); | |
| 446 file_value->SetBoolean("file_externally_removed", | |
| 447 download->GetFileExternallyRemoved()); | |
| 448 | |
| 449 if (download->IsInProgress()) { | |
| 450 if (download->GetSafetyState() == DownloadItem::DANGEROUS) { | |
| 451 file_value->SetString("state", "DANGEROUS"); | |
| 452 // These are the only danger states we expect to see (and the UI is | |
| 453 // equipped to handle): | |
| 454 DCHECK(download->GetDangerType() == | |
| 455 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE || | |
| 456 download->GetDangerType() == | |
| 457 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL || | |
| 458 download->GetDangerType() == | |
| 459 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT || | |
| 460 download->GetDangerType() == | |
| 461 content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT); | |
| 462 const char* danger_type_value = | |
| 463 GetDangerTypeString(download->GetDangerType()); | |
| 464 file_value->SetString("danger_type", danger_type_value); | |
| 465 } else if (download->IsPaused()) { | |
| 466 file_value->SetString("state", "PAUSED"); | |
| 467 } else { | |
| 468 file_value->SetString("state", "IN_PROGRESS"); | |
| 469 } | |
| 470 | |
| 471 file_value->SetString("progress_status_text", | |
| 472 GetProgressStatusText(download)); | |
| 473 | |
| 474 file_value->SetInteger("percent", | |
| 475 static_cast<int>(download->PercentComplete())); | |
| 476 file_value->SetInteger("received", | |
| 477 static_cast<int>(download->GetReceivedBytes())); | |
| 478 } else if (download->IsInterrupted()) { | |
| 479 file_value->SetString("state", "INTERRUPTED"); | |
| 480 | |
| 481 file_value->SetString("progress_status_text", | |
| 482 GetProgressStatusText(download)); | |
| 483 | |
| 484 file_value->SetInteger("percent", | |
| 485 static_cast<int>(download->PercentComplete())); | |
| 486 file_value->SetInteger("received", | |
| 487 static_cast<int>(download->GetReceivedBytes())); | |
| 488 file_value->SetString("last_reason_text", | |
| 489 BaseDownloadItemModel::InterruptReasonMessage( | |
| 490 download->GetLastReason())); | |
| 491 } else if (download->IsCancelled()) { | |
| 492 file_value->SetString("state", "CANCELLED"); | |
| 493 } else if (download->IsComplete()) { | |
| 494 if (download->GetSafetyState() == DownloadItem::DANGEROUS) | |
| 495 file_value->SetString("state", "DANGEROUS"); | |
| 496 else | |
| 497 file_value->SetString("state", "COMPLETE"); | |
| 498 } else { | |
| 499 NOTREACHED() << "state undefined"; | |
| 500 } | |
| 501 | |
| 502 return file_value; | |
| 503 } | |
| 504 | |
| 505 string16 GetProgressStatusText(DownloadItem* download) { | 401 string16 GetProgressStatusText(DownloadItem* download) { |
| 506 int64 total = download->GetTotalBytes(); | 402 int64 total = download->GetTotalBytes(); |
| 507 int64 size = download->GetReceivedBytes(); | 403 int64 size = download->GetReceivedBytes(); |
| 508 string16 received_size = ui::FormatBytes(size); | 404 string16 received_size = ui::FormatBytes(size); |
| 509 string16 amount = received_size; | 405 string16 amount = received_size; |
| 510 | 406 |
| 511 // Adjust both strings for the locale direction since we don't yet know which | 407 // Adjust both strings for the locale direction since we don't yet know which |
| 512 // string we'll end up using for constructing the final progress string. | 408 // string we'll end up using for constructing the final progress string. |
| 513 base::i18n::AdjustStringForLocaleDirection(&amount); | 409 base::i18n::AdjustStringForLocaleDirection(&amount); |
| 514 | 410 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 UMA_HISTOGRAM_ENUMERATION( | 475 UMA_HISTOGRAM_ENUMERATION( |
| 580 "Download.CountsChrome", type, CHROME_DOWNLOAD_COUNT_TYPES_LAST_ENTRY); | 476 "Download.CountsChrome", type, CHROME_DOWNLOAD_COUNT_TYPES_LAST_ENTRY); |
| 581 } | 477 } |
| 582 | 478 |
| 583 void RecordDownloadSource(ChromeDownloadSource source) { | 479 void RecordDownloadSource(ChromeDownloadSource source) { |
| 584 UMA_HISTOGRAM_ENUMERATION( | 480 UMA_HISTOGRAM_ENUMERATION( |
| 585 "Download.SourcesChrome", source, CHROME_DOWNLOAD_SOURCE_LAST_ENTRY); | 481 "Download.SourcesChrome", source, CHROME_DOWNLOAD_SOURCE_LAST_ENTRY); |
| 586 } | 482 } |
| 587 | 483 |
| 588 } // namespace download_util | 484 } // namespace download_util |
| OLD | NEW |