Index: chrome/browser/tab_contents/render_view_context_menu.cc |
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc |
index afd5ccbdc6039d45d026ff66c714b591a170a538..f792b359d7f8e69e85f1cc5e197284c81cec3c2e 100644 |
--- a/chrome/browser/tab_contents/render_view_context_menu.cc |
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc |
@@ -23,6 +23,7 @@ |
#include "chrome/browser/debugger/devtools_manager.h" |
#include "chrome/browser/debugger/devtools_window.h" |
#include "chrome/browser/download/download_manager.h" |
+#include "chrome/browser/extensions/extension_event_router.h" |
#include "chrome/browser/extensions/extensions_service.h" |
#include "chrome/browser/fonts_languages_window.h" |
#include "chrome/browser/metrics/user_metrics.h" |
@@ -150,10 +151,12 @@ static const GURL& GetDocumentURL(const ContextMenuParams& params) { |
} |
// Given a list of items, returns the ones that match given the contents |
-// of |params|. |
+// of |params| and the profile. |
static ExtensionMenuItem::List GetRelevantExtensionItems( |
const ExtensionMenuItem::List& items, |
- const ContextMenuParams& params) { |
+ const ContextMenuParams& params, |
+ Profile* profile, |
+ bool can_cross_incognito) { |
ExtensionMenuItem::List result; |
for (ExtensionMenuItem::List::const_iterator i = items.begin(); |
i != items.end(); ++i) { |
@@ -171,7 +174,8 @@ static ExtensionMenuItem::List GetRelevantExtensionItems( |
if (!ExtensionPatternMatch(item->target_url_patterns(), target_url)) |
continue; |
- result.push_back(*i); |
+ if (item->id().profile == profile || can_cross_incognito) |
+ result.push_back(*i); |
} |
return result; |
} |
@@ -181,6 +185,8 @@ void RenderViewContextMenu::AppendExtensionItems( |
ExtensionsService* service = profile_->GetExtensionsService(); |
ExtensionMenuManager* manager = service->menu_manager(); |
const Extension* extension = service->GetExtensionById(extension_id, false); |
+ bool can_cross_incognito = |
+ ExtensionEventRouter::CanCrossIncognito(profile_, extension); |
DCHECK_GE(*index, 0); |
int max_index = |
IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST - IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST; |
@@ -192,7 +198,8 @@ void RenderViewContextMenu::AppendExtensionItems( |
if (!all_items || all_items->empty()) |
return; |
ExtensionMenuItem::List items = |
- GetRelevantExtensionItems(*all_items, params_); |
+ GetRelevantExtensionItems(*all_items, params_, profile_, |
+ can_cross_incognito); |
if (items.empty()) |
return; |
@@ -215,7 +222,8 @@ void RenderViewContextMenu::AppendExtensionItems( |
extension_item_map_[menu_id] = item->id(); |
title = item->TitleWithReplacement(PrintableSelectionText(), |
kMaxExtensionItemTitleLength); |
- submenu_items = GetRelevantExtensionItems(item->children(), params_); |
+ submenu_items = GetRelevantExtensionItems(item->children(), params_, |
+ profile_, can_cross_incognito); |
} |
// Now add our item(s) to the menu_model_. |
@@ -225,13 +233,15 @@ void RenderViewContextMenu::AppendExtensionItems( |
menus::SimpleMenuModel* submenu = new menus::SimpleMenuModel(this); |
extension_menu_models_.push_back(submenu); |
menu_model_.AddSubMenu(menu_id, title, submenu); |
- RecursivelyAppendExtensionItems(submenu_items, submenu, index); |
+ RecursivelyAppendExtensionItems(submenu_items, can_cross_incognito, submenu, |
+ index); |
} |
SetExtensionIcon(extension_id); |
} |
void RenderViewContextMenu::RecursivelyAppendExtensionItems( |
const ExtensionMenuItem::List& items, |
+ bool can_cross_incognito, |
menus::SimpleMenuModel* menu_model, |
int *index) { |
string16 selection_text = PrintableSelectionText(); |
@@ -258,14 +268,16 @@ void RenderViewContextMenu::RecursivelyAppendExtensionItems( |
kMaxExtensionItemTitleLength); |
if (item->type() == ExtensionMenuItem::NORMAL) { |
ExtensionMenuItem::List children = |
- GetRelevantExtensionItems(item->children(), params_); |
+ GetRelevantExtensionItems(item->children(), params_, |
+ profile_, can_cross_incognito); |
if (children.size() == 0) { |
menu_model->AddItem(menu_id, title); |
} else { |
menus::SimpleMenuModel* submenu = new menus::SimpleMenuModel(this); |
extension_menu_models_.push_back(submenu); |
menu_model->AddSubMenu(menu_id, title, submenu); |
- RecursivelyAppendExtensionItems(children, submenu, index); |
+ RecursivelyAppendExtensionItems(children, can_cross_incognito, |
+ submenu, index); |
} |
} else if (item->type() == ExtensionMenuItem::CHECKBOX) { |
menu_model->AddCheckItem(menu_id, title); |