OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" | 5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 20 matching lines...) Expand all Loading... | |
31 #include "chrome/browser/extensions/devtools_util.h" | 31 #include "chrome/browser/extensions/devtools_util.h" |
32 #include "chrome/browser/extensions/extension_service.h" | 32 #include "chrome/browser/extensions/extension_service.h" |
33 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" | 33 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" |
34 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h" | 34 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h" |
35 #include "chrome/browser/password_manager/chrome_password_manager_client.h" | 35 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
36 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" | 36 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" |
37 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 37 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
38 #include "chrome/browser/profiles/profile.h" | 38 #include "chrome/browser/profiles/profile.h" |
39 #include "chrome/browser/profiles/profile_io_data.h" | 39 #include "chrome/browser/profiles/profile_io_data.h" |
40 #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory .h" | 40 #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory .h" |
41 #include "chrome/browser/renderer_context_menu/spellchecker_submenu_observer.h" | |
42 #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" | 41 #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" |
43 #include "chrome/browser/search/search.h" | 42 #include "chrome/browser/search/search.h" |
44 #include "chrome/browser/search_engines/template_url_service_factory.h" | 43 #include "chrome/browser/search_engines/template_url_service_factory.h" |
45 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" | 44 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" |
46 #include "chrome/browser/spellchecker/spellcheck_service.h" | 45 #include "chrome/browser/spellchecker/spellcheck_service.h" |
47 #include "chrome/browser/ssl/security_state_model.h" | 46 #include "chrome/browser/ssl/security_state_model.h" |
48 #include "chrome/browser/tab_contents/retargeting_details.h" | 47 #include "chrome/browser/tab_contents/retargeting_details.h" |
49 #include "chrome/browser/translate/chrome_translate_client.h" | 48 #include "chrome/browser/translate/chrome_translate_client.h" |
50 #include "chrome/browser/translate/translate_service.h" | 49 #include "chrome/browser/translate/translate_service.h" |
51 #include "chrome/browser/ui/browser.h" | 50 #include "chrome/browser/ui/browser.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
148 | 147 |
149 const int kImageSearchThumbnailMinSize = 300 * 300; | 148 const int kImageSearchThumbnailMinSize = 300 * 300; |
150 const int kImageSearchThumbnailMaxWidth = 600; | 149 const int kImageSearchThumbnailMaxWidth = 600; |
151 const int kImageSearchThumbnailMaxHeight = 600; | 150 const int kImageSearchThumbnailMaxHeight = 600; |
152 | 151 |
153 // Maps UMA enumeration to IDC. IDC could be changed so we can't use | 152 // Maps UMA enumeration to IDC. IDC could be changed so we can't use |
154 // just them and |UMA_HISTOGRAM_CUSTOM_ENUMERATION|. | 153 // just them and |UMA_HISTOGRAM_CUSTOM_ENUMERATION|. |
155 // Never change mapping or reuse |enum_id|. Always push back new items. | 154 // Never change mapping or reuse |enum_id|. Always push back new items. |
156 // Items that is not used any more by |RenderViewContextMenu.ExecuteCommand| | 155 // Items that is not used any more by |RenderViewContextMenu.ExecuteCommand| |
157 // could be deleted, but don't change the rest of |kUmaEnumToControlId|. | 156 // could be deleted, but don't change the rest of |kUmaEnumToControlId|. |
157 // | |
158 // |context_specific_enum_id| matches the ContextMenuOption histogram enum. | |
159 // 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.
| |
160 // items under 'link + image' and 'selected text'. | |
158 const struct UmaEnumCommandIdPair { | 161 const struct UmaEnumCommandIdPair { |
159 int enum_id; | 162 int enum_id; |
160 int control_id; | 163 int control_id; |
164 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.
| |
161 } kUmaEnumToControlId[] = { | 165 } kUmaEnumToControlId[] = { |
162 /* | 166 /* |
163 enum id for 0, 1 are detected using | 167 enum id for 0, 1 are detected using |
164 RenderViewContextMenu::IsContentCustomCommandId and | 168 RenderViewContextMenu::IsContentCustomCommandId and |
165 ContextMenuMatcher::IsExtensionsCustomCommandId | 169 ContextMenuMatcher::IsExtensionsCustomCommandId |
166 */ | 170 */ |
167 {2, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST}, | 171 {2, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST}, |
168 {3, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB}, | 172 {3, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 0}, |
169 {4, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW}, | 173 {4, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, 15}, |
170 {5, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD}, | 174 {5, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, 1}, |
171 {6, IDC_CONTENT_CONTEXT_SAVELINKAS}, | 175 {6, IDC_CONTENT_CONTEXT_SAVELINKAS, 5}, |
172 {7, IDC_CONTENT_CONTEXT_SAVEAVAS}, | 176 {7, IDC_CONTENT_CONTEXT_SAVEAVAS, 17}, |
173 {8, IDC_CONTENT_CONTEXT_SAVEIMAGEAS}, | 177 {8, IDC_CONTENT_CONTEXT_SAVEIMAGEAS, 6}, |
174 {9, IDC_CONTENT_CONTEXT_COPYLINKLOCATION}, | 178 {9, IDC_CONTENT_CONTEXT_COPYLINKLOCATION, 2}, |
175 {10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION}, | 179 {10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, 10}, |
176 {11, IDC_CONTENT_CONTEXT_COPYAVLOCATION}, | 180 {11, IDC_CONTENT_CONTEXT_COPYAVLOCATION}, |
177 {12, IDC_CONTENT_CONTEXT_COPYIMAGE}, | 181 {12, IDC_CONTENT_CONTEXT_COPYIMAGE, 9}, |
178 {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB}, | 182 {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, 8}, |
179 {14, IDC_CONTENT_CONTEXT_OPENAVNEWTAB}, | 183 {14, IDC_CONTENT_CONTEXT_OPENAVNEWTAB}, |
180 {15, IDC_CONTENT_CONTEXT_PLAYPAUSE}, | 184 {15, IDC_CONTENT_CONTEXT_PLAYPAUSE}, |
181 {16, IDC_CONTENT_CONTEXT_MUTE}, | 185 {16, IDC_CONTENT_CONTEXT_MUTE}, |
182 {17, IDC_CONTENT_CONTEXT_LOOP}, | 186 {17, IDC_CONTENT_CONTEXT_LOOP}, |
183 {18, IDC_CONTENT_CONTEXT_CONTROLS}, | 187 {18, IDC_CONTENT_CONTEXT_CONTROLS}, |
184 {19, IDC_CONTENT_CONTEXT_ROTATECW}, | 188 {19, IDC_CONTENT_CONTEXT_ROTATECW}, |
185 {20, IDC_CONTENT_CONTEXT_ROTATECCW}, | 189 {20, IDC_CONTENT_CONTEXT_ROTATECCW}, |
186 {21, IDC_BACK}, | 190 {21, IDC_BACK}, |
187 {22, IDC_FORWARD}, | 191 {22, IDC_FORWARD}, |
188 {23, IDC_SAVE_PAGE}, | 192 {23, IDC_SAVE_PAGE}, |
189 {24, IDC_RELOAD}, | 193 {24, IDC_RELOAD}, |
190 {25, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP}, | 194 {25, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP}, |
191 {26, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP}, | 195 {26, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP}, |
192 {27, IDC_PRINT}, | 196 {27, IDC_PRINT, 16}, |
193 {28, IDC_VIEW_SOURCE}, | 197 {28, IDC_VIEW_SOURCE}, |
194 {29, IDC_CONTENT_CONTEXT_INSPECTELEMENT}, | 198 {29, IDC_CONTENT_CONTEXT_INSPECTELEMENT}, |
195 {30, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE}, | 199 {30, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE}, |
196 {31, IDC_CONTENT_CONTEXT_VIEWPAGEINFO}, | 200 {31, IDC_CONTENT_CONTEXT_VIEWPAGEINFO}, |
197 {32, IDC_CONTENT_CONTEXT_TRANSLATE}, | 201 {32, IDC_CONTENT_CONTEXT_TRANSLATE}, |
198 {33, IDC_CONTENT_CONTEXT_RELOADFRAME}, | 202 {33, IDC_CONTENT_CONTEXT_RELOADFRAME}, |
199 {34, IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE}, | 203 {34, IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE}, |
200 {35, IDC_CONTENT_CONTEXT_VIEWFRAMEINFO}, | 204 {35, IDC_CONTENT_CONTEXT_VIEWFRAMEINFO}, |
201 {36, IDC_CONTENT_CONTEXT_UNDO}, | 205 {36, IDC_CONTENT_CONTEXT_UNDO}, |
202 {37, IDC_CONTENT_CONTEXT_REDO}, | 206 {37, IDC_CONTENT_CONTEXT_REDO}, |
203 {38, IDC_CONTENT_CONTEXT_CUT}, | 207 {38, IDC_CONTENT_CONTEXT_CUT}, |
204 {39, IDC_CONTENT_CONTEXT_COPY}, | 208 {39, IDC_CONTENT_CONTEXT_COPY, 4}, |
205 {40, IDC_CONTENT_CONTEXT_PASTE}, | 209 {40, IDC_CONTENT_CONTEXT_PASTE}, |
206 {41, IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE}, | 210 {41, IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE}, |
207 {42, IDC_CONTENT_CONTEXT_DELETE}, | 211 {42, IDC_CONTENT_CONTEXT_DELETE}, |
208 {43, IDC_CONTENT_CONTEXT_SELECTALL}, | 212 {43, IDC_CONTENT_CONTEXT_SELECTALL}, |
209 {44, IDC_CONTENT_CONTEXT_SEARCHWEBFOR}, | 213 {44, IDC_CONTENT_CONTEXT_SEARCHWEBFOR, 17}, |
210 {45, IDC_CONTENT_CONTEXT_GOTOURL}, | 214 {45, IDC_CONTENT_CONTEXT_GOTOURL}, |
211 {46, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS}, | 215 {46, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS}, |
212 {47, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS}, | 216 {47, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS}, |
213 {48, IDC_CONTENT_CONTEXT_ADDSEARCHENGINE}, | 217 {48, IDC_CONTENT_CONTEXT_ADDSEARCHENGINE}, |
214 {52, IDC_CONTENT_CONTEXT_OPENLINKWITH}, | 218 {52, IDC_CONTENT_CONTEXT_OPENLINKWITH}, |
215 {53, IDC_CHECK_SPELLING_WHILE_TYPING}, | 219 {53, IDC_CHECK_SPELLING_WHILE_TYPING}, |
216 {54, IDC_SPELLCHECK_MENU}, | 220 {54, IDC_SPELLCHECK_MENU}, |
217 {55, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE}, | 221 {55, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE}, |
218 {56, IDC_SPELLCHECK_LANGUAGES_FIRST}, | 222 {56, IDC_SPELLCHECK_LANGUAGES_FIRST}, |
219 {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE}, | 223 {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, 11}, |
220 {58, IDC_SPELLCHECK_SUGGESTION_0}, | 224 {58, IDC_SPELLCHECK_SUGGESTION_0}, |
221 {59, IDC_SPELLCHECK_ADD_TO_DICTIONARY}, | 225 {59, IDC_SPELLCHECK_ADD_TO_DICTIONARY}, |
222 {60, IDC_SPELLPANEL_TOGGLE}, | 226 {60, IDC_SPELLPANEL_TOGGLE}, |
223 {61, IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB}, | 227 {61, IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB}, |
224 {62, IDC_WRITING_DIRECTION_MENU}, | 228 {62, IDC_WRITING_DIRECTION_MENU}, |
225 {63, IDC_WRITING_DIRECTION_DEFAULT}, | 229 {63, IDC_WRITING_DIRECTION_DEFAULT}, |
226 {64, IDC_WRITING_DIRECTION_LTR}, | 230 {64, IDC_WRITING_DIRECTION_LTR}, |
227 {65, IDC_WRITING_DIRECTION_RTL}, | 231 {65, IDC_WRITING_DIRECTION_RTL}, |
228 {66, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, | 232 {66, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, |
229 {67, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, | 233 {67, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, |
(...skipping 19 matching lines...) Expand all Loading... | |
249 | 253 |
250 if (id >= IDC_SPELLCHECK_SUGGESTION_0 && | 254 if (id >= IDC_SPELLCHECK_SUGGESTION_0 && |
251 id <= IDC_SPELLCHECK_SUGGESTION_LAST) { | 255 id <= IDC_SPELLCHECK_SUGGESTION_LAST) { |
252 return IDC_SPELLCHECK_SUGGESTION_0; | 256 return IDC_SPELLCHECK_SUGGESTION_0; |
253 } | 257 } |
254 | 258 |
255 return id; | 259 return id; |
256 } | 260 } |
257 | 261 |
258 // Returns UMA enum value for command specified by |id| or -1 if not found. | 262 // Returns UMA enum value for command specified by |id| or -1 if not found. |
259 int FindUMAEnumValueForCommand(int id) { | 263 // |use_specific_context_enum| set to true returns the context_specific_enum_id. |
264 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.
| |
260 if (RenderViewContextMenu::IsContentCustomCommandId(id)) | 265 if (RenderViewContextMenu::IsContentCustomCommandId(id)) |
261 return 0; | 266 return 0; |
262 | 267 |
263 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) | 268 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) |
264 return 1; | 269 return 1; |
265 | 270 |
266 id = CollapseCommandsForUMA(id); | 271 id = CollapseCommandsForUMA(id); |
267 const size_t kMappingSize = arraysize(kUmaEnumToControlId); | 272 const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
268 for (size_t i = 0; i < kMappingSize; ++i) { | 273 for (size_t i = 0; i < kMappingSize; ++i) { |
269 if (kUmaEnumToControlId[i].control_id == id) { | 274 if (kUmaEnumToControlId[i].control_id == id) { |
270 return kUmaEnumToControlId[i].enum_id; | 275 if (!use_specific_context_enum) { |
276 return kUmaEnumToControlId[i].enum_id; | |
277 } else if (use_specific_context_enum && | |
278 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.
| |
279 return kUmaEnumToControlId[i].context_specific_enum_id; | |
280 } | |
271 } | 281 } |
272 } | 282 } |
283 | |
273 return -1; | 284 return -1; |
274 } | 285 } |
275 | 286 |
276 // Usually a new tab is expected where this function is used, | 287 // Usually a new tab is expected where this function is used, |
277 // however users should be able to open a tab in background | 288 // however users should be able to open a tab in background |
278 // or in a new window. | 289 // or in a new window. |
279 WindowOpenDisposition ForceNewTabDispositionFromEventFlags( | 290 WindowOpenDisposition ForceNewTabDispositionFromEventFlags( |
280 int event_flags) { | 291 int event_flags) { |
281 WindowOpenDisposition disposition = | 292 WindowOpenDisposition disposition = |
282 ui::DispositionFromEventFlags(event_flags); | 293 ui::DispositionFromEventFlags(event_flags); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
334 : url_formatter::FormatUrl( | 345 : url_formatter::FormatUrl( |
335 url, languages, url_formatter::kFormatUrlOmitNothing, | 346 url, languages, url_formatter::kFormatUrlOmitNothing, |
336 net::UnescapeRule::NONE, nullptr, nullptr, nullptr); | 347 net::UnescapeRule::NONE, nullptr, nullptr, nullptr); |
337 | 348 |
338 ui::ScopedClipboardWriter scw(ui::CLIPBOARD_TYPE_COPY_PASTE); | 349 ui::ScopedClipboardWriter scw(ui::CLIPBOARD_TYPE_COPY_PASTE); |
339 scw.WriteURL(text); | 350 scw.WriteURL(text); |
340 } | 351 } |
341 | 352 |
342 bool g_custom_id_ranges_initialized = false; | 353 bool g_custom_id_ranges_initialized = false; |
343 | 354 |
344 const int kSpellcheckRadioGroup = 1; | |
345 | |
346 } // namespace | 355 } // namespace |
347 | 356 |
348 // static | 357 // static |
349 gfx::Vector2d RenderViewContextMenu::GetOffset( | 358 gfx::Vector2d RenderViewContextMenu::GetOffset( |
350 RenderFrameHost* render_frame_host) { | 359 RenderFrameHost* render_frame_host) { |
351 gfx::Vector2d offset; | 360 gfx::Vector2d offset; |
352 #if defined(ENABLE_EXTENSIONS) | 361 #if defined(ENABLE_EXTENSIONS) |
353 WebContents* web_contents = | 362 WebContents* web_contents = |
354 WebContents::FromRenderFrameHost(render_frame_host); | 363 WebContents::FromRenderFrameHost(render_frame_host); |
355 WebContents* top_level_web_contents = | 364 WebContents* top_level_web_contents = |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
551 false /* is_action_menu */); | 560 false /* is_action_menu */); |
552 } | 561 } |
553 #endif // defined(ENABLE_EXTENSIONS) | 562 #endif // defined(ENABLE_EXTENSIONS) |
554 | 563 |
555 void RenderViewContextMenu::InitMenu() { | 564 void RenderViewContextMenu::InitMenu() { |
556 RenderViewContextMenuBase::InitMenu(); | 565 RenderViewContextMenuBase::InitMenu(); |
557 | 566 |
558 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) | 567 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) |
559 AppendPageItems(); | 568 AppendPageItems(); |
560 | 569 |
561 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME)) { | |
562 // Merge in frame items with page items if we clicked within a frame that | |
563 // needs them. | |
564 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
565 AppendFrameItems(); | |
566 } | |
567 | |
568 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { | 570 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { |
569 AppendLinkItems(); | 571 AppendLinkItems(); |
570 if (params_.media_type != WebContextMenuData::MediaTypeNone) | 572 if (params_.media_type != WebContextMenuData::MediaTypeNone) |
571 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 573 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
572 } | 574 } |
573 | 575 |
574 if (content_type_->SupportsGroup( | 576 if (content_type_->SupportsGroup( |
575 ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { | 577 ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { |
576 AppendImageItems(); | 578 AppendImageItems(); |
577 } | 579 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
610 DCHECK(!content_type_->SupportsGroup( | 612 DCHECK(!content_type_->SupportsGroup( |
611 ContextMenuContentType::ITEM_GROUP_EDITABLE)); | 613 ContextMenuContentType::ITEM_GROUP_EDITABLE)); |
612 AppendCopyItem(); | 614 AppendCopyItem(); |
613 } | 615 } |
614 | 616 |
615 if (content_type_->SupportsGroup( | 617 if (content_type_->SupportsGroup( |
616 ContextMenuContentType::ITEM_GROUP_SEARCH_PROVIDER)) { | 618 ContextMenuContentType::ITEM_GROUP_SEARCH_PROVIDER)) { |
617 AppendSearchProvider(); | 619 AppendSearchProvider(); |
618 } | 620 } |
619 | 621 |
620 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT)) | 622 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT) && |
623 !content_type_->SupportsGroup( | |
624 ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { | |
621 AppendPrintItem(); | 625 AppendPrintItem(); |
626 } | |
627 | |
628 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_EDITABLE)) | |
629 { | |
630 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
631 AppendPlatformEditableItems(); | |
632 AppendLanguageSettings(); | |
633 } | |
Avi (use Gerrit)
2015/09/26 02:26:15
Your indenting is wack; please fix.
edwardjung
2015/09/28 14:11:25
Done.
| |
622 | 634 |
623 if (content_type_->SupportsGroup( | 635 if (content_type_->SupportsGroup( |
624 ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { | 636 ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { |
625 AppendRotationItems(); | 637 AppendRotationItems(); |
626 } | 638 } |
627 | 639 |
628 if (content_type_->SupportsGroup( | 640 if (content_type_->SupportsGroup( |
629 ContextMenuContentType::ITEM_GROUP_ALL_EXTENSION)) { | 641 ContextMenuContentType::ITEM_GROUP_ALL_EXTENSION)) { |
630 DCHECK(!content_type_->SupportsGroup( | 642 DCHECK(!content_type_->SupportsGroup( |
631 ContextMenuContentType::ITEM_GROUP_CURRENT_EXTENSION)); | 643 ContextMenuContentType::ITEM_GROUP_CURRENT_EXTENSION)); |
(...skipping 26 matching lines...) Expand all Loading... | |
658 ContextMenuContentType::ITEM_GROUP_PASSWORD)) { | 670 ContextMenuContentType::ITEM_GROUP_PASSWORD)) { |
659 AppendPasswordItems(); | 671 AppendPasswordItems(); |
660 } | 672 } |
661 } | 673 } |
662 | 674 |
663 Profile* RenderViewContextMenu::GetProfile() { | 675 Profile* RenderViewContextMenu::GetProfile() { |
664 return Profile::FromBrowserContext(browser_context_); | 676 return Profile::FromBrowserContext(browser_context_); |
665 } | 677 } |
666 | 678 |
667 void RenderViewContextMenu::RecordUsedItem(int id) { | 679 void RenderViewContextMenu::RecordUsedItem(int id) { |
668 int enum_id = FindUMAEnumValueForCommand(id); | 680 int enum_id = FindUMAEnumValueForCommand(id, false); |
669 if (enum_id != -1) { | 681 if (enum_id != -1) { |
670 const size_t kMappingSize = arraysize(kUmaEnumToControlId); | 682 const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
671 UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Used", enum_id, | 683 UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Used", enum_id, |
672 kUmaEnumToControlId[kMappingSize - 1].enum_id); | 684 kUmaEnumToControlId[kMappingSize - 1].enum_id); |
685 // Record to additional context specific histograms. | |
686 enum_id = FindUMAEnumValueForCommand(id, true); | |
687 | |
688 // Linked image context. | |
689 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK) && | |
690 content_type_->SupportsGroup( | |
691 ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { | |
692 UMA_HISTOGRAM_ENUMERATION("ContextMenu.SelectedOption.ImageLink", enum_id, | |
693 kUmaEnumToControlId[kMappingSize - 1].enum_id); | |
694 } | |
695 // Selected text context. | |
696 if (content_type_->SupportsGroup( | |
697 ContextMenuContentType::ITEM_GROUP_SEARCH_PROVIDER) && | |
698 content_type_->SupportsGroup( | |
699 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.
| |
700 UMA_HISTOGRAM_ENUMERATION("ContextMenu.SelectedOption.SelectedText", | |
701 enum_id, | |
702 kUmaEnumToControlId[kMappingSize - 1].enum_id); | |
703 } | |
673 } else { | 704 } else { |
674 NOTREACHED() << "Update kUmaEnumToControlId. Unhanded IDC: " << id; | 705 NOTREACHED() << "Update kUmaEnumToControlId. Unhanded IDC: " << id; |
675 } | 706 } |
676 } | 707 } |
677 | 708 |
678 void RenderViewContextMenu::RecordShownItem(int id) { | 709 void RenderViewContextMenu::RecordShownItem(int id) { |
679 int enum_id = FindUMAEnumValueForCommand(id); | 710 int enum_id = FindUMAEnumValueForCommand(id, false); |
680 if (enum_id != -1) { | 711 if (enum_id != -1) { |
681 const size_t kMappingSize = arraysize(kUmaEnumToControlId); | 712 const size_t kMappingSize = arraysize(kUmaEnumToControlId); |
682 UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Shown", enum_id, | 713 UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Shown", enum_id, |
683 kUmaEnumToControlId[kMappingSize - 1].enum_id); | 714 kUmaEnumToControlId[kMappingSize - 1].enum_id); |
684 } else { | 715 } else { |
685 // Just warning here. It's harder to maintain list of all possibly | 716 // Just warning here. It's harder to maintain list of all possibly |
686 // visible items than executable items. | 717 // visible items than executable items. |
687 DLOG(ERROR) << "Update kUmaEnumToControlId. Unhanded IDC: " << id; | 718 DLOG(ERROR) << "Update kUmaEnumToControlId. Unhanded IDC: " << id; |
688 } | 719 } |
689 } | 720 } |
(...skipping 29 matching lines...) Expand all Loading... | |
719 #if defined(DEBUG_DEVTOOLS) | 750 #if defined(DEBUG_DEVTOOLS) |
720 show_developer_items = true; | 751 show_developer_items = true; |
721 #endif | 752 #endif |
722 | 753 |
723 if (!show_developer_items) | 754 if (!show_developer_items) |
724 return; | 755 return; |
725 | 756 |
726 // In the DevTools popup menu, "developer items" is normally the only | 757 // In the DevTools popup menu, "developer items" is normally the only |
727 // section, so omit the separator there. | 758 // section, so omit the separator there. |
728 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 759 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
760 // Page context source. | |
761 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) | |
762 menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE, | |
763 IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); | |
764 // Frame context source. | |
765 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME)) | |
766 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE, | |
767 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.
| |
729 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTELEMENT, | 768 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTELEMENT, |
730 IDS_CONTENT_CONTEXT_INSPECTELEMENT); | 769 IDS_CONTENT_CONTEXT_INSPECTELEMENT); |
731 } | 770 } |
732 | 771 |
733 void RenderViewContextMenu::AppendDevtoolsForUnpackedExtensions() { | 772 void RenderViewContextMenu::AppendDevtoolsForUnpackedExtensions() { |
734 // Add a separator if there are any items already in the menu. | 773 // Add a separator if there are any items already in the menu. |
735 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 774 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
736 | 775 |
737 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP, | 776 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP, |
738 IDS_CONTENT_CONTEXT_RELOAD_PACKAGED_APP); | 777 IDS_CONTENT_CONTEXT_RELOAD_PACKAGED_APP); |
(...skipping 21 matching lines...) Expand all Loading... | |
760 } | 799 } |
761 | 800 |
762 menu_model_.AddItemWithStringId( | 801 menu_model_.AddItemWithStringId( |
763 IDC_CONTENT_CONTEXT_COPYLINKLOCATION, | 802 IDC_CONTENT_CONTEXT_COPYLINKLOCATION, |
764 params_.link_url.SchemeIs(url::kMailToScheme) ? | 803 params_.link_url.SchemeIs(url::kMailToScheme) ? |
765 IDS_CONTENT_CONTEXT_COPYEMAILADDRESS : | 804 IDS_CONTENT_CONTEXT_COPYEMAILADDRESS : |
766 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); | 805 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); |
767 } | 806 } |
768 | 807 |
769 void RenderViewContextMenu::AppendImageItems() { | 808 void RenderViewContextMenu::AppendImageItems() { |
770 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, | |
771 IDS_CONTENT_CONTEXT_SAVEIMAGEAS); | |
772 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, | |
773 IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); | |
774 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, | |
775 IDS_CONTENT_CONTEXT_COPYIMAGE); | |
776 std::map<std::string, std::string>::const_iterator it = | 809 std::map<std::string, std::string>::const_iterator it = |
777 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); | 810 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); |
778 if (it != params_.properties.end() && it->second == | 811 if (it != params_.properties.end() && it->second == |
779 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { | 812 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { |
780 menu_model_.AddItemWithStringId( | 813 menu_model_.AddItemWithStringId( |
781 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, | 814 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, |
782 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); | 815 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); |
783 } | 816 } |
784 DataReductionProxyChromeSettings* settings = | 817 DataReductionProxyChromeSettings* settings = |
785 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( | 818 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( |
786 browser_context_); | 819 browser_context_); |
787 if (settings && settings->CanUseDataReductionProxy(params_.src_url)) { | 820 if (settings && settings->CanUseDataReductionProxy(params_.src_url)) { |
788 menu_model_.AddItemWithStringId( | 821 menu_model_.AddItemWithStringId( |
789 IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB, | 822 IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB, |
790 IDS_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB); | 823 IDS_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB); |
791 } else { | 824 } else { |
792 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, | 825 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, |
793 IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB); | 826 IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB); |
794 } | 827 } |
828 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, | |
829 IDS_CONTENT_CONTEXT_SAVEIMAGEAS); | |
830 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, | |
831 IDS_CONTENT_CONTEXT_COPYIMAGE); | |
832 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, | |
833 IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); | |
795 } | 834 } |
796 | 835 |
797 void RenderViewContextMenu::AppendSearchWebForImageItems() { | 836 void RenderViewContextMenu::AppendSearchWebForImageItems() { |
798 TemplateURLService* service = | 837 TemplateURLService* service = |
799 TemplateURLServiceFactory::GetForProfile(GetProfile()); | 838 TemplateURLServiceFactory::GetForProfile(GetProfile()); |
800 const TemplateURL* const default_provider = | 839 const TemplateURL* const default_provider = |
801 service->GetDefaultSearchProvider(); | 840 service->GetDefaultSearchProvider(); |
802 if (params_.has_image_contents && default_provider && | 841 if (params_.has_image_contents && default_provider && |
803 !default_provider->image_url().empty() && | 842 !default_provider->image_url().empty() && |
804 default_provider->image_url_ref().IsValid(service->search_terms_data())) { | 843 default_provider->image_url_ref().IsValid(service->search_terms_data())) { |
805 menu_model_.AddItem( | 844 menu_model_.AddItem( |
806 IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, | 845 IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, |
807 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, | 846 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, |
808 default_provider->short_name())); | 847 default_provider->short_name())); |
809 } | 848 } |
810 } | 849 } |
811 | 850 |
812 void RenderViewContextMenu::AppendAudioItems() { | 851 void RenderViewContextMenu::AppendAudioItems() { |
813 AppendMediaItems(); | |
814 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 852 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
853 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | |
854 IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); | |
815 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, | 855 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
816 IDS_CONTENT_CONTEXT_SAVEAUDIOAS); | 856 IDS_CONTENT_CONTEXT_SAVEAUDIOAS); |
817 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, | 857 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
818 IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); | 858 IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); |
819 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | |
820 IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); | |
821 } | 859 } |
822 | 860 |
823 void RenderViewContextMenu::AppendCanvasItems() { | 861 void RenderViewContextMenu::AppendCanvasItems() { |
824 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, | 862 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, |
825 IDS_CONTENT_CONTEXT_SAVEIMAGEAS); | 863 IDS_CONTENT_CONTEXT_SAVEIMAGEAS); |
826 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, | 864 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, |
827 IDS_CONTENT_CONTEXT_COPYIMAGE); | 865 IDS_CONTENT_CONTEXT_COPYIMAGE); |
828 } | 866 } |
829 | 867 |
830 void RenderViewContextMenu::AppendVideoItems() { | 868 void RenderViewContextMenu::AppendVideoItems() { |
831 AppendMediaItems(); | |
832 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 869 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
870 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | |
871 IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); | |
833 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, | 872 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
834 IDS_CONTENT_CONTEXT_SAVEVIDEOAS); | 873 IDS_CONTENT_CONTEXT_SAVEVIDEOAS); |
835 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, | 874 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
836 IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); | 875 IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); |
837 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | |
838 IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); | |
839 } | |
840 | |
841 void RenderViewContextMenu::AppendMediaItems() { | |
842 int media_flags = params_.media_flags; | |
843 | |
844 menu_model_.AddItemWithStringId( | |
845 IDC_CONTENT_CONTEXT_PLAYPAUSE, | |
846 media_flags & WebContextMenuData::MediaPaused ? | |
847 IDS_CONTENT_CONTEXT_PLAY : | |
848 IDS_CONTENT_CONTEXT_PAUSE); | |
849 | |
850 menu_model_.AddItemWithStringId( | |
851 IDC_CONTENT_CONTEXT_MUTE, | |
852 media_flags & WebContextMenuData::MediaMuted ? | |
853 IDS_CONTENT_CONTEXT_UNMUTE : | |
854 IDS_CONTENT_CONTEXT_MUTE); | |
855 | |
856 menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_LOOP, | |
857 IDS_CONTENT_CONTEXT_LOOP); | |
858 menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_CONTROLS, | |
859 IDS_CONTENT_CONTEXT_CONTROLS); | |
860 } | 876 } |
861 | 877 |
862 void RenderViewContextMenu::AppendPluginItems() { | 878 void RenderViewContextMenu::AppendPluginItems() { |
863 if (params_.page_url == params_.src_url || | 879 if (params_.page_url == params_.src_url || |
864 guest_view::GuestViewBase::IsGuest(source_web_contents_)) { | 880 guest_view::GuestViewBase::IsGuest(source_web_contents_)) { |
865 // Full page plugin, so show page menu items. | 881 // Full page plugin, so show page menu items. |
866 if (params_.link_url.is_empty() && params_.selection_text.empty()) | 882 if (params_.link_url.is_empty() && params_.selection_text.empty()) |
867 AppendPageItems(); | 883 AppendPageItems(); |
868 } else { | 884 } else { |
869 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, | 885 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
(...skipping 18 matching lines...) Expand all Loading... | |
888 | 904 |
889 if (TranslateService::IsTranslatableURL(params_.page_url)) { | 905 if (TranslateService::IsTranslatableURL(params_.page_url)) { |
890 std::string locale = g_browser_process->GetApplicationLocale(); | 906 std::string locale = g_browser_process->GetApplicationLocale(); |
891 locale = translate::TranslateDownloadManager::GetLanguageCode(locale); | 907 locale = translate::TranslateDownloadManager::GetLanguageCode(locale); |
892 base::string16 language = | 908 base::string16 language = |
893 l10n_util::GetDisplayNameForLocale(locale, locale, true); | 909 l10n_util::GetDisplayNameForLocale(locale, locale, true); |
894 menu_model_.AddItem( | 910 menu_model_.AddItem( |
895 IDC_CONTENT_CONTEXT_TRANSLATE, | 911 IDC_CONTENT_CONTEXT_TRANSLATE, |
896 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_TRANSLATE, language)); | 912 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_TRANSLATE, language)); |
897 } | 913 } |
898 | |
899 menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE, | |
900 IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); | |
901 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWPAGEINFO, | |
902 IDS_CONTENT_CONTEXT_VIEWPAGEINFO); | |
903 } | |
904 | |
905 void RenderViewContextMenu::AppendFrameItems() { | |
906 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOADFRAME, | |
907 IDS_CONTENT_CONTEXT_RELOADFRAME); | |
908 // These two menu items have yet to be implemented. | |
909 // http://code.google.com/p/chromium/issues/detail?id=11827 | |
910 // IDS_CONTENT_CONTEXT_SAVEFRAMEAS | |
911 // IDS_CONTENT_CONTEXT_PRINTFRAME | |
912 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE, | |
913 IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE); | |
914 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMEINFO, | |
915 IDS_CONTENT_CONTEXT_VIEWFRAMEINFO); | |
916 } | 914 } |
917 | 915 |
918 void RenderViewContextMenu::AppendCopyItem() { | 916 void RenderViewContextMenu::AppendCopyItem() { |
917 if (menu_model_.GetItemCount()) | |
918 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
919 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, | 919 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, |
920 IDS_CONTENT_CONTEXT_COPY); | 920 IDS_CONTENT_CONTEXT_COPY); |
921 } | 921 } |
922 | 922 |
923 void RenderViewContextMenu::AppendPrintItem() { | 923 void RenderViewContextMenu::AppendPrintItem() { |
924 if (GetPrefs(browser_context_)->GetBoolean(prefs::kPrintingEnabled) && | 924 if (GetPrefs(browser_context_)->GetBoolean(prefs::kPrintingEnabled) && |
925 (params_.media_type == WebContextMenuData::MediaTypeNone || | 925 (params_.media_type == WebContextMenuData::MediaTypeNone || |
926 params_.media_flags & WebContextMenuData::MediaCanPrint)) { | 926 params_.media_flags & WebContextMenuData::MediaCanPrint)) { |
927 menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); | 927 menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); |
928 } | 928 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
986 } | 986 } |
987 } | 987 } |
988 } | 988 } |
989 | 989 |
990 void RenderViewContextMenu::AppendEditableItems() { | 990 void RenderViewContextMenu::AppendEditableItems() { |
991 const bool use_spellcheck_and_search = !chrome::IsRunningInForcedAppMode(); | 991 const bool use_spellcheck_and_search = !chrome::IsRunningInForcedAppMode(); |
992 | 992 |
993 if (use_spellcheck_and_search) | 993 if (use_spellcheck_and_search) |
994 AppendSpellingSuggestionsSubMenu(); | 994 AppendSpellingSuggestionsSubMenu(); |
995 | 995 |
996 if (!IsDevToolsURL(params_.page_url)) { | 996 // '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.
| |
997 // 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.
| |
998 // word. In this case both items are always shown. | |
999 #if defined(OS_MACOSX) | |
1000 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, | |
1001 IDS_CONTENT_CONTEXT_UNDO); | |
1002 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, | |
1003 IDS_CONTENT_CONTEXT_REDO); | |
1004 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
1005 #else | |
1006 if (!IsDevToolsURL(params_.page_url) && | |
1007 !menu_model_.GetItemCount() && | |
1008 !content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT)) { | |
997 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, | 1009 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, |
998 IDS_CONTENT_CONTEXT_UNDO); | 1010 IDS_CONTENT_CONTEXT_UNDO); |
999 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, | 1011 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, |
1000 IDS_CONTENT_CONTEXT_REDO); | 1012 IDS_CONTENT_CONTEXT_REDO); |
1001 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 1013 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
1002 } | 1014 } |
1015 #endif | |
1003 | 1016 |
1004 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT, | 1017 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT, |
1005 IDS_CONTENT_CONTEXT_CUT); | 1018 IDS_CONTENT_CONTEXT_CUT); |
1006 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, | 1019 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, |
1007 IDS_CONTENT_CONTEXT_COPY); | 1020 IDS_CONTENT_CONTEXT_COPY); |
1008 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE, | 1021 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE, |
1009 IDS_CONTENT_CONTEXT_PASTE); | 1022 IDS_CONTENT_CONTEXT_PASTE); |
1010 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, | 1023 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, |
1011 IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE); | 1024 IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE); |
1012 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_DELETE, | 1025 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, |
1013 IDS_CONTENT_CONTEXT_DELETE); | 1026 IDS_CONTENT_CONTEXT_SELECTALL); |
1014 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
1015 | |
1016 if (use_spellcheck_and_search && !params_.keyword_url.is_empty()) { | |
1017 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ADDSEARCHENGINE, | |
1018 IDS_CONTENT_CONTEXT_ADDSEARCHENGINE); | |
1019 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | |
1020 } | |
1021 | |
1022 #if defined(OS_MACOSX) | |
1023 if (use_spellcheck_and_search) | |
1024 AppendSpellcheckOptionsSubMenu(); | |
1025 #else | |
1026 if (chrome::spellcheck_common::IsMultilingualSpellcheckEnabled()) { | |
1027 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS, | |
1028 IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS); | |
1029 } else if (use_spellcheck_and_search) { | |
1030 AppendSpellcheckOptionsSubMenu(); | |
1031 } | |
1032 #endif // defined(OS_MACOSX) | |
1033 | |
1034 AppendPlatformEditableItems(); | |
1035 | 1027 |
1036 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 1028 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
1037 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, | 1029 } |
1038 IDS_CONTENT_CONTEXT_SELECTALL); | 1030 |
1031 void RenderViewContextMenu::AppendLanguageSettings() { | |
1032 const bool use_spellcheck_and_search = !chrome::IsRunningInForcedAppMode(); | |
1033 | |
1034 if (use_spellcheck_and_search) | |
1035 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS, | |
1036 IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS); | |
1039 } | 1037 } |
1040 | 1038 |
1041 void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() { | 1039 void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() { |
1042 if (!spelling_menu_observer_.get()) | 1040 if (!spelling_menu_observer_.get()) |
1043 spelling_menu_observer_.reset(new SpellingMenuObserver(this)); | 1041 spelling_menu_observer_.reset(new SpellingMenuObserver(this)); |
1044 observers_.AddObserver(spelling_menu_observer_.get()); | 1042 observers_.AddObserver(spelling_menu_observer_.get()); |
1045 spelling_menu_observer_->InitMenu(params_); | 1043 spelling_menu_observer_->InitMenu(params_); |
1046 } | 1044 } |
1047 | 1045 |
1048 void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() { | |
1049 if (!spellchecker_submenu_observer_.get()) { | |
1050 spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver( | |
1051 this, this, kSpellcheckRadioGroup)); | |
1052 } | |
1053 spellchecker_submenu_observer_->InitMenu(params_); | |
1054 observers_.AddObserver(spellchecker_submenu_observer_.get()); | |
1055 } | |
1056 | |
1057 void RenderViewContextMenu::AppendProtocolHandlerSubMenu() { | 1046 void RenderViewContextMenu::AppendProtocolHandlerSubMenu() { |
1058 const ProtocolHandlerRegistry::ProtocolHandlerList handlers = | 1047 const ProtocolHandlerRegistry::ProtocolHandlerList handlers = |
1059 GetHandlersForLinkUrl(); | 1048 GetHandlersForLinkUrl(); |
1060 if (handlers.empty()) | 1049 if (handlers.empty()) |
1061 return; | 1050 return; |
1062 size_t max = IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST - | 1051 size_t max = IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST - |
1063 IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; | 1052 IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; |
1064 for (size_t i = 0; i < handlers.size() && i <= max; i++) { | 1053 for (size_t i = 0; i < handlers.size() && i <= max; i++) { |
1065 protocol_handler_submenu_model_.AddItem( | 1054 protocol_handler_submenu_model_.AddItem( |
1066 IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST + i, | 1055 IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST + i, |
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1959 source_web_contents_->GetRenderViewHost()-> | 1948 source_web_contents_->GetRenderViewHost()-> |
1960 ExecuteMediaPlayerActionAtLocation(location, action); | 1949 ExecuteMediaPlayerActionAtLocation(location, action); |
1961 } | 1950 } |
1962 | 1951 |
1963 void RenderViewContextMenu::PluginActionAt( | 1952 void RenderViewContextMenu::PluginActionAt( |
1964 const gfx::Point& location, | 1953 const gfx::Point& location, |
1965 const WebPluginAction& action) { | 1954 const WebPluginAction& action) { |
1966 source_web_contents_->GetRenderViewHost()-> | 1955 source_web_contents_->GetRenderViewHost()-> |
1967 ExecutePluginActionAtLocation(location, action); | 1956 ExecutePluginActionAtLocation(location, action); |
1968 } | 1957 } |
OLD | NEW |