| 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 |