| 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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 #include "chrome/browser/printing/print_preview_context_menu_observer.h" | 138 #include "chrome/browser/printing/print_preview_context_menu_observer.h" |
| 139 #include "chrome/browser/printing/print_preview_dialog_controller.h" | 139 #include "chrome/browser/printing/print_preview_dialog_controller.h" |
| 140 #endif // defined(ENABLE_PRINT_PREVIEW) | 140 #endif // defined(ENABLE_PRINT_PREVIEW) |
| 141 #endif // defined(ENABLE_PRINTING) | 141 #endif // defined(ENABLE_PRINTING) |
| 142 | 142 |
| 143 #if defined(ENABLE_MEDIA_ROUTER) | 143 #if defined(ENABLE_MEDIA_ROUTER) |
| 144 #include "chrome/browser/media/router/media_router_dialog_controller.h" | 144 #include "chrome/browser/media/router/media_router_dialog_controller.h" |
| 145 #include "chrome/browser/media/router/media_router_metrics.h" | 145 #include "chrome/browser/media/router/media_router_metrics.h" |
| 146 #endif | 146 #endif |
| 147 | 147 |
| 148 #if defined(OS_CHROMEOS) |
| 149 #include "chrome/browser/renderer_context_menu/arc_app_menu_observer_chromeos.h" |
| 150 #endif |
| 151 |
| 148 using base::UserMetricsAction; | 152 using base::UserMetricsAction; |
| 149 using blink::WebContextMenuData; | 153 using blink::WebContextMenuData; |
| 150 using blink::WebMediaPlayerAction; | 154 using blink::WebMediaPlayerAction; |
| 151 using blink::WebPluginAction; | 155 using blink::WebPluginAction; |
| 152 using blink::WebString; | 156 using blink::WebString; |
| 153 using blink::WebURL; | 157 using blink::WebURL; |
| 154 using content::BrowserContext; | 158 using content::BrowserContext; |
| 155 using content::ChildProcessSecurityPolicy; | 159 using content::ChildProcessSecurityPolicy; |
| 156 using content::DownloadManager; | 160 using content::DownloadManager; |
| 157 using content::DownloadUrlParameters; | 161 using content::DownloadUrlParameters; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 {64, -1, IDC_WRITING_DIRECTION_LTR}, | 275 {64, -1, IDC_WRITING_DIRECTION_LTR}, |
| 272 {65, -1, IDC_WRITING_DIRECTION_RTL}, | 276 {65, -1, IDC_WRITING_DIRECTION_RTL}, |
| 273 {66, -1, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, | 277 {66, -1, IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE}, |
| 274 {67, -1, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, | 278 {67, -1, IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD}, |
| 275 {68, -1, IDC_ROUTE_MEDIA}, | 279 {68, -1, IDC_ROUTE_MEDIA}, |
| 276 {69, -1, IDC_CONTENT_CONTEXT_COPYLINKTEXT}, | 280 {69, -1, IDC_CONTENT_CONTEXT_COPYLINKTEXT}, |
| 277 {70, -1, IDC_CONTENT_CONTEXT_OPENLINKINPROFILE}, | 281 {70, -1, IDC_CONTENT_CONTEXT_OPENLINKINPROFILE}, |
| 278 {71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, | 282 {71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, |
| 279 {72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, | 283 {72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, |
| 280 {73, -1, IDC_SPELLCHECK_MULTI_LINGUAL}, | 284 {73, -1, IDC_SPELLCHECK_MULTI_LINGUAL}, |
| 285 {74, -1, IDC_CONTENT_CONTEXT_ARC_APP1}, |
| 286 {75, -1, IDC_CONTENT_CONTEXT_ARC_APP2}, |
| 287 {76, -1, IDC_CONTENT_CONTEXT_ARC_APP3}, |
| 288 {77, -1, IDC_CONTENT_CONTEXT_ARC_SUB_MENU}, |
| 281 // Add new items here and use |enum_id| from the next line. | 289 // Add new items here and use |enum_id| from the next line. |
| 282 // Also, add new items to RenderViewContextMenuItem enum in histograms.xml. | 290 // Also, add new items to RenderViewContextMenuItem enum in histograms.xml. |
| 283 {74, -1, 0}, // Must be the last. Increment |enum_id| when new IDC | 291 {78, -1, 0}, // Must be the last. Increment |enum_id| when new IDC |
| 284 // was added. | 292 // was added. |
| 285 }; | 293 }; |
| 286 | 294 |
| 287 // Collapses large ranges of ids before looking for UMA enum. | 295 // Collapses large ranges of ids before looking for UMA enum. |
| 288 int CollapseCommandsForUMA(int id) { | 296 int CollapseCommandsForUMA(int id) { |
| 289 DCHECK(!RenderViewContextMenu::IsContentCustomCommandId(id)); | 297 DCHECK(!RenderViewContextMenu::IsContentCustomCommandId(id)); |
| 290 DCHECK(!ContextMenuMatcher::IsExtensionsCustomCommandId(id)); | 298 DCHECK(!ContextMenuMatcher::IsExtensionsCustomCommandId(id)); |
| 291 | 299 |
| 292 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && | 300 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && |
| 293 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { | 301 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); | 899 IDS_CONTENT_CONTEXT_OPENLINKNEWTAB); |
| 892 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, | 900 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW, |
| 893 IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW); | 901 IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW); |
| 894 if (params_.link_url.is_valid()) { | 902 if (params_.link_url.is_valid()) { |
| 895 AppendProtocolHandlerSubMenu(); | 903 AppendProtocolHandlerSubMenu(); |
| 896 } | 904 } |
| 897 | 905 |
| 898 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, | 906 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, |
| 899 IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); | 907 IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); |
| 900 | 908 |
| 909 #if defined(OS_CHROMEOS) |
| 910 AppendArcLinkItems(); |
| 911 #else |
| 901 // While ChromeOS supports multiple profiles, only one can be open at a | 912 // While ChromeOS supports multiple profiles, only one can be open at a |
| 902 // time. | 913 // time. |
| 903 // TODO(jochen): Consider adding support for ChromeOS with similar | 914 // TODO(jochen): Consider adding support for ChromeOS with similar |
| 904 // semantics as the profile switcher in the system tray. | 915 // semantics as the profile switcher in the system tray. |
| 905 #if !defined(OS_CHROMEOS) | 916 |
| 906 // g_browser_process->profile_manager() is null during unit tests. | 917 // g_browser_process->profile_manager() is null during unit tests. |
| 907 if (g_browser_process->profile_manager() && | 918 if (g_browser_process->profile_manager() && |
| 908 GetProfile()->GetProfileType() == Profile::REGULAR_PROFILE) { | 919 GetProfile()->GetProfileType() == Profile::REGULAR_PROFILE) { |
| 909 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 920 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| 910 // Find all regular profiles other than the current one which have at | 921 // Find all regular profiles other than the current one which have at |
| 911 // least one open window. | 922 // least one open window. |
| 912 std::vector<ProfileAttributesEntry*> entries = | 923 std::vector<ProfileAttributesEntry*> entries = |
| 913 profile_manager->GetProfileAttributesStorage(). | 924 profile_manager->GetProfileAttributesStorage(). |
| 914 GetAllProfilesAttributesSortedByName(); | 925 GetAllProfilesAttributesSortedByName(); |
| 915 std::vector<ProfileAttributesEntry*> target_profiles_entries; | 926 std::vector<ProfileAttributesEntry*> target_profiles_entries; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 IDC_OPEN_LINK_IN_PROFILE_FIRST + menu_index, entry->GetName()); | 965 IDC_OPEN_LINK_IN_PROFILE_FIRST + menu_index, entry->GetName()); |
| 955 AddIconToLastMenuItem(entry->GetAvatarIcon(), | 966 AddIconToLastMenuItem(entry->GetAvatarIcon(), |
| 956 &profile_link_submenu_model_); | 967 &profile_link_submenu_model_); |
| 957 } | 968 } |
| 958 menu_model_.AddSubMenuWithStringId( | 969 menu_model_.AddSubMenuWithStringId( |
| 959 IDC_CONTENT_CONTEXT_OPENLINKINPROFILE, | 970 IDC_CONTENT_CONTEXT_OPENLINKINPROFILE, |
| 960 IDS_CONTENT_CONTEXT_OPENLINKINPROFILES, | 971 IDS_CONTENT_CONTEXT_OPENLINKINPROFILES, |
| 961 &profile_link_submenu_model_); | 972 &profile_link_submenu_model_); |
| 962 } | 973 } |
| 963 } | 974 } |
| 964 #endif // !defined(OS_CHROMEOS) | 975 #endif // defined(OS_CHROMEOS) |
| 965 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 976 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
| 966 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVELINKAS, | 977 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVELINKAS, |
| 967 IDS_CONTENT_CONTEXT_SAVELINKAS); | 978 IDS_CONTENT_CONTEXT_SAVELINKAS); |
| 968 } | 979 } |
| 969 | 980 |
| 970 menu_model_.AddItemWithStringId( | 981 menu_model_.AddItemWithStringId( |
| 971 IDC_CONTENT_CONTEXT_COPYLINKLOCATION, | 982 IDC_CONTENT_CONTEXT_COPYLINKLOCATION, |
| 972 params_.link_url.SchemeIs(url::kMailToScheme) ? | 983 params_.link_url.SchemeIs(url::kMailToScheme) ? |
| 973 IDS_CONTENT_CONTEXT_COPYEMAILADDRESS : | 984 IDS_CONTENT_CONTEXT_COPYEMAILADDRESS : |
| 974 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); | 985 IDS_CONTENT_CONTEXT_COPYLINKLOCATION); |
| 975 | 986 |
| 976 if (params_.source_type == ui::MENU_SOURCE_TOUCH && | 987 if (params_.source_type == ui::MENU_SOURCE_TOUCH && |
| 977 params_.media_type != WebContextMenuData::MediaTypeImage && | 988 params_.media_type != WebContextMenuData::MediaTypeImage && |
| 978 !params_.link_text.empty()) { | 989 !params_.link_text.empty()) { |
| 979 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYLINKTEXT, | 990 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYLINKTEXT, |
| 980 IDS_CONTENT_CONTEXT_COPYLINKTEXT); | 991 IDS_CONTENT_CONTEXT_COPYLINKTEXT); |
| 981 } | 992 } |
| 982 } | 993 } |
| 983 | 994 |
| 995 #if defined(OS_CHROMEOS) |
| 996 void RenderViewContextMenu::AppendArcLinkItems() { |
| 997 if (!arc_app_menu_observer_) |
| 998 arc_app_menu_observer_.reset(new ArcAppMenuObserver(this)); |
| 999 observers_.AddObserver(arc_app_menu_observer_.get()); |
| 1000 arc_app_menu_observer_->InitMenu(params_); |
| 1001 } |
| 1002 #endif // defined(OS_CHROMEOS) |
| 1003 |
| 984 void RenderViewContextMenu::AppendImageItems() { | 1004 void RenderViewContextMenu::AppendImageItems() { |
| 985 std::map<std::string, std::string>::const_iterator it = | 1005 std::map<std::string, std::string>::const_iterator it = |
| 986 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); | 1006 params_.properties.find(data_reduction_proxy::chrome_proxy_header()); |
| 987 if (it != params_.properties.end() && it->second == | 1007 if (it != params_.properties.end() && it->second == |
| 988 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { | 1008 data_reduction_proxy::chrome_proxy_lo_fi_directive()) { |
| 989 menu_model_.AddItemWithStringId( | 1009 menu_model_.AddItemWithStringId( |
| 990 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, | 1010 IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE, |
| 991 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); | 1011 IDS_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE); |
| 992 } | 1012 } |
| 993 DataReductionProxyChromeSettings* settings = | 1013 DataReductionProxyChromeSettings* settings = |
| (...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2206 source_web_contents_->GetRenderViewHost()-> | 2226 source_web_contents_->GetRenderViewHost()-> |
| 2207 ExecuteMediaPlayerActionAtLocation(location, action); | 2227 ExecuteMediaPlayerActionAtLocation(location, action); |
| 2208 } | 2228 } |
| 2209 | 2229 |
| 2210 void RenderViewContextMenu::PluginActionAt( | 2230 void RenderViewContextMenu::PluginActionAt( |
| 2211 const gfx::Point& location, | 2231 const gfx::Point& location, |
| 2212 const WebPluginAction& action) { | 2232 const WebPluginAction& action) { |
| 2213 source_web_contents_->GetRenderViewHost()-> | 2233 source_web_contents_->GetRenderViewHost()-> |
| 2214 ExecutePluginActionAtLocation(location, action); | 2234 ExecutePluginActionAtLocation(location, action); |
| 2215 } | 2235 } |
| OLD | NEW |