Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Unified Diff: chrome/browser/renderer_context_menu/render_view_context_menu.cc

Issue 1357393002: Desktop context menu reorganisation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..0e637d78794fcb45d3c4fc951292f6ab2e35dc57 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"
@@ -146,6 +145,13 @@ using extensions::MenuManager;
namespace {
+// Whether to return the general enum_id or context_specific_enum_id
+// in the FindUMAEnumValueForCommand lookup function.
+enum UmaEnumIdLookupType {
+ GENERAL_ENUM_ID,
+ CONTEXT_SPECIFIC_ENUM_ID,
+};
+
const int kImageSearchThumbnailMinSize = 300 * 300;
const int kImageSearchThumbnailMaxWidth = 600;
const int kImageSearchThumbnailMaxHeight = 600;
@@ -155,8 +161,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
+// items under 'link + image' and 'selected text'. Should be set to -1 if
+// command is not context specific tracked.
const struct UmaEnumCommandIdPair {
int enum_id;
+ int context_specific_enum_id;
int control_id;
} kUmaEnumToControlId[] = {
/*
@@ -164,72 +176,73 @@ const struct UmaEnumCommandIdPair {
RenderViewContextMenu::IsContentCustomCommandId and
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},
- {11, IDC_CONTENT_CONTEXT_COPYAVLOCATION},
- {12, IDC_CONTENT_CONTEXT_COPYIMAGE},
- {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB},
- {14, IDC_CONTENT_CONTEXT_OPENAVNEWTAB},
- {15, IDC_CONTENT_CONTEXT_PLAYPAUSE},
- {16, IDC_CONTENT_CONTEXT_MUTE},
- {17, IDC_CONTENT_CONTEXT_LOOP},
- {18, IDC_CONTENT_CONTEXT_CONTROLS},
- {19, IDC_CONTENT_CONTEXT_ROTATECW},
- {20, IDC_CONTENT_CONTEXT_ROTATECCW},
- {21, IDC_BACK},
- {22, IDC_FORWARD},
- {23, IDC_SAVE_PAGE},
- {24, IDC_RELOAD},
- {25, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP},
- {26, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP},
- {27, IDC_PRINT},
- {28, IDC_VIEW_SOURCE},
- {29, IDC_CONTENT_CONTEXT_INSPECTELEMENT},
- {30, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE},
- {31, IDC_CONTENT_CONTEXT_VIEWPAGEINFO},
- {32, IDC_CONTENT_CONTEXT_TRANSLATE},
- {33, IDC_CONTENT_CONTEXT_RELOADFRAME},
- {34, IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE},
- {35, IDC_CONTENT_CONTEXT_VIEWFRAMEINFO},
- {36, IDC_CONTENT_CONTEXT_UNDO},
- {37, IDC_CONTENT_CONTEXT_REDO},
- {38, IDC_CONTENT_CONTEXT_CUT},
- {39, IDC_CONTENT_CONTEXT_COPY},
- {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},
- {45, IDC_CONTENT_CONTEXT_GOTOURL},
- {46, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS},
- {47, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS},
- {48, IDC_CONTENT_CONTEXT_ADDSEARCHENGINE},
- {52, IDC_CONTENT_CONTEXT_OPENLINKWITH},
- {53, IDC_CHECK_SPELLING_WHILE_TYPING},
- {54, IDC_SPELLCHECK_MENU},
- {55, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE},
- {56, IDC_SPELLCHECK_LANGUAGES_FIRST},
- {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE},
- {58, IDC_SPELLCHECK_SUGGESTION_0},
- {59, IDC_SPELLCHECK_ADD_TO_DICTIONARY},
- {60, IDC_SPELLPANEL_TOGGLE},
- {61, IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB},
- {62, IDC_WRITING_DIRECTION_MENU},
- {63, IDC_WRITING_DIRECTION_DEFAULT},
- {64, IDC_WRITING_DIRECTION_LTR},
- {65, IDC_WRITING_DIRECTION_RTL},
- {66, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE},
- {67, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD},
+ {2, -1, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST},
+ {3, 0, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB},
+ {4, 15, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW},
+ {5, 1, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD},
+ {6, 5, IDC_CONTENT_CONTEXT_SAVELINKAS},
+ {7, 17, IDC_CONTENT_CONTEXT_SAVEAVAS},
+ {8, 6, IDC_CONTENT_CONTEXT_SAVEIMAGEAS},
+ {9, 2, IDC_CONTENT_CONTEXT_COPYLINKLOCATION},
+ {10, 10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION},
+ {11, -1, IDC_CONTENT_CONTEXT_COPYAVLOCATION},
+ {12, 9, IDC_CONTENT_CONTEXT_COPYIMAGE},
+ {13, 8, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB},
+ {14, -1, IDC_CONTENT_CONTEXT_OPENAVNEWTAB},
+ {15, -1, IDC_CONTENT_CONTEXT_PLAYPAUSE},
+ {16, -1, IDC_CONTENT_CONTEXT_MUTE},
+ {17, -1, IDC_CONTENT_CONTEXT_LOOP},
+ {18, -1, IDC_CONTENT_CONTEXT_CONTROLS},
+ {19, -1, IDC_CONTENT_CONTEXT_ROTATECW},
+ {20, -1, IDC_CONTENT_CONTEXT_ROTATECCW},
+ {21, -1, IDC_BACK},
+ {22, -1, IDC_FORWARD},
+ {23, -1, IDC_SAVE_PAGE},
+ {24, -1, IDC_RELOAD},
+ {25, -1, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP},
+ {26, -1, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP},
+ {27, 16, IDC_PRINT},
+ {28, -1, IDC_VIEW_SOURCE},
+ {29, -1, IDC_CONTENT_CONTEXT_INSPECTELEMENT},
+ {30, -1, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE},
+ {31, -1, IDC_CONTENT_CONTEXT_VIEWPAGEINFO},
+ {32, -1, IDC_CONTENT_CONTEXT_TRANSLATE},
+ {33, -1, IDC_CONTENT_CONTEXT_RELOADFRAME},
+ {34, -1, IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE},
+ {35, -1, IDC_CONTENT_CONTEXT_VIEWFRAMEINFO},
+ {36, -1, IDC_CONTENT_CONTEXT_UNDO},
+ {37, -1, IDC_CONTENT_CONTEXT_REDO},
+ {38, -1, IDC_CONTENT_CONTEXT_CUT},
+ {39, 4, IDC_CONTENT_CONTEXT_COPY},
+ {40, -1, IDC_CONTENT_CONTEXT_PASTE},
+ {41, -1, IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE},
+ {42, -1, IDC_CONTENT_CONTEXT_DELETE},
+ {43, -1, IDC_CONTENT_CONTEXT_SELECTALL},
+ {44, 17, IDC_CONTENT_CONTEXT_SEARCHWEBFOR},
+ {45, -1, IDC_CONTENT_CONTEXT_GOTOURL},
+ {46, -1, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS},
+ {47, -1, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS},
+ {48, -1, IDC_CONTENT_CONTEXT_ADDSEARCHENGINE},
+ {52, -1, IDC_CONTENT_CONTEXT_OPENLINKWITH},
+ {53, -1, IDC_CHECK_SPELLING_WHILE_TYPING},
+ {54, -1, IDC_SPELLCHECK_MENU},
+ {55, -1, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE},
+ {56, -1, IDC_SPELLCHECK_LANGUAGES_FIRST},
+ {57, 11, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE},
+ {58, -1, IDC_SPELLCHECK_SUGGESTION_0},
+ {59, -1, IDC_SPELLCHECK_ADD_TO_DICTIONARY},
+ {60, -1, IDC_SPELLPANEL_TOGGLE},
+ {61, -1, IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB},
+ {62, -1, IDC_WRITING_DIRECTION_MENU},
+ {63, -1, IDC_WRITING_DIRECTION_DEFAULT},
+ {64, -1, IDC_WRITING_DIRECTION_LTR},
+ {65, -1, IDC_WRITING_DIRECTION_RTL},
+ {66, -1, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE},
+ {67, -1, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD},
// Add new items here and use |enum_id| from the next line.
// Also, add new items to RenderViewContextMenuItem enum in histograms.xml.
- {68, 0}, // Must be the last. Increment |enum_id| when new IDC was added.
+ {68, -1, 0}, // Must be the last. Increment |enum_id| when new IDC
+ // was added.
};
// Collapses large ranges of ids before looking for UMA enum.
@@ -256,7 +269,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, UmaEnumIdLookupType enum_lookup_type) {
if (RenderViewContextMenu::IsContentCustomCommandId(id))
return 0;
@@ -267,9 +281,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 (enum_lookup_type == GENERAL_ENUM_ID) {
+ return kUmaEnumToControlId[i].enum_id;
+ } else if (enum_lookup_type == CONTEXT_SPECIFIC_ENUM_ID &&
+ kUmaEnumToControlId[i].context_specific_enum_id > -1) {
+ return kUmaEnumToControlId[i].context_specific_enum_id;
+ }
}
}
+
return -1;
}
@@ -341,8 +361,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 +576,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 +628,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();
+ }
if (content_type_->SupportsGroup(
ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) {
@@ -665,18 +686,37 @@ Profile* RenderViewContextMenu::GetProfile() {
}
void RenderViewContextMenu::RecordUsedItem(int id) {
- int enum_id = FindUMAEnumValueForCommand(id);
+ int enum_id = FindUMAEnumValueForCommand(id, GENERAL_ENUM_ID);
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, CONTEXT_SPECIFIC_ENUM_ID);
+
+ // 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)) {
+ 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, GENERAL_ENUM_ID);
if (enum_id != -1) {
const size_t kMappingSize = arraysize(kUmaEnumToControlId);
UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Shown", enum_id,
@@ -726,6 +766,12 @@ 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);
+ if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE))
+ menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE,
+ IDS_CONTENT_CONTEXT_VIEWPAGESOURCE);
+ if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME))
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE,
+ IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE);
menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTELEMENT,
IDS_CONTENT_CONTEXT_INSPECTELEMENT);
}
@@ -767,12 +813,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 +832,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 +856,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 +873,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 +918,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 +1000,25 @@ void RenderViewContextMenu::AppendEditableItems() {
if (use_spellcheck_and_search)
AppendSpellingSuggestionsSubMenu();
- if (!IsDevToolsURL(params_.page_url)) {
+// 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+// We make an exception for OS X as context clicking will select the closest
+// 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 +1028,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);
}
void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() {
@@ -1045,15 +1049,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();

Powered by Google App Engine
This is Rietveld 408576698