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

Unified Diff: chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc

Issue 423363002: Add 'App Size' to App Info Dialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed commented-out function Created 6 years, 5 months 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/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
index 2a859598042be02216496cc25fdb66a8a85e956a..01be6050e69404d560a21d769af07319f35882d1 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc
@@ -8,6 +8,7 @@
#include "base/callback_forward.h"
#include "base/command_line.h"
+#include "base/file_util.h"
#include "base/i18n/time_formatting.h"
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
@@ -16,6 +17,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension_constants.h"
+#include "content/public/browser/browser_thread.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h"
@@ -23,6 +25,7 @@
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/combobox_model.h"
+#include "ui/base/text/bytes_formatting.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
@@ -124,19 +127,41 @@ base::string16 LaunchOptionsComboboxModel::GetItemAt(int index) {
return launch_type_messages_[index];
}
+// A buffer for storing the App's size while it's being calculated.
+class AppSizeBuffer : public base::RefCountedThreadSafe<AppSizeBuffer> {
+ public:
+ void SetAppSize(int64 app_size) { app_size_ = app_size; }
+ int64 GetAppSize() { return app_size_; }
+
+ private:
+ friend class base::RefCountedThreadSafe<AppSizeBuffer>;
+ virtual ~AppSizeBuffer() {}
+
+ int64 app_size_;
+};
+
+// Calculates the size of the given path and saves it to the provided buffer.
+void CalculateAppSize(const base::FilePath& path,
+ scoped_refptr<AppSizeBuffer> app_size_in_bytes) {
+ app_size_in_bytes->SetAppSize(base::ComputeDirectorySize(path));
+}
+
AppInfoSummaryPanel::AppInfoSummaryPanel(Profile* profile,
const extensions::Extension* app)
: AppInfoPanel(profile, app),
description_heading_(NULL),
description_label_(NULL),
details_heading_(NULL),
+ size_title_(NULL),
+ size_value_(NULL),
version_title_(NULL),
version_value_(NULL),
installed_time_title_(NULL),
installed_time_value_(NULL),
last_run_time_title_(NULL),
last_run_time_value_(NULL),
- launch_options_combobox_(NULL) {
+ launch_options_combobox_(NULL),
+ weak_ptr_factory_(this) {
// Create UI elements.
CreateDescriptionControl();
CreateDetailsControl();
@@ -180,6 +205,19 @@ void AppInfoSummaryPanel::CreateDescriptionControl() {
}
void AppInfoSummaryPanel::CreateDetailsControl() {
+ // The size doesn't make sense for component apps.
+ if (app_->location() != extensions::Manifest::COMPONENT) {
+ size_title_ = new views::Label(
+ l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_SIZE_LABEL));
+ size_title_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+
+ size_value_ = new views::Label(
+ l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_SIZE_LOADING_LABEL));
+ size_value_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+
+ StartCalculatingAppSize();
+ }
+
// The version doesn't make sense for bookmark apps.
if (!app_->from_bookmark()) {
// Display 'Version: Built-in' for component apps.
@@ -273,6 +311,10 @@ void AppInfoSummaryPanel::LayoutDetailsControl() {
details_stack->AddChildView(
CreateKeyValueField(last_run_time_title_, last_run_time_value_));
+ if (size_title_ && size_value_)
+ details_stack->AddChildView(
+ CreateKeyValueField(size_title_, size_value_));
+
views::View* vertical_stack = CreateVerticalStack();
vertical_stack->AddChildView(details_heading_);
vertical_stack->AddChildView(details_stack);
@@ -289,6 +331,22 @@ void AppInfoSummaryPanel::OnPerformAction(views::Combobox* combobox) {
}
}
+void AppInfoSummaryPanel::StartCalculatingAppSize() {
+ scoped_refptr<AppSizeBuffer> app_size_in_bytes = new AppSizeBuffer();
+ content::BrowserThread::PostTaskAndReply(
tapted 2014/07/31 00:42:04 I think you want PostTaskAndReplyWithResult. Also
sashab 2014/07/31 05:00:46 Nice! Saves so much code. Strange how there are di
+ content::BrowserThread::FILE,
+ FROM_HERE,
+ base::Bind(&CalculateAppSize, app_->path(), app_size_in_bytes),
+ base::Bind(&AppInfoSummaryPanel::OnAppSizeCalculated,
+ AsWeakPtr(),
+ app_size_in_bytes));
+}
+
+void AppInfoSummaryPanel::OnAppSizeCalculated(
tapted 2014/07/31 00:42:04 Then this can just take an an int64 argument
sashab 2014/07/31 05:00:46 Yup, done.
+ scoped_refptr<AppSizeBuffer> app_size_in_bytes) {
+ size_value_->SetText(ui::FormatBytes(app_size_in_bytes->GetAppSize()));
+}
+
base::Time AppInfoSummaryPanel::GetInstalledTime() const {
return extensions::ExtensionPrefs::Get(profile_)->GetInstallTime(app_->id());
}

Powered by Google App Engine
This is Rietveld 408576698