| 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);
|
|
|