Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1434)

Unified Diff: chrome/browser/download/download_item_model.cc

Issue 11419169: Use DownloadItemModel for storing chrome/ specific UI data for DownloadItems. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/download/download_item_model.cc
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc
index 4fc234c4e26384ca5f6980985fdf8049a471b4c1..071deced4ddc9bb9d54d30db3b48374be288c89f 100644
--- a/chrome/browser/download/download_item_model.cc
+++ b/chrome/browser/download/download_item_model.cc
@@ -7,9 +7,10 @@
#include "base/i18n/number_formatting.h"
#include "base/i18n/rtl.h"
#include "base/string16.h"
+#include "base/supports_user_data.h"
#include "base/sys_string_conversions.h"
-#include "base/utf_string_conversions.h"
#include "base/time.h"
+#include "base/utf_string_conversions.h"
#include "chrome/browser/download/download_crx_util.h"
#include "chrome/common/time_format.h"
#include "content/public/browser/download_danger_type.h"
@@ -26,6 +27,60 @@ using content::DownloadItem;
namespace {
+// Per DownloadItem data used by DownloadItemModel. The model doesn't keep any
+// state since there could be multiple models associated with a single
+// DownloadItem, and the lifetime of the model is shorter than the DownloadItem.
+class DownloadItemModelData : public base::SupportsUserData::Data {
+ public:
+ // Get the DownloadItemModelData object for |download|. Returns NULL if
+ // there's no model data.
+ static const DownloadItemModelData* Get(const DownloadItem* download);
+
+ // Get the DownloadItemModelData object for |download|. Creates a model data
+ // object if not found. Always returns a non-NULL pointer, unless OOM.
+ static DownloadItemModelData* GetOrCreate(DownloadItem* download);
+
+ bool should_show_in_shelf() const { return should_show_in_shelf_; }
+ void set_should_show_in_shelf(bool should_show_in_shelf) {
+ should_show_in_shelf_ = should_show_in_shelf;
+ }
+
+ private:
+ DownloadItemModelData();
+ virtual ~DownloadItemModelData() {}
+
+ static const char kKey[];
+
+ // Whether the download should be displayed in the download shelf. True by
+ // default.
+ bool should_show_in_shelf_;
+};
+
+// static
+const char DownloadItemModelData::kKey[] = "DownloadItemModelData key";
+
+// static
+const DownloadItemModelData* DownloadItemModelData::Get(
+ const DownloadItem* download) {
+ return static_cast<const DownloadItemModelData*>(download->GetUserData(kKey));
+}
+
+// static
+DownloadItemModelData* DownloadItemModelData::GetOrCreate(
+ DownloadItem* download) {
+ DownloadItemModelData* data =
+ static_cast<DownloadItemModelData*>(download->GetUserData(kKey));
+ if (data == NULL) {
+ data = new DownloadItemModelData();
+ download->SetUserData(kKey, data);
+ }
+ return data;
+}
+
+DownloadItemModelData::DownloadItemModelData()
+ : should_show_in_shelf_(true) {
+}
+
string16 InterruptReasonStatusMessage(int reason) {
int string_id = 0;
@@ -167,6 +222,15 @@ void DownloadItemModel::CancelTask() {
download_->Cancel(true /* update history service */);
}
+string16 DownloadItemModel::GetInterruptReasonText() const {
+ if (download_->GetState() != DownloadItem::INTERRUPTED ||
+ download_->GetLastReason() ==
+ content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED) {
+ return string16();
+ }
+ return InterruptReasonMessage(download_->GetLastReason());
+}
+
string16 DownloadItemModel::GetStatusText() const {
string16 status_text;
switch (download_->GetState()) {
@@ -203,15 +267,6 @@ string16 DownloadItemModel::GetStatusText() const {
return status_text;
}
-string16 DownloadItemModel::GetInterruptReasonText() const {
- if (download_->GetState() != DownloadItem::INTERRUPTED ||
- download_->GetLastReason() ==
- content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED) {
- return string16();
- }
- return InterruptReasonMessage(download_->GetLastReason());
-}
-
string16 DownloadItemModel::GetTooltipText(const gfx::Font& font,
int max_width) const {
string16 tooltip = ui::ElideFilename(
@@ -226,13 +281,6 @@ string16 DownloadItemModel::GetTooltipText(const gfx::Font& font,
return tooltip;
}
-// TODO(asanka,rdsmith): Once 'open' moves exclusively to the
-// ChromeDownloadManagerDelegate, we should calculate the percentage here
-// instead of calling into the DownloadItem.
-int DownloadItemModel::PercentComplete() const {
- return download_->PercentComplete();
-}
-
string16 DownloadItemModel::GetWarningText(const gfx::Font& font,
int base_width) const {
// Should only be called if IsDangerous().
@@ -284,6 +332,26 @@ string16 DownloadItemModel::GetWarningConfirmButtonText() const {
}
}
+int64 DownloadItemModel::GetCompletedBytes() const {
+ return download_->GetReceivedBytes();
+}
+
+int64 DownloadItemModel::GetTotalBytes() const {
+ return download_->AllDataSaved() ? download_->GetReceivedBytes() :
+ download_->GetTotalBytes();
+}
+
+// TODO(asanka,rdsmith): Once 'open' moves exclusively to the
+// ChromeDownloadManagerDelegate, we should calculate the percentage here
+// instead of calling into the DownloadItem.
Randy Smith (Not in Mondays) 2012/12/08 19:37:16 Despite the fact that this is just copied, the ind
asanka 2012/12/10 16:30:36 I originally added the +4 indent here because the
+int DownloadItemModel::PercentComplete() const {
+ return download_->PercentComplete();
+}
+
+bool DownloadItemModel::IsDangerous() const {
+ return download_->GetSafetyState() == DownloadItem::DANGEROUS;
+}
+
bool DownloadItemModel::IsMalicious() const {
if (!IsDangerous())
return false;
@@ -306,17 +374,14 @@ bool DownloadItemModel::IsMalicious() const {
return false;
}
-bool DownloadItemModel::IsDangerous() const {
- return download_->GetSafetyState() == DownloadItem::DANGEROUS;
-}
-
-int64 DownloadItemModel::GetTotalBytes() const {
- return download_->AllDataSaved() ? download_->GetReceivedBytes() :
- download_->GetTotalBytes();
+bool DownloadItemModel::ShouldShowInShelf() const {
+ const DownloadItemModelData* data = DownloadItemModelData::Get(download_);
+ return !data || data->should_show_in_shelf();
}
-int64 DownloadItemModel::GetCompletedBytes() const {
- return download_->GetReceivedBytes();
+void DownloadItemModel::SetShouldShowInShelf(bool should_show) {
+ DownloadItemModelData* data = DownloadItemModelData::GetOrCreate(download_);
+ data->set_should_show_in_shelf(should_show);
}
string16 DownloadItemModel::GetProgressSizesString() const {

Powered by Google App Engine
This is Rietveld 408576698