| Index: chrome/browser/extensions/extension_action_context_menu_model.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_action_context_menu_model.cc (revision 0)
|
| +++ chrome/browser/extensions/extension_action_context_menu_model.cc (revision 0)
|
| @@ -0,0 +1,105 @@
|
| +// Copyright (c) 2009 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/extensions/extension_action_context_menu_model.h"
|
| +
|
| +#include "app/l10n_util.h"
|
| +#include "chrome/browser/browser_list.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/extensions/extensions_service.h"
|
| +#include "chrome/browser/profile.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| +#include "chrome/common/extensions/extension_constants.h"
|
| +#include "chrome/common/url_constants.h"
|
| +#include "grit/generated_resources.h"
|
| +
|
| +enum MenuEntries {
|
| + NAME = 0,
|
| + CONFIGURE,
|
| + DISABLE,
|
| + UNINSTALL,
|
| + MANAGE,
|
| +};
|
| +
|
| +ExtensionActionContextMenuModel::ExtensionActionContextMenuModel(
|
| + Extension* extension, ExtensionInstallUI::Delegate* delegate)
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(SimpleMenuModel(this)),
|
| + extension_(extension),
|
| + delegate_(delegate) {
|
| + AddItem(NAME, ASCIIToUTF16(extension->name()));
|
| + AddSeparator();
|
| + AddItemWithStringId(CONFIGURE, IDS_EXTENSIONS_OPTIONS);
|
| + AddItemWithStringId(DISABLE, IDS_EXTENSIONS_DISABLE);
|
| + AddItemWithStringId(UNINSTALL, IDS_EXTENSIONS_UNINSTALL);
|
| + AddSeparator();
|
| +
|
| + // TODO(finnur): It is too late in the process to do another round of
|
| + // translations, so we'll switch fully to IDS_MANAGE_EXTENSIONS after merging
|
| + // this to the beta branch. :/
|
| + std::string locale = g_browser_process->GetApplicationLocale();
|
| + if (locale.find_first_of("en-") == 0)
|
| + AddItemWithStringId(MANAGE, IDS_MANAGE_EXTENSIONS);
|
| + else
|
| + AddItemWithStringId(MANAGE, IDS_SHOW_EXTENSIONS);
|
| +}
|
| +
|
| +ExtensionActionContextMenuModel::~ExtensionActionContextMenuModel() {
|
| +}
|
| +
|
| +bool ExtensionActionContextMenuModel::IsCommandIdChecked(int command_id) const {
|
| + return false;
|
| +}
|
| +
|
| +bool ExtensionActionContextMenuModel::IsCommandIdEnabled(int command_id) const {
|
| + if (command_id == CONFIGURE)
|
| + return extension_->options_url().spec().length() > 0;
|
| + return true;
|
| +}
|
| +
|
| +bool ExtensionActionContextMenuModel::GetAcceleratorForCommandId(
|
| + int command_id, views::Accelerator* accelerator) {
|
| + return false;
|
| +}
|
| +
|
| +void ExtensionActionContextMenuModel::ExecuteCommand(int command_id) {
|
| + // TODO(finnur): GetLastActive returns NULL in unit tests.
|
| + Browser* browser = BrowserList::GetLastActive();
|
| + Profile* profile = browser->profile();
|
| +
|
| + switch (command_id) {
|
| + case NAME: {
|
| + GURL url(std::string(extension_urls::kGalleryBrowsePrefix) +
|
| + std::string("/detail/") + extension_->id());
|
| + browser->OpenURL(url, GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK);
|
| + break;
|
| + }
|
| + case CONFIGURE:
|
| + DCHECK(!extension_->options_url().is_empty());
|
| + browser->OpenURL(extension_->options_url(), GURL(),
|
| + NEW_FOREGROUND_TAB, PageTransition::LINK);
|
| + break;
|
| + case DISABLE: {
|
| + ExtensionsService* extension_service = profile->GetExtensionsService();
|
| + extension_service->DisableExtension(extension_->id());
|
| + break;
|
| + }
|
| + case UNINSTALL: {
|
| + scoped_ptr<SkBitmap> uninstall_icon;
|
| + Extension::DecodeIcon(extension_, Extension::EXTENSION_ICON_LARGE,
|
| + &uninstall_icon);
|
| +
|
| + ExtensionInstallUI client(profile);
|
| + client.ConfirmUninstall(delegate_, extension_, uninstall_icon.get());
|
| + break;
|
| + }
|
| + case MANAGE: {
|
| + browser->OpenURL(GURL(chrome::kChromeUIExtensionsURL), GURL(),
|
| + NEW_FOREGROUND_TAB, PageTransition::LINK);
|
| + break;
|
| + }
|
| + default:
|
| + NOTREACHED() << "Unknown option";
|
| + break;
|
| + }
|
| +}
|
|
|