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 d0fb4375c378fbae2e0cfa485fc782ef6f20e424..dcf0809adad5fd999c07e2fd59983ba2140ecf8d 100644 |
--- a/chrome/browser/extensions/extension_menu_manager.cc |
+++ b/chrome/browser/extensions/extension_menu_manager.cc |
@@ -17,12 +17,15 @@ |
#include "chrome/browser/extensions/extension_prefs.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/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" |
@@ -533,15 +536,20 @@ 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; |
+ const extensions::Extension* extension = ExtensionSystem::Get(profile_)-> |
+ extension_service()->extensions()->GetByID(menu_item_id.extension_id); |
+ if (!extension) |
+ return; |
+ |
if (item->type() == ExtensionMenuItem::RADIO) |
RadioItemSelected(item); |
@@ -578,11 +586,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) { |
@@ -597,11 +605,16 @@ 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); |
WriteToPrefs(extension); |
} |
+ TabContents* tab_contents = web_contents ? |
+ TabContents::FromWebContents(web_contents) : NULL; |
+ if (tab_contents) { |
+ tab_contents->extension_tab_helper()->active_tab_permission_manager()-> |
+ GrantIfRequested(extension); |
+ } |
+ |
std::string json_args; |
base::JSONWriter::Write(&args, &json_args); |
event_router->DispatchEventToExtension( |