| Index: chrome/browser/extensions/extension_context_menu_model.cc
|
| diff --git a/chrome/browser/extensions/extension_context_menu_model.cc b/chrome/browser/extensions/extension_context_menu_model.cc
|
| index 492f0289e593af770f8ea7cffb3aa117ad9a4678..3d9e31d8d3400df330b74cbe45592859bef90fc0 100644
|
| --- a/chrome/browser/extensions/extension_context_menu_model.cc
|
| +++ b/chrome/browser/extensions/extension_context_menu_model.cc
|
| @@ -107,6 +107,16 @@ int GetVisibilityStringId(
|
| return string_id;
|
| }
|
|
|
| +// Returns true if the given |extension| is required to remain installed by
|
| +// policy.
|
| +bool IsExtensionRequiredByPolicy(const Extension* extension,
|
| + Profile* profile) {
|
| + extensions::ManagementPolicy* policy =
|
| + extensions::ExtensionSystem::Get(profile)->management_policy();
|
| + return !policy->UserMayModifySettings(extension, nullptr) ||
|
| + policy->MustRemainInstalled(extension, nullptr);
|
| +}
|
| +
|
| } // namespace
|
|
|
| ExtensionContextMenuModel::ExtensionContextMenuModel(
|
| @@ -170,11 +180,7 @@ bool ExtensionContextMenuModel::IsCommandIdEnabled(int command_id) const {
|
| return extension_action_ &&
|
| extension_action_->HasPopup(SessionTabHelper::IdForTab(web_contents));
|
| } else if (command_id == UNINSTALL) {
|
| - // Some extension types can not be uninstalled.
|
| - extensions::ManagementPolicy* policy =
|
| - extensions::ExtensionSystem::Get(profile_)->management_policy();
|
| - return policy->UserMayModifySettings(extension, nullptr) &&
|
| - !policy->MustRemainInstalled(extension, nullptr);
|
| + return !IsExtensionRequiredByPolicy(extension, profile_);
|
| }
|
| return true;
|
| }
|
| @@ -306,8 +312,19 @@ void ExtensionContextMenuModel::InitMenu(const Extension* extension,
|
| if (!is_component_ || extensions::OptionsPageInfo::HasOptionsPage(extension))
|
| AddItemWithStringId(CONFIGURE, IDS_EXTENSIONS_OPTIONS_MENU_ITEM);
|
|
|
| - if (!is_component_)
|
| - AddItem(UNINSTALL, l10n_util::GetStringUTF16(IDS_EXTENSIONS_UNINSTALL));
|
| + if (!is_component_) {
|
| + bool is_required_by_policy =
|
| + IsExtensionRequiredByPolicy(extension, profile_);
|
| + int message_id = is_required_by_policy ?
|
| + IDS_EXTENSIONS_INSTALLED_BY_ADMIN : IDS_EXTENSIONS_UNINSTALL;
|
| + AddItem(UNINSTALL, l10n_util::GetStringUTF16(message_id));
|
| + if (is_required_by_policy) {
|
| + int uninstall_index = GetIndexOfCommandId(UNINSTALL);
|
| + SetIcon(uninstall_index,
|
| + ui::ResourceBundle::GetSharedInstance().GetImageNamed(
|
| + IDR_CONTROLLED_SETTING_MANDATORY));
|
| + }
|
| + }
|
|
|
| // Add a toggle visibility (show/hide) if the extension icon is shown on the
|
| // toolbar.
|
|
|