OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" | 5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <set> | 10 #include <set> |
(...skipping 28 matching lines...) Expand all Loading... |
39 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" | 39 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" |
40 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 40 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
41 #include "chrome/browser/profiles/profile.h" | 41 #include "chrome/browser/profiles/profile.h" |
42 #include "chrome/browser/profiles/profile_attributes_entry.h" | 42 #include "chrome/browser/profiles/profile_attributes_entry.h" |
43 #include "chrome/browser/profiles/profile_attributes_storage.h" | 43 #include "chrome/browser/profiles/profile_attributes_storage.h" |
44 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 44 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
45 #include "chrome/browser/profiles/profile_io_data.h" | 45 #include "chrome/browser/profiles/profile_io_data.h" |
46 #include "chrome/browser/profiles/profile_manager.h" | 46 #include "chrome/browser/profiles/profile_manager.h" |
47 #include "chrome/browser/profiles/profile_window.h" | 47 #include "chrome/browser/profiles/profile_window.h" |
48 #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory
.h" | 48 #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory
.h" |
| 49 #include "chrome/browser/renderer_context_menu/open_with_menu_observer.h" |
49 #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" | 50 #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" |
50 #include "chrome/browser/search/search.h" | 51 #include "chrome/browser/search/search.h" |
51 #include "chrome/browser/search_engines/template_url_service_factory.h" | 52 #include "chrome/browser/search_engines/template_url_service_factory.h" |
52 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" | 53 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" |
53 #include "chrome/browser/spellchecker/spellcheck_service.h" | 54 #include "chrome/browser/spellchecker/spellcheck_service.h" |
54 #include "chrome/browser/ssl/chrome_security_state_model_client.h" | 55 #include "chrome/browser/ssl/chrome_security_state_model_client.h" |
55 #include "chrome/browser/tab_contents/retargeting_details.h" | 56 #include "chrome/browser/tab_contents/retargeting_details.h" |
56 #include "chrome/browser/translate/chrome_translate_client.h" | 57 #include "chrome/browser/translate/chrome_translate_client.h" |
57 #include "chrome/browser/translate/translate_service.h" | 58 #include "chrome/browser/translate/translate_service.h" |
58 #include "chrome/browser/ui/browser.h" | 59 #include "chrome/browser/ui/browser.h" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 {64, -1, IDC_WRITING_DIRECTION_LTR}, | 272 {64, -1, IDC_WRITING_DIRECTION_LTR}, |
272 {65, -1, IDC_WRITING_DIRECTION_RTL}, | 273 {65, -1, IDC_WRITING_DIRECTION_RTL}, |
273 {66, -1, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, | 274 {66, -1, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, |
274 {67, -1, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, | 275 {67, -1, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, |
275 {68, -1, IDC_ROUTE_MEDIA}, | 276 {68, -1, IDC_ROUTE_MEDIA}, |
276 {69, -1, IDC_CONTENT_CONTEXT_COPYLINKTEXT}, | 277 {69, -1, IDC_CONTENT_CONTEXT_COPYLINKTEXT}, |
277 {70, -1, IDC_CONTENT_CONTEXT_OPENLINKINPROFILE}, | 278 {70, -1, IDC_CONTENT_CONTEXT_OPENLINKINPROFILE}, |
278 {71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, | 279 {71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, |
279 {72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, | 280 {72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, |
280 {73, -1, IDC_SPELLCHECK_MULTI_LINGUAL}, | 281 {73, -1, IDC_SPELLCHECK_MULTI_LINGUAL}, |
| 282 {74, -1, IDC_CONTENT_CONTEXT_OPEN_WITH1}, |
| 283 {75, -1, IDC_CONTENT_CONTEXT_OPEN_WITH2}, |
| 284 {76, -1, IDC_CONTENT_CONTEXT_OPEN_WITH3}, |
| 285 {77, -1, IDC_CONTENT_CONTEXT_OPEN_WITH4}, |
281 // Add new items here and use |enum_id| from the next line. | 286 // Add new items here and use |enum_id| from the next line. |
282 // Also, add new items to RenderViewContextMenuItem enum in histograms.xml. | 287 // Also, add new items to RenderViewContextMenuItem enum in histograms.xml. |
283 {74, -1, 0}, // Must be the last. Increment |enum_id| when new IDC | 288 {78, -1, 0}, // Must be the last. Increment |enum_id| when new IDC |
284 // was added. | 289 // was added. |
285 }; | 290 }; |
286 | 291 |
287 // Collapses large ranges of ids before looking for UMA enum. | 292 // Collapses large ranges of ids before looking for UMA enum. |
288 int CollapseCommandsForUMA(int id) { | 293 int CollapseCommandsForUMA(int id) { |
289 DCHECK(!RenderViewContextMenu::IsContentCustomCommandId(id)); | 294 DCHECK(!RenderViewContextMenu::IsContentCustomCommandId(id)); |
290 DCHECK(!ContextMenuMatcher::IsExtensionsCustomCommandId(id)); | 295 DCHECK(!ContextMenuMatcher::IsExtensionsCustomCommandId(id)); |
291 | 296 |
292 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && | 297 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && |
293 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { | 298 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { |
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 IDS_CONTENT_CONTEXT_OPENLINKNEWTAB); | 896 IDS_CONTENT_CONTEXT_OPENLINKNEWTAB); |
892 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, | 897 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, |
893 IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW); | 898 IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW); |
894 if (params_.link_url.is_valid()) { | 899 if (params_.link_url.is_valid()) { |
895 AppendProtocolHandlerSubMenu(); | 900 AppendProtocolHandlerSubMenu(); |
896 } | 901 } |
897 | 902 |
898 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, | 903 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, |
899 IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); | 904 IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); |
900 | 905 |
| 906 AppendOpenWithLinkItems(); |
| 907 |
901 // While ChromeOS supports multiple profiles, only one can be open at a | 908 // While ChromeOS supports multiple profiles, only one can be open at a |
902 // time. | 909 // time. |
903 // TODO(jochen): Consider adding support for ChromeOS with similar | 910 // TODO(jochen): Consider adding support for ChromeOS with similar |
904 // semantics as the profile switcher in the system tray. | 911 // semantics as the profile switcher in the system tray. |
905 #if !defined(OS_CHROMEOS) | 912 #if !defined(OS_CHROMEOS) |
906 // g_browser_process->profile_manager() is null during unit tests. | 913 // g_browser_process->profile_manager() is null during unit tests. |
907 if (g_browser_process->profile_manager() && | 914 if (g_browser_process->profile_manager() && |
908 GetProfile()->GetProfileType() == Profile::REGULAR_PROFILE) { | 915 GetProfile()->GetProfileType() == Profile::REGULAR_PROFILE) { |
909 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 916 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
910 // Find all regular profiles other than the current one which have at | 917 // Find all regular profiles other than the current one which have at |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); | 981 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); |
975 | 982 |
976 if (params_.source_type == ui::MENU_SOURCE_TOUCH && | 983 if (params_.source_type == ui::MENU_SOURCE_TOUCH && |
977 params_.media_type != WebContextMenuData::MediaTypeImage && | 984 params_.media_type != WebContextMenuData::MediaTypeImage && |
978 !params_.link_text.empty()) { | 985 !params_.link_text.empty()) { |
979 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYLINKTEXT, | 986 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYLINKTEXT, |
980 IDS_CONTENT_CONTEXT_COPYLINKTEXT); | 987 IDS_CONTENT_CONTEXT_COPYLINKTEXT); |
981 } | 988 } |
982 } | 989 } |
983 | 990 |
| 991 void RenderViewContextMenu::AppendOpenWithLinkItems() { |
| 992 if (!open_with_menu_observer_) |
| 993 open_with_menu_observer_.reset(new OpenWithMenuObserver(this)); |
| 994 observers_.AddObserver(open_with_menu_observer_.get()); |
| 995 open_with_menu_observer_->InitMenu(params_); |
| 996 } |
| 997 |
984 void RenderViewContextMenu::AppendImageItems() { | 998 void RenderViewContextMenu::AppendImageItems() { |
985 std::map<std::string, std::string>::const_iterator it = | 999 std::map<std::string, std::string>::const_iterator it = |
986 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); | 1000 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); |
987 if (it != params_.properties.end() && it->second == | 1001 if (it != params_.properties.end() && it->second == |
988 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { | 1002 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { |
989 menu_model_.AddItemWithStringId( | 1003 menu_model_.AddItemWithStringId( |
990 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, | 1004 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, |
991 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); | 1005 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); |
992 } | 1006 } |
993 DataReductionProxyChromeSettings* settings = | 1007 DataReductionProxyChromeSettings* settings = |
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2207 source_web_contents_->GetRenderViewHost()-> | 2221 source_web_contents_->GetRenderViewHost()-> |
2208 ExecuteMediaPlayerActionAtLocation(location, action); | 2222 ExecuteMediaPlayerActionAtLocation(location, action); |
2209 } | 2223 } |
2210 | 2224 |
2211 void RenderViewContextMenu::PluginActionAt( | 2225 void RenderViewContextMenu::PluginActionAt( |
2212 const gfx::Point& location, | 2226 const gfx::Point& location, |
2213 const WebPluginAction& action) { | 2227 const WebPluginAction& action) { |
2214 source_web_contents_->GetRenderViewHost()-> | 2228 source_web_contents_->GetRenderViewHost()-> |
2215 ExecutePluginActionAtLocation(location, action); | 2229 ExecutePluginActionAtLocation(location, action); |
2216 } | 2230 } |
OLD | NEW |