Chromium Code Reviews| Index: chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| index 5a4ab40131b9e7646e31a3ba46e0a045871eb86b..fe5a1a027bb65e171303151d97fb90a860ca635a 100644 |
| --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| @@ -38,7 +38,6 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_io_data.h" |
| #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory.h" |
| -#include "chrome/browser/renderer_context_menu/spellchecker_submenu_observer.h" |
| #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" |
| #include "chrome/browser/search/search.h" |
| #include "chrome/browser/search_engines/template_url_service_factory.h" |
| @@ -155,9 +154,14 @@ const int kImageSearchThumbnailMaxHeight = 600; |
| // Never change mapping or reuse |enum_id|. Always push back new items. |
| // Items that is not used any more by |RenderViewContextMenu.ExecuteCommand| |
| // could be deleted, but don't change the rest of |kUmaEnumToControlId|. |
| +// |
| +// |context_specific_enum_id| matches the ContextMenuOption histogram enum. |
| +// Used to track command usage under specific contexts - Specifically Menu |
|
Avi (use Gerrit)
2015/09/26 02:26:15
"... specific contexts, specifically menu items...
edwardjung
2015/09/28 14:11:25
Done.
|
| +// items under 'link + image' and 'selected text'. |
| const struct UmaEnumCommandIdPair { |
| int enum_id; |
| int control_id; |
| + int context_specific_enum_id; |
|
Avi (use Gerrit)
2015/09/26 02:26:15
This order makes it hard to read the list. Do:
co
edwardjung
2015/09/28 14:11:25
Makes sense, done.
|
| } kUmaEnumToControlId[] = { |
| /* |
| enum id for 0, 1 are detected using |
| @@ -165,17 +169,17 @@ const struct UmaEnumCommandIdPair { |
| ContextMenuMatcher::IsExtensionsCustomCommandId |
| */ |
| {2, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST}, |
| - {3, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB}, |
| - {4, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW}, |
| - {5, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD}, |
| - {6, IDC_CONTENT_CONTEXT_SAVELINKAS}, |
| - {7, IDC_CONTENT_CONTEXT_SAVEAVAS}, |
| - {8, IDC_CONTENT_CONTEXT_SAVEIMAGEAS}, |
| - {9, IDC_CONTENT_CONTEXT_COPYLINKLOCATION}, |
| - {10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION}, |
| + {3, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 0}, |
| + {4, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, 15}, |
| + {5, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, 1}, |
| + {6, IDC_CONTENT_CONTEXT_SAVELINKAS, 5}, |
| + {7, IDC_CONTENT_CONTEXT_SAVEAVAS, 17}, |
| + {8, IDC_CONTENT_CONTEXT_SAVEIMAGEAS, 6}, |
| + {9, IDC_CONTENT_CONTEXT_COPYLINKLOCATION, 2}, |
| + {10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, 10}, |
| {11, IDC_CONTENT_CONTEXT_COPYAVLOCATION}, |
| - {12, IDC_CONTENT_CONTEXT_COPYIMAGE}, |
| - {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB}, |
| + {12, IDC_CONTENT_CONTEXT_COPYIMAGE, 9}, |
| + {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, 8}, |
| {14, IDC_CONTENT_CONTEXT_OPENAVNEWTAB}, |
| {15, IDC_CONTENT_CONTEXT_PLAYPAUSE}, |
| {16, IDC_CONTENT_CONTEXT_MUTE}, |
| @@ -189,7 +193,7 @@ const struct UmaEnumCommandIdPair { |
| {24, IDC_RELOAD}, |
| {25, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP}, |
| {26, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP}, |
| - {27, IDC_PRINT}, |
| + {27, IDC_PRINT, 16}, |
| {28, IDC_VIEW_SOURCE}, |
| {29, IDC_CONTENT_CONTEXT_INSPECTELEMENT}, |
| {30, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE}, |
| @@ -201,12 +205,12 @@ const struct UmaEnumCommandIdPair { |
| {36, IDC_CONTENT_CONTEXT_UNDO}, |
| {37, IDC_CONTENT_CONTEXT_REDO}, |
| {38, IDC_CONTENT_CONTEXT_CUT}, |
| - {39, IDC_CONTENT_CONTEXT_COPY}, |
| + {39, IDC_CONTENT_CONTEXT_COPY, 4}, |
| {40, IDC_CONTENT_CONTEXT_PASTE}, |
| {41, IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE}, |
| {42, IDC_CONTENT_CONTEXT_DELETE}, |
| {43, IDC_CONTENT_CONTEXT_SELECTALL}, |
| - {44, IDC_CONTENT_CONTEXT_SEARCHWEBFOR}, |
| + {44, IDC_CONTENT_CONTEXT_SEARCHWEBFOR, 17}, |
| {45, IDC_CONTENT_CONTEXT_GOTOURL}, |
| {46, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS}, |
| {47, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS}, |
| @@ -216,7 +220,7 @@ const struct UmaEnumCommandIdPair { |
| {54, IDC_SPELLCHECK_MENU}, |
| {55, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE}, |
| {56, IDC_SPELLCHECK_LANGUAGES_FIRST}, |
| - {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE}, |
| + {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, 11}, |
| {58, IDC_SPELLCHECK_SUGGESTION_0}, |
| {59, IDC_SPELLCHECK_ADD_TO_DICTIONARY}, |
| {60, IDC_SPELLPANEL_TOGGLE}, |
| @@ -256,7 +260,8 @@ int CollapseCommandsForUMA(int id) { |
| } |
| // Returns UMA enum value for command specified by |id| or -1 if not found. |
| -int FindUMAEnumValueForCommand(int id) { |
| +// |use_specific_context_enum| set to true returns the context_specific_enum_id. |
| +int FindUMAEnumValueForCommand(int id, bool use_specific_context_enum) { |
|
Avi (use Gerrit)
2015/09/26 02:26:15
This is a magic bool as a parameter that is imposs
edwardjung
2015/09/28 14:11:25
Understood. Changed to use an enum.
|
| if (RenderViewContextMenu::IsContentCustomCommandId(id)) |
| return 0; |
| @@ -267,9 +272,15 @@ int FindUMAEnumValueForCommand(int id) { |
| const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
| for (size_t i = 0; i < kMappingSize; ++i) { |
| if (kUmaEnumToControlId[i].control_id == id) { |
| - return kUmaEnumToControlId[i].enum_id; |
| + if (!use_specific_context_enum) { |
| + return kUmaEnumToControlId[i].enum_id; |
| + } else if (use_specific_context_enum && |
| + kUmaEnumToControlId[i].context_specific_enum_id > -1) { |
|
Avi (use Gerrit)
2015/09/26 02:26:15
How could this ever not be true? In most of the li
edwardjung
2015/09/28 14:11:25
Understood. Fixed.
|
| + return kUmaEnumToControlId[i].context_specific_enum_id; |
| + } |
| } |
| } |
| + |
| return -1; |
| } |
| @@ -341,8 +352,6 @@ void WriteURLToClipboard(const GURL& url, const std::string& languages) { |
| bool g_custom_id_ranges_initialized = false; |
| -const int kSpellcheckRadioGroup = 1; |
| - |
| } // namespace |
| // static |
| @@ -558,13 +567,6 @@ void RenderViewContextMenu::InitMenu() { |
| if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) |
| AppendPageItems(); |
| - if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME)) { |
| - // Merge in frame items with page items if we clicked within a frame that |
| - // needs them. |
| - menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| - AppendFrameItems(); |
| - } |
| - |
| if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { |
| AppendLinkItems(); |
| if (params_.media_type != WebContextMenuData::MediaTypeNone) |
| @@ -617,8 +619,18 @@ void RenderViewContextMenu::InitMenu() { |
| AppendSearchProvider(); |
| } |
| - if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT)) |
| + if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT) && |
| + !content_type_->SupportsGroup( |
| + ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { |
| AppendPrintItem(); |
| + } |
| + |
| + if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_EDITABLE)) |
| + { |
| + menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| + AppendPlatformEditableItems(); |
| + AppendLanguageSettings(); |
| + } |
|
Avi (use Gerrit)
2015/09/26 02:26:15
Your indenting is wack; please fix.
edwardjung
2015/09/28 14:11:25
Done.
|
| if (content_type_->SupportsGroup( |
| ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { |
| @@ -665,18 +677,37 @@ Profile* RenderViewContextMenu::GetProfile() { |
| } |
| void RenderViewContextMenu::RecordUsedItem(int id) { |
| - int enum_id = FindUMAEnumValueForCommand(id); |
| + int enum_id = FindUMAEnumValueForCommand(id, false); |
| if (enum_id != -1) { |
| const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
| UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Used", enum_id, |
| kUmaEnumToControlId[kMappingSize - 1].enum_id); |
| + // Record to additional context specific histograms. |
| + enum_id = FindUMAEnumValueForCommand(id, true); |
| + |
| + // Linked image context. |
| + if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK) && |
| + content_type_->SupportsGroup( |
| + ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { |
| + UMA_HISTOGRAM_ENUMERATION("ContextMenu.SelectedOption.ImageLink", enum_id, |
| + kUmaEnumToControlId[kMappingSize - 1].enum_id); |
| + } |
| + // Selected text context. |
| + if (content_type_->SupportsGroup( |
| + ContextMenuContentType::ITEM_GROUP_SEARCH_PROVIDER) && |
| + content_type_->SupportsGroup( |
| + ContextMenuContentType::ITEM_GROUP_PRINT)) { |
|
Avi (use Gerrit)
2015/09/26 02:26:15
Your indenting is weird; you should indent line 69
edwardjung
2015/09/28 14:11:25
Done.
|
| + UMA_HISTOGRAM_ENUMERATION("ContextMenu.SelectedOption.SelectedText", |
| + enum_id, |
| + kUmaEnumToControlId[kMappingSize - 1].enum_id); |
| + } |
| } else { |
| NOTREACHED() << "Update kUmaEnumToControlId. Unhanded IDC: " << id; |
| } |
| } |
| void RenderViewContextMenu::RecordShownItem(int id) { |
| - int enum_id = FindUMAEnumValueForCommand(id); |
| + int enum_id = FindUMAEnumValueForCommand(id, false); |
| if (enum_id != -1) { |
| const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
| UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Shown", enum_id, |
| @@ -726,6 +757,14 @@ void RenderViewContextMenu::AppendDeveloperItems() { |
| // In the DevTools popup menu, "developer items" is normally the only |
| // section, so omit the separator there. |
| menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| + // Page context source. |
| + if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) |
| + menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE, |
| + IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); |
| + // Frame context source. |
| + if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME)) |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE, |
| + IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE); |
|
Avi (use Gerrit)
2015/09/26 02:26:15
Are these useful comments? I would say no.
edwardjung
2015/09/28 14:11:25
Removed.
|
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTELEMENT, |
| IDS_CONTENT_CONTEXT_INSPECTELEMENT); |
| } |
| @@ -767,12 +806,6 @@ void RenderViewContextMenu::AppendLinkItems() { |
| } |
| void RenderViewContextMenu::AppendImageItems() { |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, |
| - IDS_CONTENT_CONTEXT_SAVEIMAGEAS); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, |
| - IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, |
| - IDS_CONTENT_CONTEXT_COPYIMAGE); |
| std::map<std::string, std::string>::const_iterator it = |
| params_.properties.find(data_reduction_proxy::chrome_proxy_header()); |
| if (it != params_.properties.end() && it->second == |
| @@ -792,6 +825,12 @@ void RenderViewContextMenu::AppendImageItems() { |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, |
| IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB); |
| } |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, |
| + IDS_CONTENT_CONTEXT_SAVEIMAGEAS); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, |
| + IDS_CONTENT_CONTEXT_COPYIMAGE); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, |
| + IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); |
| } |
| void RenderViewContextMenu::AppendSearchWebForImageItems() { |
| @@ -810,14 +849,13 @@ void RenderViewContextMenu::AppendSearchWebForImageItems() { |
| } |
| void RenderViewContextMenu::AppendAudioItems() { |
| - AppendMediaItems(); |
| menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
| + IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
| IDS_CONTENT_CONTEXT_SAVEAUDIOAS); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
| IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
| - IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); |
| } |
| void RenderViewContextMenu::AppendCanvasItems() { |
| @@ -828,35 +866,13 @@ void RenderViewContextMenu::AppendCanvasItems() { |
| } |
| void RenderViewContextMenu::AppendVideoItems() { |
| - AppendMediaItems(); |
| menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
| + IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
| IDS_CONTENT_CONTEXT_SAVEVIDEOAS); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
| IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
| - IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); |
| -} |
| - |
| -void RenderViewContextMenu::AppendMediaItems() { |
| - int media_flags = params_.media_flags; |
| - |
| - menu_model_.AddItemWithStringId( |
| - IDC_CONTENT_CONTEXT_PLAYPAUSE, |
| - media_flags & WebContextMenuData::MediaPaused ? |
| - IDS_CONTENT_CONTEXT_PLAY : |
| - IDS_CONTENT_CONTEXT_PAUSE); |
| - |
| - menu_model_.AddItemWithStringId( |
| - IDC_CONTENT_CONTEXT_MUTE, |
| - media_flags & WebContextMenuData::MediaMuted ? |
| - IDS_CONTENT_CONTEXT_UNMUTE : |
| - IDS_CONTENT_CONTEXT_MUTE); |
| - |
| - menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_LOOP, |
| - IDS_CONTENT_CONTEXT_LOOP); |
| - menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_CONTROLS, |
| - IDS_CONTENT_CONTEXT_CONTROLS); |
| } |
| void RenderViewContextMenu::AppendPluginItems() { |
| @@ -895,27 +911,11 @@ void RenderViewContextMenu::AppendPageItems() { |
| IDC_CONTENT_CONTEXT_TRANSLATE, |
| l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_TRANSLATE, language)); |
| } |
| - |
| - menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE, |
| - IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWPAGEINFO, |
| - IDS_CONTENT_CONTEXT_VIEWPAGEINFO); |
| -} |
| - |
| -void RenderViewContextMenu::AppendFrameItems() { |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOADFRAME, |
| - IDS_CONTENT_CONTEXT_RELOADFRAME); |
| - // These two menu items have yet to be implemented. |
| - // http://code.google.com/p/chromium/issues/detail?id=11827 |
| - // IDS_CONTENT_CONTEXT_SAVEFRAMEAS |
| - // IDS_CONTENT_CONTEXT_PRINTFRAME |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE, |
| - IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMEINFO, |
| - IDS_CONTENT_CONTEXT_VIEWFRAMEINFO); |
| } |
| void RenderViewContextMenu::AppendCopyItem() { |
| + if (menu_model_.GetItemCount()) |
| + menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, |
| IDS_CONTENT_CONTEXT_COPY); |
| } |
| @@ -993,13 +993,26 @@ void RenderViewContextMenu::AppendEditableItems() { |
| if (use_spellcheck_and_search) |
| AppendSpellingSuggestionsSubMenu(); |
| - if (!IsDevToolsURL(params_.page_url)) { |
| + // 'Undo' and 'Redo' for tText input with no suggestions and no text selected. |
|
Avi (use Gerrit)
2015/09/26 02:26:15
typo: tText
edwardjung
2015/09/28 14:11:25
Done.
|
| + // We make an exception for OSX as context clicking will select the closest |
|
Avi (use Gerrit)
2015/09/26 02:26:15
s/OSX/Mac OS X/ or /OS X/ or /the Mac/
edwardjung
2015/09/28 14:11:25
Done.
|
| + // word. In this case both items are always shown. |
| +#if defined(OS_MACOSX) |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, |
| + IDS_CONTENT_CONTEXT_UNDO); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, |
| + IDS_CONTENT_CONTEXT_REDO); |
| + menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| +#else |
| + if (!IsDevToolsURL(params_.page_url) && |
| + !menu_model_.GetItemCount() && |
| + !content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT)) { |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, |
| IDS_CONTENT_CONTEXT_UNDO); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, |
| IDS_CONTENT_CONTEXT_REDO); |
| menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| } |
| +#endif |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT, |
| IDS_CONTENT_CONTEXT_CUT); |
| @@ -1009,33 +1022,18 @@ void RenderViewContextMenu::AppendEditableItems() { |
| IDS_CONTENT_CONTEXT_PASTE); |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, |
| IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_DELETE, |
| - IDS_CONTENT_CONTEXT_DELETE); |
| + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, |
| + IDS_CONTENT_CONTEXT_SELECTALL); |
| + |
| menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| +} |
| - if (use_spellcheck_and_search && !params_.keyword_url.is_empty()) { |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ADDSEARCHENGINE, |
| - IDS_CONTENT_CONTEXT_ADDSEARCHENGINE); |
| - menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| - } |
| +void RenderViewContextMenu::AppendLanguageSettings() { |
| + const bool use_spellcheck_and_search = !chrome::IsRunningInForcedAppMode(); |
| -#if defined(OS_MACOSX) |
| if (use_spellcheck_and_search) |
| - AppendSpellcheckOptionsSubMenu(); |
| -#else |
| - if (chrome::spellcheck_common::IsMultilingualSpellcheckEnabled()) { |
| menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS, |
| - IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS); |
| - } else if (use_spellcheck_and_search) { |
| - AppendSpellcheckOptionsSubMenu(); |
| - } |
| -#endif // defined(OS_MACOSX) |
| - |
| - AppendPlatformEditableItems(); |
| - |
| - menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, |
| - IDS_CONTENT_CONTEXT_SELECTALL); |
| + IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS); |
| } |
| void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() { |
| @@ -1045,15 +1043,6 @@ void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() { |
| spelling_menu_observer_->InitMenu(params_); |
| } |
| -void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() { |
| - if (!spellchecker_submenu_observer_.get()) { |
| - spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver( |
| - this, this, kSpellcheckRadioGroup)); |
| - } |
| - spellchecker_submenu_observer_->InitMenu(params_); |
| - observers_.AddObserver(spellchecker_submenu_observer_.get()); |
| -} |
| - |
| void RenderViewContextMenu::AppendProtocolHandlerSubMenu() { |
| const ProtocolHandlerRegistry::ProtocolHandlerList handlers = |
| GetHandlersForLinkUrl(); |