OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/panels/panel_settings_menu_model.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/utf_string_conversions.h" | |
9 #include "chrome/browser/extensions/extension_service.h" | |
10 #include "chrome/browser/profiles/profile.h" | |
11 #include "chrome/browser/ui/browser.h" | |
12 #include "chrome/browser/ui/panels/panel.h" | |
13 #include "chrome/common/extensions/extension.h" | |
14 #include "chrome/common/url_constants.h" | |
15 #include "grit/chromium_strings.h" | |
16 #include "grit/generated_resources.h" | |
17 #include "ui/base/l10n/l10n_util.h" | |
18 | |
19 using content::OpenURLParams; | |
20 using content::Referrer; | |
21 | |
22 PanelSettingsMenuModel::PanelSettingsMenuModel(Panel* panel) | |
23 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)), | |
24 panel_(panel) { | |
25 const Extension* extension = panel_->GetExtension(); | |
26 DCHECK(extension); | |
27 | |
28 AddItem(COMMAND_NAME, UTF8ToUTF16(extension->name())); | |
29 AddSeparator(); | |
30 AddItem(COMMAND_CONFIGURE, | |
31 l10n_util::GetStringUTF16(IDS_EXTENSIONS_OPTIONS_MENU_ITEM)); | |
32 AddItem(COMMAND_DISABLE, l10n_util::GetStringUTF16(IDS_EXTENSIONS_DISABLE)); | |
33 AddItem(COMMAND_UNINSTALL, | |
34 l10n_util::GetStringUTF16(IDS_EXTENSIONS_UNINSTALL)); | |
35 AddSeparator(); | |
36 AddItem(COMMAND_MANAGE, l10n_util::GetStringUTF16(IDS_MANAGE_EXTENSIONS)); | |
37 } | |
38 | |
39 PanelSettingsMenuModel::~PanelSettingsMenuModel() { | |
40 } | |
41 | |
42 bool PanelSettingsMenuModel::IsCommandIdChecked(int command_id) const { | |
43 // Nothing in the menu is checked. | |
44 return false; | |
45 } | |
46 | |
47 bool PanelSettingsMenuModel::IsCommandIdEnabled(int command_id) const { | |
48 const Extension* extension = panel_->GetExtension(); | |
49 DCHECK(extension); | |
50 | |
51 switch (command_id) { | |
52 case COMMAND_NAME: | |
53 // The NAME links to the Homepage URL. If the extension doesn't have a | |
54 // homepage, we just disable this menu item. | |
55 return extension->GetHomepageURL().is_valid(); | |
56 case COMMAND_CONFIGURE: | |
57 return extension->options_url().spec().length() > 0; | |
58 case COMMAND_DISABLE: | |
59 case COMMAND_UNINSTALL: | |
60 // Some extension types can not be disabled or uninstalled. | |
61 return Extension::UserMayDisable(extension->location()); | |
62 case COMMAND_MANAGE: | |
63 return true; | |
64 default: | |
65 NOTREACHED(); | |
66 return false; | |
67 } | |
68 } | |
69 | |
70 bool PanelSettingsMenuModel::GetAcceleratorForCommandId( | |
71 int command_id, ui::Accelerator* accelerator) { | |
72 return false; | |
73 } | |
74 | |
75 void PanelSettingsMenuModel::ExecuteCommand(int command_id) { | |
76 const Extension* extension = panel_->GetExtension(); | |
77 DCHECK(extension); | |
78 | |
79 Browser* browser = panel_->browser(); | |
80 switch (command_id) { | |
81 case COMMAND_NAME: { | |
82 OpenURLParams params( | |
83 extension->GetHomepageURL(), Referrer(), NEW_FOREGROUND_TAB, | |
84 content::PAGE_TRANSITION_LINK, false); | |
85 browser->OpenURL(params); | |
86 break; | |
87 } | |
88 case COMMAND_CONFIGURE: | |
89 DCHECK(!extension->options_url().is_empty()); | |
90 browser->GetProfile()->GetExtensionProcessManager()->OpenOptionsPage( | |
91 extension, browser); | |
92 break; | |
93 case COMMAND_DISABLE: | |
94 browser->GetProfile()->GetExtensionService()->DisableExtension( | |
95 extension->id(), Extension::DISABLE_USER_ACTION); | |
96 break; | |
97 case COMMAND_UNINSTALL: | |
98 // When the owning panel is being closed by the extension API, the | |
99 // currently showing uninstall dialog will also be dismissed. | |
100 extension_uninstall_dialog_.reset( | |
101 ExtensionUninstallDialog::Create(browser->GetProfile(), this)); | |
102 extension_uninstall_dialog_->ConfirmUninstall(extension); | |
103 break; | |
104 case COMMAND_MANAGE: | |
105 browser->ShowExtensionsTab(); | |
106 break; | |
107 default: | |
108 NOTREACHED(); | |
109 break; | |
110 } | |
111 } | |
112 | |
113 void PanelSettingsMenuModel::ExtensionUninstallAccepted() { | |
114 const Extension* extension = panel_->GetExtension(); | |
115 DCHECK(extension); | |
116 | |
117 panel_->browser()->GetProfile()->GetExtensionService()-> | |
118 UninstallExtension(extension->id(), false, NULL); | |
119 } | |
120 | |
121 void PanelSettingsMenuModel::ExtensionUninstallCanceled() { | |
122 } | |
OLD | NEW |