OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/apps/app_info_dialog/app_info_summary_panel.h" | 5 #include "chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_panel.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/callback_forward.h" | 9 #include "base/callback_forward.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/file_util.h" |
11 #include "base/i18n/time_formatting.h" | 12 #include "base/i18n/time_formatting.h" |
12 #include "base/logging.h" | 13 #include "base/logging.h" |
13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "base/task_runner_util.h" |
14 #include "chrome/browser/extensions/extension_service.h" | 16 #include "chrome/browser/extensions/extension_service.h" |
15 #include "chrome/browser/extensions/launch_util.h" | 17 #include "chrome/browser/extensions/launch_util.h" |
16 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
17 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
18 #include "chrome/common/extensions/extension_constants.h" | 20 #include "chrome/common/extensions/extension_constants.h" |
| 21 #include "content/public/browser/browser_thread.h" |
19 #include "extensions/browser/extension_prefs.h" | 22 #include "extensions/browser/extension_prefs.h" |
20 #include "extensions/browser/extension_system.h" | 23 #include "extensions/browser/extension_system.h" |
21 #include "extensions/common/extension.h" | 24 #include "extensions/common/extension.h" |
22 #include "extensions/common/manifest.h" | 25 #include "extensions/common/manifest.h" |
23 #include "grit/generated_resources.h" | 26 #include "grit/generated_resources.h" |
24 #include "ui/base/l10n/l10n_util.h" | 27 #include "ui/base/l10n/l10n_util.h" |
25 #include "ui/base/models/combobox_model.h" | 28 #include "ui/base/models/combobox_model.h" |
| 29 #include "ui/base/text/bytes_formatting.h" |
26 #include "ui/views/controls/combobox/combobox.h" | 30 #include "ui/views/controls/combobox/combobox.h" |
27 #include "ui/views/controls/label.h" | 31 #include "ui/views/controls/label.h" |
28 #include "ui/views/layout/box_layout.h" | 32 #include "ui/views/layout/box_layout.h" |
29 #include "ui/views/layout/layout_constants.h" | 33 #include "ui/views/layout/layout_constants.h" |
30 #include "ui/views/view.h" | 34 #include "ui/views/view.h" |
31 #include "ui/views/widget/widget.h" | 35 #include "ui/views/widget/widget.h" |
32 | 36 |
33 // A model for a combobox selecting the launch options for a hosted app. | 37 // A model for a combobox selecting the launch options for a hosted app. |
34 // Displays different options depending on the host OS. | 38 // Displays different options depending on the host OS. |
35 class LaunchOptionsComboboxModel : public ui::ComboboxModel { | 39 class LaunchOptionsComboboxModel : public ui::ComboboxModel { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 base::string16 LaunchOptionsComboboxModel::GetItemAt(int index) { | 127 base::string16 LaunchOptionsComboboxModel::GetItemAt(int index) { |
124 return launch_type_messages_[index]; | 128 return launch_type_messages_[index]; |
125 } | 129 } |
126 | 130 |
127 AppInfoSummaryPanel::AppInfoSummaryPanel(Profile* profile, | 131 AppInfoSummaryPanel::AppInfoSummaryPanel(Profile* profile, |
128 const extensions::Extension* app) | 132 const extensions::Extension* app) |
129 : AppInfoPanel(profile, app), | 133 : AppInfoPanel(profile, app), |
130 description_heading_(NULL), | 134 description_heading_(NULL), |
131 description_label_(NULL), | 135 description_label_(NULL), |
132 details_heading_(NULL), | 136 details_heading_(NULL), |
| 137 size_title_(NULL), |
| 138 size_value_(NULL), |
133 version_title_(NULL), | 139 version_title_(NULL), |
134 version_value_(NULL), | 140 version_value_(NULL), |
135 installed_time_title_(NULL), | 141 installed_time_title_(NULL), |
136 installed_time_value_(NULL), | 142 installed_time_value_(NULL), |
137 last_run_time_title_(NULL), | 143 last_run_time_title_(NULL), |
138 last_run_time_value_(NULL), | 144 last_run_time_value_(NULL), |
139 launch_options_combobox_(NULL) { | 145 launch_options_combobox_(NULL), |
| 146 weak_ptr_factory_(this) { |
140 // Create UI elements. | 147 // Create UI elements. |
141 CreateDescriptionControl(); | 148 CreateDescriptionControl(); |
142 CreateDetailsControl(); | 149 CreateDetailsControl(); |
143 CreateLaunchOptionControl(); | 150 CreateLaunchOptionControl(); |
144 | 151 |
145 // Layout elements. | 152 // Layout elements. |
146 SetLayoutManager( | 153 SetLayoutManager( |
147 new views::BoxLayout(views::BoxLayout::kVertical, | 154 new views::BoxLayout(views::BoxLayout::kVertical, |
148 0, | 155 0, |
149 0, | 156 0, |
(...skipping 23 matching lines...) Expand all Loading... |
173 | 180 |
174 description_heading_ = CreateHeading( | 181 description_heading_ = CreateHeading( |
175 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_DESCRIPTION_TITLE)); | 182 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_DESCRIPTION_TITLE)); |
176 description_label_ = new views::Label(text); | 183 description_label_ = new views::Label(text); |
177 description_label_->SetMultiLine(true); | 184 description_label_->SetMultiLine(true); |
178 description_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 185 description_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
179 } | 186 } |
180 } | 187 } |
181 | 188 |
182 void AppInfoSummaryPanel::CreateDetailsControl() { | 189 void AppInfoSummaryPanel::CreateDetailsControl() { |
| 190 // The size doesn't make sense for component apps. |
| 191 if (app_->location() != extensions::Manifest::COMPONENT) { |
| 192 size_title_ = new views::Label( |
| 193 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_SIZE_LABEL)); |
| 194 size_title_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 195 |
| 196 size_value_ = new views::Label( |
| 197 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_SIZE_LOADING_LABEL)); |
| 198 size_value_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 199 |
| 200 StartCalculatingAppSize(); |
| 201 } |
| 202 |
183 // The version doesn't make sense for bookmark apps. | 203 // The version doesn't make sense for bookmark apps. |
184 if (!app_->from_bookmark()) { | 204 if (!app_->from_bookmark()) { |
185 // Display 'Version: Built-in' for component apps. | 205 // Display 'Version: Built-in' for component apps. |
186 base::string16 version_str = base::ASCIIToUTF16(app_->VersionString()); | 206 base::string16 version_str = base::ASCIIToUTF16(app_->VersionString()); |
187 if (app_->location() == extensions::Manifest::COMPONENT) | 207 if (app_->location() == extensions::Manifest::COMPONENT) |
188 version_str = l10n_util::GetStringUTF16( | 208 version_str = l10n_util::GetStringUTF16( |
189 IDS_APPLICATION_INFO_VERSION_BUILT_IN_LABEL); | 209 IDS_APPLICATION_INFO_VERSION_BUILT_IN_LABEL); |
190 | 210 |
191 version_title_ = new views::Label( | 211 version_title_ = new views::Label( |
192 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_VERSION_LABEL)); | 212 l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_VERSION_LABEL)); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 if (installed_time_title_ && installed_time_value_) { | 288 if (installed_time_title_ && installed_time_value_) { |
269 details_stack->AddChildView( | 289 details_stack->AddChildView( |
270 CreateKeyValueField(installed_time_title_, installed_time_value_)); | 290 CreateKeyValueField(installed_time_title_, installed_time_value_)); |
271 } | 291 } |
272 | 292 |
273 if (last_run_time_title_ && last_run_time_value_) { | 293 if (last_run_time_title_ && last_run_time_value_) { |
274 details_stack->AddChildView( | 294 details_stack->AddChildView( |
275 CreateKeyValueField(last_run_time_title_, last_run_time_value_)); | 295 CreateKeyValueField(last_run_time_title_, last_run_time_value_)); |
276 } | 296 } |
277 | 297 |
| 298 if (size_title_ && size_value_) { |
| 299 details_stack->AddChildView( |
| 300 CreateKeyValueField(size_title_, size_value_)); |
| 301 } |
| 302 |
278 views::View* vertical_stack = CreateVerticalStack(); | 303 views::View* vertical_stack = CreateVerticalStack(); |
279 vertical_stack->AddChildView(details_heading_); | 304 vertical_stack->AddChildView(details_heading_); |
280 vertical_stack->AddChildView(details_stack); | 305 vertical_stack->AddChildView(details_stack); |
281 AddChildView(vertical_stack); | 306 AddChildView(vertical_stack); |
282 } | 307 } |
283 } | 308 } |
284 | 309 |
285 void AppInfoSummaryPanel::OnPerformAction(views::Combobox* combobox) { | 310 void AppInfoSummaryPanel::OnPerformAction(views::Combobox* combobox) { |
286 if (combobox == launch_options_combobox_) { | 311 if (combobox == launch_options_combobox_) { |
287 SetLaunchType(launch_options_combobox_model_->GetLaunchTypeAtIndex( | 312 SetLaunchType(launch_options_combobox_model_->GetLaunchTypeAtIndex( |
288 launch_options_combobox_->selected_index())); | 313 launch_options_combobox_->selected_index())); |
289 } else { | 314 } else { |
290 NOTREACHED(); | 315 NOTREACHED(); |
291 } | 316 } |
292 } | 317 } |
293 | 318 |
| 319 void AppInfoSummaryPanel::StartCalculatingAppSize() { |
| 320 base::PostTaskAndReplyWithResult( |
| 321 content::BrowserThread::GetBlockingPool(), |
| 322 FROM_HERE, |
| 323 base::Bind(&base::ComputeDirectorySize, app_->path()), |
| 324 base::Bind(&AppInfoSummaryPanel::OnAppSizeCalculated, AsWeakPtr())); |
| 325 } |
| 326 |
| 327 void AppInfoSummaryPanel::OnAppSizeCalculated(int64 app_size_in_bytes) { |
| 328 size_value_->SetText(ui::FormatBytes(app_size_in_bytes)); |
| 329 } |
| 330 |
294 base::Time AppInfoSummaryPanel::GetInstalledTime() const { | 331 base::Time AppInfoSummaryPanel::GetInstalledTime() const { |
295 return extensions::ExtensionPrefs::Get(profile_)->GetInstallTime(app_->id()); | 332 return extensions::ExtensionPrefs::Get(profile_)->GetInstallTime(app_->id()); |
296 } | 333 } |
297 | 334 |
298 base::Time AppInfoSummaryPanel::GetLastLaunchedTime() const { | 335 base::Time AppInfoSummaryPanel::GetLastLaunchedTime() const { |
299 return extensions::ExtensionPrefs::Get(profile_) | 336 return extensions::ExtensionPrefs::Get(profile_) |
300 ->GetLastLaunchTime(app_->id()); | 337 ->GetLastLaunchTime(app_->id()); |
301 } | 338 } |
302 | 339 |
303 extensions::LaunchType AppInfoSummaryPanel::GetLaunchType() const { | 340 extensions::LaunchType AppInfoSummaryPanel::GetLaunchType() const { |
304 return extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile_), | 341 return extensions::GetLaunchType(extensions::ExtensionPrefs::Get(profile_), |
305 app_); | 342 app_); |
306 } | 343 } |
307 | 344 |
308 void AppInfoSummaryPanel::SetLaunchType( | 345 void AppInfoSummaryPanel::SetLaunchType( |
309 extensions::LaunchType launch_type) const { | 346 extensions::LaunchType launch_type) const { |
310 DCHECK(CanSetLaunchType()); | 347 DCHECK(CanSetLaunchType()); |
311 ExtensionService* service = | 348 ExtensionService* service = |
312 extensions::ExtensionSystem::Get(profile_)->extension_service(); | 349 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
313 extensions::SetLaunchType(service, app_->id(), launch_type); | 350 extensions::SetLaunchType(service, app_->id(), launch_type); |
314 } | 351 } |
315 | 352 |
316 bool AppInfoSummaryPanel::CanSetLaunchType() const { | 353 bool AppInfoSummaryPanel::CanSetLaunchType() const { |
317 // V2 apps don't have a launch type, and neither does the Chrome app. | 354 // V2 apps don't have a launch type, and neither does the Chrome app. |
318 return app_->id() != extension_misc::kChromeAppId && !app_->is_platform_app(); | 355 return app_->id() != extension_misc::kChromeAppId && !app_->is_platform_app(); |
319 } | 356 } |
OLD | NEW |