Index: chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc |
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..db66d64f5bab82693280673993df471fdaa0840f |
--- /dev/null |
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc |
@@ -0,0 +1,118 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.h" |
+ |
+#include "chrome/browser/extensions/extension_service.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/browser_dialogs.h" |
+#include "extensions/browser/extension_system.h" |
+#include "extensions/browser/management_policy.h" |
+#include "extensions/common/extension.h" |
+#include "grit/generated_resources.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/events/event.h" |
+#include "ui/views/controls/button/label_button.h" |
+#include "ui/views/layout/box_layout.h" |
+#include "ui/views/layout/layout_constants.h" |
+#include "ui/views/view.h" |
+#include "ui/views/widget/widget.h" |
+ |
+AppInfoFooterPanel::AppInfoFooterPanel(Profile* profile, |
+ const extensions::Extension* app) |
+ : AppInfoPanel(profile, app), |
+ create_shortcuts_button_(NULL), |
+ remove_button_(NULL), |
+ weak_ptr_factory_(this) { |
+ CreateButtons(); |
+ |
+ SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
+ views::kButtonHEdgeMargin, |
+ views::kButtonVEdgeMargin, |
+ views::kRelatedButtonHSpacing)); |
+ |
+ LayoutButtons(); |
+} |
+ |
+AppInfoFooterPanel::~AppInfoFooterPanel() { |
+} |
+ |
+void AppInfoFooterPanel::CreateButtons() { |
+ if (CanCreateShortcuts()) { |
+ create_shortcuts_button_ = new views::LabelButton( |
+ this, |
+ l10n_util::GetStringUTF16( |
+ IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT)); |
+ create_shortcuts_button_->SetStyle(views::Button::STYLE_BUTTON); |
+ } |
+ |
+ if (CanUninstallApp()) { |
+ remove_button_ = new views::LabelButton( |
+ this, |
+ l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT)); |
+ remove_button_->SetStyle(views::Button::STYLE_BUTTON); |
+ } |
+} |
+ |
+void AppInfoFooterPanel::LayoutButtons() { |
+ if (create_shortcuts_button_) |
+ AddChildView(create_shortcuts_button_); |
+ |
+ if (remove_button_) |
+ AddChildView(remove_button_); |
+} |
+ |
+void AppInfoFooterPanel::ButtonPressed(views::Button* sender, |
+ const ui::Event& event) { |
+ if (sender == create_shortcuts_button_) { |
+ CreateShortcuts(); |
+ } else if (sender == remove_button_) { |
+ UninstallApp(); |
+ } else { |
+ NOTREACHED(); |
+ } |
+} |
+ |
+void AppInfoFooterPanel::ExtensionUninstallAccepted() { |
+ ExtensionService* service = |
+ extensions::ExtensionSystem::Get(profile_)->extension_service(); |
+ service->UninstallExtension(app_->id(), false, NULL); |
+ |
+ // Close the App Info dialog as well (which will free the dialog too). |
+ GetWidget()->Close(); |
+} |
+ |
+void AppInfoFooterPanel::ExtensionUninstallCanceled() { |
+ extension_uninstall_dialog_.reset(); |
+} |
+ |
+void AppInfoFooterPanel::CreateShortcuts() { |
+ DCHECK(CanCreateShortcuts()); |
+ chrome::ShowCreateChromeAppShortcutsDialog(GetWidget()->GetNativeWindow(), |
+ profile_, |
+ app_, |
+ base::Callback<void(bool)>()); |
+} |
+ |
+bool AppInfoFooterPanel::CanCreateShortcuts() const { |
+// ChromeOS can pin apps to the app launcher, but can't create shortcuts. |
+#if defined(OS_CHROMEOS) |
+ return false; |
+#else |
+ return true; |
+#endif |
+} |
+ |
+void AppInfoFooterPanel::UninstallApp() { |
+ DCHECK(CanUninstallApp()); |
+ extension_uninstall_dialog_.reset( |
+ extensions::ExtensionUninstallDialog::Create(profile_, NULL, this)); |
+ extension_uninstall_dialog_->ConfirmUninstall(app_); |
+} |
+ |
+bool AppInfoFooterPanel::CanUninstallApp() const { |
+ return extensions::ExtensionSystem::Get(profile_) |
+ ->management_policy() |
+ ->UserMayModifySettings(app_, NULL); |
+} |