| Index: chrome/browser/extensions/extension_menu_manager.cc
|
| diff --git a/chrome/browser/extensions/extension_menu_manager.cc b/chrome/browser/extensions/extension_menu_manager.cc
|
| index e8bb9886ee5893e18107b3d74e159724040e65a0..48903fa19aeea6352164fbc24112a55d9644cdc4 100644
|
| --- a/chrome/browser/extensions/extension_menu_manager.cc
|
| +++ b/chrome/browser/extensions/extension_menu_manager.cc
|
| @@ -16,13 +16,16 @@
|
| #include "chrome/browser/extensions/extension_event_router.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/extension_system.h"
|
| +#include "chrome/browser/extensions/extension_tab_helper.h"
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| #include "chrome/browser/extensions/state_store.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "chrome/common/extensions/extension.h"
|
| #include "content/public/browser/notification_details.h"
|
| #include "content/public/browser/notification_source.h"
|
| +#include "content/public/browser/web_contents.h"
|
| #include "content/public/common/context_menu_params.h"
|
| #include "ui/base/text/text_elider.h"
|
| #include "ui/gfx/favicon_size.h"
|
| @@ -568,15 +571,21 @@ void ExtensionMenuManager::ExecuteCommand(
|
| Profile* profile,
|
| WebContents* web_contents,
|
| const content::ContextMenuParams& params,
|
| - const ExtensionMenuItem::Id& menuItemId) {
|
| + const ExtensionMenuItem::Id& menu_item_id) {
|
| ExtensionEventRouter* event_router = profile->GetExtensionEventRouter();
|
| if (!event_router)
|
| return;
|
|
|
| - ExtensionMenuItem* item = GetItemById(menuItemId);
|
| + ExtensionMenuItem* item = GetItemById(menu_item_id);
|
| if (!item)
|
| return;
|
|
|
| + // ExtensionService/Extension can be NULL in unit tests :(
|
| + ExtensionService* service =
|
| + ExtensionSystem::Get(profile_)->extension_service();
|
| + const extensions::Extension* extension = service ?
|
| + service->extensions()->GetByID(menu_item_id.extension_id) : NULL;
|
| +
|
| if (item->type() == ExtensionMenuItem::RADIO)
|
| RadioItemSelected(item);
|
|
|
| @@ -613,11 +622,11 @@ void ExtensionMenuManager::ExecuteCommand(
|
| args.Append(properties);
|
|
|
| // Add the tab info to the argument list.
|
| - if (web_contents) {
|
| + // Note: web_contents only NULL in unit tests :(
|
| + if (web_contents)
|
| args.Append(ExtensionTabUtil::CreateTabValue(web_contents));
|
| - } else {
|
| + else
|
| args.Append(new DictionaryValue());
|
| - }
|
|
|
| if (item->type() == ExtensionMenuItem::CHECKBOX ||
|
| item->type() == ExtensionMenuItem::RADIO) {
|
| @@ -632,9 +641,15 @@ void ExtensionMenuManager::ExecuteCommand(
|
| item->SetChecked(checked);
|
| properties->SetBoolean("checked", item->checked());
|
|
|
| - const extensions::Extension* extension = ExtensionSystem::Get(profile_)->
|
| - extension_service()->GetExtensionById(menuItemId.extension_id, false);
|
| - WriteToStorage(extension);
|
| + if (extension)
|
| + WriteToStorage(extension);
|
| + }
|
| +
|
| + TabContents* tab_contents = web_contents ?
|
| + TabContents::FromWebContents(web_contents) : NULL;
|
| + if (tab_contents && extension) {
|
| + tab_contents->extension_tab_helper()->active_tab_permission_manager()->
|
| + GrantIfRequested(extension);
|
| }
|
|
|
| std::string json_args;
|
|
|