1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "apps/app_load_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/strings/stringprintf.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/app_mode/app_mode_utils.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/devtools/devtools_window.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_service_factory.h" 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/download/download_stats.h" 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/devtools_util.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h" 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/context_menu_content_type_factory.h" 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/spellchecker_submenu_observer.h" 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/search/search.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_host_metrics.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_service.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/retargeting_details.h" 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/translate/chrome_translate_client.h" 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/translate/translate_service.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/ui/chrome_pages.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/core_tab_helper.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/common/content_restriction.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/net/url_util.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/common/render_messages.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/spellcheck_messages.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/metrics/proto/omnibox_input_type.pb.h" 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_download_manager.h" 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/translate/core/browser/translate_manager.h" 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_prefs.h" 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/child_process_security_policy.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_save_info.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_url_parameters.h" 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_details.h" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/common/menu_item.h" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/ssl_status.h" 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/url_utils.h" 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/extension_host.h" 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_guest.h" 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/browser/view_type_utils.h" 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/escape.h" 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebContextMenuData.h" 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebMediaPlayerAction.h" 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginAction.h" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/favicon_size.h" 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gfx/point.h" 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gfx/size.h" 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/text_elider.h" 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_PRINTING) 105c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/common/print_messages.h" 106c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 107c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING) 108c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/browser/printing/print_preview_context_menu_observer.h" 109c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/browser/printing/print_preview_dialog_controller.h" 110c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/browser/printing/print_view_manager.h" 111c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#else 112c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/browser/printing/print_view_manager_basic.h" 113c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif // defined(ENABLE_FULL_PRINTING) 114c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif // defined(ENABLE_PRINTING) 115c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction; 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebContextMenuData; 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMediaPlayerAction; 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginAction; 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString; 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ChildProcessSecurityPolicy; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadManager; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadUrlParameters; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using content::RenderFrameHost; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::SSLStatus; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using extensions::ContextMenuMatcher; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::MenuItem; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::MenuManager; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const int kImageSearchThumbnailMinSize = 300 * 300; 141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const int kImageSearchThumbnailMaxWidth = 600; 142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const int kImageSearchThumbnailMaxHeight = 600; 143a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Maps UMA enumeration to IDC. IDC could be changed so we can't use 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// just them and |UMA_HISTOGRAM_CUSTOM_ENUMERATION|. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Never change mapping or reuse |enum_id|. Always push back new items. 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Items that is not used any more by |RenderViewContextMenu.ExecuteCommand| 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// could be deleted, but don't change the rest of |kUmaEnumToControlId|. 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const struct UmaEnumCommandIdPair { 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int enum_id; 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int control_id; 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} kUmaEnumToControlId[] = { 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) enum id for 0, 1 are detected using 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderViewContextMenu::IsContentCustomCommandId and 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContextMenuMatcher::IsExtensionsCustomCommandId 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {2, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST}, 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {3, IDC_CONTENT_CONTEXT_OPENLINKNEWTAB}, 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {4, IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW}, 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {5, IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD}, 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {6, IDC_CONTENT_CONTEXT_SAVELINKAS}, 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {7, IDC_CONTENT_CONTEXT_SAVEAVAS}, 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {8, IDC_CONTENT_CONTEXT_SAVEIMAGEAS}, 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {9, IDC_CONTENT_CONTEXT_COPYLINKLOCATION}, 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {10, IDC_CONTENT_CONTEXT_COPYIMAGELOCATION}, 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {11, IDC_CONTENT_CONTEXT_COPYAVLOCATION}, 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {12, IDC_CONTENT_CONTEXT_COPYIMAGE}, 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {13, IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB}, 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {14, IDC_CONTENT_CONTEXT_OPENAVNEWTAB}, 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {15, IDC_CONTENT_CONTEXT_PLAYPAUSE}, 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {16, IDC_CONTENT_CONTEXT_MUTE}, 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {17, IDC_CONTENT_CONTEXT_LOOP}, 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {18, IDC_CONTENT_CONTEXT_CONTROLS}, 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {19, IDC_CONTENT_CONTEXT_ROTATECW}, 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {20, IDC_CONTENT_CONTEXT_ROTATECCW}, 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {21, IDC_BACK}, 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {22, IDC_FORWARD}, 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {23, IDC_SAVE_PAGE}, 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {24, IDC_RELOAD}, 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {25, IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP}, 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {26, IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP}, 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {27, IDC_PRINT}, 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {28, IDC_VIEW_SOURCE}, 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {29, IDC_CONTENT_CONTEXT_INSPECTELEMENT}, 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {30, IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE}, 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {31, IDC_CONTENT_CONTEXT_VIEWPAGEINFO}, 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {32, IDC_CONTENT_CONTEXT_TRANSLATE}, 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {33, IDC_CONTENT_CONTEXT_RELOADFRAME}, 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {34, IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE}, 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {35, IDC_CONTENT_CONTEXT_VIEWFRAMEINFO}, 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {36, IDC_CONTENT_CONTEXT_UNDO}, 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {37, IDC_CONTENT_CONTEXT_REDO}, 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {38, IDC_CONTENT_CONTEXT_CUT}, 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {39, IDC_CONTENT_CONTEXT_COPY}, 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {40, IDC_CONTENT_CONTEXT_PASTE}, 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {41, IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE}, 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {42, IDC_CONTENT_CONTEXT_DELETE}, 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {43, IDC_CONTENT_CONTEXT_SELECTALL}, 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {44, IDC_CONTENT_CONTEXT_SEARCHWEBFOR}, 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {45, IDC_CONTENT_CONTEXT_GOTOURL}, 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {46, IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS}, 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {47, IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS}, 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {48, IDC_CONTENT_CONTEXT_ADDSEARCHENGINE}, 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {52, IDC_CONTENT_CONTEXT_OPENLINKWITH}, 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {53, IDC_CHECK_SPELLING_WHILE_TYPING}, 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {54, IDC_SPELLCHECK_MENU}, 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {55, IDC_CONTENT_CONTEXT_SPELLING_TOGGLE}, 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {56, IDC_SPELLCHECK_LANGUAGES_FIRST}, 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {57, IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE}, 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {58, IDC_SPELLCHECK_SUGGESTION_0}, 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {59, IDC_SPELLCHECK_ADD_TO_DICTIONARY}, 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {60, IDC_SPELLPANEL_TOGGLE}, 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Add new items here and use |enum_id| from the next line. 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) {61, 0}, // Must be the last. Increment |enum_id| when new IDC was added. 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Collapses large ranges of ids before looking for UMA enum. 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint CollapseCommandsForUMA(int id) { 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(!RenderViewContextMenu::IsContentCustomCommandId(id)); 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(!ContextMenuMatcher::IsExtensionsCustomCommandId(id)); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (id >= IDC_SPELLCHECK_LANGUAGES_FIRST && 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) id <= IDC_SPELLCHECK_LANGUAGES_LAST) { 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return IDC_SPELLCHECK_LANGUAGES_FIRST; 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (id >= IDC_SPELLCHECK_SUGGESTION_0 && 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) id <= IDC_SPELLCHECK_SUGGESTION_LAST) { 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return IDC_SPELLCHECK_SUGGESTION_0; 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return id; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Returns UMA enum value for command specified by |id| or -1 if not found. 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int FindUMAEnumValueForCommand(int id) { 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (RenderViewContextMenu::IsContentCustomCommandId(id)) 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 1; 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch id = CollapseCommandsForUMA(id); 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const size_t kMappingSize = arraysize(kUmaEnumToControlId); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < kMappingSize; ++i) { 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (kUmaEnumToControlId[i].control_id == id) { 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return kUmaEnumToControlId[i].enum_id; 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return -1; 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Usually a new tab is expected where this function is used, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// however users should be able to open a tab in background 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// or in a new window. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WindowOpenDisposition ForceNewTabDispositionFromEventFlags( 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int event_flags) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::DispositionFromEventFlags(event_flags); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return disposition == CURRENT_TAB ? NEW_FOREGROUND_TAB : disposition; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Helper function to escape "&" as "&&". 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void EscapeAmpersands(base::string16* text) { 271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ReplaceChars(*text, base::ASCIIToUTF16("&"), base::ASCIIToUTF16("&&"), 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) text); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Returns the preference of the profile represented by the |context|. 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PrefService* GetPrefs(content::BrowserContext* context) { 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return user_prefs::UserPrefs::Get(context); 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool ExtensionPatternMatch(const extensions::URLPatternSet& patterns, 28103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& url) { 28203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // No patterns means no restriction, so that implicitly matches. 28303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (patterns.is_empty()) 28403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return true; 28503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return patterns.MatchesURL(url); 28603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 28703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 28803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const GURL& GetDocumentURL(const content::ContextMenuParams& params) { 28903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return params.frame_url.is_empty() ? params.page_url : params.frame_url; 29003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 29103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 29203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)content::Referrer CreateSaveAsReferrer( 29303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& url, 29403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const content::ContextMenuParams& params) { 29503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& referring_url = GetDocumentURL(params); 29603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return content::Referrer::SanitizeForRequest( 29703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, 29803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy)); 29903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 30003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool g_custom_id_ranges_initialized = false; 30203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kSpellcheckRadioGroup = 1; 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) { 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return url.SchemeIs(content::kChromeDevToolsScheme); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) { 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!url.SchemeIs(content::kChromeUIScheme)) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.host() == chrome::kChromeUISyncResourcesHost; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewContextMenu::RenderViewContextMenu( 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderFrameHost* render_frame_host, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params) 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : RenderViewContextMenuBase(render_frame_host, params), 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_items_(browser_context_, 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this, 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &menu_model_, 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(MenuItemMatchesParams, params_)), 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protocol_handler_submenu_model_(this), 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protocol_handler_registry_( 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProtocolHandlerRegistryFactory::GetForBrowserContext(GetProfile())) { 33003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!g_custom_id_ranges_initialized) { 33103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) g_custom_id_ranges_initialized = true; 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetContentCustomCommandIdRange(IDC_CONTENT_CONTEXT_CUSTOM_FIRST, 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDC_CONTENT_CONTEXT_CUSTOM_LAST); 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_content_type(ContextMenuContentTypeFactory::Create( 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_web_contents_, params)); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewContextMenu::~RenderViewContextMenu() { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Menu construction functions ------------------------------------------------- 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::ExtensionContextAndPatternMatch( 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params, 34703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const MenuItem::ContextList& contexts, 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::URLPatternSet& target_url_patterns) { 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool has_link = !params.link_url.is_empty(); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool has_selection = !params.selection_text.empty(); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool in_frame = !params.frame_url.is_empty(); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (contexts.Contains(MenuItem::ALL) || 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (has_selection && contexts.Contains(MenuItem::SELECTION)) || 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (params.is_editable && contexts.Contains(MenuItem::EDITABLE)) || 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (in_frame && contexts.Contains(MenuItem::FRAME))) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_link && contexts.Contains(MenuItem::LINK) && 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPatternMatch(target_url_patterns, params.link_url)) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (params.media_type) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebContextMenuData::MediaTypeImage: 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (contexts.Contains(MenuItem::IMAGE) && 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPatternMatch(target_url_patterns, params.src_url)) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebContextMenuData::MediaTypeVideo: 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (contexts.Contains(MenuItem::VIDEO) && 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPatternMatch(target_url_patterns, params.src_url)) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebContextMenuData::MediaTypeAudio: 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (contexts.Contains(MenuItem::AUDIO) && 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPatternMatch(target_url_patterns, params.src_url)) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PAGE is the least specific context, so we only examine that if none of the 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other contexts apply (except for FRAME, which is included in PAGE for 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // backwards compatibility). 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!has_link && !has_selection && !params.is_editable && 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.media_type == WebContextMenuData::MediaTypeNone && 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contexts.Contains(MenuItem::PAGE)) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::MenuItemMatchesParams( 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::ContextMenuParams& params, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::MenuItem* item) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match = ExtensionContextAndPatternMatch(params, item->contexts(), 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item->target_url_patterns()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!match) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& document_url = GetDocumentURL(params); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ExtensionPatternMatch(item->document_url_patterns(), document_url); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendAllExtensionItems() { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_items_.Clear(); 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* service = 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionSystem::Get(browser_context_)->extension_service(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!service) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; // In unit-tests, we may not have an ExtensionService. 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MenuManager* menu_manager = MenuManager::Get(browser_context_); 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!menu_manager) 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 printable_selection_text = PrintableSelectionText(); 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EscapeAmpersands(&printable_selection_text); 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Get a list of extension id's that have context menu items, and sort by the 4257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // top level context menu title of the extension. 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::set<MenuItem::ExtensionKey> ids = menu_manager->ExtensionIds(); 4277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<base::string16> sorted_menu_titles; 4287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::map<base::string16, std::string> map_ids; 4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (std::set<MenuItem::ExtensionKey>::iterator iter = ids.begin(); 4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) iter != ids.end(); 4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ++iter) { 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Extension* extension = 4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service->GetExtensionById(iter->extension_id, false); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Platform apps have their context menus created directly in 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AppendPlatformAppItems. 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (extension && !extension->is_platform_app()) { 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::string16 menu_title = extension_items_.GetTopLevelContextMenuTitle( 4386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *iter, printable_selection_text); 4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) map_ids[menu_title] = iter->extension_id; 4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sorted_menu_titles.push_back(menu_title); 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (sorted_menu_titles.empty()) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string app_locale = g_browser_process->GetApplicationLocale(); 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) l10n_util::SortStrings16(app_locale, &sorted_menu_titles); 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index = 0; 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (size_t i = 0; i < sorted_menu_titles.size(); ++i) { 4517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& id = map_ids[sorted_menu_titles[i]]; 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const MenuItem::ExtensionKey extension_key(id); 4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_items_.AppendExtensionItems(extension_key, 4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) printable_selection_text, 4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &index, 4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false); // is_action_menu 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewContextMenu::AppendCurrentExtensionItems() { 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Avoid appending extension related items when |extension| is null. 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // For Panel, this happens when the panel is navigated to a url outside of the 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // extension's package. 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Extension* extension = GetExtension(); 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (extension) { 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Only add extension items from this extension. 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int index = 0; 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const MenuItem::ExtensionKey key( 4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension->id(), 4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::WebViewGuest::GetViewInstanceId(source_web_contents_)); 4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_items_.AppendExtensionItems(key, 4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PrintableSelectionText(), 4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &index, 4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false); // is_action_menu 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewContextMenu::InitMenu() { 4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderViewContextMenuBase::InitMenu(); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendPageItems(); 483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_FRAME)) { 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Merge in frame items with page items if we clicked within a frame that 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // needs them. 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendFrameItems(); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendLinkItems(); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.media_type != WebContextMenuData::MediaTypeNone) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_MEDIA_IMAGE)) { 499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendImageItems(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_SEARCHWEBFORIMAGE)) { 504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendSearchWebForImageItems(); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_MEDIA_VIDEO)) { 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendVideoItems(); 51090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_MEDIA_AUDIO)) { 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendAudioItems(); 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 518010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ContextMenuContentType::ITEM_GROUP_MEDIA_CANVAS)) { 519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AppendCanvasItems(); 520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (content_type_->SupportsGroup( 523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { 524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendPluginItems(); 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // ITEM_GROUP_MEDIA_FILE has no specific items. 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_EDITABLE)) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendEditableItems(); 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_COPY)) { 533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!content_type_->SupportsGroup( 534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_EDITABLE)); 535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendCopyItem(); 536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_SEARCH_PROVIDER)) { 540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendSearchProvider(); 541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PRINT)) 544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendPrintItem(); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_ALL_EXTENSION)) { 548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!content_type_->SupportsGroup( 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_CURRENT_EXTENSION)); 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendAllExtensionItems(); 551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_CURRENT_EXTENSION)) { 555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!content_type_->SupportsGroup( 556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_ALL_EXTENSION)); 557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendCurrentExtensionItems(); 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_DEVELOPER)) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendDeveloperItems(); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_DEVTOOLS_UNPACKED_EXT)) { 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendDevtoolsForUnpackedExtensions(); 568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (content_type_->SupportsGroup( 571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContextMenuContentType::ITEM_GROUP_PRINT_PREVIEW)) { 572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendPrintPreviewItems(); 573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Profile* RenderViewContextMenu::GetProfile() { 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Profile::FromBrowserContext(browser_context_); 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewContextMenu::RecordUsedItem(int id) { 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int enum_id = FindUMAEnumValueForCommand(id); 5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (enum_id != -1) { 5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const size_t kMappingSize = arraysize(kUmaEnumToControlId); 5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Used", enum_id, 5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kUmaEnumToControlId[kMappingSize - 1].enum_id); 5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED() << "Update kUmaEnumToControlId. Unhanded IDC: " << id; 5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewContextMenu::RecordShownItem(int id) { 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int enum_id = FindUMAEnumValueForCommand(id); 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (enum_id != -1) { 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const size_t kMappingSize = arraysize(kUmaEnumToControlId); 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.Shown", enum_id, 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kUmaEnumToControlId[kMappingSize - 1].enum_id); 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Just warning here. It's harder to maintain list of all possibly 5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // visible items than executable items. 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DLOG(ERROR) << "Update kUmaEnumToControlId. Unhanded IDC: " << id; 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewContextMenu::HandleAuthorizeAllPlugins() { 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_web_contents_, false, std::string()); 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewContextMenu::AppendPrintPreviewItems() { 612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_FULL_PRINTING) 613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!print_preview_menu_observer_.get()) { 614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) print_preview_menu_observer_.reset( 615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) new PrintPreviewContextMenuObserver(source_web_contents_)); 616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 618a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) observers_.AddObserver(print_preview_menu_observer_.get()); 619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const Extension* RenderViewContextMenu::GetExtension() const { 623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions::ExtensionSystem* system = 6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionSystem::Get(browser_context_); 625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // There is no process manager in some tests. 626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!system->process_manager()) 627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return NULL; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return system->process_manager()->GetExtensionForRenderViewHost( 630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) source_web_contents_->GetRenderViewHost()); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendDeveloperItems() { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show Inspect Element in DevTools itself only in case of the debug 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // devtools build. 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_developer_items = !IsDevToolsURL(params_.page_url); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(DEBUG_DEVTOOLS) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_developer_items = true; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!show_developer_items) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the DevTools popup menu, "developer items" is normally the only 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // section, so omit the separator there. 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTELEMENT, 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_INSPECTELEMENT); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewContextMenu::AppendDevtoolsForUnpackedExtensions() { 653a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Add a separator if there are any items already in the menu. 654a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 655a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 656a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP, 657a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_CONTENT_CONTEXT_RELOAD_PACKAGED_APP); 658a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP, 659a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_CONTENT_CONTEXT_RESTART_APP); 660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AppendDeveloperItems(); 661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE, 662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE); 663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendLinkItems() { 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!params_.link_url.is_empty()) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENLINKNEWTAB); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.link_url.is_valid()) { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendProtocolHandlerSubMenu(); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, 6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVELINKAS, 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVELINKAS); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId( 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_COPYLINKLOCATION, 683cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) params_.link_url.SchemeIs(url::kMailToScheme) ? 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYEMAILADDRESS : 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYLINKLOCATION); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendImageItems() { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEIMAGEAS); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGELOCATION, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYIMAGE); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB, 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB); 697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void RenderViewContextMenu::AppendSearchWebForImageItems() { 700f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLService* service = 7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(GetProfile()); 702a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const TemplateURL* const default_provider = 703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) service->GetDefaultSearchProvider(); 704a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (params_.has_image_contents && default_provider && 705424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) !default_provider->image_url().empty() && 706f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_provider->image_url_ref().IsValid(service->search_terms_data())) { 707a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) menu_model_.AddItem( 7083240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, 709a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFORIMAGE, 710a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) default_provider->short_name())); 711a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendAudioItems() { 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMediaItems(); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEAUDIOAS); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void RenderViewContextMenu::AppendCanvasItems() { 726010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, 727010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEIMAGEAS); 728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYIMAGE, 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_CONTENT_CONTEXT_COPYIMAGE); 730010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 731010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendVideoItems() { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMediaItems(); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEVIDEOAS); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendMediaItems() { 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int media_flags = params_.media_flags; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId( 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_PLAYPAUSE, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media_flags & WebContextMenuData::MediaPaused ? 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_PLAY : 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_PAUSE); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId( 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_MUTE, 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media_flags & WebContextMenuData::MediaMuted ? 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_UNMUTE : 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_MUTE); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_LOOP, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_LOOP); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddCheckItemWithStringId(IDC_CONTENT_CONTEXT_CONTROLS, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_CONTROLS); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendPluginItems() { 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.page_url == params_.src_url) { 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Full page plugin, so show page menu items. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.link_url.is_empty() && params_.selection_text.empty()) 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendPageItems(); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEPAGEAS); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.media_flags & WebContextMenuData::MediaCanRotate) { 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ROTATECW, 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_ROTATECW); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ROTATECCW, 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_ROTATECCW); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendPageItems() { 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_BACK, IDS_CONTENT_CONTEXT_BACK); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_FORWARD, IDS_CONTENT_CONTEXT_FORWARD); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_RELOAD, IDS_CONTENT_CONTEXT_RELOAD); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_SAVE_PAGE, 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SAVEPAGEAS); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 793c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (TranslateService::IsTranslatableURL(params_.page_url)) { 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string locale = g_browser_process->GetApplicationLocale(); 7955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) locale = translate::TranslateDownloadManager::GetLanguageCode(locale); 796a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 language = 797a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) l10n_util::GetDisplayNameForLocale(locale, locale, true); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItem( 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_TRANSLATE, 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_TRANSLATE, language)); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); 8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWPAGEINFO, 8065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_CONTENT_CONTEXT_VIEWPAGEINFO); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendFrameItems() { 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_RELOADFRAME, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_RELOADFRAME); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These two menu items have yet to be implemented. 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://code.google.com/p/chromium/issues/detail?id=11827 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IDS_CONTENT_CONTEXT_SAVEFRAMEAS 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IDS_CONTENT_CONTEXT_PRINTFRAME 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE, 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE); 8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMEINFO, 8195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDS_CONTENT_CONTEXT_VIEWFRAMEINFO); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendCopyItem() { 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPY); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewContextMenu::AppendPrintItem() { 8285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GetPrefs(browser_context_)->GetBoolean(prefs::kPrintingEnabled) && 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (params_.media_type == WebContextMenuData::MediaTypeNone || 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params_.media_flags & WebContextMenuData::MediaCanPrint)) { 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu_model_.AddItemWithStringId(IDC_PRINT, IDS_CONTENT_CONTEXT_PRINT); 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendSearchProvider() { 8365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(browser_context_); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 838a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TrimWhitespace(params_.selection_text, base::TRIM_ALL, 839a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ¶ms_.selection_text); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params_.selection_text.empty()) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 843a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::ReplaceChars(params_.selection_text, AutocompleteMatch::kInvalidChars, 8445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16(" "), ¶ms_.selection_text); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch match; 84703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AutocompleteClassifierFactory::GetForProfile(GetProfile())->Classify( 84803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) params_.selection_text, 84903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) false, 85003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) false, 85103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) metrics::OmniboxEventProto::INVALID_SPEC, 85203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) &match, 85303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) NULL); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_navigation_url_ = match.destination_url; 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!selection_navigation_url_.is_valid()) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 858a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 printable_selection_text = PrintableSelectionText(); 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EscapeAmpersands(&printable_selection_text); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (AutocompleteMatch::IsSearchType(match.type)) { 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TemplateURL* const default_provider = 8635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(GetProfile()) 8645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->GetDefaultSearchProvider(); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!default_provider) 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItem( 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_SEARCHWEBFOR, 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFOR, 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_provider->short_name(), 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printable_selection_text)); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((selection_navigation_url_ != params_.link_url) && 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicy::GetInstance()->IsWebSafeScheme( 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_navigation_url_.scheme())) { 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItem( 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_GOTOURL, 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_GOTOURL, 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printable_selection_text)); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendEditableItems() { 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool use_spellcheck_and_search = !chrome::IsRunningInForcedAppMode(); 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (use_spellcheck_and_search) 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendSpellingSuggestionsSubMenu(); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_UNDO); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_REDO); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT, 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_CUT); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_COPY); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE, 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_PASTE); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_DELETE, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_DELETE); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (use_spellcheck_and_search && !params_.keyword_url.is_empty()) { 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_ADDSEARCHENGINE, 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_ADDSEARCHENGINE); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (use_spellcheck_and_search) 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendSpellcheckOptionsSubMenu(); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendPlatformEditableItems(); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_CONTENT_CONTEXT_SELECTALL); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() { 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!spelling_menu_observer_.get()) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spelling_menu_observer_.reset(new SpellingMenuObserver(this)); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(spelling_menu_observer_.get()); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spelling_menu_observer_->InitMenu(params_); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() { 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!spellchecker_submenu_observer_.get()) { 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver( 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, this, kSpellcheckRadioGroup)); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spellchecker_submenu_observer_->InitMenu(params_); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(spellchecker_submenu_observer_.get()); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::AppendProtocolHandlerSubMenu() { 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandlerRegistry::ProtocolHandlerList handlers = 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHandlersForLinkUrl(); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (handlers.empty()) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max = IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST - 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < handlers.size() && i <= max; i++) { 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol_handler_submenu_model_.AddItem( 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST + i, 948cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::UTF8ToUTF16(handlers[i].url().host())); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol_handler_submenu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol_handler_submenu_model_.AddItem( 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS, 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_OPENLINKWITH_CONFIGURE)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu_model_.AddSubMenu( 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKWITH, 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_OPENLINKWITH), 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &protocol_handler_submenu_model_); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Menu delegate functions ----------------------------------------------------- 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::IsCommandIdEnabled(int id) const { 9646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 9656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool enabled = false; 9666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (RenderViewContextMenuBase::IsCommandIdKnown(id, &enabled)) 9676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return enabled; 9686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 970ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch CoreTabHelper* core_tab_helper = 971ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch CoreTabHelper::FromWebContents(source_web_contents_); 972ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int content_restrictions = 0; 973ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (core_tab_helper) 974ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content_restrictions = core_tab_helper->content_restrictions(); 975c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch if (id == IDC_PRINT && (content_restrictions & CONTENT_RESTRICTION_PRINT)) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id == IDC_SAVE_PAGE && 979ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (content_restrictions & CONTENT_RESTRICTION_SAVE)) { 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PrefService* prefs = GetPrefs(browser_context_); 9845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow Spell Check language items on sub menu for text area context menu. 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((id >= IDC_SPELLCHECK_LANGUAGES_FIRST) && 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (id < IDC_SPELLCHECK_LANGUAGES_LAST)) { 9885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return prefs->GetBoolean(prefs::kEnableContinuousSpellcheck); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension items. 9925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_items_.IsCommandIdEnabled(id); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IncognitoModePrefs::Availability incognito_avail = 10015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IncognitoModePrefs::GetAvailability(prefs); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (id) { 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BACK: 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return source_web_contents_->GetController().CanGoBack(); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_FORWARD: 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return source_web_contents_->GetController().CanGoForward(); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_RELOAD: { 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper* core_tab_helper = 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper::FromWebContents(source_web_contents_); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!core_tab_helper) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !core_delegate || 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_delegate->CanReloadContents(source_web_contents_); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_VIEW_SOURCE: 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return source_web_contents_->GetController().CanViewSource(); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_INSPECTELEMENT: 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP: 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsDevCommandEnabled(id); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: 1031cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (source_web_contents_->GetController().GetVisibleEntry() == NULL) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disabled if no browser is associated (e.g. desktop notifications). 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (chrome::FindBrowserWithWebContents(source_web_contents_) == NULL) 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_TRANSLATE: { 103946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeTranslateClient* chrome_translate_client = 104046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeTranslateClient::FromWebContents(source_web_contents_); 104146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!chrome_translate_client) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string original_lang = 104446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_translate_client->GetLanguageState().original_language(); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string target_lang = g_browser_process->GetApplicationLocale(); 10465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target_lang = 10475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateDownloadManager::GetLanguageCode(target_lang); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that we intentionally enable the menu even if the original and 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // target languages are identical. This is to give a way to user to 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // translate a page that might contains text fragments in a different 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // language. 105290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ((params_.edit_flags & WebContextMenuData::CanTranslate) != 0) && 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !original_lang.empty() && // Did we receive the page language yet? 105446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) !chrome_translate_client->GetLanguageState().IsPageTranslated() && 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !source_web_contents_->GetInterstitialPage() && 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are some application locales which can't be used as a 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // target language for translation. 10585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateDownloadManager::IsSupportedLanguage( 10595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target_lang) && 1060868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Disable on the Instant Extended NTP. 1061868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !chrome::IsInstantNTP(source_web_contents_); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params_.link_url.is_valid(); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params_.unfiltered_link_url.is_valid(); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVELINKAS: { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* local_state = g_browser_process->local_state(); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(local_state); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test if file-selection dialogs are forbidden by policy. 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params_.link_url.is_valid() && 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileIOData::IsHandledProtocol(params_.link_url.scheme()); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* local_state = g_browser_process->local_state(); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(local_state); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test if file-selection dialogs are forbidden by policy. 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return params_.has_image_contents; 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10923240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // The images shown in the most visited thumbnails can't be opened or 10933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // searched for conventionally. 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: 10953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: 10963240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return params_.src_url.is_valid() && 10975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (params_.src_url.scheme() != content::kChromeUIScheme); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYIMAGE: 1100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return params_.has_image_contents; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Media control commands should all be disabled if the player is in an 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error state. 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PLAYPAUSE: 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_LOOP: 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (params_.media_flags & 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContextMenuData::MediaInError) == 0; 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mute and unmute should also be disabled if the player has no audio. 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_MUTE: 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (params_.media_flags & 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContextMenuData::MediaHasAudio) != 0 && 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (params_.media_flags & 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContextMenuData::MediaInError) == 0; 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_CONTROLS: 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (params_.media_flags & 1118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContextMenuData::MediaCanToggleControls) != 0; 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ROTATECW: 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ROTATECCW: 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (params_.media_flags & WebContextMenuData::MediaCanRotate) != 0; 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYAVLOCATION: 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params_.src_url.is_valid(); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVEAVAS: { 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* local_state = g_browser_process->local_state(); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(local_state); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test if file-selection dialogs are forbidden by policy. 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url = params_.src_url; 1137c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool can_save = 1138c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch (params_.media_flags & WebContextMenuData::MediaCanSave) && 1139c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch url.is_valid() && ProfileIOData::IsHandledProtocol(url.scheme()); 1140c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING) 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not save the preview PDF on the print preview page. 1142c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch can_save = can_save && 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !(printing::PrintPreviewDialogController::IsPrintPreviewURL(url)); 1144c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif 1145c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch return can_save; 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_SAVE_PAGE: { 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper* core_tab_helper = 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper::FromWebContents(source_web_contents_); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!core_tab_helper) 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (core_delegate && 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !core_delegate->CanSaveContents(source_web_contents_)) 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* local_state = g_browser_process->local_state(); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(local_state); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test if file-selection dialogs are forbidden by policy. 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // We save the last committed entry (which the user is looking at), as 1169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // opposed to any pending URL that hasn't committed yet. 1170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NavigationEntry* entry = 1171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) source_web_contents_->GetController().GetLastCommittedEntry(); 1172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return content::IsSavableURL(entry ? entry->GetURL() : GURL()); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RELOADFRAME: 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return params_.frame_url.is_valid(); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_UNDO: 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanUndo); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_REDO: 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanRedo); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_CUT: 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanCut); 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPY: 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanCopy); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PASTE: 11916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE: { 11926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<base::string16> types; 11936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool ignore; 11946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::Clipboard::GetForCurrentThread()->ReadAvailableTypes( 11956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui::CLIPBOARD_TYPE_COPY_PASTE, &types, &ignore); 11966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return !types.empty(); 11976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_DELETE: 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanDelete); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SELECTALL: 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !!(params_.edit_flags & WebContextMenuData::CanSelectAll); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: 12055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return !browser_context_->IsOffTheRecord() && 12065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params_.link_url.is_valid() && 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_avail != IncognitoModePrefs::DISABLED; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_PRINT: 12105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return prefs->GetBoolean(prefs::kPrintingEnabled) && 12115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (params_.media_type == WebContextMenuData::MediaTypeNone || 12125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params_.media_flags & WebContextMenuData::MediaCanPrint); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SEARCHWEBFOR: 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_GOTOURL: 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_SPELLPANEL_TOGGLE: 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS: 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWFRAMEINFO: 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disabled if no browser is associated (e.g. desktop notifications). 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (chrome::FindBrowserWithWebContents(source_web_contents_) == NULL) 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CHECK_SPELLING_WHILE_TYPING: 12265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return prefs->GetBoolean(prefs::kEnableContinuousSpellcheck); 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) && defined(OS_POSIX) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(suzhe): this should not be enabled for password fields. 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_INPUT_METHODS_MENU: 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ADDSEARCHENGINE: 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !params_.keyword_url.is_empty(); 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_SPELLCHECK_MENU: 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKWITH: 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS: 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::IsCommandIdChecked(int id) const { 12535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (RenderViewContextMenuBase::IsCommandIdChecked(id)) 12545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See if the video is set to looping. 125703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (id == IDC_CONTENT_CONTEXT_LOOP) 125803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return (params_.media_flags & WebContextMenuData::MediaLoop) != 0; 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (id == IDC_CONTENT_CONTEXT_CONTROLS) 126103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return (params_.media_flags & WebContextMenuData::MediaControls) != 0; 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension items. 12645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_items_.IsCommandIdChecked(id); 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { 12715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderViewContextMenuBase::ExecuteCommand(id, event_flags); 12725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (command_executed_) 12735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 127490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) command_executed_ = true; 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameHost* render_frame_host = GetRenderFrameHost(); 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process extension menu items. 12795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) { 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_items_.ExecuteCommand(id, source_web_contents_, params_); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList handlers = 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHandlersForLinkUrl(); 128803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (handlers.empty()) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 129003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("RegisterProtocolHandler.ContextMenu_Open")); 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handlerIndex = id - IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ForceNewTabDispositionFromEventFlags(event_flags); 129603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OpenURL(handlers[handlerIndex].TranslateUrl(params_.link_url), 129703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetDocumentURL(params_), 129803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) disposition, 12991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (id) { 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: { 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FindBrowserWithWebContents(source_web_contents_); 130703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OpenURL(params_.link_url, 130803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetDocumentURL(params_), 130903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) !browser || browser->is_app() ? 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, 13111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: 131503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OpenURL(params_.link_url, 131603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetDocumentURL(params_), 131703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) NEW_WINDOW, 13181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: 1322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OpenURL(params_.link_url, GURL(), OFF_THE_RECORD, 13231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVELINKAS: { 1327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url = params_.link_url; 132903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::Referrer referrer = CreateSaveAsReferrer(url, params_); 13305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DownloadManager* dlm = 13315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BrowserContext::GetDownloadManager(browser_context_); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DownloadUrlParameters> dl_params( 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadUrlParameters::FromWebContents(source_web_contents_, url)); 13345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dl_params->set_referrer(referrer); 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dl_params->set_referrer_encoding(params_.frame_charset); 1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dl_params->set_suggested_name(params_.suggested_filename); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dl_params->set_prompt(true); 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dlm->DownloadUrl(dl_params.Pass()); 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVEAVAS: 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { 13441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_large_data_url = params_.has_image_contents && 13451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci params_.src_url.is_empty(); 13461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (params_.media_type == WebContextMenuData::MediaTypeCanvas || 13471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (params_.media_type == WebContextMenuData::MediaTypeImage && 13481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci is_large_data_url)) { 1349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) source_web_contents_->GetRenderViewHost()->SaveImageAt( 1350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) params_.x, params_.y); 1351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 1352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); 1353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const GURL& url = params_.src_url; 135403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::Referrer referrer = CreateSaveAsReferrer(url, params_); 13555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_web_contents_->SaveFrame(url, referrer); 1356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteURLToClipboard(params_.unfiltered_link_url); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYAVLOCATION: 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteURLToClipboard(params_.src_url); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPYIMAGE: 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CopyImageAt(params_.x, params_.y); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: 1374a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetImageThumbnailForSearch(); 1375a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) break; 1376a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: 137903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OpenURL(params_.src_url, 138003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetDocumentURL(params_), 138103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) NEW_BACKGROUND_TAB, 13821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PLAYPAUSE: { 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (play) { 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Play")); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Pause")); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaPlayerActionAt(gfx::Point(params_.x, params_.y), 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction( 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction::Play, play)); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_MUTE: { 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool mute = !(params_.media_flags & WebContextMenuData::MediaMuted); 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mute) { 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Mute")); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Unmute")); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaPlayerActionAt(gfx::Point(params_.x, params_.y), 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction( 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction::Mute, mute)); 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_LOOP: 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Loop")); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaPlayerActionAt(gfx::Point(params_.x, params_.y), 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction( 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction::Loop, 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !IsCommandIdChecked(IDC_CONTENT_CONTEXT_LOOP))); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_CONTROLS: 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MediaContextMenu_Controls")); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaPlayerActionAt( 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(params_.x, params_.y), 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction( 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMediaPlayerAction::Controls, 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS))); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ROTATECW: 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("PluginContextMenu_RotateClockwise")); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginActionAt( 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(params_.x, params_.y), 143303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) WebPluginAction(WebPluginAction::Rotate90Clockwise, true)); 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ROTATECCW: 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("PluginContextMenu_RotateCounterclockwise")); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginActionAt( 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(params_.x, params_.y), 144103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) WebPluginAction(WebPluginAction::Rotate90Counterclockwise, true)); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_BACK: 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->GetController().GoBack(); 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_FORWARD: 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->GetController().GoForward(); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_SAVE_PAGE: 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->OnSavePage(); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_RELOAD: 14575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) source_web_contents_->GetController().Reload(true); 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: { 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* platform_app = GetExtension(); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app->is_platform_app()); 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionSystem::Get(browser_context_) 14665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->extension_service() 14675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->ReloadExtension(platform_app->id()); 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP: { 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* platform_app = GetExtension(); 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app->is_platform_app()); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) apps::AppLoadService::Get(GetProfile()) 14775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->RestartApplication(platform_app->id()); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case IDC_PRINT: { 1482c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_PRINTING) 14831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (params_.media_type != WebContextMenuData::MediaTypeNone) { 1484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (render_frame_host) { 1485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_frame_host->Send(new PrintMsg_PrintNodeUnderContextMenu( 1486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_frame_host->GetRoutingID())); 1487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 14881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 14911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_FULL_PRINTING) 14921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci printing::PrintViewManager* print_view_manager = 14931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci printing::PrintViewManager::FromWebContents(source_web_contents_); 14941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!print_view_manager) 14951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 14961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!GetPrefs(browser_context_) 14971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetBoolean(prefs::kPrintPreviewDisabled)) { 14981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci print_view_manager->PrintPreviewNow(!params_.selection_text.empty()); 14991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 15001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 15011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else // ENABLE_FULL_PRINTING 15021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci printing::PrintViewManagerBasic* print_view_manager = 15031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci printing::PrintViewManagerBasic::FromWebContents( 15041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci source_web_contents_); 15051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!print_view_manager) 15061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 15071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // ENABLE_FULL_PRINTING 15081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 15091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(DISABLE_BASIC_PRINTING) 15101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci print_view_manager->PrintNow(); 15111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // !DISABLE_BASIC_PRINTING 15121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 15131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // ENABLE_PRINTING 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_VIEW_SOURCE: 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->ViewSource(); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_INSPECTELEMENT: 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Inspect(params_.x, params_.y); 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: { 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* platform_app = GetExtension(); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app); 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(platform_app->is_platform_app()); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::devtools_util::InspectBackgroundPage(platform_app, 15315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetProfile()); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: { 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationController* controller = &source_web_contents_->GetController(); 15373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Important to use GetVisibleEntry to match what's showing in the 1538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // omnibox. This may return null. 15393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NavigationEntry* nav_entry = controller->GetVisibleEntry(); 1540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!nav_entry) 1541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FindBrowserWithWebContents(source_web_contents_); 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowWebsiteSettings(browser, source_web_contents_, 15457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch nav_entry->GetURL(), nav_entry->GetSSL()); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_TRANSLATE: { 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A translation might have been triggered by the time the menu got 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // selected, do nothing in that case. 155246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeTranslateClient* chrome_translate_client = 155346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeTranslateClient::FromWebContents(source_web_contents_); 155446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!chrome_translate_client || 155546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_translate_client->GetLanguageState().IsPageTranslated() || 155646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_translate_client->GetLanguageState().translation_pending()) { 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string original_lang = 156046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_translate_client->GetLanguageState().original_language(); 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string target_lang = g_browser_process->GetApplicationLocale(); 15625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target_lang = 15635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateDownloadManager::GetLanguageCode(target_lang); 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since the user decided to translate for that language and site, clears 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any preferences for not translating them. 15665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<translate::TranslatePrefs> prefs( 15675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromeTranslateClient::CreateTranslatePrefs( 15685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetPrefs(browser_context_))); 15695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs->UnblockLanguage(original_lang); 15705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs->RemoveSiteFromBlacklist(params_.page_url.HostNoBrackets()); 15715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateManager* manager = 157246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_translate_client->GetTranslateManager(); 1573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(manager); 1574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->TranslatePage(original_lang, target_lang, true); 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_RELOADFRAME: 1579e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // We always obey the cache here. 1580e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // TODO(evanm): Perhaps we could allow shift-clicking the menu item to do 1581e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // a cache-ignoring reload of the frame. 1582e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch source_web_contents_->ReloadFocusedFrame(false); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->ViewFrameSource(params_.frame_url, 158790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params_.frame_page_state); 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_VIEWFRAMEINFO: { 15912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser = chrome::FindBrowserWithWebContents( 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_); 15932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::ShowWebsiteSettings(browser, source_web_contents_, 15947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch params_.frame_url, params_.security_info); 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_UNDO: 1599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Undo(); 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_REDO: 1603c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Redo(); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_CUT: 1607c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Cut(); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_COPY: 1611c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Copy(); 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PASTE: 1615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Paste(); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE: 1619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->PasteAndMatchStyle(); 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_DELETE: 1623c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->Delete(); 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SELECTALL: 1627c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch source_web_contents_->SelectAll(); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_SEARCHWEBFOR: 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_GOTOURL: { 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ForceNewTabDispositionFromEventFlags(event_flags); 1634effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OpenURL(selection_navigation_url_, GURL(), disposition, 16351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS: { 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ForceNewTabDispositionFromEventFlags(event_flags); 1641effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); 16421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK); 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS: { 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("RegisterProtocolHandler.ContextMenu_Settings")); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowOpenDisposition disposition = 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ForceNewTabDispositionFromEventFlags(event_flags); 1651effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GURL url = chrome::GetSettingsUrl(chrome::kHandlerSettingsSubPage); 16521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case IDC_CONTENT_CONTEXT_ADDSEARCHENGINE: { 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the model is loaded. 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* model = 16595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(GetProfile()); 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!model) 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->Load(); 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchEngineTabHelper* search_engine_tab_helper = 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchEngineTabHelper::FromWebContents(source_web_contents_); 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (search_engine_tab_helper && 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_engine_tab_helper->delegate()) { 16686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::string16 keyword(TemplateURL::GenerateKeyword(params_.page_url)); 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLData data; 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = keyword; 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(keyword); 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL(params_.keyword_url.spec()); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.favicon_url = 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL::GenerateFaviconURL(params_.page_url.GetOrigin()); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of the TemplateURL. 16765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) search_engine_tab_helper->delegate()->ConfirmAddSearchProvider( 16775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TemplateURL(data), GetProfile()); 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProtocolHandlerRegistry::ProtocolHandlerList 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewContextMenu::GetHandlersForLinkUrl() { 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList handlers = 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol_handler_registry_->GetHandlersFor(params_.link_url.scheme()); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::sort(handlers.begin(), handlers.end()); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handlers; 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewContextMenu::NotifyMenuShown() { 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN, 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<RenderViewContextMenu>(this), 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderViewContextMenu::NotifyURLOpened( 17045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& url, 17055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::WebContents* new_contents) { 17065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RetargetingDetails details; 17075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) details.source_web_contents = source_web_contents_; 17081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Don't use GetRenderFrameHost() as it may be NULL. crbug.com/399789 17091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci details.source_render_frame_id = render_frame_id_; 17105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) details.target_url = url; 17115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) details.target_web_contents = new_contents; 17125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) details.not_yet_in_tabstrip = false; 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::NotificationService::current()->Notify( 17155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::NOTIFICATION_RETARGETING, 17165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Source<Profile>(GetProfile()), 17175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Details<RetargetingDetails>(&details)); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewContextMenu::IsDevCommandEnabled(int id) const { 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (id == IDC_CONTENT_CONTEXT_INSPECTELEMENT || 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id == IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE) { 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine* command_line = CommandLine::ForCurrentProcess(); 17245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!GetPrefs(browser_context_) 17255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->GetBoolean(prefs::kWebKitJavascriptEnabled) || 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->HasSwitch(switches::kDisableJavaScript)) 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't enable the web inspector if the developer tools are disabled via 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the preference dev-tools-disabled. 17315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GetPrefs(browser_context_)->GetBoolean(prefs::kDevToolsDisabled)) 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 RenderViewContextMenu::PrintableSelectionText() { 173958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return gfx::TruncateString(params_.selection_text, 17405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kMaxSelectionTextLength, 17415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::WORD_BREAK); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Controller functions -------------------------------------------------------- 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::CopyImageAt(int x, int y) { 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->GetRenderViewHost()->CopyImageAt(x, y); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1750a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void RenderViewContextMenu::GetImageThumbnailForSearch() { 17515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameHost* render_frame_host = GetRenderFrameHost(); 1752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!render_frame_host) 1753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 1754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_frame_host->Send(new ChromeViewMsg_RequestThumbnailForContextNode( 1755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_frame_host->GetRoutingID(), 1756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kImageSearchThumbnailMinSize, 1757a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size(kImageSearchThumbnailMaxWidth, 1758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kImageSearchThumbnailMaxHeight))); 1759a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 1760a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::Inspect(int x, int y) { 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("DevTools_InspectElement")); 17635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RenderFrameHost* render_frame_host = GetRenderFrameHost(); 1764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!render_frame_host) 1765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 17666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsWindow::InspectElement( 17676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WebContents::FromRenderFrameHost(render_frame_host), x, y); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) { 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_common_net::WriteURLToClipboard( 17721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url, GetPrefs(browser_context_)->GetString(prefs::kAcceptLanguages)); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::MediaPlayerActionAt( 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& location, 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebMediaPlayerAction& action) { 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->GetRenderViewHost()-> 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecuteMediaPlayerActionAtLocation(location, action); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewContextMenu::PluginActionAt( 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& location, 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebPluginAction& action) { 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_web_contents_->GetRenderViewHost()-> 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExecutePluginActionAtLocation(location, action); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1788