Index: chrome/browser/renderer_context_menu/render_view_context_menu.cc |
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
index b5c379ebee267c1830bac1e13154e6eb5c614c09..a5ab8fc56367b2958ea22c6d08b01f89243a9b8f 100644 |
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
@@ -46,6 +46,7 @@ |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/profiles/profile_window.h" |
#include "chrome/browser/renderer_context_menu/context_menu_content_type_factory.h" |
+#include "chrome/browser/renderer_context_menu/open_with_menu_factory.h" |
#include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" |
#include "chrome/browser/search/search.h" |
#include "chrome/browser/search_engines/template_url_service_factory.h" |
@@ -290,9 +291,13 @@ const struct UmaEnumCommandIdPair { |
{71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, |
{72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, |
{73, -1, IDC_SPELLCHECK_MULTI_LINGUAL}, |
+ {74, -1, IDC_CONTENT_CONTEXT_OPEN_WITH1}, |
+ {75, -1, IDC_CONTENT_CONTEXT_OPEN_WITH2}, |
+ {76, -1, IDC_CONTENT_CONTEXT_OPEN_WITH3}, |
+ {77, -1, IDC_CONTENT_CONTEXT_OPEN_WITH4}, |
// Add new items here and use |enum_id| from the next line. |
// Also, add new items to RenderViewContextMenuItem enum in histograms.xml. |
- {74, -1, 0}, // Must be the last. Increment |enum_id| when new IDC |
+ {78, -1, 0}, // Must be the last. Increment |enum_id| when new IDC |
// was added. |
}; |
@@ -942,6 +947,8 @@ void RenderViewContextMenu::AppendLinkItems() { |
menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, |
IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD); |
+ AppendOpenWithLinkItems(); |
+ |
// While ChromeOS supports multiple profiles, only one can be open at a |
// time. |
// TODO(jochen): Consider adding support for ChromeOS with similar |
@@ -1037,6 +1044,22 @@ void RenderViewContextMenu::AppendLinkItems() { |
} |
} |
+void RenderViewContextMenu::AppendOpenWithLinkItems() { |
+ const size_t kMaxOpenWithMenuItems = |
+ IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1; |
+ const size_t kMaxOpenWithSubMenuItems = |
+ IDC_CONTENT_CONTEXT_OPEN_WITH_SUB_LAST - |
+ IDC_CONTENT_CONTEXT_OPEN_WITH_SUB1 + 1; |
+ |
+ open_with_menu_observer_.reset(OpenWithMenuFactory::CreateMenu( |
+ this, IDC_CONTENT_CONTEXT_OPEN_WITH1, kMaxOpenWithMenuItems, |
+ IDC_CONTENT_CONTEXT_OPEN_WITH_SUB1, kMaxOpenWithSubMenuItems)); |
+ if (open_with_menu_observer_) { |
+ observers_.AddObserver(open_with_menu_observer_.get()); |
+ open_with_menu_observer_->InitMenu(params_); |
+ } |
+} |
+ |
void RenderViewContextMenu::AppendImageItems() { |
std::map<std::string, std::string>::const_iterator it = |
params_.properties.find(data_reduction_proxy::chrome_proxy_header()); |